<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5072520483132159389</id><updated>2024-09-14T07:57:48.621-07:00</updated><category term="feed"/><category term="php"/><category term="lista"/><category term="varie"/><category term="Come Creare Un Blog"/><category term="Concorrenza"/><category term="FI - Come disattivare la cache di Firefox?"/><category term="Pionieri"/><category term="Questo-è-un-blog-sulla-SEO"/><category term="ascii"/><category term="copie"/><category term="curl"/><category term="debug"/><category term="eseguibili"/><category term="esempi"/><category term="esempio"/><category term="file"/><category term="filereader"/><category term="grandi programmatori"/><category term="guida_php"/><category term="hashtable"/><category term="informatica"/><category term="javascript"/><category term="keywords"/><category term="linux"/><category term="notepad"/><category term="pg_dump"/><category term="postgres"/><category term="psql"/><category term="rss"/><category term="sintassi"/><category term="xmlparser"/><title type='text'>Logistoris</title><subtitle type='html'>Argomenti di programmazione. Principi procedurali e note su linguaggi e sistemi operativi. Note tecniche.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-8029544160077333686</id><published>2012-09-17T00:54:00.001-07:00</published><updated>2012-09-17T00:54:19.725-07:00</updated><title type='text'>KPI - INDICATORI CHIAVE DI PERFORMANCE</title><content type='html'>&lt;a href=&quot;http://www.italsystems.it/kpi_indicatori_performance.html&quot;&gt; kpi indicatori performance &lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
&lt;a href=&quot;http://www.w3w.it/%20&quot;&gt;&lt;span style=&quot;font-size: 159%;&quot;&gt;KPI - 
 INDICATORI CHIAVE DI PERFORMANCE&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div style=&quot;line-height: 150%; margin-left: 11px; margin-right: 11px;&quot;&gt;
&lt;span style=&quot;font-family: Verdana;&quot;&gt;I kpi consentono un controllo ed una misura dei 
 parametri caratteristici di sviluppo di una qualsiasi organizzazione.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 150%; margin-left: 11px; margin-right: 11px;&quot;&gt;
&lt;span style=&quot;font-family: Verdana;&quot;&gt;Sono uno strumento indispensabile per valutare una 
 qualsiasi impostazione ed iniziativa organizzativa. Consentono delle 
 valutazioni confrontabili ed impegnative nei confronti di operatori 
 direttivi.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 150%; margin-left: 11px; margin-right: 11px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;
&lt;a href=&quot;http://www.w3w.it/%20&quot;&gt;KPI AZIENDE ITALIANE PRINCIPALI&lt;/a&gt;&lt;/h2&gt;
&lt;h2&gt;
&lt;a href=&quot;http://www.w3w.it/%20&quot;&gt;
&lt;span style=&quot;background-position: 0 0; font-size: 59%;&quot;&gt;KPI&lt;/span&gt;&lt;span style=&quot;font-size: 59%;&quot;&gt; ONLINE &lt;/span&gt;
&lt;/a&gt;&lt;/h2&gt;
Trova online!&lt;br /&gt;
&lt;ul class=&quot;first&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;
&lt;a href=&quot;http://www.italsystems.it/kpi_trading.php?azienda=FIAT&quot;&gt;FIAT&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;
&lt;a href=&quot;http://www.italsystems.it/kpi_trading.php?azienda=ENEL&quot;&gt;ENEL&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;
&lt;a href=&quot;http://www.italsystems.it/kpi_trading.php?azienda=UNICREDIT&quot;&gt;BANCA UNICREDIT&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt; &lt;span style=&quot;font-size: xx-small;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;
 &lt;a href=&quot;http://www.italsystems.it/kpi_trading.php?azienda=ENI&quot;&gt;ENI&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;
 &lt;a href=&quot;http://www.italsystems.it/kpi_trading.php?azienda=INTESA&quot;&gt;BANCA INTESA&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/8029544160077333686/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2012/09/kpi-indicatori-chiave-di-performance.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/8029544160077333686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/8029544160077333686'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2012/09/kpi-indicatori-chiave-di-performance.html' title='KPI - INDICATORI CHIAVE DI PERFORMANCE'/><author><name>logistar</name><uri>http://www.blogger.com/profile/04182847575807150550</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-1115335963420662428</id><published>2011-10-30T02:56:00.000-07:00</published><updated>2011-10-30T02:56:03.030-07:00</updated><title type='text'>link a rss</title><content type='html'>&lt;a href=&quot;http://www.pelletteriajolly.it/wp/lf_leggifeed.php&quot;&gt;link a rss su argomento pelle e borse&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/1115335963420662428/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/10/link-rss.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/1115335963420662428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/1115335963420662428'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/10/link-rss.html' title='link a rss'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-5388764786437544335</id><published>2011-10-27T15:08:00.000-07:00</published><updated>2011-10-27T15:08:26.542-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="esempio"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="xmlparser"/><title type='text'>xmplparser esempio php</title><content type='html'>&lt;script id=&quot;AlexaCustomScriptId&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;pre&gt;&amp;lt;?php

$data = &quot;
  &amp;lt;overlays&amp;gt;
    &amp;lt;overlay&amp;gt;
      &amp;lt;name&amp;gt;Test&amp;lt;/name&amp;gt;
      &amp;lt;type&amp;gt;template&amp;lt;/type&amp;gt;
      &amp;lt;syntax&amp;gt;
&amp;amp;lt;div id=quote&amp;amp;gt;
&amp;amp;lt;b&amp;amp;gt;This should be bold&amp;amp;lt;/b&amp;amp;gt;
&amp;amp;lt;/div&amp;amp;gt;
      &amp;lt;/syntax&amp;gt;
    &amp;lt;/overlay&amp;gt;
  &amp;lt;/overlays&amp;gt;&quot;;

class xml2Array {
  
   var $arrOutput = array();
   var $resParser;
   var $strXmlData;
  
   function parse($strInputXML) {
  
           $this-&amp;gt;resParser = xml_parser_create ();
           xml_set_object($this-&amp;gt;resParser,$this);
           xml_set_element_handler($this-&amp;gt;resParser, &quot;tagOpen&quot;, &quot;tagClosed&quot;);
          
           xml_set_character_data_handler($this-&amp;gt;resParser, &quot;tagData&quot;);
      
           $this-&amp;gt;strXmlData = xml_parse($this-&amp;gt;resParser,$strInputXML );
           if(!$this-&amp;gt;strXmlData) {
               die(sprintf(&quot;XML error: %s at line %d&quot;,
           xml_error_string(xml_get_error_code($this-&amp;gt;resParser)),
           xml_get_current_line_number($this-&amp;gt;resParser)));
           }
                          
           xml_parser_free($this-&amp;gt;resParser);
          
           return $this-&amp;gt;arrOutput;
   }
   function tagOpen($parser, $name, $attrs) {
       $tag=array(&quot;name&quot;=&amp;gt;$name,&quot;attrs&quot;=&amp;gt;$attrs);
       array_push($this-&amp;gt;arrOutput,$tag);
   }
  
   function tagData($parser, $tagData) {
       if(trim($tagData)) {
           if(isset($this-&amp;gt;arrOutput[count($this-&amp;gt;arrOutput)-1][&#39;tagData&#39;])) {
               $this-&amp;gt;arrOutput[count($this-&amp;gt;arrOutput)-1][&#39;tagData&#39;] .= $tagData;
           }
           else {
               $this-&amp;gt;arrOutput[count($this-&amp;gt;arrOutput)-1][&#39;tagData&#39;] = $tagData;
           }
       }
   }
  
   function tagClosed($parser, $name) {
       $this-&amp;gt;arrOutput[count($this-&amp;gt;arrOutput)-2][&#39;children&#39;][] = $this-&amp;gt;arrOutput[count($this-&amp;gt;arrOutput)-1];
       array_pop($this-&amp;gt;arrOutput);
   }
}

$x = new xml2Array( );

$x-&amp;gt;parse( $data );

print_r( $x-&amp;gt;arrOutput );
?&amp;gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/5388764786437544335/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/10/xmplparser-esempio-php.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/5388764786437544335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/5388764786437544335'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/10/xmplparser-esempio-php.html' title='xmplparser esempio php'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-5929294888668809536</id><published>2011-10-27T14:39:00.000-07:00</published><updated>2011-10-27T14:41:38.433-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ascii"/><category scheme="http://www.blogger.com/atom/ns#" term="curl"/><category scheme="http://www.blogger.com/atom/ns#" term="esempi"/><category scheme="http://www.blogger.com/atom/ns#" term="feed"/><category scheme="http://www.blogger.com/atom/ns#" term="file"/><category scheme="http://www.blogger.com/atom/ns#" term="filereader"/><category scheme="http://www.blogger.com/atom/ns#" term="guida_php"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>trucchi ed esempi php</title><content type='html'>&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot; bordercolor=&quot;#c0c0c0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; height=&quot;455&quot; id=&quot;AutoNumber5&quot; style=&quot;border-collapse: collapse;&quot;&gt;
  &lt;tbody&gt;
&lt;tr&gt;
    &lt;td colspan=&quot;2&quot; height=&quot;16&quot; width=&quot;100%&quot;&gt;&lt;div align=&quot;center&quot;&gt;
&lt;i&gt;&lt;b&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Tips&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Calendario in PHP e MySQL (da scaricare)&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/uploadimage.htm&quot;&gt;upload+resize+thumbnails
      di immagini&lt;/a&gt; (link diretto)&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;
 &lt;a href=&quot;http://leotardi.no-ip.com/download/provephp/kandalfdb-news.zip&quot;&gt;Gestione delle news &lt;/a&gt;(link diretto) - KandalfNews&lt;br /&gt;
 &lt;a href=&quot;http://leotardi.no-ip.com/download/provephp/24_news%20-%20mysql.zip&quot;&gt;Gestione delle news&lt;/a&gt; 
 (link diretto) - DMA_News (con immagini e html)&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/stringhetestophp.htm&quot;&gt;Stringhe di 
    testo (link diretto)&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/uploadlimitato.htm&quot;&gt;Upload limitato&lt;/a&gt;
      (link diretto)&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/string%20manipulation.htm&quot;&gt;String 
    manipulation&lt;/a&gt; (link diretto)&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/date%20and%20time%20in%20php.htm&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;D&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/date%20and%20time%20in%20php.htm&quot;&gt;ate 
    and time in php&lt;/a&gt; (link diretto)&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;
    &lt;a href=&quot;http://leotardi.no-ip.com/html/secure%20login%20using%20cookies.htm&quot;&gt;Secure login using cookies&lt;/a&gt; (link 
    diretto)&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/leggere%20e%20scrivere%20su%20un%20file%20in%20php.htm&quot;&gt;Leggere e scrivere su un file in php&lt;/a&gt; (link diretto)&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;
    &lt;a href=&quot;http://leotardi.no-ip.com/html/utilizzo%20di%20mysql.htm&quot;&gt;Utilizzo di MySQL&lt;/a&gt; (link diretto)&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/creare%20un%20contatore%20di%20accessi%20con%20php%20e%20mysql.htm&quot;&gt;Creare un contatore di accessi con Php e Mysql&lt;/a&gt; (link diretto)&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/install%20apache,%20php,%20mysql.txt&quot;&gt;Install mySQL ,
      php, &amp;amp;  Apache in Windows&lt;/a&gt; (link diretto)&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/random%20image.txt&quot;&gt;Random Images&lt;/a&gt;
      (link diretto)&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/random%20number.txt&quot;&gt;Random Number&lt;/a&gt;
      (link diretto)&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/autenticare%20gli%20utenti%20con%20php.htm&quot;&gt;Autenticare
      gli utenti con PHP&lt;/a&gt; +
    &lt;a href=&quot;http://leotardi.no-ip.com/download/Creating%20a%20Login%20Script%20with%20PHP%20and%20MySQL.doc&quot;&gt;
    Creating a Login Script with PHP and MySQ&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;
 &lt;a href=&quot;http://www.videocopen.com/&quot;&gt;VideoCOpen&lt;/a&gt; (&lt;/span&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Videocopen 
 software video conferenza)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;br /&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;File Manager&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Recupero password di root in 
 mysql&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Formattazione di un paragrafo in 
 stile giustificato&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Script per 
 l&#39;upload dei files via browser&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Impostare 
 data in formato standard europeo ovvero gg-mm-aaaa&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;MySQL Field Types - Campi in 
 MySQL&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Connessione a MySQL con PHP&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;PHP e funzione mail()&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Effettuare il redirect con Php&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Reading a File Using PHP - 
 Leggere un file utilizzando PHP&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Append a String to a File Using 
 PHP&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Reading a Remote File Using PHP&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;List a Directory&#39;s Contents Using 
 PHP&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Uploading Files To the Server 
 Using PHP&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Paging using PHP&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Tabelle orizzontali e verticali&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Javascript effects within PHP (2 
 examples here, rollover and popup)&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Controllo della compilazione dei 
 campi - Verificare la corretta compilazione di un Form&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Array di files all&#39;interno di una 
 stessa pagina&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Protezione dei file su server 
 APACHE&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Suddividere il contenuto di un 
 testo su piu pagine - Suddividere dinamicamente un testo su più pagine - 
 Dividere il testo dopo tot parole senza spezzare la frase&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Creare un database di testo in 
 PHP&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Realizzare contatore per i click&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Cambio immagine a ogni 
 aggiornamento di pagina&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Data e Ora&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Indirizzo Ip&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Nome pagina corrente&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Browser Internet&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Linguaggio Browser&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Nome Host&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Ultimo Aggiornamento&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;E&#39; possibile evitare che gli utenti del mio sito inseriscano caratteri dannosi attraverso i miei
      form?&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Upload dei file&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Creare un guestbook&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Realizzare un sondaggio&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Eseguire l&#39;upload di un file&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Gestione dei file in PHP&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Un sistema di login con le 
 sessioni&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Evitare la ridondanza dei dati in 
 un database&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Creare un guestbook&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Realizzare un sondaggio&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Eseguire l&#39;upload di un file&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Gestione dei file in PHP&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Realizzare un semplice contatore&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Configurare php per l&#39;invio di 
 e-mail in locale&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Aggiornare automaticamente il 
 copyright all&#39;anno attuale&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Il modulo Segnala ad un amico&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Operazioni sulle stringhe con Php&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Generare password casuali&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Variabili php&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Inserire data e ora in una pagina 
 web&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Recuperare la dimensione di un 
 file&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Realizzare un sito facilmente 
 aggiornabile&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Creare un RSS con PHP e MySql&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Visualizzare un&#39;immagine... solo 
 se il campo di un database non è vuoto&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Invio e-mail&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Creare un circuito banners in PHP&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Creiamo un Photoblog con PHP e 
 MySQL&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Applicazione in Php per gestire 
 facilmente una newsletter&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Utilizzare PHP con MySQL&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Creare un circuito banners in PHP&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Un completo AdServer con PHP&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Scrivere i file con i form&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Come fare un sondaggio con php e 
    mysql&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Ricavare IP &amp;amp; Hostname con Php&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Motore di ricerca con PHP&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Mostrare 
    il numero degli utenti collegati al nostro sito&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Grafici in HTML con PHP&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;
    &lt;span class=&quot;piccolo&quot;&gt;Come fare un sondaggio&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Rotazione BANNER + Un circuito di 
    rotazione banner in Php&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Paginazione dei dati presenti in 
    un file di testo senza uso di database&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Realizziamo una feedback form&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Mandare un mail in CC o BBC&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Scrivere il contenuto di una 
    variabili in un file&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;12&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Trasferire un file tramite FTP&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/estensioniphp.htm&quot;&gt;Estensioni in php&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Banner Rotating System with PHP&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Leggere e scrivere su file&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Come ottimizzare le tabelle di un 
    database MySQL&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Gestiamo i database con 
    PhpMyAdmin&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Immagine non disponibile&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Proteggere una pagina con username e password&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Paginazione dei dati presenti in un file di testo senza uso di database&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Usare i cookies con PHP&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Gestione Permessi&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Gestione Utenti&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Gestione di Database&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Gestire database, utenti e permessi con MySQL&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;MySQL: gestione delle tabelle&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Stringhe in MySQL: trucchi e soluzioni&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Le funzioni stringa&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Autenticare gli utenti con PHP&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;AlberT-menu è una semplice funzione PHP che stampa una tabella di menù&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;In PHP esiste una funzione tipo lastModified di javascript?&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Come posso sapere l‘indirizzo IP di chi stà visitando una pagina PHP?&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;E&#39; possibile validare i campi di un form attraverso PHP?&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Generatore di password casuali&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Le Sessioni&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Gestire i Cookie&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;E&#39; possibile convertire una stringa di testo in minuscolo o in maiuscolo?&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;.Htaccess&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Proteggere le pagine senza MySQL&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Protezione password&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Upload di immagini in un database
      (&lt;a href=&quot;http://leotardi.no-ip.com/html/uploadimage1.txt&quot;&gt;1&lt;/a&gt; - &lt;a href=&quot;http://leotardi.no-ip.com/html/uploadimage2.txt&quot;&gt;2&lt;/a&gt; - &lt;a href=&quot;http://leotardi.no-ip.com/html/uploadimage3.txt&quot;&gt;3&lt;/a&gt; - &lt;a href=&quot;http://leotardi.no-ip.com/html/uploadimage4.txt&quot;&gt;4&lt;/a&gt;)
      links diretti&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Creare una cartella e uploadare i
      files con relativa rinomina&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/creating%20an%20image%20uploader.txt&quot;&gt;Creare
      un uploader di immagini&lt;/a&gt; (link diretto)&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Mostrare il numero degli utenti collegati al nostro sito&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;19&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt; Scrivere il contenuto di una variabili in un file&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;19&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Le query SQL&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;19&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Operatori di ricerca di pattern&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;19&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Operatori logici&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;18&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Funzioni logiche e condizionali&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;18&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Funzioni stringa&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt; Mandare un mail in CC o BBC&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt; Come spedire un&#39; e-mail in formato HTML&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt; Come spedire un&#39; e-mail con PHP&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt; Come ottimizzare le tabelle di un database MySQL&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Glossario di errori in PHP&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Estrapolare dei dati da un file esterno&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;PHP: cos&#39;e&#39; e come funziona&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Creare un catalogo immagini automatico con PHP&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Files dentro a MySQL&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Immagini dentro a MySQL&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Aggiornare un campo nel DataBase&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Contare i campi in un DataBase&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;19&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Proteggere una pagina con username e password&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;19&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Ritardare il caricamento di una pagina&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Cancellare un record dalla pagina web &lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Un visualizzatore di immagini in Php&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Upload di file in Php&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Un contatore di accessi con file di testo&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Spedire email con il Php&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Connessione ad un database mySql con Php&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Un semplice sistema di rotazione banner con 
    PHP e Javascript&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Un circuito di rotazione banner in Php&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Redirect in Php&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Recupero dei dati da un modulo&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Scrivere la data e l&#39;ora&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Creare un blog in PHP senza bisogno di MySQL&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;PHP.INI&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/form%20php.htm&quot;&gt;Form&lt;/a&gt; (link diretto)&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;b style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/esempiphp/guestbook/guestbook.htm&quot;&gt;Creare un guestbook in Php con Dreamweaver MX e MySql&lt;/a&gt; (link diretto)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;
 &lt;a href=&quot;http://leotardi.no-ip.com/download/provephp/galleria%20fotografica/WEBalbum-2_04-en.zip&quot;&gt;
 Galleria fotografica&lt;/a&gt; (&lt;a href=&quot;http://www.web-album.org/&quot;&gt;http://www.web-album.org&lt;/a&gt;)
 &lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/frasedelmese.htm&quot;&gt;Frase del mese&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/secure%20login%20using%20cookies.htm&quot;&gt;
    &lt;span style=&quot;font-size: x-small;&quot;&gt;Login sicuro utilizzando i cookies&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt; 
    (link diretto)&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;
    &lt;a href=&quot;http://leotardi.no-ip.com/html/date%20and%20time%20in%20php.htm&quot;&gt;Data e ora in php&lt;/a&gt; (link 
    diretto)&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/estensioniphp.htm&quot;&gt;
    Estensioni di PHP&lt;/a&gt; (link diretto)&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;
 &lt;a href=&quot;http://leotardi.no-ip.com/download/provephp/Come%20Creare%20Realizzare%20Un%20Sito%20Dinamico%20In%20Linguaggio%20Php.doc&quot;&gt;
 Come Creare Realizzare Un Sito Dinamico In Linguaggio Php&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/php2.htm&quot;&gt;TIPS PHP2&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/php3.htm&quot;&gt;TIPS PHP3&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/php4.htm&quot;&gt;TIPS PHP4&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
    &lt;td height=&quot;15&quot; width=&quot;50%&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;a href=&quot;http://leotardi.no-ip.com/html/php5.htm&quot;&gt;TIPS PHP5&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=5072520483132159389&quot; name=&quot;tips&quot;&gt;&lt;/a&gt;Tips&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Calendario in PHP e MySQL &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;
&lt;a href=&quot;http://leotardi.no-ip.com/download/calendario.zip&quot;&gt;(scarica)&lt;/a&gt; oppure dal sito ufficiale:
&lt;a href=&quot;http://www.ikemcg.com/scripts/&quot;&gt;http://www.ikemcg.com/scripts/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
Calendario simile a Outlook (Agenda): &lt;/b&gt;&lt;a href=&quot;http://www.phenix.gapi.fr/&quot;&gt;
http://www.phenix.gapi.fr/&lt;/a&gt;&amp;nbsp; o
&lt;a href=&quot;http://leotardi.no-ip.com/download/provephp/phoenix%20agenda35.zip&quot;&gt;scarica qui&lt;/a&gt; (forum sul 
cambio lingua:
&lt;a href=&quot;http://www.phenix.gapi.fr/forum/viewtopic.php?t=206&amp;amp;highlight=langue&quot;&gt;
http://www.phenix.gapi.fr/forum/viewtopic.php?t=206&amp;amp;highlight=langue&lt;/a&gt;) &lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebCalendar:&lt;/b&gt;
&lt;a href=&quot;http://www.k5n.us/webcalendar.php&quot;&gt;http://www.k5n.us/webcalendar.php&lt;/a&gt; 
- &lt;a href=&quot;http://www.k5n.us/index.php&quot;&gt;http://www.k5n.us/index.php&lt;/a&gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;b&gt;Php Calendar:&lt;/b&gt; &lt;a href=&quot;http://www.kubelabs.com/phpcalendar/&quot;&gt;
http://www.kubelabs.com/phpcalendar/&lt;/a&gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;i&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;b&gt;Jax Calendar&lt;/b&gt;:
&lt;a href=&quot;http://www.jtr.de/scripting/php/calendar/index.html&quot;&gt;
http://www.jtr.de/scripting/php/calendar/index.html&lt;/a&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;b&gt;&lt;i&gt;File Manager&lt;br /&gt;
&lt;/i&gt;&lt;/b&gt;File Management with PHP (&lt;a href=&quot;http://www.devshed.com/c/a/PHP/File-Management-with-PHP&quot;&gt;http://www.devshed.com/c/a/PHP/File-Management-with-PHP&lt;/a&gt;) &lt;br /&gt;
Table of Contents:&lt;br /&gt;
# File Management with PHP&lt;br /&gt;
# Building the Database&lt;br /&gt;
# File_Size() and Display_form Functions&lt;br /&gt;
# The Main Program&lt;br /&gt;
File Management with PHP&lt;br /&gt;
While discussing this problem, other issues arise, such as: Should the program 
allow the user to restore this file or retain the existing file? If the file 
exists, then should I copy the file as a new version? How do I manage files, if 
the user uploads files of same name and type more than once?&lt;br /&gt;
Prerequisites&lt;br /&gt;
To understand this article, you should have a fair knowledge of PHP. To run 
examples given in your machine, you need Apache, PHP, and MySQL installed and 
configured.&lt;br /&gt;
Here&#39;s what we want to accomplish:&lt;br /&gt;
* When a user uploads a file for the first time, the system should upload the 
file in the specified folder and insert file details (file name, size, and type) 
in the database table.&lt;br /&gt;
* When the user uploads a file for the second time (the filename has to be the 
same), the system will compare the size, date and time of the existing file and 
of the file being uploaded, and automatically assign a new version for the 
uploaded file if there is a difference. If there is no difference, then the 
existing file will be retained and a message will be displayed for the user.&lt;br /&gt;
* A check box allows the user to replace the existing file. Clicking this option 
will replace the existing file. Note that only the latest version of the file 
can be replaced in this case, and not an older one.&lt;br /&gt;
* The database will maintain file list and version details. Users should be able 
to view all the versions of a file and download the required version.&lt;br /&gt;
* While displaying the file list, the program displays all the versions of files 
under one name. For example, if the file name is xyz.doc and its other versions 
are xyz_VERSION1.doc, xyz_VERSION2.doc, xyz_VERSION3.doc, and so on, the program 
will display the filename as xyz.doc for all the versions.&lt;br /&gt;
* The program allows users to delete the file. Clicking on delete will ask for 
confirmation before proceeding.&lt;br /&gt;
&lt;br /&gt;
Name the database &quot;upload&quot;. The database contains the table &#39;file_manager&#39;, 
which manages file information. The SQL statement for creating the table:&lt;br /&gt;
CREATE TABLE file_manager &lt;br /&gt;
(&lt;br /&gt;
file_name varchar(50) default NULL, &lt;br /&gt;
file_type varchar(20) NOT NULL default &#39;&#39;, &lt;br /&gt;
file_size varchar(20) NOT NULL default &#39;&#39;, &lt;br /&gt;
file_modified varchar(20) NOT NULL default &#39;&#39;, &lt;br /&gt;
file_parent_id mediumint(9) default NULL, &lt;br /&gt;
file_image_name varchar(50) default NULL, &lt;br /&gt;
KEY file_name (file_name), &lt;br /&gt;
KEY file_image_name (file_image_name)&lt;br /&gt;
) &lt;br /&gt;
TYPE=MyISAM; &lt;br /&gt;
File Management&lt;br /&gt;
I&#39;ve written two programs to manage this file version. The first uploads the 
file (file_upload_manager.php), the second displays the file 
(file_upload_manager.php). The source code is tested on a Windows system.&lt;br /&gt;
NOTE: Linux users, please change the folder path accordingly.&lt;br /&gt;
File Upload Manager:&lt;br /&gt;
This program displays a menu to select the file in your system, a check box and 
an Upload button. Once the user clicks the upload button, the program checks the 
file for existence, and undergoes a series of tests as described in the plan.&lt;br /&gt;
Now let&#39;s look at the code snippets used in the program.&lt;br /&gt;
$dir_path Variable&lt;br /&gt;
:&lt;br /&gt;
This variable is the destination folder path.&lt;br /&gt;
$dir_path&lt;br /&gt;
= &quot;C:apachehtdocsfilemanager&quot;;&lt;br /&gt;
This path is given for Windows-based systems. Please change your destination 
folder accordingly.&lt;br /&gt;
Get_New_File_Name&lt;br /&gt;
() Function:&lt;br /&gt;
This function is called from the main program when the program encounters files 
that exist and show a difference in size, date or time. This function will 
generate a new file name and return to the main function.&lt;br /&gt;
function Get_New_FIle_Name&lt;br /&gt;
($file_name)&lt;br /&gt;
{ &lt;br /&gt;
$sqlQuery=&quot;SELECT file_image_name FROM file_manager WHERE file_name &lt;br /&gt;
LIKE &#39;$file_name%&#39; AND file_parent_id=1&quot;; &lt;br /&gt;
$fResult=mysql_query($sqlQuery);&lt;br /&gt;
$Last_Version=0; &lt;br /&gt;
$ver=0; &lt;br /&gt;
if(mysql_num_rows($fResult)){ &lt;br /&gt;
while($fRow=mysql_fetch_array($fResult)){ &lt;br /&gt;
list($junk,$ver)=explode(&quot;_VERSION&quot;,$fRow[&#39;file_image_name&#39;]); &lt;br /&gt;
list($ver,$extn)=explode(&quot;.&quot;,$ver); &lt;br /&gt;
$Last_Version = $Last_Version &amp;gt; $ver ? $Last_Version : &lt;br /&gt;
$ver;&lt;br /&gt;
} &lt;br /&gt;
}else{&lt;br /&gt;
$new_file_name &lt;br /&gt;
=$file_name.&quot;_VERSION&quot;.++$Last_Version;&lt;br /&gt;
return &lt;br /&gt;
$new_file_name;&lt;br /&gt;
} &lt;br /&gt;
if($Last_Version !=0){ &lt;br /&gt;
$new_file_name=$file_name.&quot;_VERSION&quot;.++$Last_Version;&lt;br /&gt;
return $new_file_name;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
The sql query in the beginning of the function will fetch file names of previous 
versions. If the sql query returns record sets, it means the file has previous 
versions. The while loop is executed to store the generated version number, and 
the value obtained is stored in $Last_Version. Otherwise, the new file name will 
be generated as file-name_VERSION1.&lt;br /&gt;
The next if statement checks for $Last_Version != 0, if true, $Last_Version is 
incremented by 1 and a new file name is assigned.&lt;br /&gt;
The return statement will return a new file name generated to the called 
statement.&lt;br /&gt;
&lt;br /&gt;
File_Size() Function:&lt;br /&gt;
This function returns the file size in terms of Bytes, Kb or Mb.&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
function &lt;br /&gt;
File_Size($size)&lt;br /&gt;
{&lt;br /&gt;
if($size &amp;gt; &lt;br /&gt;
104876){&lt;br /&gt;
return &lt;br /&gt;
$return_size=sprintf(&quot;%01.2f&quot;,$size / 1048576).&quot; &lt;br /&gt;
&lt;br /&gt;
Mb&quot;;&lt;br /&gt;
}elseif($size &amp;gt; &lt;br /&gt;
1024){&lt;br /&gt;
return &lt;br /&gt;
$return_size=sprintf(&quot;%01.2f&quot;,$size / 1024).&quot; Kb&quot;;&lt;br /&gt;
&lt;br /&gt;
}else{&lt;br /&gt;
return $return_size=$size.&quot; &lt;br /&gt;
Bytes&quot;;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
? &amp;gt;&lt;br /&gt;
Display_form() Function:&lt;br /&gt;
This function is used to prompt the user to select the file from your local 
machine.&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
function display_form($errMsg){ &lt;br /&gt;
global $dir_path; ? &amp;gt; &lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;File &lt;br /&gt;
Manager&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body bgcolor=&quot;#E5E5E5&quot;&amp;gt;&lt;br /&gt;
&amp;lt;div &lt;br /&gt;
align=&quot;center&quot;&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;File Manager&amp;lt;/h4&amp;gt; &lt;br /&gt;
&amp;lt;? if($errMsg){&lt;br /&gt;
? &amp;gt;&amp;lt;font face=&quot;verdana, helvetica&quot; size=&quot;2&quot; &lt;br /&gt;
color=&quot;red&quot;&amp;gt;&amp;lt;? echo $errMsg ? &amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
} &lt;br /&gt;
? &lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;form action=&quot;&amp;lt;? echo $PHP_SELF; ? &amp;gt;&quot; &lt;br /&gt;
enctype=&quot;multipart/form-data&quot; &lt;br /&gt;
method=&quot;POST&quot;&amp;gt;&lt;br /&gt;
&amp;lt;table border=&quot;1&quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;File &lt;br /&gt;
Location:&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;input type=&quot;file&quot; name=&quot;up_file&quot; &lt;br /&gt;
/&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th &lt;br /&gt;
colspan=&quot;2&quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;replace&quot; &lt;br /&gt;
value=&quot;1&quot;&amp;gt;Replace Exiting File*&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th &lt;br /&gt;
colspan=&quot;2&quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;input type=&quot;submit&quot; name=&quot;upload&quot; value=&quot;Upload &lt;br /&gt;
File !&quot; /&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;* - Clicking this option will replace the existing &lt;br /&gt;
file&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;a href=&quot;file_display_manager.php&quot;&amp;gt;File &lt;br /&gt;
Manager&amp;lt;/a&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;? if ($status){ echo &quot;Result :&quot;.$status; }? &lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;Folder Location:&amp;lt;/b&amp;gt;&amp;lt;? echo $dir_path ? &lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;You can change this location by editing the &lt;br /&gt;
file&amp;lt;/font&amp;gt; &lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;? } ? &amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you execute file_upload_manager.php, the code is executed first and the 
other functions described above are called in the middle of the program. Once 
the user selects the file and clicks upload, the main program part is executed. 
Here the program gets the upload file information like file size, file type, 
date modified and time stamp. Next it checks for the file existence in the 
destination folder. If the file is present the &quot;if&quot; part of the program gets 
executed, otherwise the file is copied to the destination folder and the file 
information is inserted in the database. If the file exists, and if the file 
size and/or time stamp differs, Get_New_File_Name() function is called to 
generate a new file name. Then the file is copied to the destination folder and 
the file information is stored in the database. If the file exists and the user 
had checked the &quot;Replace Existing File&quot; option, the file is replaced and the 
file information is updated in the database accordingly.&lt;br /&gt;
Otherwise, the user is redirected to the file_display_manager.php page and the 
message &quot;A previous version of this file exists&quot; is displayed.&lt;br /&gt;
File Display Manager:&lt;br /&gt;
This PHP script handles the displaying of files present in the folder. As 
described in the plan, the program will display the file name, size, type and an 
option to delete the file.&lt;br /&gt;
dir_display&lt;br /&gt;
() Function:&lt;br /&gt;
This function displays the files available in the folder in a table. The 
template looks like this:&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;txtplain1&quot;&gt;&lt;b style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;
File Manager&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;1&quot; class=&quot;contentpaneopen&quot; id=&quot;table5&quot;&gt;
 &lt;tbody&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Size&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Type&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Modified&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;abc.doc&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;25 Kb&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;doc&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Oct 01, 2003&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Delete&lt;/span&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;xyz.txt&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;24 bytes&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;txt&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Oct 03, 2003&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Delete&lt;/span&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;abc.doc&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;48 Kb&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;doc&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Oct 05, 2003&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Delete&lt;/span&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;abc.doc&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;67 Kb&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;doc&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Nov 05, 2003&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Delete&lt;/span&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;xyz.txt&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;58 bytes&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;txt&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Oct 23, 2003&lt;/span&gt;&lt;/td&gt;
  &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Delete&lt;/span&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;You can see that the file names are repeated, but you can see 
the file size and date modified differs. To view and/or download the file, you 
can click the hyperlink of the file name. This will show you the file name of 
the different version. You can customize the program to include another field &quot;Version&quot; 
to track the file version.&lt;br /&gt;
To delete a file, click on the &#39;Delete&#39; hyperlink, which will prompt for 
confirmation. &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Recupero password di root in MySql &lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Se non avete mai impostato la password,cioè nella prima installazione, 
allora non è necessario inserirla, ma se la aveste impostata e poi 
dimenticata....allora seguite le seguenti istruzioni:&lt;br /&gt;
Per Mysql sotto windows:&lt;br /&gt;
* Entrare come amministratore...o comunque come utente avete i permessi adeguati 
per eseguire i seguenti passi.&lt;br /&gt;
* Fermare il server Mysql se è attivo, andando nella gestione dei servizi:&lt;br /&gt;
Start Menu -&amp;gt; Control Panel -&amp;gt; Administrative Tools -&amp;gt; Services&lt;br /&gt;
Trovare la voce relativa al servizio Mysql e fermatelo.(se il server fosse 
attivo come processo e non come servizio usate il Task Manager)&lt;br /&gt;
* Create un file di testo e inseriteci la seguente riga:&lt;br /&gt;
SET PASSWORD FOR &#39;root&#39;@&#39;localhost&#39; = PASSWORD(&#39;NuovaPassword&#39;);&lt;br /&gt;
Salvate il file, ad esempio c:\mysql-init.txt&lt;br /&gt;
* Aprite una console Dos : &lt;br /&gt;
Start Menu -&amp;gt; Esegui -&amp;gt; cmd&lt;br /&gt;
Come esempio immaginiamo che il server sia installato nella directory c:\mysql 
,se cosi nn fosse, fate le dovute modifiche.&lt;br /&gt;
* Al prompt del DOS scrivete il seguente comando : &lt;br /&gt;
C:\&amp;gt; C:\mysql\bin\mysqld-nt --init-file=C:\mysql-init.txt&lt;br /&gt;
In pratica in questo modo verrà eseguita una serie di comando allo startup del 
server mysql...che in qiesto caso modificherà la password di root.&lt;br /&gt;
* Fermate di nuovo il server e riavviatelo...ora come login per l&#39;utente &quot;root&quot; 
dovrete usare la password che avete impostato voi...in questo caso sarà &quot;NuovaPassword&quot;.&lt;br /&gt;
Per linux:&lt;br /&gt;
Seguono le istruzioni per resettare una password di root di mysql:&lt;br /&gt;
# stoppare mysqld&lt;br /&gt;
#killall mysqld&lt;br /&gt;
# lanciare mysqld con l&#39;opzione skip-grant-tables, che evita di caricare le 
tabelle di sistema (tra cui anche quella degli accessi) fornendo libero accesso 
al servizio mysqld&lt;br /&gt;
# /usr/libexec/mysqld -Sg --user=root &amp;amp;&lt;br /&gt;
/usr/libexec/mysqld: ready for connections&lt;br /&gt;
# entrare in modalità client&lt;br /&gt;
# mysql&lt;br /&gt;
Welcome to the MySQL monitor. Commands end with ; or \g.&lt;br /&gt;
Your MySQL connection id is 1 to server version: 3.23.56&lt;br /&gt;
Type &#39;help;&#39; or &#39;\h&#39; for help. Type &#39;\c&#39; to clear the buffer.&lt;br /&gt;
#collegarsi al db mysql e inserire la query di update di cambio password&lt;br /&gt;
mysql&amp;gt; USE mysql&lt;br /&gt;
Reading table information for completion of table and column names&lt;br /&gt;
You can turn off this feature to get a quicker startup with -A&lt;br /&gt;
Database changed&lt;br /&gt;
mysql&amp;gt; UPDATE user&lt;br /&gt;
-&amp;gt; SET password=password(&quot;mianuovapassword&quot;)&lt;br /&gt;
-&amp;gt; WHERE user=&quot;root&quot;;&lt;br /&gt;
Query OK, 2 rows affected (0.00 sec)&lt;br /&gt;
Rows matched: 2 Changed: 2 Warnings: 0&lt;br /&gt;
mysql&amp;gt; flush privileges;&lt;br /&gt;
Query OK, 0 rows affected (0.00 sec)&lt;br /&gt;
mysql&amp;gt; exit&lt;br /&gt;
Per eventuali problemi ed approfondimenti il problema è documentato nel sito di 
mysql a questo indirizzo : http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;PHP: formattazione di un paragrafo in stile giustificato&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
Il trucco che vi presentiamo riguarda la formattazione di un paragrafo in stile 
giustificato con l&#39;utilizzo del linguaggio PHP, per la creazione di pagine 
dinamiche.&lt;br /&gt;
Esiste, tra le parole riservate del linguaggio PHP, echo(...). &lt;br /&gt;
Dove sono indicati i tre punti di sospensione dovrete indicare, tra doppi apici, 
una stringa. &lt;br /&gt;
La stringa a riguardo sarà proprio una riga sintatticamente corretta di un tag 
html, ossia il tag P..&lt;br /&gt;
In HTML per giustificare un paragrafo scriverete: &lt;br /&gt;
&amp;lt;p align=&quot;justify&quot;&amp;gt;blocco di testo&amp;lt;/p&amp;gt;&lt;br /&gt;
Nel linguaggio PHP invece: &lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo(&quot;&amp;lt;p align=&#39;justify&#39;&amp;gt;blocco di testo di più righe&amp;lt;/p&amp;gt;&quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Siccome l&#39;argomento da passare alla parola riservata echo viene racchiuso tra 
doppi apici, quando settate l&#39;attributo align userete gli apici singoli.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Script per l&#39;upload dei files via 
browser&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
Di seguito riportiamo un esempio basico di script per l’upload di file via 
browser&lt;br /&gt;
&amp;lt;!--[if !supportEmptyParas]--&amp;gt; &amp;lt;!--[endif]--&amp;gt;&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
/********************* VARIABILI DA SETTARE ********************/&lt;br /&gt;
// Directory dove salvare i files Uploadati ( chmod 777 o permessi di scrittura, 
percorso assoluto)&lt;br /&gt;
$upload_dir = $_SERVER[&quot;DOCUMENT_ROOT&quot;] . &quot;/upload&quot;;&lt;br /&gt;
// Eventuale nuovo nome da dare al file uploadato&lt;br /&gt;
$new_name = &quot;&quot;;&lt;br /&gt;
// Se $new_name è vuota, il nome sarà lo stesso del file uploadato&lt;br /&gt;
$file_name = ($new_name) ? $new_name : $_FILES[&quot;upfile&quot;][&quot;name&quot;];&lt;br /&gt;
if(trim($_FILES[&quot;upfile&quot;][&quot;name&quot;]) == &quot;&quot;) {&lt;br /&gt;
die(&quot;Non hai indicato il file da uploadare !&quot;);&lt;br /&gt;
}&lt;br /&gt;
if(@is_uploaded_file($_FILES[&quot;upfile&quot;][&quot;tmp_name&quot;])) {&lt;br /&gt;
@move_uploaded_file($_FILES[&quot;upfile&quot;][&quot;tmp_name&quot;], &quot;$upload_dir/$file_name&quot;)&lt;br /&gt;
or die(&quot;Impossibile spostare il file, controlla l&#39;esistenza o i permessi della 
directory dove fare l&#39;upload.&quot;);&lt;br /&gt;
} else {&lt;br /&gt;
die(&quot;Problemi nell&#39;upload del file &quot; . $_FILES[&quot;upfile&quot;][&quot;name&quot;]);&lt;br /&gt;
}&lt;br /&gt;
echo &quot;L&#39;upload del file &quot; . $_FILES[&quot;upfile&quot;][&quot;name&quot;] . &quot; è avvenuto 
correttamente&quot;;&lt;br /&gt;
?&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Impostare data in 
formato standard europeo ovvero gg-mm-aaaa&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Con una query sql si può riportare una data specifica oppure, con la 
funzione now() al posto della data, inserire la data corrente&lt;br /&gt;
1) impostare il campo dove inserire la data come stringa;&lt;br /&gt;
2) INSERT INTO tabella(&#39;campo&#39;) VALUES (DATE_FORMAT(&#39;2009-10-04 22:23:00&#39;, 
&#39;%d-%m-%Y&#39;))&lt;br /&gt;
Per ulteriori informazioni si consulti
&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format&quot;&gt;
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format&lt;/a&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;
MySQL Field Types - Campi in MySQL&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;(&lt;a href=&quot;http://help.scibit.com/Mascon/masconMySQL_Field_Types.html&quot;&gt;http://help.scibit.com/Mascon/masconMySQL_Field_Types.html&lt;/a&gt;&lt;b&gt;) &lt;br /&gt;
&lt;/b&gt;
&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&lt;b&gt;MySQL&lt;/b&gt; supports a number of column types, which may be grouped into three
categories: numeric types, date and time types, and string (character) types. This
section first gives an overview of the types available. Please refer to the MySQL
manuals for more details.
&lt;/span&gt;&lt;span style=&quot;font-family: Arial; font-size: x-small;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot; bordercolor=&quot;#c0c0c0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; id=&quot;table3&quot; style=&quot;width: 800px;&quot;&gt;&lt;tbody&gt;
&lt;tr valign=&quot;top&quot;&gt;
 &lt;td width=&quot;110&quot;&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&lt;b&gt;Type&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&lt;b&gt;Use for
&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&lt;b&gt;Size
&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td height=&quot;17&quot; width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;TINYINT
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td height=&quot;17&quot;&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A very small integer
&lt;/span&gt;&lt;/td&gt;&lt;td height=&quot;17&quot;&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;The signed range is –128 to 127. The unsigned range is 0 to 255.
  &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td height=&quot;17&quot; width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;SMALLINT
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td height=&quot;17&quot;&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A small integer
&lt;/span&gt;&lt;/td&gt;&lt;td height=&quot;17&quot;&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;The signed range is –32768 to 32767. The unsigned range is 0 to 65535
  &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;MEDIUMINT
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A medium-size integer
&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;The signed range is –8388608 to 8388607. The unsigned range is 0 to 16777215
  &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;INT or INTEGER&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A normal-size integer
&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;The signed range is –2147483648 to 2147483647. The unsigned range is 0 to 4294967295
  &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;BIGINT
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A large integer
&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;The signed range is –9223372036854775808 to 9223372036854775807. The unsigned range is 0 to
18446744073709551615
  &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;FLOAT
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A small (single-precision) floating-point number. Cannot be unsigned
&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Ranges are –3.402823466E+38 to –1.175494351E-38, 0 and 1.175494351E-38 to 3.402823466E+38. If the number of
Decimals is not set or &amp;lt;= 24 it is a single-precision floating point number
  &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;DOUBLE,
&lt;br /&gt;DOUBLE PRECISION,
&lt;br /&gt;REAL
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A normal-size (double-precision) floating-point number. Cannot be unsigned
&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Ranges are -1.7976931348623157E+308 to -2.2250738585072014E-308, 0 and
2.2250738585072014E-308 to 1.7976931348623157E+308. If the number of Decimals is not
set or 25 &amp;lt;= Decimals &amp;lt;= 53 stands for a double-precision floating point number
&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;DECIMAL,
&lt;br /&gt;NUMERIC
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;An unpacked floating-point number. Cannot be unsigned
&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Behaves like a 
CHAR column: “unpacked” means the number is stored as a string, using 
one character for each digit of
the value. The decimal point, and, for negative numbers, the ‘-‘ sign is
 not counted in Length. If Decimals is 0, values will have no decimal
point or fractional part. The maximum range of DECIMAL values is the 
same as
for DOUBLE, but the actual range for a given DECIMAL column may be 
constrained by
the choice of Length and Decimals. If Decimals is left out it’s set to 
0. If Length is left out it’s set to 10. Note that in MySQL 3.22 the 
Length includes the sign and the
decimal point &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;DATE
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A date
&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;The supported range is ‘1000-01-01’ to ‘9999-12-31’. MySQL displays DATE values in ‘YYYY-MM-DD’ format
  &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;DATETIME
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A date and time combination
&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;The supported 
range is ‘1000-01-01 00:00:00’ to ‘9999-12-31 23:59:59’. MySQL displays 
DATETIME values in ‘YYYY-MM-DD HH:MM:SS’ format
  &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;TIMESTAMP
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A timestamp
&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;The range is ‘1970-01-01 00:00:00’ to sometime in the year 2037. MySQL displays TIMESTAMP values in
YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD or YYMMDD format, depending on whether M is 14 (or
missing), 12, 8 or 6, but allows you to assign values to TIMESTAMP columns using
either strings or numbers. A TIMESTAMP column is useful for recording the date
and time of an INSERT or UPDATE operation because it is automatically set to
the date and time of the most recent operation if you don’t give it a value yourself
  &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;TIME
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A time
&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;The range is 
‘-838:59:59’ to ‘838:59:59’. MySQL displays TIME values in ‘HH:MM:SS’ 
format, but allows you to assign values to TIME columns using either 
strings
or numbers
  &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;YEAR
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A year in 2- or 4- digit formats (default is 4-digit)
&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;The allowable values are 1901 to 2155, and 0000 in the 4 year format and
1970-2069 if you use the 2 digit format (70-69). MySQL displays YEAR values in YYYY
format, but allows you to assign values to YEAR columns using either strings or
numbers. (The YEAR type is new in MySQL 3.22.) &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
  &lt;td width=&quot;110&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;CHAR
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A fixed-length string that is always right-padded with spaces to the specified
length when stored
&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;The range of Length is 1 to 255 characters. Trailing spaces are removed when
the value is retrieved. CHAR values are sorted and compared in case-insensitive
fashion according to the default character set unless the BINARY keyword is
given
&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;VARCHAR
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A variable-length string. Note: Trailing spaces are removed when the value is
stored (this differs from the ANSI SQL specification)
&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;The range of Length is 1 to 255 characters. VARCHAR values are sorted and
compared in case-insensitive fashion unless the BINARY keyword is given &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
  &lt;td width=&quot;110&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;TINYBLOB,
&lt;br /&gt;TINYTEXT
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A BLOB or TEXT column with a maximum length of 255 (2^8 - 1) characters
&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;BLOB,
&lt;br /&gt;TEXT 
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A BLOB or TEXT column with a maximum length of 65535 (2^16 - 1) characters
&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;MEDIUMBLOB,
&lt;br /&gt;MEDIUMTEXT
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A BLOB or TEXT column with a maximum length of 16777215 (2^24 - 1) characters
&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;LONGBLOB,
&lt;br /&gt;LONGTEXT
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A BLOB or TEXT column with a maximum length of 4294967295 (2^32 - 1) characters
&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;&lt;td width=&quot;110&quot;&gt;&lt;b&gt;
  &lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;ENUM&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;An enumeration&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A string object that can have 
only one value, chosen from the list of values ‘value1’, ‘value2’, ..., 
or NULL. An ENUM can have a maximum of 65535 distinct values. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign=&quot;top&quot;&gt;
  &lt;td width=&quot;110&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;SET
&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A set
&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A string object that can have zero or more values, each of which must be
chosen from the list of values ‘value1’, ‘value2’, ... A SET can have a maximum of 64 members
  &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div align=&quot;left&quot;&gt;
&lt;i&gt;&lt;b&gt;&lt;span class=&quot;Stile25&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Connessione a MySQL 
con PHP &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=5072520483132159389&quot; id=&quot;q9&quot; name=&quot;q9&quot;&gt;&lt;/a&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Segue un semplice esempio 
di codice; assegnare alle variabili iniziali i valori corrispondenti ai propri 
dati di accesso al servizio, così come comunicato nella mail di attivazione del 
servizio.&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
$host= &quot;localhost&quot;;&lt;br /&gt;
$user= &quot;PROPRIO-USERNAME-MYSQL&quot;; &lt;br /&gt;
$password= &quot;PASSWORD-MYSQL&quot;; &lt;br /&gt;
$database= &quot;NOME-DB&quot;; &lt;br /&gt;
$tabella =&quot;NOME-TABELLA&quot;;&lt;/span&gt;&lt;/div&gt;
&lt;div align=&quot;left&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;mysql_connect($host,$user,$password); 
//connessione database&lt;br /&gt;
mysql_select_db($database) or die(&quot;Impossibile selezionare il database&quot;);&lt;br /&gt;
mysql_query(&quot;select * from &quot;. $tabella . &quot;&quot;) or die(&quot;Impossibile eseguire la 
query&quot;); &lt;br /&gt;
mysql_close();&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
Il codice sopra riportato è un semplice esempio che eseguirà una query al 
database server e, nel caso in cui l&#39;operazione fallisca, restituirà un 
messaggio di errore. &lt;/span&gt;&lt;/div&gt;
&lt;div align=&quot;left&quot;&gt;
&lt;i&gt;&lt;b&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;PHP e funzione mail() &lt;br /&gt;
&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=5072520483132159389&quot; id=&quot;q13&quot; name=&quot;q13&quot;&gt;&lt;/a&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Per inviare posta 
attraverso script in php è possibile utilizzare l&#39;apposita funzione di PHP 
mail() oppure, così come consigliato nella mail di attivazione dei servizi, 
utilizzare la funzione smtpmail(), sviluppata da MondoServer IT, per inviare 
posta utilizzando SMTP con autenticazione. La soluzione con autenticazione, di 
applicazione immediata, è preferibile poichè garantisce elevati livelli di 
sicurezza al webserver. La funzione smtpmail() viene fornita da MondoServer IT 
al momento dell&#39;attivazione ed utilizza una sintassi simile a quella della 
funzione mail(). Segue un esempio di codice per inviare email attraverso PHP, 
utilizzando la funzione mail():&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
$to=&quot;email@destinatario&quot;;&lt;br /&gt;
$from=&quot;email@mittente&quot;;&lt;br /&gt;
$subject=&quot;Titolo del messaggio&quot;;&lt;br /&gt;
$messaggio=&quot;Rigo 1 del messaggio\n Rigo 2 del messaggio\n Rigo 3 ........&quot;; &lt;br /&gt;
mail( &quot;$to&quot;, &quot;$subject&quot;, &quot;$messaggio&quot;, &quot;From: $from&quot;); &lt;br /&gt;
echo &quot;Messaggio inviato a &quot; . $to . &quot;.&quot;;&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
La sintassi della funzione smtpmail() è simile, come si può osservare dal 
seguente codice:&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;$to=&quot;email@destinatario&quot;;&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;$from=&quot;email@mittente&quot;;&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;$subject=&quot;Titolo del messaggio&quot;;&lt;br /&gt;
$user=&quot;nome-utente-di-posta&quot;;&lt;br /&gt;
$password=&quot;password-di-posta&quot;;&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;$server=&quot;ip-del-server&quot;; //comunicato dal Provider &lt;br /&gt;
$messaggio=&quot;Rigo 1 del messaggio\n Rigo 2 del messaggio\n Rigo 3 ........&quot;; &lt;br /&gt;
smtpmail( &quot;$to&quot;, &quot;$subject&quot;, &quot;$messaggio&quot;, &quot;From: $from&quot;, $user, $password, 
$server ); &lt;br /&gt;
echo &quot;Messaggio inviato a &quot; . $to . &quot;.&quot;;&lt;br /&gt;
?&amp;gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align=&quot;left&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Effettuare il redirect con Php&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Per motivi di logistica o di organizzazzione alle volte può essere 
necessario spostare un file da una posizione sul server ad un&#39; altra. Per 
evitare di ritrovarsi con collegamenti interrotti e perdita di posizioni nei 
motori di ricerca si ricorre al redirect (reindirizzamento).&lt;br /&gt;
Questo argomento è stato già trattato in precedenza per due linguaggi: Html (Meta-tag) 
e Javascript.&lt;br /&gt;
Supponiamo di disporre della pagina &quot;guestbook.php&quot; inizialmente collocata nella 
root del sito, e di volerla trasferire nella cartella &quot;guestbook&quot;.&lt;br /&gt;
Sarà innanzitutto necessario creare la pagina &quot;guestbook/guestbook.php&quot; per il 
corretto funzionamento del guestbook nella sua nuova posizione sul server, 
nonchè rimpiazzare il codice di &quot;guestbook.php&quot; (quello nella root) con questo:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
header(&quot;Location: guestbook/guestbook.php&quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Tanto per spiegarmi meglio avremo due file adesso (e non più uno):&lt;br /&gt;
* guestbook.php (che punta al nuovo guestbook grazie al redirect);&lt;br /&gt;
* guestbook/guestbook.php (il nuovo guestbook).&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Reading a File Using PHP - Leggere un file utilizzando PHP&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
A simple method for reading a file is to use the file() function which will 
return an array containing each line of the file. Here&#39;s an example :&lt;br /&gt;
// open the file and save each line as an array entry in $content&lt;br /&gt;
$content = file(&#39;myfile.txt&#39;);&lt;br /&gt;
// count how many lines in the file&lt;br /&gt;
$numLines = count($content);&lt;br /&gt;
// loop through all the lines&lt;br /&gt;
for ($i = 0; $i &amp;lt; $numLines; $i++) {&lt;br /&gt;
// each line ends with a newline character&lt;br /&gt;
// you may want to get rid of this first&lt;br /&gt;
// using trim()&lt;br /&gt;
$line = trim($content[$i]);&lt;br /&gt;
// do whatever you want to do with that line...&lt;br /&gt;
}&lt;br /&gt;
The second alternative is using the fopen() and read one line at a time using a 
while loop like this :&lt;br /&gt;
// open the log file and check if the it&#39;s opened successfully&lt;br /&gt;
if (!($fp = fopen(&#39;myfile.txt&#39;, &#39;r&#39;))) {&lt;br /&gt;
die(&#39;Cannot open file&#39;);&lt;br /&gt;
}&lt;br /&gt;
// keep fetching a line from the file until end of file&lt;br /&gt;
while ($line = fgets($fp, 4096)) {&lt;br /&gt;
// trim to remove new line character at the end of line&lt;br /&gt;
$line = trim($line);&lt;br /&gt;
&lt;br /&gt;
// do whatever you want to do with that line...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Append a String to a File Using PHP&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;To append a string to a file you will need to open the file using fopen() 
with the &#39;a&#39; parameter. For example if your log file name is mylog.txt you would 
write the code like this :&lt;br /&gt;
// open the log file and check if the it&#39;s opened successfully&lt;br /&gt;
if (!($fp = fopen(&#39;mylog.txt&#39;, &#39;a&#39;))) {&lt;br /&gt;
die(&#39;Cannot open log file&#39;);&lt;br /&gt;
}&lt;br /&gt;
// ... your code do something here&lt;br /&gt;
// append to log file&lt;br /&gt;
// make sure you add a newline character at the end of the log string&lt;br /&gt;
fwrite($fp, &quot;Initiate world domination\n&quot;);&lt;br /&gt;
// ... do some stuff here&lt;br /&gt;
// ... and your code do something else here&lt;br /&gt;
// append another line to the log file&lt;br /&gt;
fwrite($fp, &quot;World domination completed. Bwa ha ha ha...!!&quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Reading a Remote File Using PHP&lt;/b&gt;&lt;/i&gt; &lt;br /&gt;
To read a remote file from php you have at least four options :&lt;br /&gt;
1. Use fopen()&lt;br /&gt;
2. Use file_get_contents()&lt;br /&gt;
3. CURL&lt;br /&gt;
4. Make your own function using php&#39;s socket functions.&lt;br /&gt;
First i need to warn you about something. You can only use fopen() and 
file_get_contents() when fopen wrappers is enabled. This parameter is specified 
in the php.ini file and cannot be changed at run time using ini_set(), To know 
whether you can use these two or not you can use the following code to check the 
value of fopen wrapper seting.&lt;br /&gt;
if (ini_get(&#39;allow_url_fopen&#39;) == &#39;1&#39;) {&lt;br /&gt;
// use fopen() or file_get_contents()&lt;br /&gt;
} else {&lt;br /&gt;
// use curl or your custom function&lt;br /&gt;
}&lt;br /&gt;
1 . Using fopen()&lt;br /&gt;
If you use fopen() to read a remote file the process is as simple as reading 
from a local file. The only difference is that you will specify the URL instead 
of the file name. Take a look at the example below :&lt;br /&gt;
// make sure the remote file is successfully opened before doing anything else&lt;br /&gt;
if ($fp = fopen(&#39;http://www.google.com/&#39;, &#39;r&#39;)) {&lt;br /&gt;
$content = &#39;&#39;;&lt;br /&gt;
// keep reading until there&#39;s nothing left&lt;br /&gt;
while ($line = fread($fp, 1024)) {&lt;br /&gt;
$content .= $line;&lt;br /&gt;
}&lt;br /&gt;
// do something with the content here&lt;br /&gt;
// ...&lt;br /&gt;
} else {&lt;br /&gt;
// an error occured when trying to open the specified url&lt;br /&gt;
}&lt;br /&gt;
Now, the code above use fread() function in the while loop to read up to 1024 
bytes of data in a single loop. That code can also be written like this :&lt;br /&gt;
// make sure the remote file is successfully opened before doing anything else&lt;br /&gt;
if ($fp = fopen(&#39;http://www.google.com/&#39;, &#39;r&#39;)) {&lt;br /&gt;
$content = &#39;&#39;;&lt;br /&gt;
// keep reading until there&#39;s nothing left&lt;br /&gt;
while ($line = fgets($fp, 1024)) {&lt;br /&gt;
$content .= $line;&lt;br /&gt;
}&lt;br /&gt;
// do something with the content here&lt;br /&gt;
// ...&lt;br /&gt;
} else {&lt;br /&gt;
// an error occured when trying to open the specified url&lt;br /&gt;
}&lt;br /&gt;
instead of fread() we use fgets() which reads one line of data up to 1024 bytes. 
The first code is much more preferable than the second though. Just imagine if 
the remote file&#39;s size is 50 kilobytes and consists of 300 lines. Using the 
first code will cause the loop to be executed about fifty times but using the 
second the loop will be executed three hundred times.&lt;br /&gt;
If you consider the cost to call a function plus the time required to make 300 
requests compared to just 5 then clearly the first one is the winner. &lt;br /&gt;
2. Using file_get_contents()&lt;br /&gt;
This is my favorite way of reading a remote file because it is very simple. Just 
call this function and specify a url as the parameter. But make sure you 
remember to check the return value first to determine if it return an error 
before processing the result&lt;br /&gt;
$content = file_get_contents(&#39;http://www.google.com/&#39;);&lt;br /&gt;
if ($content !== false) {&lt;br /&gt;
// do something with the content&lt;br /&gt;
} else {&lt;br /&gt;
// an error happened&lt;br /&gt;
} &lt;br /&gt;
3. CURL&lt;br /&gt;
Unlike the two methods above using CURL cannot be said as straigthforward. 
Although this library is very useful to connect and communicate with may 
different protocols ( not just http ) it requires more effort to learn. And 
another problem is that not all web host have this library in their php 
installation. So we better make sure to check if the library is installed before 
trying to use it.&lt;br /&gt;
Here is a basic example on fetching a remote file&lt;br /&gt;
// make sure curl is installed&lt;br /&gt;
if (function_exists(&#39;curl_init&#39;)) {&lt;br /&gt;
// initialize a new curl resource&lt;br /&gt;
$ch = curl_init();&lt;br /&gt;
// set the url to fetch&lt;br /&gt;
curl_setopt($ch, CURLOPT_URL, &#39;http://www.google.com&#39;);&lt;br /&gt;
// don&#39;t give me the headers just the content&lt;br /&gt;
curl_setopt($ch, CURLOPT_HEADER, 0);&lt;br /&gt;
// return the value instead of printing the response to browser&lt;br /&gt;
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);&lt;br /&gt;
// use a user agent to mimic a browser&lt;br /&gt;
curl_setopt($ch, CURLOPT_USERAGENT, &#39;Mozilla/5.0 (Windows; U; Windows NT 5.1; 
en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0&#39;);&lt;br /&gt;
$content = curl_exec($ch);&lt;br /&gt;
// remember to always close the session and free all resources&lt;br /&gt;
curl_close($ch);&lt;br /&gt;
} else {&lt;br /&gt;
// curl library is not installed so we better use something else&lt;br /&gt;
}&lt;br /&gt;
In some cases using CURL is faster than using file_get_contents() or fopen(). 
This is because CURL handles compression protocols by default ( for example gzip 
). Many sites, big and small, use gzip compression to compress their web pages 
in order to save bandwidth. This site, for example, also use gzip compression 
which cut the bandwidth used into half. So if you&#39;re the type who just can&#39;t 
wait CURL will fit you most.&lt;br /&gt;
4. Custom functions&lt;br /&gt;
In the worst case your server will have fopen wrappers disabled and don&#39;t have 
CURL library installed. In this sad situation you just have to make your own 
way.&lt;br /&gt;
Our function shall be named getRemoteFile() which takes only one parameter, the 
url for the remote file. The skeleton for this function is shown below&lt;br /&gt;
function getRemoteFile($url)&lt;br /&gt;
{&lt;br /&gt;
// 1. get the host name and url path&lt;br /&gt;
// 2. connect to the remote server&lt;br /&gt;
// 3. send the necessary headers to get the file&lt;br /&gt;
// 4. retrieve the response from the remote server&lt;br /&gt;
// 5. strip the headers&lt;br /&gt;
// 6. return the file content&lt;br /&gt;
}&lt;br /&gt;
To extract the host name and url path from the given url we&#39;ll use parse_url() 
function. When given a url this function will spit out the followings :&lt;br /&gt;
* scheme&lt;br /&gt;
* host&lt;br /&gt;
* port&lt;br /&gt;
* user&lt;br /&gt;
* pass&lt;br /&gt;
* path&lt;br /&gt;
* query&lt;br /&gt;
* fragment&lt;br /&gt;
For example, if the url is http://www.php-mysql-tutorial.com/somepage.php then 
parse_url() will return :&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
[scheme] =&amp;gt; http&lt;br /&gt;
[host] =&amp;gt; www.php-mysql-tutorial.com&lt;br /&gt;
[path] =&amp;gt; /somepage.php&lt;br /&gt;
)&lt;br /&gt;
and if the url is http://myusername:mypassword@www.php-mysql-tutorial.com/somepage.php?q=whatsthis#ouch 
then parse_url() will return this :&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
[scheme] =&amp;gt; http&lt;br /&gt;
[host] =&amp;gt; www.php-mysql-tutorial.com&lt;br /&gt;
[user] =&amp;gt; myusername&lt;br /&gt;
[pass] =&amp;gt; mypassword&lt;br /&gt;
[path] =&amp;gt; /somepage.php&lt;br /&gt;
[query] =&amp;gt; q=whatsthis&lt;br /&gt;
[fragment] =&amp;gt; ouch&lt;br /&gt;
)&lt;br /&gt;
For our new function we only care about the host, port, path and query.&lt;br /&gt;
To establish a connection to a remote server we use fsockopen(). This function 
requires five arguments, the hostname, port number, a reference for error number, 
a reference for the error message and timeout&lt;br /&gt;
function getRemoteFile($url)&lt;br /&gt;
{&lt;br /&gt;
// get the host name and url path&lt;br /&gt;
$parsedUrl = parse_url($url);&lt;br /&gt;
$host = $parsedUrl[&#39;host&#39;];&lt;br /&gt;
if (isset($parsedUrl[&#39;path&#39;])) {&lt;br /&gt;
$path = $parsedUrl[&#39;path&#39;];&lt;br /&gt;
} else {&lt;br /&gt;
// the url is pointing to the host like http://www.mysite.com&lt;br /&gt;
$path = &#39;/&#39;;&lt;br /&gt;
}&lt;br /&gt;
if (isset($parsedUrl[&#39;query&#39;])) {&lt;br /&gt;
$path .= &#39;?&#39; . $parsedUrl[&#39;query&#39;];&lt;br /&gt;
}&lt;br /&gt;
if (isset($parsedUrl[&#39;port&#39;])) {&lt;br /&gt;
$port = $parsedUrl[&#39;port&#39;];&lt;br /&gt;
} else {&lt;br /&gt;
// most sites use port 80&lt;br /&gt;
$port = &#39;80&#39;;&lt;br /&gt;
}&lt;br /&gt;
$timeout = 10;&lt;br /&gt;
$response = &#39;&#39;;&lt;br /&gt;
// connect to the remote server&lt;br /&gt;
$fp = @fsockopen($host, &#39;80&#39;, $errno, $errstr, $timeout );&lt;br /&gt;
if( !$fp ) {&lt;br /&gt;
echo &quot;Cannot retrieve $url&quot;;&lt;br /&gt;
} else {&lt;br /&gt;
// send the necessary headers to get the file&lt;br /&gt;
fputs($fp, &quot;GET $path HTTP/1.0\r\n&quot; .&lt;br /&gt;
&quot;Host: $host\r\n&quot; .&lt;br /&gt;
&quot;User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.3) Gecko/20060426 
Firefox/1.5.0.3\r\n&quot; .&lt;br /&gt;
&quot;Accept: */*\r\n&quot; .&lt;br /&gt;
&quot;Accept-Language: en-us,en;q=0.5\r\n&quot; .&lt;br /&gt;
&quot;Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n&quot; .&lt;br /&gt;
&quot;Keep-Alive: 300\r\n&quot; .&lt;br /&gt;
&quot;Connection: keep-alive\r\n&quot; .&lt;br /&gt;
&quot;Referer: http://$host\r\n\r\n&quot;);&lt;br /&gt;
&lt;br /&gt;
// retrieve the response from the remote server&lt;br /&gt;
while ( $line = fread( $fp, 4096 ) ) {&lt;br /&gt;
$response .= $line;&lt;br /&gt;
}&lt;br /&gt;
fclose( $fp );&lt;br /&gt;
// strip the headers&lt;br /&gt;
$pos = strpos($response, &quot;\r\n\r\n&quot;);&lt;br /&gt;
$response = substr($response, $pos + 4);&lt;br /&gt;
}&lt;br /&gt;
// return the file content&lt;br /&gt;
return $response;&lt;br /&gt;
}&lt;br /&gt;
The code above sends nine lines of headers but only the first two is mandatory. 
So even if you send only these&lt;br /&gt;
fputs($fp, &quot;GET $path HTTP/1.0\r\n&quot; .&lt;br /&gt;
&quot;Host: $host\r\n\r\n&quot;);&lt;br /&gt;
the function will likely be working correctly. Not always though. Since the file 
is stored in a remote server It really up to that server to reply to your 
request or not. Some people code their page to block any request without the 
proper referer header. Some will only accept a specific user agent. Other will 
require cookies set in the header.&lt;br /&gt;
If you want to see what headers should be sent to successfully fetch a specific 
remote file try using firefox plus live http headers plugin. It&#39;s really a 
useful little tool &lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;List a Directory&#39;s Contents Using PHP&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
To list the content of a directory you just need to use the combination of 
opendir() and readdir() functions.&lt;br /&gt;
// directory path can be either absolute or relative&lt;br /&gt;
$dirPath = &#39;.&#39;;&lt;br /&gt;
// open the specified directory and check if it&#39;s opened successfully&lt;br /&gt;
if ($handle = opendir($dirPath)) {&lt;br /&gt;
// keep reading the directory entries &#39;til the end&lt;br /&gt;
while (false !== ($file = readdir($handle))) {&lt;br /&gt;
// just skip the reference to current and parent directory&lt;br /&gt;
if ($file != &quot;.&quot; &amp;amp;&amp;amp; $file != &quot;..&quot;) {&lt;br /&gt;
if (is_dir(&quot;$dirPath/$file&quot;)) {&lt;br /&gt;
// found a directory, do something with it?&lt;br /&gt;
echo &quot;[$file]&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
} else {&lt;br /&gt;
// found an ordinary file&lt;br /&gt;
echo &quot;$file&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
// ALWAYS remember to close what you opened&lt;br /&gt;
closedir($handle);&lt;br /&gt;
}&lt;br /&gt;
When you list the files surely you need to know which of these files are 
actually a sub-directory. Using the is_dir() function you can test if the files 
is really a directory or not. What you want to do later with that directory is 
up to you. On the code above directories are simply printed in a square brackets 
to differentiate them with ordinary files&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Uploading Files To the Server Using PHP&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Now, we will make another upload script. But this time we won&#39;t save the 
file in the database. We will only store the file info there but the real file 
is stored in the file server. We need a little modification to the upload table. 
Instead of using BLOB datatype we just use VARCHAR to store the file path. &lt;br /&gt;
CREATE TABLE upload2 (&lt;br /&gt;
id INT NOT NULL AUTO_INCREMENT,&lt;br /&gt;
name VARCHAR(30) NOT NULL,&lt;br /&gt;
type VARCHAR(30) NOT NULL,&lt;br /&gt;
size INT NOT NULL,&lt;br /&gt;
path VARCHAR(60) NOT NULL,&lt;br /&gt;
PRIMARY KEY(id)&lt;br /&gt;
);&lt;br /&gt;
The HTML form we use is no different with the previous one since the real 
changes will take place in the PHP codes.&lt;br /&gt;
&amp;lt;form method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&amp;gt;&lt;br /&gt;
&amp;lt;table width=&quot;350&quot; border=&quot;0&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; class=&quot;box&quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=&quot;246&quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;hidden&quot; name=&quot;MAX_FILE_SIZE&quot; value=&quot;2000000&quot;&amp;gt;&lt;br /&gt;
&amp;lt;input name=&quot;userfile&quot; type=&quot;file&quot; id=&quot;userfile&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&quot;80&quot;&amp;gt;&amp;lt;input name=&quot;upload&quot; type=&quot;submit&quot; class=&quot;box&quot; id=&quot;upload&quot; value=&quot; 
Upload &quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
Okay, now let&#39;s take a look at the upload process. First we need to specify the 
directory to store the uploaded files. We store the directory name in $uploadDir. 
Note that PHP must have write access to $uploadDir or else the upload will fail. 
If you&#39;re web host using a Linux server you may need to set the permission for 
the upload directory to 777.&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$uploadDir = &#39;C:/webroot/upload/&#39;;&lt;br /&gt;
if(isset($_POST[&#39;upload&#39;]))&lt;br /&gt;
{&lt;br /&gt;
$fileName = $_FILES[&#39;userfile&#39;][&#39;name&#39;];&lt;br /&gt;
$tmpName = $_FILES[&#39;userfile&#39;][&#39;tmp_name&#39;];&lt;br /&gt;
$fileSize = $_FILES[&#39;userfile&#39;][&#39;size&#39;];&lt;br /&gt;
$fileType = $_FILES[&#39;userfile&#39;][&#39;type&#39;];&lt;br /&gt;
$filePath = $uploadDir . $fileName;&lt;br /&gt;
$result = move_uploaded_file($tmpName, $filePath);&lt;br /&gt;
if (!$result) {&lt;br /&gt;
echo &quot;Error uploading file&quot;;&lt;br /&gt;
exit;&lt;br /&gt;
}&lt;br /&gt;
include &#39;../library/config.php&#39;;&lt;br /&gt;
include &#39;../library/opendb.php&#39;;&lt;br /&gt;
if(!get_magic_quotes_gpc())&lt;br /&gt;
{&lt;br /&gt;
$fileName = addslashes($fileName);&lt;br /&gt;
$filePath = addslashes($filePath);&lt;br /&gt;
}&lt;br /&gt;
$query = &quot;INSERT INTO upload2 (name, size, type, path ) &quot;.&lt;br /&gt;
&quot;VALUES (&#39;$fileName&#39;, &#39;$fileSize&#39;, &#39;$fileType&#39;, &#39;$filePath&#39;)&quot;;&lt;br /&gt;
mysql_query($query) or die(&#39;Error, query failed : &#39; . mysql_error());&lt;br /&gt;
include &#39;../library/closedb.php&#39;;&lt;br /&gt;
echo &quot;&amp;lt;br&amp;gt;Files uploaded&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
The key here is the move_uploaded_file() function. This function will move the 
uploaded files from the temporary upload directory to the location that we 
earlier ( $uploadDir . $fileName ). If for some reason the functioncannot move 
the file it will return false and we exit the script because continuing the 
script is no use.&lt;br /&gt;
Downloading&lt;br /&gt;
For listing the download files we just need to copy from the previous script. 
The real difference start when you click on the download link.&lt;br /&gt;
if(isset($_GET[&#39;id&#39;]))&lt;br /&gt;
{&lt;br /&gt;
include &#39;../library/config.php&#39;;&lt;br /&gt;
include &#39;../library/opendb.php&#39;;&lt;br /&gt;
$id = $_GET[&#39;id&#39;];&lt;br /&gt;
$query = &quot;SELECT name, type, size, path FROM upload2 WHERE id = &#39;$id&#39;&quot;;&lt;br /&gt;
$result = mysql_query($query) or die(&#39;Error, query failed&#39;);&lt;br /&gt;
list($name, $type, $size, $filePath) = mysql_fetch_array($result);&lt;br /&gt;
header(&quot;Content-Disposition: attachment; filename=$name&quot;);&lt;br /&gt;
header(&quot;Content-length: $size&quot;);&lt;br /&gt;
header(&quot;Content-type: $type&quot;);&lt;br /&gt;
readfile($filePath);&lt;br /&gt;
include &#39;../library/closedb.php&#39;;&lt;br /&gt;
exit;&lt;br /&gt;
}&lt;br /&gt;
After fetching the file info from the database and sending the required headers 
the next thing we need to do is read the file content from the server and send 
it to the browser. We can accomplish this by using readfile() function.&lt;br /&gt;
The Problems&lt;br /&gt;
When using this method of uploading files there are two problems that we need to 
take care of. They are :&lt;br /&gt;
1. Preventing direct access to the uploaded files&lt;br /&gt;
2. Handling duplicate file names&lt;br /&gt;
Preventing direct access&lt;br /&gt;
For this example the upload directory where the files are stored is 
/home/arman198/public_html/examples/upload/files/. Using your browser you see 
the upload directory by clicking here. This is ( usually ) a bad thing because 
anyone can see directly the file list and download them all. If you don&#39;t want 
to prevent people from seeing the content of the upload directory you could 
create an empty file, name it index.html then put that file to the upload 
directory. This is certainly not the optimal solution because maybe some people 
will try guessing the files names.&lt;br /&gt;
A better approach is to move the upload directory away from your web root. For 
example, the web root for this site is: /home/arman198/public_html/ to prevent 
direct listing i can set the upload directory to /home/arman198/upload/.&lt;br /&gt;
This way an outsider cannot see directly what&#39;s inside the upload directory. For 
example, even if you go to this url : http://www.php-mysql-tutorial.com/../upload/ 
you can&#39;t see the upload directory &lt;br /&gt;
Handling duplicate file names&lt;br /&gt;
When saving the files into the MySQL database we don&#39;t have to worry about this. 
The table for saving the files uses an id as the primary key so even we put ten 
files with the same name there won&#39;t be any problem since we access the files 
using that unique id.&lt;br /&gt;
The problem arise when saving the files to file server. The move_uploaded_file() 
function will overwrite a file with the same name and this is certainly not a 
desired behaviour.&lt;br /&gt;
To prevent this we just need to modify the file name. In this example the file 
names are changed into a random string, 32 characters long.&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// ... same code as before&lt;br /&gt;
// get the file extension first&lt;br /&gt;
$ext = substr(strrchr($fileName, &quot;.&quot;), 1);&lt;br /&gt;
// make the random file name&lt;br /&gt;
$randName = md5(rand() * time());&lt;br /&gt;
// and now we have the unique file name for the upload file&lt;br /&gt;
$filePath = $uploadDir . $randName . &#39;.&#39; . $ext;&lt;br /&gt;
$result = move_uploaded_file($tmpName, $filePath);&lt;br /&gt;
// ... same code as before&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
First we extract the file extension from the file name using strrchr() function 
combined with substr(). Then using md5() we generate the 32 characters long of 
random string. It will look something like 7d1d1da5aac5ad72b293165e8e6fe89b. 
After we join them up we get the new unique file name. This way the chance of 
stumbling upon a duplicate name problem is very very slim.&lt;br /&gt;
As for the download part there&#39;s no change required. All we did was change the 
file name on the server so the previous download script will do just fine&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Paging using PHP&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Ever use a Search Engine? I&#39;m sure you have, lots of time. When Search 
Engines found thousands of results for a keyword do they spit out all the result 
in one page? Nope, they use paging to show the result little by little.&lt;br /&gt;
Paging means showing your query result in multiple pages instead of just put 
them all in one long page. Imagine waiting for five minutes just to load a 
search page that shows 1000 result. By splitting the result in multiple pages 
you can save download time plus you don&#39;t have much scrolling to do.&lt;br /&gt;
To show the result of a query in several pages first you need to know how many 
rows you have and how many rows per page you want to show. For example if I have 
295 rows and I show 30 rows per page that mean I&#39;ll have ten pages (rounded up).&lt;br /&gt;
For the example I created a table named randoms that store 295 random numbers. 
Each page shows 20 numbers.&lt;br /&gt;
Example: paging.php&lt;br /&gt;
Source code :paging.phps&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
include &#39;library/config.php&#39;;&lt;br /&gt;
include &#39;library/opendb.php&#39;;&lt;br /&gt;
// how many rows to show per page&lt;br /&gt;
$rowsPerPage = 20;&lt;br /&gt;
// by default we show first page&lt;br /&gt;
$pageNum = 1;&lt;br /&gt;
// if $_GET[&#39;page&#39;] defined, use it as page number&lt;br /&gt;
if(isset($_GET[&#39;page&#39;]))&lt;br /&gt;
{&lt;br /&gt;
$pageNum = $_GET[&#39;page&#39;];&lt;br /&gt;
}&lt;br /&gt;
// counting the offset&lt;br /&gt;
$offset = ($pageNum - 1) * $rowsPerPage;&lt;br /&gt;
$query = &quot; SELECT val FROM randoms &quot; .&lt;br /&gt;
&quot; LIMIT $offset, $rowsPerPage&quot;;&lt;br /&gt;
$result = mysql_query($query) or die(&#39;Error, query failed&#39;);&lt;br /&gt;
// print the random numbers&lt;br /&gt;
while($row = mysql_fetch_array($result))&lt;br /&gt;
{&lt;br /&gt;
echo $row[&#39;val&#39;] . &#39;&amp;lt;br&amp;gt;&#39;;&lt;br /&gt;
}&lt;br /&gt;
// ... more code here&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Paging is implemented in MySQL using LIMIT that take two arguments. The first 
argument specifies the offset of the first row to return, the second specifies 
the maximum number of rows to return. The offset of the first row is 0 ( not 1 
).&lt;br /&gt;
When paging.php is called for the first time the value of $_GET[&#39;page&#39;] is not 
set. This caused $pageNum value to remain 1 and the query is :&lt;br /&gt;
SELECT val FROM randoms LIMIT 0, 20&lt;br /&gt;
which returns the first 20 values from the table. But when paging.php is called 
like this http://www.php-mysql-tutorial.com/examples/paging/paging.php?page=4&lt;br /&gt;
the value of $pageNum becomes 4 and the query will be :&lt;br /&gt;
SELECT val FROM randoms LIMIT 60, 20&lt;br /&gt;
this query returns rows 60 to 79.&lt;br /&gt;
After showing the values we need to print the links to show any pages we like. 
But first we have to count the number of pages. This is achieved by dividing the 
number of total rows by the number of rows to show per page :&lt;br /&gt;
$maxPage = ceil($numrows/$rowsPerPage);&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// ... the previous code&lt;br /&gt;
// how many rows we have in database&lt;br /&gt;
$query = &quot;SELECT COUNT(val) AS numrows FROM randoms&quot;;&lt;br /&gt;
$result = mysql_query($query) or die(&#39;Error, query failed&#39;);&lt;br /&gt;
$row = mysql_fetch_array($result, MYSQL_ASSOC);&lt;br /&gt;
$numrows = $row[&#39;numrows&#39;];&lt;br /&gt;
// how many pages we have when using paging?&lt;br /&gt;
$maxPage = ceil($numrows/$rowsPerPage);&lt;br /&gt;
// print the link to access each page&lt;br /&gt;
$self = $_SERVER[&#39;PHP_SELF&#39;];&lt;br /&gt;
$nav = &#39;&#39;;&lt;br /&gt;
for($page = 1; $page &amp;lt;= $maxPage; $page++)&lt;br /&gt;
{&lt;br /&gt;
if ($page == $pageNum)&lt;br /&gt;
{&lt;br /&gt;
$nav .= &quot; $page &quot;; // no need to create a link to current page&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
$nav .= &quot; &amp;lt;a href=\&quot;$self?page=$page\&quot;&amp;gt;$page&amp;lt;/a&amp;gt; &quot;;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
// ... still more code coming&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
The mathematical function ceil() is used to round up the value of $numrows/$rowsPerPage.&lt;br /&gt;
In this case the value of total rows $numrows is 295 and $rowsPerPage is 20 so 
the result of the division is 14.75 and by using ceil() we get $maxPage = 15&lt;br /&gt;
Now that we know how many pages we have we make a loop to print the link. Each 
link will look something like this:&lt;br /&gt;
&amp;lt;a href=&quot;paging.php?page=5&quot;&amp;gt;5&amp;lt;/a&amp;gt;&lt;br /&gt;
You see that we use $_SERVER[&#39;PHP_SELF&#39;] instead of paging.php when creating the 
link to point to the paging file. This is done to avoid the trouble of modifying 
the code in case we want to change the filename.&lt;br /&gt;
We are almost complete. Just need to add a little code to create a &#39;Previous&#39; 
and &#39;Next&#39; link. With these links we can navigate to the previous and next page 
easily. And while we at it let&#39;s also create a &#39;First page&#39; and &#39;Last page&#39; link 
so we can jump straight to the first and last page when we want to.&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// ... the previous code&lt;br /&gt;
// creating previous and next link&lt;br /&gt;
// plus the link to go straight to&lt;br /&gt;
// the first and last page&lt;br /&gt;
if ($pageNum &amp;gt; 1)&lt;br /&gt;
{&lt;br /&gt;
$page = $pageNum - 1;&lt;br /&gt;
$prev = &quot; &amp;lt;a href=\&quot;$self?page=$page\&quot;&amp;gt;[Prev]&amp;lt;/a&amp;gt; &quot;;&lt;br /&gt;
$first = &quot; &amp;lt;a href=\&quot;$self?page=1\&quot;&amp;gt;[First Page]&amp;lt;/a&amp;gt; &quot;;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
$prev = &#39;&amp;amp;nbsp;&#39;; // we&#39;re on page one, don&#39;t print previous link&lt;br /&gt;
$first = &#39;&amp;amp;nbsp;&#39;; // nor the first page link&lt;br /&gt;
}&lt;br /&gt;
if ($pageNum &amp;lt; $maxPage)&lt;br /&gt;
{&lt;br /&gt;
$page = $pageNum + 1;&lt;br /&gt;
$next = &quot; &amp;lt;a href=\&quot;$self?page=$page\&quot;&amp;gt;[Next]&amp;lt;/a&amp;gt; &quot;;&lt;br /&gt;
$last = &quot; &amp;lt;a href=\&quot;$self?page=$maxPage\&quot;&amp;gt;[Last Page]&amp;lt;/a&amp;gt; &quot;;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
$next = &#39;&amp;amp;nbsp;&#39;; // we&#39;re on the last page, don&#39;t print next link&lt;br /&gt;
$last = &#39;&amp;amp;nbsp;&#39;; // nor the last page link&lt;br /&gt;
}&lt;br /&gt;
// print the navigation link&lt;br /&gt;
echo $first . $prev . $nav . $next . $last;&lt;br /&gt;
// and close the database connection&lt;br /&gt;
include &#39;../library/closedb.php&#39;;&lt;br /&gt;
// ... and we&#39;re done!&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Making these navigation link is actually easier than you may think. When we&#39;re 
on the fifth page we just make the &#39;Previous&#39; link point to the fourth. The same 
principle also apply for the &#39;Next&#39; link, we just need to add one to the page 
number.&lt;br /&gt;
One thing to remember is that we don&#39;t need to print the &#39;Previous&#39; and &#39;First 
Page&#39; link when we&#39;re already on the first page. Same thing for the &#39;Next&#39; and &#39;Last&#39; 
link. If we do print them that would only confuse the one who click on it. 
Because we&#39;ll be giving them the exact same page. &lt;br /&gt;
We got a problem here...&lt;br /&gt;
Take a look at this slightly modified version of paging.php. Instead of showing 
20 numbers in a page, I decided to show just three.&lt;br /&gt;
See the problem already?&lt;br /&gt;
Those page numbers are running across the screen! Yuck!&lt;br /&gt;
This call for a little modification to the code. Instead of printing the link to 
each and every page we will just saying something like &quot;Viewing page 4 of 99 
pages&quot;.&lt;br /&gt;
Than means we havel remove these code :&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// ... the previous code&lt;br /&gt;
$nav = &#39;&#39;;&lt;br /&gt;
for($page = 1; $page &amp;lt;= $maxPage; $page++)&lt;br /&gt;
{&lt;br /&gt;
if ($page == $pageNum)&lt;br /&gt;
{&lt;br /&gt;
$nav .= &quot; $page &quot;; // no need to create a link to current page&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
$nav .= &quot; &amp;lt;a href=\&quot;$self?page=$page\&quot;&amp;gt;$page&amp;lt;/a&amp;gt; &quot;;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
// ... the rest here&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
And then modify this one&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// ...&lt;br /&gt;
// print the navigation link&lt;br /&gt;
echo $first . $prev . $nav . $next . $last;&lt;br /&gt;
// ...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Into this&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// ...&lt;br /&gt;
// print the navigation link&lt;br /&gt;
echo $first . $prev .&lt;br /&gt;
&quot; Showing page $pageNum of $maxPage pages &quot; . $next . $last;&lt;br /&gt;
// ...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
When there&#39;s more than one column involved in paging there isn&#39;t much that we 
need to modify. We only need to decide how to count the total number of rows we 
have in the table. Consider the student table. This table have five columns as 
shown in the SQL below.&lt;br /&gt;
CREATE TABLE student(&lt;br /&gt;
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,&lt;br /&gt;
name VARCHAR(30) NOT NULL,&lt;br /&gt;
address VARCHAR(50) NOT NULL,&lt;br /&gt;
age TINYINT UNSIGNED NOT NULL,&lt;br /&gt;
register_date DATE NOT NULL,&lt;br /&gt;
PRIMARY KEY (id)&lt;br /&gt;
);&lt;br /&gt;
In the select query we just select all the columns. You can also use SELECT * 
instead of mentioning all the column names ( SELECT id, name, address, age, 
register_date ). But personally i prefer writing the column names in the query 
so that by reading the code i know what the column names in a table without 
having to check the database.&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
include &#39;library/config.php&#39;;&lt;br /&gt;
include &#39;library/opendb.php&#39;;&lt;br /&gt;
// how many rows to show per page&lt;br /&gt;
$rowsPerPage = 3;&lt;br /&gt;
// by default we show first page&lt;br /&gt;
$pageNum = 1;&lt;br /&gt;
// if $_GET[&#39;page&#39;] defined, use it as page number&lt;br /&gt;
if(isset($_GET[&#39;page&#39;]))&lt;br /&gt;
{&lt;br /&gt;
$pageNum = $_GET[&#39;page&#39;];&lt;br /&gt;
}&lt;br /&gt;
// counting the offset&lt;br /&gt;
$offset = ($pageNum - 1) * $rowsPerPage;&lt;br /&gt;
$query = &quot;SELECT id, name, address, age, register_date&lt;br /&gt;
FROM student&lt;br /&gt;
LIMIT $offset, $rowsPerPage&quot;;&lt;br /&gt;
$result = mysql_query($query) or die(&#39;Error, query failed&#39;);&lt;br /&gt;
// print the student info in table&lt;br /&gt;
echo &#39;&amp;lt;table border=&quot;1&quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Student 
Id&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Address&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Age&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Register
 
Date&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&#39;;&lt;br /&gt;
while(list($id, $name, $address, $age, $regdate) = mysql_fetch_array($result))&lt;br /&gt;
{&lt;br /&gt;
echo &quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;$id&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$address&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$age&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$regdate&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&quot;;&lt;br /&gt;
}&lt;br /&gt;
echo &#39;&amp;lt;/table&amp;gt;&#39;;&lt;br /&gt;
echo &#39;&amp;lt;br&amp;gt;&#39;;&lt;br /&gt;
// ... more code here&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
In this example we print the result in table. Before looping through the array 
we just echo the starting table code and the header which displays the column 
names. Then in the loop we just print the values in a HTML table row.&lt;br /&gt;
The next thing is finding out the total number of rows. There are several ways 
to do it. The first one is shown below. It&#39;s the same method used in previous 
examples. We just use the COUNT() function&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// ... previous code here&lt;br /&gt;
// how many rows we have in database&lt;br /&gt;
$query = &quot;SELECT COUNT(id) AS numrows FROM student&quot;;&lt;br /&gt;
$result = mysql_query($query) or die(&#39;Error, query failed&#39;);&lt;br /&gt;
$row = mysql_fetch_array($result, MYSQL_ASSOC);&lt;br /&gt;
$numrows = $row[&#39;numrows&#39;];&lt;br /&gt;
// ... just the same code that prints the prev &amp;amp; next link&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
You can also count any other columns since they all yield the same result. So 
your query can be rewritten into this :&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// ...&lt;br /&gt;
$query = &quot;SELECT COUNT(name) AS numrows FROM student&quot;;&lt;br /&gt;
// ...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Or this :&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// ...&lt;br /&gt;
$query = &quot;SELECT COUNT(age) AS numrows FROM student&quot;;&lt;br /&gt;
// ...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
There is another way to count the total rows. Instead of using COUNT() function 
in the query you use a simple SELECT &amp;lt;column&amp;gt; and use myql_num_rows() to see how 
many rows returned.&lt;br /&gt;
Take a look at the code below. We now separate the query into two parts. One is 
the normal SELECT query and the second is the SQL that performs the paging. 
After finish printing the result you can reuse the first part of the query to 
find the total number of rows.&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// ... same old code to get the page number and counting the offset&lt;br /&gt;
$query = &quot;SELECT id, name, address, age, register_date&lt;br /&gt;
FROM student &quot;;&lt;br /&gt;
$pagingQuery = &quot;LIMIT $offset, $rowsPerPage&quot;;&lt;br /&gt;
$result = mysql_query($query . $pagingQuery) or die(&#39;Error, query failed&#39;);&lt;br /&gt;
// ... the code that prints the result in a table&lt;br /&gt;
// how many rows we have in database&lt;br /&gt;
$result = mysql_query($query) or die(&#39;Error, query failed&#39;);&lt;br /&gt;
$numrows = mysql_num_rows($result);&lt;br /&gt;
// ... and here is the code that print the prev &amp;amp; next links&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
There is another advantage in separating the original query with the paging 
query. In case you only wish to list all student whose age is older than 15. You 
just need to modify the original query and you don&#39;t have to worry about 
changing the query to find the total number of rows. The example is shown below 
:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// ... same old code to get the page number and counting the offset&lt;br /&gt;
$query = &quot;SELECT id, name, address, age, register_date&lt;br /&gt;
FROM student&lt;br /&gt;
WHERE age &amp;gt; 15&quot;;&lt;br /&gt;
$pagingQuery = &quot;LIMIT $offset, $rowsPerPage&quot;;&lt;br /&gt;
$result = mysql_query($query . $pagingQuery) or die(&#39;Error, query failed&#39;);&lt;br /&gt;
// ... the code that prints the result in a table&lt;br /&gt;
// how many rows we have in database&lt;br /&gt;
$result = mysql_query($query) or die(&#39;Error, query failed&#39;);&lt;br /&gt;
$numrows = mysql_num_rows($result);&lt;br /&gt;
// ... and here is the code that print the prev &amp;amp; next links&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
The disadvantage of this method is that the second execution of mysql_query() 
will retrieve all columns from the database. This is very useless since we&#39;re 
not going to use them. We only interested in finding the total rows returned by 
that query. In the end it&#39;s really up to you to decide which method you prefer.
&lt;/span&gt;&lt;/div&gt;
&lt;div align=&quot;left&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Tabelle orizzontali e verticali&lt;br /&gt;
Tabella orizzontale&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;&amp;lt;?php&lt;br /&gt;
include(&quot;../includes/connectall.php&quot;);&amp;nbsp; //connessione al server&lt;br /&gt;
$result = mysql_query(&quot;SELECT * FROM menu WHERE `LangShort` LIKE &#39;EN&#39; ORDER BY 
`Menu` ASC &quot;,$db);&amp;nbsp;&amp;nbsp;&amp;nbsp; //stringa di mysql&lt;br /&gt;
$i=0;&lt;br /&gt;
echo &#39;&amp;lt;table align=&quot;center&quot; width=&quot;75%&quot; border=&quot;5&quot; cellspacing=&quot;1&quot; cellpadding=&quot;0&quot; 
bordercolor=&quot;#00FFFF&quot;&amp;gt;&amp;lt;tr&amp;gt;&#39;;&lt;br /&gt;
do { ?&amp;gt;&lt;br /&gt;
&amp;lt;td align=&quot;center&quot; bgcolor=&quot;#00FFFF&quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&amp;nbsp; &lt;br /&gt;
echo &#39;&amp;lt;b&amp;gt;&amp;lt;i&amp;gt; &amp;lt;font size=&quot;2&quot;&amp;gt;&amp;lt;a&amp;nbsp; href=&quot;&#39;, $myrow[&quot;PathFile&quot;], &#39;&quot;&amp;gt;&#39;, $myrow[&quot;Menu&quot;], 
&quot;&amp;lt;/a&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
if($i%6==0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //quante colonne vuoi&lt;br /&gt;
echo &#39;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&#39;;&lt;br /&gt;
$i++;&lt;br /&gt;
} while ($myrow = mysql_fetch_array($result)); &lt;br /&gt;
mysql_close();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align=&quot;left&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Tabella verticale&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;&amp;lt;?php&lt;br /&gt;
include(&quot;../includes/connectall.php&quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp; //connessione al server&lt;br /&gt;
$result = mysql_query(&quot;SELECT * FROM menu WHERE `LangShort` LIKE &#39;EN&#39; ORDER BY 
`Menu` ASC &quot;,$db);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //stringa di mysql&lt;br /&gt;
echo &quot;&amp;lt;table align=\&quot;left\&quot; border=\&quot;5\&quot; width=\&quot;100\&quot; cellspacing=\&quot;3\&quot; 
cellpadding=\&quot;1\&quot; bordercolor=\&quot;#00FFFF\&quot;&amp;gt;&quot;;&lt;br /&gt;
while($myrow = mysql_fetch_array($result))&lt;br /&gt;
{&lt;br /&gt;
echo &#39;&amp;lt;TR&amp;gt;&amp;lt;td align=&quot;center&quot; bgcolor=&quot;#00FFFF&quot; width=&quot;100&quot; height=&quot;44&quot;&amp;gt;&#39;;&lt;br /&gt;
echo &#39;&amp;lt;b&amp;gt;&amp;lt;i&amp;gt; &amp;lt;font size=&quot;2&quot;&amp;gt;&amp;lt;a href=&quot;&#39;, $myrow[&quot;PathFile&quot;], &#39;&quot;&amp;gt;&amp;lt;span style=&quot;text-decoration: 
none&quot;&amp;gt;&#39;, $myrow[&quot;Menu&quot;], &quot;&amp;lt;span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&quot;; &lt;br /&gt;
echo &quot; &amp;lt;/TD&amp;gt;&quot;; &lt;br /&gt;
echo &quot;&amp;lt;/TR&amp;gt;&quot;; &lt;br /&gt;
} &lt;br /&gt;
echo &quot;&amp;lt;/TABLE&amp;gt;&quot;; &lt;br /&gt;
mysql_close();&lt;br /&gt;
?&amp;gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align=&quot;left&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Javascript effects within PHP (2 examples 
here, rollover and popup)&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;An easy and clean process:&lt;br /&gt;
1. Create javascripts in the head of the page&lt;br /&gt;
2. Create another page with nothing but the javascript effect&lt;br /&gt;
3. Inlcude the effect page&lt;br /&gt;
rollover.htm&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;script language=&quot;JavaScript&quot;&amp;gt;&lt;br /&gt;
function MM_swapImgRestore() { //v3.0&lt;br /&gt;
var i,x,a=document.MM_sr; for(i=0;a&amp;amp;&amp;amp;i&amp;lt;a.length&amp;amp;&amp;amp;(x=a[i])&amp;amp;&amp;amp;x.oSrc;i++) x.src=x.oSrc;&lt;br /&gt;
}&lt;br /&gt;
function MM_swapImage() { //v3.0&lt;br /&gt;
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i&amp;lt;(a.length-2);i+=3)&lt;br /&gt;
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; 
x.src=a[i+2];}&lt;br /&gt;
}&lt;br /&gt;
function MM_findObj(n, d) { //v4.0&lt;br /&gt;
var p,i,x; if(!d) d=document; if((p=n.indexOf(&quot;?&quot;))&amp;gt;0&amp;amp;&amp;amp;parent.frames.length) {&lt;br /&gt;
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}&lt;br /&gt;
if(!(x=d[n])&amp;amp;&amp;amp;d.all) x=d.all[n]; for (i=0;!x&amp;amp;&amp;amp;i&amp;lt;d.forms.length;i++) x=d.forms[i][n];&lt;br /&gt;
for(i=0;!x&amp;amp;&amp;amp;d.layers&amp;amp;&amp;amp;i&amp;lt;d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);&lt;br /&gt;
if(!x &amp;amp;&amp;amp; document.getElementById) x=document.getElementById(n); return x;&lt;br /&gt;
}&lt;br /&gt;
function popUp(URL) {&lt;br /&gt;
day = new Date();&lt;br /&gt;
id = day.getTime();&lt;br /&gt;
eval(&quot;page&quot; + id + &quot; = window.open(URL, &#39;&quot; + id + &quot;&#39;, 
&#39;toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=625,height=400,left
 
=10,top = 10&#39;);&quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;BODY&amp;gt;&lt;br /&gt;
&amp;lt;TABLE WIDTH=&quot;180&quot; BORDER=&quot;0&quot; CELLSPACING=&quot;0&quot; CELLPADDING=&quot;1&quot; BGCOLOR=&quot;#FFFFFF&quot;&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;DIV ALIGN=&quot;CENTER&quot;&amp;gt;&amp;lt;A HREF=&quot;javascript:popUp(&#39;../tellfriend/tellfriend.php&#39;)&quot;&lt;br /&gt;
ONMOUSEOUT=&quot;MM_swapImgRestore()&quot; ONMOUSEOVER=&quot;MM_swapImage(&#39;e&#39;,&#39;&#39;,&#39;../email_over.gif&#39;,1)&quot;&amp;gt;&lt;br /&gt;
&amp;lt;IMG SRC=&quot;../email_base.gif&quot; WIDTH=&quot;180&quot; HEIGHT=&quot;20&quot; BORDER=&quot;0&quot; 
NAME=&quot;e&quot;&amp;gt;&amp;lt;/A&amp;gt;&amp;lt;/DIV&amp;gt;&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&amp;lt;/TABLE&amp;gt;&amp;lt;P&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;/BODY&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
document.php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$f=&#39;&amp;lt;font face=verdana,arial,helvetica size=2 color=blue&#39;;&lt;br /&gt;
echo &quot;&amp;lt;br&amp;gt;$f&amp;gt;Hello World&amp;lt;/font&amp;gt;&quot;;&lt;br /&gt;
include &quot;rollover.htm&quot;;&lt;br /&gt;
?&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;i&gt;&lt;b&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Controllo della compilazione dei campi - Verificare la 
corretta compilazione di un Form (***************************)&lt;br /&gt;
&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Il controllo della corretta compilazione dei campi 
dei Form è certamente uno degli &quot;argomenti caldi&quot; del webmastering.&lt;br /&gt;
In questo tutorial vedremo appunto come è possibile (grazie a Javascript) 
controllare la corretta compilazione di un modulo online.&lt;br /&gt;
Precisamente, verificheremo:&lt;br /&gt;
1) Che i campi non vengano lasciati vuoti ( useremo: ... value == &quot;&quot; )&lt;br /&gt;
2) La corretta formattazione di un indirizzo e-mail ( useremo: ... value.indexOf(&quot;@&quot;) 
== -1 )&lt;br /&gt;
Vediamo il codice HTML:&lt;br /&gt;
&amp;lt;script language=&quot;Javascript&quot;&amp;gt;&lt;br /&gt;
function ControllaForm()&lt;br /&gt;
{&lt;br /&gt;
var controllo=false;&lt;br /&gt;
if (document.form1.utente_nome.value == &quot;&quot; )&lt;br /&gt;
{&lt;br /&gt;
controllo=true;&lt;br /&gt;
alert(&quot;Attenzione: Hai lasciato vuoto un campo obbligatorio.\nIl form non sarà 
inviato&quot;);&lt;br /&gt;
}&lt;br /&gt;
if (document.form1.utente_email.value.indexOf(&quot;@&quot;) == -1 )&lt;br /&gt;
{&lt;br /&gt;
controllo=true;&lt;br /&gt;
alert(&quot;Attenzione: L&#39;E-MAIL inserita non e&#39; valida.\nIl form non sarà inviato&quot;);&lt;br /&gt;
}&lt;br /&gt;
if (document.form1.utente_msg.value == &quot;&quot; )&lt;br /&gt;
{&lt;br /&gt;
controllo=true;&lt;br /&gt;
alert(&quot;Attenzione: Hai lasciato vuoto un campo obbligatorio.\nIl form non sarà 
inviato&quot;);&lt;br /&gt;
}&lt;br /&gt;
if (controllo){return false}else{return true}&lt;br /&gt;
}&lt;br /&gt;
// --&amp;gt;&lt;br /&gt;
&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;
&amp;lt;form method=&quot;post&quot; name=&quot;form1&quot; action=&quot;nome_script.ext&quot; OnSubmit=&quot;return 
ControllaForm(this)&quot;&amp;gt;&lt;br /&gt;
Tuo nome:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;text&quot; name=&quot;utente_nome&quot; size=&quot;20&quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Tua e-mail&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;text&quot; name=&quot;utente_email&quot; size=&quot;20&quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Tuo messaggio:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;textarea name=&quot;utente_msg&quot; cols=&quot;40&quot; rows=&quot;4&quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;submit&quot; value=&quot;INVIA&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
Come è facile notare tutto il meccanismo si impernia su due tipi di controllo.&lt;br /&gt;
Il controllo per i campi vuoti è assolutamente intuitivo ( == &quot;&quot; ). Ecco la 
sintassi:&lt;br /&gt;
if (document.NOME_FORM.NOME_CAMPO.value == &quot;&quot; )&lt;br /&gt;
{&lt;br /&gt;
controllo=true;&lt;br /&gt;
alert(&quot;MESSAGGIO DI ALERT&quot;);&lt;br /&gt;
}&lt;br /&gt;
Mentre per la verifica dell&#39;indirizzo e-mail abbiamo usato &quot;indexOf&quot; per cercare 
all&#39;interno di quel campo la chiocciolina (@). Ecco la sintasi:&lt;br /&gt;
if (document.NOME_FORM.NOME_CAMPO.value.indexOf(&quot;@&quot;) == -1 )&lt;br /&gt;
{&lt;br /&gt;
controllo=true;&lt;br /&gt;
alert(&quot;MESSAGGIO DI ALERT&quot;);&lt;br /&gt;
}&lt;br /&gt;
Se la chiocciolina non viene trovata &quot;indexOf&quot; restituirà &quot;-1&quot; attivando il 
relativo alert.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Array di files all&#39;interno di una stessa pagina&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;&amp;lt;TABLE&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
#Crea una pagina web intabellando il contenuto della directory&lt;br /&gt;
#&#39;.&#39; è la cartella corrente nella quale vi trovate&lt;br /&gt;
$cartella = opendir(&#39;works/.&#39;);&lt;br /&gt;
while ($file=readdir($cartella)) {&lt;br /&gt;
$file_array[] = $file;&lt;br /&gt;
sort ($file_array);&lt;br /&gt;
}&lt;br /&gt;
foreach ($file_array as $file) {&lt;br /&gt;
if ($file == &quot;..&quot; || $file == &quot;.&quot; || $file ==&quot;index.php&quot; || $file ==&quot;links&quot;) {&lt;br /&gt;
continue;&lt;br /&gt;
}&lt;br /&gt;
echo &quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;left&amp;gt;&quot;;&lt;br /&gt;
echo &quot;&amp;lt;a href=\&quot;works/$file\&quot;&amp;gt;$file&amp;lt;/a&amp;gt;&quot;;&lt;br /&gt;
echo &quot;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&quot;;&lt;br /&gt;
}&lt;br /&gt;
unset($file_array); //SCARICA L&#39;ARRAY&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;lt;p align=&quot;left&quot;&amp;gt;&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Links:&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;TABLE&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
#Crea una pagina web intabellando il contenuto della directory&lt;br /&gt;
#&#39;.&#39; è la cartella corrente nella quale vi trovate&lt;br /&gt;
$cartella = opendir(&#39;works/links/.&#39;);&lt;br /&gt;
while ($file=readdir($cartella)) {&lt;br /&gt;
$file_array[] = $file;&lt;br /&gt;
sort ($file_array);&lt;br /&gt;
}&lt;br /&gt;
foreach ($file_array as $file) {&lt;br /&gt;
if ($file == &quot;..&quot; || $file == &quot;.&quot; || $file ==&quot;index.php&quot; || $file ==&quot;links&quot;) {&lt;br /&gt;
continue;&lt;br /&gt;
}&lt;br /&gt;
echo &quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;left&amp;gt;&quot;;&lt;br /&gt;
echo &quot;&amp;lt;a href=\&quot;works/links/$file\&quot;&amp;gt;$file&amp;lt;/a&amp;gt;&quot;;&lt;br /&gt;
echo &quot;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&quot;;&lt;br /&gt;
}&lt;br /&gt;
unset($file_array); unset($file_array); //SCARICA L&#39;ARRAY&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Protezione dei file su server APACHE&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Per creare delle cartelle su un vostro sito web protette da password 
dovete fare:&lt;br /&gt;
1) Collegatevi via ftp al vostro sito web&lt;br /&gt;
2) Createvi un file di nome .htaccess con notepad con il seguente contenuto:&lt;br /&gt;
Codice:&lt;br /&gt;
AuthUserFile /percorso-sito/dir-protetta/.htpasswd&lt;br /&gt;
AuthGroupFile /dev/null&lt;br /&gt;
AuthName &quot;Mia Directory Protetta&quot;&lt;br /&gt;
AuthType Basic&lt;br /&gt;
&amp;lt;Limit GET&amp;gt;&lt;br /&gt;
require valid-user&lt;br /&gt;
&amp;lt;/Limit&amp;gt;&lt;br /&gt;
Dovete personalizzare la riga AuthUserFile inserendo il percorso del file .htpasswd&lt;br /&gt;
In AuthName si inserite il nome che volete dare alla finestra di login 
(nell&#39;esempio: Mia Directory Protetta)&lt;br /&gt;
N.B. il file .htaccess deve essere creato nella cartella che si vuole proteggere 
da password.&lt;br /&gt;
3) Creare il file .htpasswd.&lt;br /&gt;
In questo file andremo a scrivere la lista degli utenti autorizzati e la 
relativa password nel seguente formato:&lt;br /&gt;
nome:password&lt;br /&gt;
la password dovrà essere inserita in formato md5 per farlo accedete a questi 
siti:&lt;br /&gt;
&lt;a href=&quot;http://webxtractions.com/cgi-bin/password.cgi&quot;&gt;
http://webxtractions.com/cgi-bin/password.cgi&lt;/a&gt; &lt;br /&gt;
&lt;a href=&quot;http://www.askapache.com/online-tools/htpasswd-generator/&quot;&gt;
http://www.askapache.com/online-tools/htpasswd-generator/&lt;/a&gt; &lt;br /&gt;
inserite username e password che volete utilizzare per il vostro file e 
successivamente premete il tasto &quot;Encrypt it&quot;.&lt;br /&gt;
ESEMPIO: user mike password pippo&lt;br /&gt;
&amp;gt;uscirà: mike:92gmxL87pzQW6&lt;br /&gt;
questo è quello che dovete inserire nel file .htpasswd&lt;br /&gt;
ATTENZIONE:&lt;br /&gt;
Il file .htpasswd e il file .htaccess NON DEVONO AVERE ALCUNA ESTENSIONE&lt;br /&gt;
CONSIGLI:&lt;br /&gt;
- Utilizzate password con lunghezza minima di 12 caratteri.&lt;br /&gt;
- La directory contenente il file .htpasswd dovrebbe trovarsi in una directory 
esterna a quella in cui è depositato il sito (se utilizzate un NAS Synology, 
vuol dire fuori dalla cartella &quot;web&quot;). Tale cartella dovrebbe avere un accesso 
esclusivo al solo amministratore del sistema.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Suddividere il contenuto di un testo su più pagine&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Come suddividere il contenuto di un articolo su piu&#39; pagine. &lt;br /&gt;
Immaginiamo di avere un articolo lungo tante righe e lo vogliamo suddividere in 
piu pagine, quello che dobbiamo fare e&#39; mettere dei caratteri speciali ,ad 
esempio &quot;[++]&quot; nel punto in cui vogliamo che vi sia una nuova pagina.&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
$articolo=&quot;Le pagine di un sito web devono essere ottimizzate al fine&lt;br /&gt;
di renderle idonee ad una corretta registrazione sui motori di ricerca.&lt;br /&gt;
L’ottimizzazione si ottiene analizzando, ed eventualmente modificando, [++]&lt;br /&gt;
sia i contenuti di ogni singola pagina sia la struttura globale&lt;br /&gt;
del sito. Proprio per evitare di dover modificare l’impostazione [++]&lt;br /&gt;
di molte pagine è bene tenere in considerazione fin dall’inizio della 
progettazione&lt;br /&gt;
del sito quali dovranno essere gli accorgimenti&lt;br /&gt;
utili in funzione del posizionamento nei motori di ricerca.&quot;;&lt;br /&gt;
// Suddivido il testo in piu&#39; testi troncandolo quando trovo [++]&lt;br /&gt;
$pagine = explode(&quot;[++]&quot;, $articolo);&lt;br /&gt;
// Definisco la variabile che ci dice la pagina da visualizzare&lt;br /&gt;
$pagina = $_GET[&#39;pagina&#39;];&lt;br /&gt;
// Se la pagina non e&#39; stata ancora divisa, assegna il valore 1&lt;br /&gt;
if(strlen($pagina&amp;lt;=0)) $pagina = 1;&lt;br /&gt;
//setto l&#39;indice corretto&lt;br /&gt;
$indice= $pagina - 1;&lt;br /&gt;
// Stampo la pagina richiesta&lt;br /&gt;
echo $pagine[$indice].&quot;&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
//toale delle pagine&lt;br /&gt;
$totale=count($pagine) + 1;&lt;br /&gt;
//pagina attuale&lt;br /&gt;
$indice=$indice+1;&lt;br /&gt;
$tot=$totale-1;&lt;br /&gt;
echo &quot;&amp;lt;br&amp;gt;pagina $indice di $tot&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
// Sistemo le pagine&lt;br /&gt;
echo&quot;vai a pagina:&quot;;&lt;br /&gt;
for ($i = 1; $i &amp;lt; $totale; $i++){&lt;br /&gt;
echo &quot;&amp;lt;a href=\&quot;&quot; . $_SERVER[&#39;php_self&#39;] . &quot;?pagina=$i\&quot;&amp;gt;$i&amp;lt;/a&amp;gt; &quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=============================&lt;br /&gt;
$result = mysql_query(&quot;SELECT racconto FROM campagnaunica&quot;);&lt;br /&gt;
//eventualmente aggiungi una clausola where alla query&lt;br /&gt;
&lt;br /&gt;
if (!$result) {echo &quot;query non valida&quot;;}&lt;br /&gt;
$racconto = mysql_fetch_array($result);&lt;br /&gt;
&lt;br /&gt;
//adesso puoi dividere come vuoi attraverso la funzione substr()&lt;br /&gt;
for ($i = 0; i &amp;lt; (strlen($racconto)/50); $i++) { &lt;br /&gt;
echo substr($racconto, $i * 50, 50);&lt;br /&gt;
}&lt;br /&gt;
=============================&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Suddividere dinamicamente un testo su più pagine&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;In questo articolo vedremo come suddividere un testo su più pagine.&lt;br /&gt;
Questo non è l&#39;unico modo per farlo... ma è un metodo piuttosto efficace e molto 
semplice da utilizzare.&lt;br /&gt;
Nel nostro esempio inseriamo il testo che vogliamo suddividere all&#39;interno di 
una variabile che chiameremo $testo (che fantasia!).&lt;br /&gt;
Ecco un esempio:&lt;br /&gt;
$testo = &quot;&amp;lt;b&amp;gt;Pag 1:&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;Ciao, tutto bene?&amp;lt;br /&amp;gt;Sì... tutto a posto![NP]&quot;;&lt;br /&gt;
$testo .= &quot;&amp;lt;b&amp;gt;Pag 2:&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;Ciao, dove vivi?&amp;lt;br /&amp;gt;A Milano![NP]&quot;;&lt;br /&gt;
$testo .= &quot;&amp;lt;b&amp;gt;Pag 3:&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;Ciao, sei innamorato?&amp;lt;br /&amp;gt;Moltissimo!&quot;;&lt;br /&gt;
Come avrete notato, oltre ad alcuni tag html, nel testo troviamo 2 volte la 
scritta &quot;[NP]&quot; (dove NP sta per &quot;Nuova Pagina&quot;), ed è proprio questa piccola 
scritta che ci permetterà, col metodo che andiamo ora a vedere, di suddividere 
in più pagine il nostro testo!&lt;br /&gt;
Ora vediamo il codice che farà il lavoro:&lt;br /&gt;
// Suddivido il testo sulla base delle occorrenze di [NP]&lt;br /&gt;
$tot_pages = explode(&quot;[NP]&quot;, $testo);&lt;br /&gt;
// Definisco la variabile che ci dice la pagina da visualizzare&lt;br /&gt;
$page = $_GET[&#39;page&#39;];&lt;br /&gt;
// Se $page non è valorizzata o non è numerica le assegno il valore di 1&lt;br /&gt;
if (!$page || !is_numeric($page)) { $page = 1; }&lt;br /&gt;
// Stampo la pagina richiesta&lt;br /&gt;
echo &quot;&amp;lt;p&amp;gt;&quot; . $tot_pages[$page - 1] . &quot;&amp;lt;/p&amp;gt;&quot;&lt;br /&gt;
// Creo i link per la navigazione delle diverse pagine&lt;br /&gt;
for ($i = 1; $i &amp;lt; count($tot_pages) + 1; $i++)&lt;br /&gt;
{&lt;br /&gt;
if ($i == $page) {&lt;br /&gt;
echo &quot;&amp;lt;b&amp;gt;$i&amp;lt;/b&amp;gt; &quot;;&lt;br /&gt;
}else{&lt;br /&gt;
echo &quot;&amp;lt;a href=\&quot;&quot; . $_SERVER[&#39;php_self&#39;] . &quot;?page=$i\&quot;&amp;gt;$i&amp;lt;/a&amp;gt; &quot;;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
Lo script è davvero molto semplice: il motore del nostro codice è la funzione 
nativa explode che suddivide il nostro testo sulla base del separatore 
specificato creando una array. Fatto questo non resta che creare una semplice 
paginazione che ci consenta di visualizzare di volta in volta singoli elementi 
della nostra array corrispondenti, appunto, alla pagina selezionata.&lt;br /&gt;
==============================&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Dividere il testo dopo tot parole senza spezzare la frase&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Qui di seguito vi mostro come poter tagliare un testo dopo tot lettere 
senza dividere la parola&lt;br /&gt;
/**&lt;br /&gt;
tronca il testo senza tagliare la parola&lt;br /&gt;
*/&lt;br /&gt;
function troncaTesto($testo, $caratteri=40) {&lt;br /&gt;
if (strlen($testo) &amp;lt;= $caratteri) return $testo;&lt;br /&gt;
$nuovo = wordwrap($testo, $caratteri, &quot;|&quot;);&lt;br /&gt;
$nuovotesto=explode(&quot;|&quot;,$nuovo);&lt;br /&gt;
return $nuovotesto[0].&quot;...&quot;;&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
$nuovoTesto = troncaTesto($descrizione, 150);&lt;br /&gt;
echo $nuovoTesto;&lt;br /&gt;
*/&lt;br /&gt;
?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Creare un database di testo in PHP&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Spesso potremmo aver necessità di utilizzare un database. Tuttavia, se 
si tratta di un piccolo script che non useremo spesso, invece di andare a creare 
tabelle su MySQL, possiamo utilizzare un semplice file di testo e andare a 
scrivere e leggere delle stringhe.&lt;br /&gt;
E’ chiaro che le limitazioni sono molte:&lt;br /&gt;
* deve trattarsi di una mole di dati molto piccola&lt;br /&gt;
* è più macchinoso scrivere e leggere&lt;br /&gt;
* non si possono fare query&lt;br /&gt;
Può comunque tornare utile ed è un buon punto di partenza per imparare a 
manipolare i file di testo con PHP.&lt;br /&gt;
Vediamo allora passo dopo passo come fare.&lt;br /&gt;
Aprire un file di testo: fopen()&lt;br /&gt;
La funzione fopen() apre un collegamento tra una risorsa, indicata dal parametro 
filename, ed un flusso:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$handle = fopen(&quot;/home/rasmus/file.txt&quot;,&quot;r&quot;);&lt;br /&gt;
$handle = fopen(&quot;/home/rasmus/file.gif&quot;,&quot;wb&quot;);&lt;br /&gt;
$handle = fopen(&quot;http://www.example.com/&quot;,&quot;r&quot;);&lt;br /&gt;
$handle = fopen(&quot;ftp://user:password@example.com/somefile.txt&quot;,&quot;w&quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Utilizzeremo fopen() per aprire il nostro database di testo.&lt;br /&gt;
Scrivere un file di testo: fwrite()&lt;br /&gt;
Sintassi: int fwrite ( resource $handle , string $string [, int $length ] )&lt;br /&gt;
Questa funzione scrive il contenuto di string nel flusso del file puntato da 
handle. Se l’argomento length è specificato, la scrittura si arresterà dopo aver 
scritto length byte o alla fine di string se si verificasse prima:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$filename = &#39;test.txt&#39;;&lt;br /&gt;
$somecontent = &quot;Aggiunge questa riga al file\n&quot;;&lt;br /&gt;
// Verifica che il file esista e sia riscrivibile&lt;br /&gt;
if (is_writable($filename)) {&lt;br /&gt;
// In questo esempio apriamo $filename in append mode.&lt;br /&gt;
// Il puntatore del file è posizionato in fondo al file&lt;br /&gt;
// è qui che verrà posizionato $somecontent quando eseguiremo fwrite().&lt;br /&gt;
if (!$handle = fopen($filename, &#39;a&#39;)) {&lt;br /&gt;
echo &quot;Non si riesce ad aprire il file ($filename)&quot;;&lt;br /&gt;
exit;&lt;br /&gt;
}&lt;br /&gt;
// Scrive $somecontent nel file aperto.&lt;br /&gt;
if (!fwrite($handle, $somecontent) === FALSE) {&lt;br /&gt;
echo &quot;Non si riesce a scrivere nel file ($filename)&quot;;&lt;br /&gt;
exit;&lt;br /&gt;
}&lt;br /&gt;
echo &quot;Riuscito, scritto ($somecontent) nel file ($filename)&quot;;&lt;br /&gt;
fclose($handle);&lt;br /&gt;
} else {&lt;br /&gt;
echo &quot;Il file $filename non è accessibile&quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Ecco, con queste poche righe di codice abbiamo già creato uno script che 
aggiunge una frase al file test.txt.&lt;br /&gt;
Dobbiamo notare però, che i file si possono aprire con fopen() in diversi modi 
(nello script proposto si apre in sola letture alla fine del file).&lt;br /&gt;
Leggere un file di testo: fread()&lt;br /&gt;
La funzione fread() estrae un numero di byte dal file di testo (.txt).&lt;br /&gt;
Esempio:&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
$file = fopen(&quot;test.txt&quot;,&quot;r&quot;);&lt;br /&gt;
$buffer = fread($file, 20);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
In questo caso abbiamo aperto un file di testo (test.txt) solo per leggerlo (r) 
ed abbiamo estratto 20 byte.&lt;br /&gt;
Per leggere tutto il file dobbiamo scrivere in questo modo:&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
$file = fopen(&quot;test.txt&quot;,&quot;r&quot;);&lt;br /&gt;
$buffer = fread($file, filesize(&quot;test.txt&quot;));&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Dove la funzione filesize() restituisce la grandezza totale del file.&lt;br /&gt;
Andare a capo: nl2br()&lt;br /&gt;
La funzione aggiunge un &amp;lt;br /&amp;gt; quando trova un ritorno a capo nel file di testo.&lt;br /&gt;
Esempio:&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
$file = fopen(&quot;test.txt&quot;, &quot;r&quot;);&lt;br /&gt;
$leggi = fread($file, filesize(&quot;test.txt&quot;));&lt;br /&gt;
$content = nl2br($leggi);&lt;br /&gt;
fclose($file);&lt;br /&gt;
echo $content;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Creiamo il nostro database testuale&lt;br /&gt;
Vediamo ora come applicare il tutto in un semplice database di testo.&lt;br /&gt;
Nel file test.txt inseriamo i dati nel seguente formato:&lt;br /&gt;
Nome:Cognome:email&lt;br /&gt;
Vediamo allora come leggere ed interpretare il file di testo:&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
$percorso = file(&quot;test.txt&quot;);&lt;br /&gt;
while(list(,$value) = each($percorso)){&lt;br /&gt;
list($nome, $cognome, $email) = split(&quot;[:]&quot;, $value);&lt;br /&gt;
#Usiamo trim() per eliminare eventuali spazi vuoti&lt;br /&gt;
$params[&quot;nome&quot;] = trim($nome);&lt;br /&gt;
$params[&quot;cognome&quot;] = trim($cognome);&lt;br /&gt;
$params[&quot;email&quot;] = trim($email);&lt;br /&gt;
#Stampiamo i risultati a video&lt;br /&gt;
echo $params[&quot;nome&quot;].&quot; - &quot;.$params[&quot;cognome&quot;].&quot; - &quot;.$params[&quot;email&quot;]. &quot;&amp;lt;br /&amp;gt;&quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Ma se non siamo soddisfatti e vogliamo fare il tutto in automatico, possiamo 
creare un form simile:&lt;br /&gt;
codice form insert.php&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form method=&quot;post&quot; action=&quot;insert2.php&quot;&amp;gt;&lt;br /&gt;
&amp;lt;fieldset&amp;gt;&lt;br /&gt;
&amp;lt;legend&amp;gt;Inserimento dati&amp;lt;/legend&amp;gt;&lt;br /&gt;
Nome: &amp;lt;input type=&quot;text&quot; name=&quot;nome&quot; /&amp;gt;&lt;br /&gt;
Cognome: &amp;lt;input type=&quot;text&quot; name=&quot;cognome&quot; /&amp;gt;&lt;br /&gt;
E-mail: &amp;lt;input type=&quot;text&quot; name=&quot;email&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/fieldset&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;submit&quot; value=&quot;Calcola&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
… per poi richiamarli da questa pagina e scriverli sul “database”:&lt;br /&gt;
script php insert2.php&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
$nome = $_POST[&#39;nome&#39;];&lt;br /&gt;
$cognome = $_POST[&#39;cognome&#39;];&lt;br /&gt;
$email = $_POST[&#39;email&#39;];&lt;br /&gt;
$somecontent = $nome.&quot;-&quot;.$cognome.&quot;-&quot;.$email.&quot;&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
$somecontent .= &quot;\r\n&quot;;&lt;br /&gt;
$myFile = &quot;test.txt&quot;;&lt;br /&gt;
$fh = fopen($myFile, &#39;at&#39;);&lt;br /&gt;
fwrite($fh, $somecontent);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Ovviamente questo script è altamente sconsigliato nel caso si abbia una grande 
mole di dati o per fare query particolarmente complesse. Si presta invece 
ottimamente per salvare piccole quantità di dati strutturati, in modo da 
renderli persistenti anche senza un database.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Realizzare contatore per i click&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Ecco un tutorial che realizzato soprattutto per le persone che non hanno 
un account MySql e vogliono sapere quante click hanno ricevuto su un determinato 
link. Ecco il codice:&lt;br /&gt;
$i; $i++)&lt;br /&gt;
{&lt;br /&gt;
$links[$i] = str_replace(&quot;\n&quot;, &quot;&quot;, $links[$i]);&lt;br /&gt;
$result = explode(&quot;|&quot;, trim($links[$i]));&lt;br /&gt;
&lt;br /&gt;
if ($result[1] == $link)&lt;br /&gt;
{&lt;br /&gt;
$result[2] = $result[2]+1;&lt;br /&gt;
fputs($fp, &quot;$result[0]|$result[1]|$result[2]&quot; . &quot;\n&quot;);&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
fputs($fp, $links[$i] . &quot;\n&quot;);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
fclose($fp);&lt;br /&gt;
header(&quot;Location: &quot; . $link);&lt;br /&gt;
}&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Cambio immagine a ogni aggiornamento di pagina&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Utile e semplice script che permetterà di visualizzare un’immagine 
diversa ogni volta che la pagina sarà aggiornata. Questa funzione e possibile 
eseguirla anche con Javascript, oggi scoprirete il codice per farla con Php:&lt;br /&gt;
?PHP&lt;br /&gt;
#Creiamo la funzione Random Pic &lt;br /&gt;
function random_pic() &lt;br /&gt;
{ &lt;br /&gt;
#Creiamo una array con tutte le nostre immagini&lt;br /&gt;
$PIC[] = &quot;picture-1.jpg&quot;; &lt;br /&gt;
$PIC[] = &quot;picture-2.jpg&quot;;&lt;br /&gt;
$PIC[] = &quot;picture-3.jpg&quot;;&lt;br /&gt;
$PIC[] = &quot;picture-4.jpg&quot;;&lt;br /&gt;
$PIC[] = &quot;picture-5.jpg&quot;;&lt;br /&gt;
$PIC[] = &quot;picture-6.jpg&quot;;&lt;br /&gt;
$PIC[] = &quot;picture-7.jpg&quot;;&lt;br /&gt;
#Contiamo gli elementi presenti nella array&lt;br /&gt;
$tot_PIC = count($PIC); &lt;br /&gt;
#Creiamo la procedura randomica&lt;br /&gt;
$tot_PIC = $tot_PIC - 1; &lt;br /&gt;
$RandomNum = rand(0,$tot_PIC); &lt;br /&gt;
$My_PIC= $PIC[$RandomNum]; &lt;br /&gt;
#Stampiamo a video l&#39;immagine selezionata randomicamente&lt;br /&gt;
print (&quot;&amp;lt;img border=&#39;0&#39; src=&#39;immagini/&quot;. $My_PIC .&quot;&#39;&amp;gt;&quot;);&lt;br /&gt;
} &lt;br /&gt;
#Richiamiamo la funzione...&lt;br /&gt;
random_pic(); &lt;br /&gt;
? &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;E&#39; possibile evitare che gli utenti del mio sito inseriscano caratteri dannosi attraverso i miei form?&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Sì, certo.&lt;br /&gt;
PHP prevede una funzione apposita:&lt;br /&gt;
$stringa = HTMLspeciachars($stringa)&lt;br /&gt;
In questo modo verranno resi innocui tutti i caratteri html eventualmente inseriti all‘interno della stringa proveniente dal
form.Data e Ora&lt;br /&gt;
La data e l&#39;ora è quella del momento in cui il server invia la pagina al 
browser, quindi con il ricarico della pagina si aggiorna anche il risultato.&lt;br /&gt;
Codice: &amp;lt;?php echo date(&quot;d M Y - H:i:s&quot;);?&amp;gt;&lt;br /&gt;
Risultato: 09 Apr 2005 - 10:40:27&lt;br /&gt;
Siccome la data e l&#39; ora può essere espressa in molteplici modi, un completo 
tutorial è presente su questa pagina sul sito ufficale Php (http://www.php.net)&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Indirizzo Ip&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;L&#39; indirizzo IP è un identificativo numerico a 32 bit che serve a 
identificare in maniera univoca un computer connesso alla rete internet. In 
genere sono costituiti da quattro gruppi di cifre decimali ciascuno dei quali è 
compreso tra 0 e 255 separati tra loro da un punto.&lt;br /&gt;
Codice: &amp;lt;?php echo $ip = getenv(&quot;REMOTE_ADDR&quot;);?&amp;gt;&lt;br /&gt;
Risultato: xxx.xxx.xxx.xxx (Questo è il tuo..)&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Nome pagina corrente&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Questo codice visualizza il nome della pagina (e suo percorso nel sito) 
che contiene il codice stesso.&lt;br /&gt;
Codice: &amp;lt;?php echo $PHP_SELF;?&amp;gt;&lt;br /&gt;
Risultato: /php-funzioni.php&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Browser Internet&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Browser internet o client web è un&#39; applicazione che tramite un 
interfaccia grafica, pulsanti ed icone permette e semplifica la navigazione in 
internet ovviamente il più famoso e funzionale di tutti è Internet Explorer 
anche se il neonato Mozilla Firefox sembra avere un altrettanto roseo futuro, 
questo è un personale parere del tutto opinabile.&lt;br /&gt;
Codice: &amp;lt;?php echo $browser = getenv(&quot;HTTP_USER_AGENT&quot;);?&amp;gt;&lt;br /&gt;
Risultato: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) (Questo è il 
tuo..)&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Linguaggio Browser&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Si può usare questa informazione ottenibile con questo semplice stringa 
di codice Php quando ad esempio di un sito web se ne dispone la traduzione in 
più lingue e si vorrebbe che al visitatore venisse visualizzata direttamente 
quella nella propria e non dover lasciare a lui l&#39; onere di dover cliccare sul 
link giusto (la solita bandierina). Va detto però che sono pochi gli utenti che 
settano correttamente questa funzione nel loro browser, alcuni cancellano 
addirittura tutte le lingue come se questo servisse a identificarli (il termine 
fobia vi dice nulla!?!).&lt;br /&gt;
Codice: &amp;lt;?php echo $HTTP_ACCEPT_LANGUAGE;?&amp;gt;&lt;br /&gt;
Risultato: it (Questo è il tuo)&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Nome Host&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Il nome host è il nome del computer (provider) che vi fornisce la 
connessione ad internet (se non presente verrà visualizzato il solo numero Ip).&lt;br /&gt;
Codice: &amp;lt;?php echo $host = gethostbyaddr($REMOTE_ADDR);?&amp;gt;&lt;br /&gt;
Risultato: xxxxxxxxxxxx.it (Questo è il tuo)&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Ultimo Aggiornamento&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Se aggiornate spesso la vostra pagina web e volete che la data venga 
visualizzata sulla pagina, questa stringa di codice può venirvi utile.&lt;br /&gt;
Codice:&amp;lt;?php echo date( &quot;d.m.Y h:i:s&quot;, getlastmod() );?&amp;gt;&lt;br /&gt;
Risultato: 02.04.2005 06:28:34&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Upload dei file&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
Se gestisci un sito web, e vuoi dare la possibilità ai tuoi utenti di inviare 
file in una specifica locazione, bastano poche righe di codice PHP per risolvere 
il tuo problema.&lt;br /&gt;
Bisogna crearsi due pagine una contenente il form in ci l&#39;utente selezionerà il 
file da inviare (upload.php) e un&#39;altra in cui l&#39;upload verrà effettuato 
fisicamente (verifica.php).&lt;br /&gt;
Nella pagina upload.php, dobbiamo appunto costruirci la form con cui l&#39;utente 
può selezionare il file da inviare, la pagina conterrà il codice:&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form method=post action=&quot;verifica.php&quot; enctype=&quot;multipart/form-data&quot;&amp;gt;&lt;br /&gt;
Inserisci il nome del file da inviare:&lt;br /&gt;
&amp;lt;input type=file name=&quot;uploadfile&quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;submit&quot; value=&quot;Invia&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
Nella pagina verifica.php, inseriremo il codice:&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &quot;&amp;lt;pre&amp;gt;&quot;;&lt;br /&gt;
echo &quot;Nome del file creato all&#39;invio: $uploadfile&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
echo &quot;Nome originale del file: $uploadfile_name&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
echo &quot;Dimensioni del file in byte: $uploadfile_size&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
echo &quot;Tipo di file: $uploadfile_type&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
echo &quot;&amp;lt;/pre&amp;gt;&quot;;&lt;br /&gt;
//Adesso controlliamo se c&#39;è veramente un file&lt;br /&gt;
if($uploadfile == &quot;none&quot;)&lt;br /&gt;
{&lt;br /&gt;
echo &quot;Non sono stati iniati file&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
exit;&lt;br /&gt;
}&lt;br /&gt;
//Contollo le dimensioni&lt;br /&gt;
//Se meno di 3MB lo invio&lt;br /&gt;
if($uploadfile_size &amp;lt; 3145728)&lt;br /&gt;
{&lt;br /&gt;
if(copy($uploadfile,&quot;percorsoscelto/uploadfile_name&quot;))&lt;br /&gt;
{&lt;br /&gt;
echo &quot;Invio del file riuscito&quot;;&lt;br /&gt;
//Disalloco il file temporaneo&lt;br /&gt;
unlink($uploadfile);&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
echo &quot;Invio fallito&quot;;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
echo &quot;Invio fallito. Il file non può superare i 3 MB&quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
Le righe in rosso verranno ignorate in quanto commenti.&lt;br /&gt;
Come avete visto, basta poco per realizzare un form che permette di inviare un 
file, tutto gioca su una variabile che abbiamo creato nella pagina upload.php:&lt;br /&gt;
$uploadfile&lt;br /&gt;
Da questa variabile abbiamo poi le variabili:&lt;br /&gt;
$uploadfile_name (nome della variabile ricevuta)&lt;br /&gt;
$uploadfile_size (dimensioni della variabile)&lt;br /&gt;
$uploadfile_type (Il tipo di file che stiamo inviando)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Creare un guestbook&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
costruire un libro degli ospiti, meglio conosciuto come Guestbook.&lt;br /&gt;
Cominciamo con l&#39;aprire il nostro editor e a salvare il primo file, chiamandolo 
config.php e inserendoci questo codice:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$msg_per_page = 5;&lt;br /&gt;
$mysql[&#39;host&#39;] = &quot;&quot;;&lt;br /&gt;
$mysql[&#39;pass&#39;] = &quot;&quot;;&lt;br /&gt;
$mysql[&#39;user&#39;] = &quot;&quot;;&lt;br /&gt;
$mysql[&#39;name&#39;] = &quot;&quot;;&lt;br /&gt;
@mysql_connect($mysql[&#39;host&#39;], $mysql[&#39;user&#39;], $mysql[&#39;pass&#39;]);&lt;br /&gt;
@mysql_select_db($mysql[&#39;name&#39;]);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
La prima variabile, $msg_per_page, ci serve per indicare il numero di messaggi 
che si vogliono visualizzare per ogni pagina; ovviamente, il numero è 
arbitrario, ma lasciatevi dare un consiglio... non alzate troppo la cifra 
altrimenti chi non ha connessioni veloci potrebbe aver difficolt? alla 
visualizzazione della pagina.&lt;br /&gt;
La seconda variabile, $mysql, è un array, e ci serve per indicare i dati del 
nostro database MySQL.&lt;br /&gt;
In questo file non sono presenti altre variabili, ma già incontriamo due 
funzioni: mysql_connect() e mysql_select_db().&lt;br /&gt;
Come è facile intuire le due funzioni sono legate a MySQL, infatti, la prima 
serve per la connessione al server e la seconda per selezionare il database che 
si vuole usare.&lt;br /&gt;
Passiamo ora alla creazione della tabella nel database MySQL.&lt;br /&gt;
Aprire un nuovo documento vuoto e inserire all&#39;intorno questo codice:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require(&quot;config.php&quot;);&lt;br /&gt;
@mysql_query(&quot;DROP TABLE IF EXISTS gbook&quot;);&lt;br /&gt;
@mysql_query(&quot;CREATE TABLE gbook (&lt;br /&gt;
`id` INT(11) DEFAULT &#39;0&#39; NOT NULL AUTO_INCREMENT,&lt;br /&gt;
`nome` VARCHAR(255) NOT NULL,&lt;br /&gt;
`email` VARCHAR(255) NOT NULL,&lt;br /&gt;
`url` VARCHAR(255),&lt;br /&gt;
`messaggio` TEXT NOT NULL,&lt;br /&gt;
`ip` VARCHAR(255) NOT NULL,&lt;br /&gt;
PRIMARY KEY (`id`)&lt;br /&gt;
);&quot;);&lt;br /&gt;
echo &quot;Operazione avvenuta con successo !!\n&quot;;&lt;br /&gt;
@mysql_close();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Non ci sono variabili ma sono presenti due query al database, la prima ci serve 
per cancellare la tabella se esiste già, la seconda per crearla.&lt;br /&gt;
Fatte attenzione, la tabella che serve a noi, si chiama &quot;gbook&quot;, e se esiste già 
verrà cancellata e tutti i dati presenti verrano cancellati e non saranno 
recuperabili in alcun modo.&lt;br /&gt;
Dopo aver visto la parte di configurazione, cominciamo ad entrare nel vivo 
dell&#39;applicazione.&lt;br /&gt;
Ora, aprire un nuovo documento vuoto e salvarlo come: leggi.php ed ecco il 
codice che dovrà contenere:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require(&quot;config.php&quot;);&lt;br /&gt;
$count_mess = @mysql_query(&quot;SELECT COUNT(id) FROM gbook&quot;);&lt;br /&gt;
$res_count = @mysql_fetch_array($count_mess);&lt;br /&gt;
if ($res_count[0] == FALSE) {&lt;br /&gt;
echo &quot;Nessun messaggio ? stato inserito nel database&quot;;&lt;br /&gt;
} else {&lt;br /&gt;
$tot_pages = ceil($res_count[0]/$msg_per_page);&lt;br /&gt;
$curr_page = (!$_GET[&#39;page&#39;]) ? 1 : (int)$_GET[&#39;page&#39;];&lt;br /&gt;
$primo = ($curr_page - 1) * $msg_per_page;&lt;br /&gt;
$query = mysql_query(&quot;SELECT * FROM gbook ORDER BY id DESC LIMIT $primo,$msg_per_page&quot;);&lt;br /&gt;
while($result = mysql_fetch_array($query)) {&lt;br /&gt;
$result[&#39;messaggio&#39;] = str_replace(&quot;\n&quot;, &quot;&amp;lt;br&amp;gt;&quot;, $result[&#39;messaggio&#39;]);&lt;br /&gt;
echo &quot; &amp;lt;strong&amp;gt;? Nome:&amp;lt;/strong&amp;gt; &quot; . $result[&#39;nome&#39;] . &quot;&amp;lt;br&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;strong&amp;gt;? E-Mail:&amp;lt;/strong&amp;gt; &amp;lt;a href=\&quot;mailto:&quot; . $result[&#39;email&#39;] . &quot;\&quot;&amp;gt;&quot; 
. $result[&#39;email&#39;] . &quot;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;strong&amp;gt;? URL:&amp;lt;/strong&amp;gt; &amp;lt;a href=\&quot;&quot; . $result[&#39;url&#39;] . &quot;\&quot;&amp;gt;&quot; . $result[&#39;url&#39;] 
. &quot;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;strong&amp;gt;? Messaggio:&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt; &quot; . $result[&#39;messaggio&#39;] . &quot;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;hr&amp;gt;\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
for($page = 1; $page &amp;lt;= $tot_pages; $page++) {&lt;br /&gt;
if($page == $curr_page) {&lt;br /&gt;
$pag .= &quot;&amp;lt;strong&amp;gt;$page&amp;lt;/strong&amp;gt; &quot;;&lt;br /&gt;
} else {&lt;br /&gt;
$pag .= &quot;&amp;lt;a href=\&quot;?page=$page\&quot;&amp;gt;$page&amp;lt;/a&amp;gt; &quot;;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
echo $pag . &quot;&amp;lt;br&amp;gt;\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
echo &quot;&amp;lt;a href=\&quot;firma.php\&quot;&amp;gt;Firma il Guestbook&amp;lt;/a&amp;gt;&quot;;&lt;br /&gt;
@mysql_close();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Questo file servirà per visualizzare tutti i messaggi degli utenti.&lt;br /&gt;
Le prime due variabili, $count_mess e $res_count, ci serviranno per impaginare 
correttamente i messaggi presenti nel database.&lt;br /&gt;
Appena dopo queste due variabili ci troviamo davanti ad un if(), questo 
controllo ci è utile per vedere se sono presenti o meno messaggi nel database, 
se ce ne sono li stampa a video, in caso contrario viene fuori un messaggio di 
allerta.&lt;br /&gt;
Ora incontriamo tre variabile, che, anchesse servono per l&#39;impaginazione dei 
messaggi.&lt;br /&gt;
Ed ecco finalmente che arriviamo alla parte &#39;importante&#39; dello script.&lt;br /&gt;
Incontriamo subito la variabile $query che, tramite la funzione mysql_query() di 
php ci permette di inviare un &#39;comando&#39; al database.&lt;br /&gt;
Subito dopo si nota un ciclo while() che serve per stampare a video il tutto.&lt;br /&gt;
Infine, stampiamo a video tutte le pagine tramie un ciclo for() e chiudiamo la 
connessione al database MySQL.&lt;br /&gt;
Nell&#39;articolo precedente abbiamo visto come leggere i messaggi presenti nel 
database, ora vedremo come inserirli.&lt;br /&gt;
Creiamo un file chiamato firma.php e inseriamoci questo codice:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require(&quot;config.php&quot;);&lt;br /&gt;
if ($_POST[&#39;sign&#39;] == FALSE) {&lt;br /&gt;
echo &quot; &amp;lt;form action=\&quot;firma.php\&quot; method=\&quot;POST\&quot;&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;strong&amp;gt;- Nome *&amp;lt;/strong&amp;gt; &amp;lt;input type=\&quot;text\&quot; name=\&quot;nome\&quot;&amp;gt;&amp;lt;br&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;strong&amp;gt;- E-Mail *&amp;lt;/strong&amp;gt; &amp;lt;input type=\&quot;text\&quot; name=\&quot;email\&quot;&amp;gt;&amp;lt;br&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;strong&amp;gt;- URL&amp;lt;/strong&amp;gt; &amp;lt;input type=\&quot;text\&quot; name=\&quot;url\&quot;&amp;gt;&amp;lt;br&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;strong&amp;gt;- Messaggio *&amp;lt;/strong&amp;gt; &amp;lt;textarea name=\&quot;messaggio\&quot; cols=\&quot;35\&quot; 
rows=\&quot;10\&quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;br&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;input type=\&quot;hidden\&quot; name=\&quot;sign\&quot; value=\&quot;true\&quot;&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;input type=\&quot;submit\&quot; value=\&quot; Firma! \&quot;&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;/form&amp;gt;\n&quot;;&lt;br /&gt;
} else {&lt;br /&gt;
@mysql_query(&quot;INSERT INTO gbook (`id`, `nome`, `email`, `url`, `messaggio`, 
`ip`)&lt;br /&gt;
VALUES (&#39;&#39;, &#39;&quot; . $_POST[&#39;nome&#39;] . &quot;&#39;,&lt;br /&gt;
&#39;&quot; . $_POST[&#39;email&#39;] . &quot;&#39;,&lt;br /&gt;
&#39;&quot; . $_POST[&#39;url&#39;] . &quot;&#39;,&lt;br /&gt;
&#39;&quot; . $_POST[&#39;messaggio&#39;] . &quot;&#39;,&lt;br /&gt;
&#39;&quot; . $_SERVER[&#39;REMOTE_ADDR&#39;] . &quot;&#39;);&quot;);&lt;br /&gt;
echo &quot;Grazie per aver firmato il nostro Guestbook&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
echo &quot;&amp;lt;a href=\&quot;leggi.php\&quot;&amp;gt;Leggi i messaggi&amp;lt;/a&amp;gt;\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
@mysql_close();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
In questa parte del codice salta subito agli occhi che c&#39;è un if(), che serve 
per controllare se una variabile è esistente o meno.&lt;br /&gt;
In caso positivo, inserisce il messaggio nel database tramite una query con la 
funzione mysql_query(), altrimenti visualizza il form.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Realizzare un sondaggio&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Questo tutorial, vi mostra come creare un semplice ed utile sondaggio da 
inserire nel vostro sito, così potrete conoscere le opinioni dei vostri 
visitatori.&lt;br /&gt;
Per questo tutorial abbiamo bisogno di 3 files.&lt;br /&gt;
1. poll_global.php: Questo file contiene le informazioni per la connessione al 
database.&lt;br /&gt;
2. poll_main.php: Questa è la pagina che i visitatori vedono e nella quale 
votano.&lt;br /&gt;
3. poll_send.php: Questa è la pagina dei ringraziamenti.&lt;br /&gt;
Ho cercato di scrivere il codice più chiaro possibile, inserendo anche dei 
commenti per una migliore comprensione.&lt;br /&gt;
&lt;u&gt;poll_global.php&lt;br /&gt;
&lt;/u&gt;&amp;lt;?&lt;br /&gt;
include(&quot;config.php&quot;);&lt;br /&gt;
//Connessione al database&lt;br /&gt;
@ $db = mysql_pconnect(&quot;$dbhost&quot;,&quot;$dbuname&quot;,&quot;$dbpass&quot;);&lt;br /&gt;
//Messaggio di errore nel caso che non avvenga una corretta connessione al 
database&lt;br /&gt;
if (!$db)&lt;br /&gt;
{&lt;br /&gt;
echo &quot;&amp;lt;font color=&#39;red&#39;&amp;gt;&amp;lt;b&amp;gt;Impossibile collegarsi al database. Riprova più 
tardi!&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&quot;;&lt;br /&gt;
exit;&lt;br /&gt;
}&lt;br /&gt;
//Seleziono il database&lt;br /&gt;
mysql_select_db(&quot;$dbname&quot;, $db);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Questi sono i dati da inserire nel phpMyAdmin per creare la tabella per il 
nostro sondaggio.&lt;br /&gt;
CREATE TABLE vota (&lt;br /&gt;
ip varchar(15) NOT NULL default &#39;&#39;,&lt;br /&gt;
vote int(11) NOT NULL default &#39;0&#39;,&lt;br /&gt;
PRIMARY KEY (ip)&lt;br /&gt;
);&lt;br /&gt;
Se non sapete come fare per creare una tabella nel vostro database, utilizzate 
lo script qui sotto:&lt;br /&gt;
&lt;u&gt;poll_table.php&lt;br /&gt;
&lt;/u&gt;&amp;lt;?&lt;br /&gt;
include (&quot;poll_global.php&quot;);&lt;br /&gt;
$sql = &quot;CREATE TABLE `vota` ( `ip` VARCHAR( 15 ) NOT NULL , `vote` INT NOT NULL 
, PRIMARY KEY ( `ip` ) )&quot;;&lt;br /&gt;
$result = mysql_query($sql);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;u&gt;poll_main.php&lt;br /&gt;
&lt;/u&gt;&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;SONDAGGIO&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;&amp;lt;font color=&#39;#660066&#39;&amp;gt;Sondaggio!!&amp;lt;/font&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
//includo poll_global.php&lt;br /&gt;
include (&quot;poll_global.php&quot;);&lt;br /&gt;
//Qui viene acquisito l&#39;indirizzo IP dell&#39;utente&lt;br /&gt;
$ip = $_SERVER[REMOTE_ADDR];&lt;br /&gt;
//Selezioniamo l&#39;intero database&lt;br /&gt;
$sql = &quot;SELECT * FROM `database_table`&quot;;&lt;br /&gt;
$result = mysql_query($sql);&lt;br /&gt;
//Numero di voti presenti nel database&lt;br /&gt;
$number_of_vote = mysql_num_rows($result);&lt;br /&gt;
//Visualizziamo il numero di voti&lt;br /&gt;
echo &quot;&amp;lt;h3&amp;gt;There are &amp;lt;b&amp;gt;$number_of_vote&amp;lt;/b&amp;gt; votes&amp;lt;/h3&amp;gt;&quot;;&lt;br /&gt;
//Variabile contatore&lt;br /&gt;
$i = 0;&lt;br /&gt;
$score =0;&lt;br /&gt;
//Calcoliamo la media dei voti&lt;br /&gt;
While ($i &amp;lt; $number_of_vote)&lt;br /&gt;
{&lt;br /&gt;
$score = $score + mysql_result($result, $i, vote);&lt;br /&gt;
$i++;&lt;br /&gt;
}&lt;br /&gt;
//Visualizziamo la media dei voti&lt;br /&gt;
echo &quot;&amp;lt;h3&amp;gt;Average vote is &quot;. number_format($score/$number_of_vote, 1) 
.&quot;/5&amp;lt;/h3&amp;gt;&quot;;&lt;br /&gt;
//Se l&#39;utente ha già votato, apparirà un messaggio di errore&lt;br /&gt;
$i = 0;&lt;br /&gt;
While ($i &amp;lt; $number_of_vote)&lt;br /&gt;
{&lt;br /&gt;
if ($ip == mysql_result($result, $i, ip))&lt;br /&gt;
{&lt;br /&gt;
echo &quot;Hai già votato!!&quot;;&lt;br /&gt;
exit;&lt;br /&gt;
}&lt;br /&gt;
$i++;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
//Inizio Form&lt;br /&gt;
&amp;lt;form action=&quot;poll_send.php&quot; method=&quot;post&quot;&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
Cosa ne pensi di questo sito&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;radio&quot; name=&quot;vote&quot; value=&quot;5&quot; checked&amp;gt;&lt;br /&gt;
Bellissimo!!!(5/5)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;radio&quot; name=&quot;vote&quot; value=&quot;4&quot;&amp;gt; Interessante (4/5)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;radio&quot; name=&quot;vote&quot; value=&quot;3&quot;&amp;gt; Carino (3/5)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;radio&quot; name=&quot;vote&quot; value=&quot;2&quot;&amp;gt; Così così (2/5)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;radio&quot; name=&quot;vote&quot; value=&quot;1&quot;&amp;gt; Non mi piace (1/5)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;submit&quot; value=&quot;Vota&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;u&gt;poll_send.php&lt;br /&gt;
&lt;/u&gt;&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;SONDAGGIO&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
//Ricevo li valori delle variabili&lt;br /&gt;
$ip = $_SERVER[REMOTE_ADDR];&lt;br /&gt;
$vote = $HTTP_POST_VARS[&quot;vote&quot;];&lt;br /&gt;
//Includo poll_global.php&lt;br /&gt;
include (&quot;poll_global.php&quot;);&lt;br /&gt;
//Inserisco il voto nella tabella del database&lt;br /&gt;
$sql = &quot;INSERT INTO `database_name` ( `ip` , `vote` ) VALUES ( &#39;$ip&#39;, &#39;$vote&#39; 
)&quot;;&lt;br /&gt;
$result=mysql_query($sql);&lt;br /&gt;
//Ringrazio l&#39;utente per il suo voto e gli indico la pagina principale dei 
risultati&lt;br /&gt;
echo &quot;&amp;lt;h3&amp;gt;Grazie per aver votato!&amp;lt;br&amp;gt;&amp;lt;/h3&amp;gt;&quot;;&lt;br /&gt;
echo &quot;&amp;lt;h3&amp;gt;&amp;lt;a href=&#39;poll_main.php&#39;&amp;gt;Clicca qui&amp;lt;/a&amp;gt; per vedere i risultati del 
sondaggio!&amp;lt;/h3&amp;gt;&quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
Questo è tutto! Ricordati di inserire tutti i files nella stessa directory!&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Eseguire l&#39;upload di un file&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
Un&#39;altra delle operazioni molto frequenti è quella che concerne l&#39;upload di file 
online. Quando si parla di upload bisogna tenere in considerazione una serie di 
elementi per il corretto funzionamento dei propri script. Per prima cosa è 
necessario che il file php.ini sia configurato in modo da limitare correttamente 
le dimensioni dei file da caricare: se nella nostra applicazione è possibile 
effettuare l&#39;upload di file molto grossi, è necessario modificare la variabile 
di configurazione max_upload_size affinché il suo valore sia adatto alla nostra 
situazione.&lt;br /&gt;
In secondo luogo è importante ricordarsi che i form HTML che devono inviare i 
file devono avere l&#39;attributo enctype impostato a &quot;multipart/form-data&quot;, 
altrimenti i file non saranno inviati correttamente. Infine è bene ricordare che 
i file caricati non sono salvati all&#39;interno della variabile globale $_POST ma 
all&#39;interno di $_FILES, dalla quale saranno accessibili anche altre informazioni 
addizionali come il nome del file temporaneo locale in cui è stato salvato il 
file inviato, le dimensioni del file ed altro.&lt;br /&gt;
Vediamo nel dettagli come effettuare l&#39;upload di un file. Prima di tutto creiamo 
un semplice form HTML che si occuperà di richiedere all&#39;utente l&#39;inserimento di 
un file:&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;File upload&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form method=&quot;post&quot; action=&quot;testupload.php&quot; enctype=&quot;multipart/form-data&quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;upload&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;label&amp;gt;Carica il tuo file:&amp;lt;/label&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;file&quot; name=&quot;user_file&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;sumit&quot; value=&quot;Carica online&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
Tengo a precisare che potremmo specificare un campo di input nascosto chiamato 
MAX_FILE_SIZE avente come valore la dimensione massima in byte del file da 
caricare. Questo valore, anche se controllato sia dal browser che da PHP, non è 
comunque sicuro, dato che può essere facilmente aggirato. È buona norma 
effettuare sempre la validazione dei dati da PHP prima di salvarli o elaborarli 
per evitare spiacevoli sorprese.&lt;br /&gt;
Tornando a noi, passiamo alla creazione del file testupload.php:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
define(&quot;UPLOAD_DIR&quot;, &quot;./uploads/&quot;);&lt;br /&gt;
if(isset($_POST[&#39;action&#39;]) and $_POST[&#39;action&#39;] == &#39;upload&#39;)&lt;br /&gt;
{&lt;br /&gt;
if(isset($_FILES[&#39;user_file&#39;]))&lt;br /&gt;
{&lt;br /&gt;
$file = $_FILES[&#39;user_file&#39;];&lt;br /&gt;
if($file[&#39;error&#39;] == UPLOAD_ERR_OK and is_uploaded_file($file[&#39;tmp_name&#39;]))&lt;br /&gt;
{&lt;br /&gt;
move_uploaded_file($file[&#39;tmp_name&#39;], UPLOAD_DIR.$file[&#39;name&#39;]);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Queste poche righe di codice si occupano di controllare che i dati provenienti 
dalla pagina precedente siano corretti, controllano la validità del file 
caricato ed effettuano praticamente l&#39;upload salvando i dati ove necessario.&lt;br /&gt;
L&#39;array $_FILES permette di accedere ai seguenti valor:&lt;br /&gt;
* name: il nome del file caricato originariamente dall&#39;utente;&lt;br /&gt;
* tmp_name: il nome temporaneo del file salvato da PHP in una cartella locale;&lt;br /&gt;
* type: il mime type del file (nel caso in cui il browser fornisca questa 
informazione);&lt;br /&gt;
* size: le dimensioni in byte del file;&lt;br /&gt;
* error: un codice numerico che indica l&#39;eventuale errore durante il caricamento 
del file. Ad ogni numero possibile è associata una delle seguenti costanti:&lt;br /&gt;
o UPLOAD_ERR_OK (0): Non vi sono errori, l&#39;upload è stato eseguito con successo;&lt;br /&gt;
o UPLOAD_ERR_INI_SIZE (1): Il file inviato eccede le dimensioni specificate nel 
parametro upload_max_filesize di php.ini;&lt;br /&gt;
o UPLOAD_ERR_FORM_SIZE (2): Il file inviato eccede le dimensioni specificate nel 
parametro MAX_FILE_SIZE del form;&lt;br /&gt;
o UPLOAD_ERR_PARTIAL (3): Upload eseguito parzialmente;&lt;br /&gt;
o UPLOAD_ERR_NO_FILE (4): Nessun file è stato inviato;&lt;br /&gt;
o UPLOAD_ERR_NO_TMP_DIR (6): Mancanza della cartella temporanea;&lt;br /&gt;
Con tutte queste informazioni risulta molto semplice analizzare un&#39;operazione di 
upload e comportarsi di conseguenza. La funzione is_uploaded_file controlla che 
un file sia effettivamente uno di quelli caricati dall&#39;utente, mentre 
move_uploaded_file effettua fisicamente lo spostamento del file temporaneo nel 
fiel di destinazione specificato.&lt;br /&gt;
Aggiungendo alcuni accorgimenti sulle dimensioni ed impacchettando tutto in una 
libreria è possibile gestire in modo molto completo il caricamento di file 
online senza rischiare di incorrere in problemi o malfunzionamenti. Come sempre 
è importante ricordarsi che il path di destinazione di move_uploaded_file deve 
essere un path valido.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Gestione dei file in PHP&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
Di seguito riporto alcuner istruzioni su come gestire i file in php:&lt;br /&gt;
&lt;u&gt;Apertura file&lt;br /&gt;
&lt;/u&gt;&amp;lt;?&lt;br /&gt;
$file = fopen(nomefile.txt,&quot;r&quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Chiusura file&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
fclose($file);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;u&gt;Modalità di apertura&lt;br /&gt;
&lt;/u&gt;a Apre il file per accodare informazioni&lt;br /&gt;
a+ Apre il file per le leggere/accodare informazioni&lt;br /&gt;
r Apre il file per sola lettura&lt;br /&gt;
r+ Apre il file per lettura e scrittura&lt;br /&gt;
w Apre il file per sola scrittura&lt;br /&gt;
w+ Apre il file per scrittura/lettura&lt;br /&gt;
Se si usa&quot;a&quot; e &quot;r&quot; il file deve già esistere.&lt;br /&gt;
Verifica apertura file&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
if(!$file = fopen(nomefile.txt,&quot;r&quot;))&lt;br /&gt;
{&lt;br /&gt;
echo &quot;Errore apertura file&quot;;&lt;br /&gt;
exit;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;u&gt;Scrittura file&lt;br /&gt;
&lt;/u&gt;&amp;lt;?&lt;br /&gt;
fputs($file,&quot;Questo è un file scritto con PHP &quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Naturalmente al posto di una stringa, possiamo inserire una variabile che 
contiene il nostro testo.&lt;br /&gt;
Se si vogliono scrivere su più righe basta utilizzare:&lt;br /&gt;
&quot;\r\n&quot;&lt;br /&gt;
&lt;u&gt;Leggere un file&lt;br /&gt;
&lt;/u&gt;&amp;lt;?&lt;br /&gt;
$testofile = fgets($file,255);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Dove 255 sono i bytes da leggere&lt;br /&gt;
&lt;u&gt;Apertura file&lt;br /&gt;
&lt;/u&gt;&amp;lt;?&lt;br /&gt;
$file = fopen(nomefile.txt,&quot;r&quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;u&gt;Controlli sui file&lt;br /&gt;
&lt;/u&gt;&amp;lt;?&lt;br /&gt;
//Dimensioni di un file&lt;br /&gt;
filesize($file);&lt;br /&gt;
//Controllare se il file è una cartella&lt;br /&gt;
is_dir($file);&lt;br /&gt;
//Controllare se il file è ordinario&lt;br /&gt;
is_file($file);&lt;br /&gt;
//Controllare se è eseguibile&lt;br /&gt;
is_executable($file);&lt;br /&gt;
//Controllare se è leggibile&lt;br /&gt;
is_readble($file);&lt;br /&gt;
//Controlare se è scrivibile&lt;br /&gt;
is_writeable($file);&lt;br /&gt;
//Controllare il tipo&lt;br /&gt;
filetype($file);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;u&gt;Aprire e leggere i contenuti di una cartella&lt;/u&gt;&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
$lacartella = opendir(&#39;.&#39;);&lt;br /&gt;
while($file = readdir($lacartella)&lt;br /&gt;
{&lt;br /&gt;
$tutti_i_file[] = $file&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
In questo modo avremo un arrey con tutti i file contenuti nella cartella 
corrente.&lt;br /&gt;
Se non usiamo il ciclo la funzione readdir legge solo il primo file della 
directory.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Evitare la ridondanza dei dati in un database&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
Nella maggior parte degli script che girano sul web e non solo è spesso 
necessario evitare la ridonzanda dei dati.&lt;br /&gt;
Supponiamo ad esempio di dover gestire la tabella degli iscritti al nostro sito 
e di fare in modo che ogni utente abbia una sua e-mail che lo identifichi 
univocamente. Sarà pertanto necessario bloccare le iscrizioni degli altri utenti 
se questi provano a registrarsi con un&#39;indirizzo e-mail già esistente! Non a 
caso molte volte scegliendo l&#39;username per l&#39;iscrizione a un forum o a qualsiasi 
altro servizio vi sarà capitato di trovarvi con un messaggio del tipo &quot;Username 
già in uso. Sceglierne un altro&quot; e via discorrendo. Vediamo allora come fare 
sfruttando l&#39;integrazione tra Php e MySql.&lt;br /&gt;
In questo esempio vedremo, nello specifico, un sistema di iscrizione ad una 
newsletter che consentirà di non avere risultati ridondanti. Sarà quindi 
possibile iscrivere un&#39;indirizzo e-mail una ed una sola volta!&lt;br /&gt;
Grazie all&#39;istruzione di Sql che vi propongo di seguito creiamo la tabella 
relativa ai dati dei nostri membri composta da id utente e rispettiva e-mail:&lt;br /&gt;
CREATE TABLE `newsletter_users` (&lt;br /&gt;
`id_user` int(11) NOT NULL auto_increment,&lt;br /&gt;
`email` varchar(40) NOT NULL default &#39;&#39;,&lt;br /&gt;
PRIMARY KEY (`id_user`)&lt;br /&gt;
) TYPE=MyISAM AUTO_INCREMENT=1 ;&lt;br /&gt;
Una volta creata la tabella destinata a raccogliere i dati, procediamo con la 
realizzazione del form che ci permeterà di inserire l&#39;indirizzo e-mail da 
iscrivere alla newsletter. Il codice (X)Html da inserire è il seguente:&lt;br /&gt;
&amp;lt;form id=&quot;subscription&quot; name=&quot;subscription&quot; method=&quot;post&quot; 
action=&quot;controllo_iscrizione.php&quot;&amp;gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Iscriviti alle newsletter per le novit&amp;amp;agrave;&amp;lt;/strong&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;input name=&quot;email&quot; type=&quot;text&quot; id=&quot;email&quot; size=&quot;24&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;Iscriviti&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt; &lt;br /&gt;
Possiamo salvare questa pagina come &quot;iscrizione.php&quot;. Come potete notare il form 
punta alla pagina &quot;controllo_iscrizione.php&quot; che, come ben potete capire dal 
nome del file, è quella che riceve in input l&#39;indirizzo e-mail, lo verifica e, 
se non presente nel database, lo inserisce. In caso contrario sarà comunicato 
all&#39;utente che tale indirizzo e-mail è già presente nel database.&lt;br /&gt;
Ecco il codice della pagina &quot;controllo_iscrizione.php&quot; che analizzeremo 
attentamente:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
include(&quot;config.php&quot;); // richiamo il file per la connessione al database&lt;br /&gt;
$error = 0;&lt;br /&gt;
$error_type = &quot;&quot;;&lt;br /&gt;
$email = $_POST[&#39;email&#39;];&lt;br /&gt;
// controllo della mail&lt;br /&gt;
if (strlen($email) == 0) { $error++; $error_type .= &quot;Mail non inserita&quot;; }&lt;br /&gt;
if ((!eregi(&quot;^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})&quot;, $email)) 
&amp;amp;&amp;amp; (strlen($email) &amp;gt; 0)) {&lt;br /&gt;
$error++; $error_type .= &quot;Mail non valida&amp;lt;br /&amp;gt;&quot;;&lt;br /&gt;
}&lt;br /&gt;
// fine controllo della mail&lt;br /&gt;
// se non ci sono errori inizio la procedura di iscrizione...&lt;br /&gt;
if ($error == 0) {&lt;br /&gt;
// controlliamo che l&#39;utente non sia gia&#39; iscritto (result = 1 vuol dire che 
l&#39;utente esiste, 0 altrimenti)&lt;br /&gt;
$query = &quot;SELECT COUNT(*) FROM newsletter_users WHERE email = &#39;$email&#39; &quot;;&lt;br /&gt;
$result = @mysql_query($query, $conn);&lt;br /&gt;
$n_row = @mysql_fetch_array($result) or die (&quot;Errore nell&#39;applicazione. &quot; . 
mysql_error());&lt;br /&gt;
//fine del controllo sull&#39;esistenza dell&#39;utente&lt;br /&gt;
// se non esiste nessun utente con la stessa mail (e quindi se l&#39;utente non è 
già iscritto)...&lt;br /&gt;
if ($n_row[0] != 1) {&lt;br /&gt;
// inserisco l&#39;utente nel database...&lt;br /&gt;
$query = &quot;INSERT INTO newsletter_users (email) VALUES (&#39;$email&#39;)&quot;;&lt;br /&gt;
if (mysql_query ($query, $conn)) { // se l&#39;inserimento va a buon fine&lt;br /&gt;
echo &quot;Ti ringraziamo per esserti iscritto alle newsletter!&amp;lt;br /&amp;gt;&quot; ;&lt;br /&gt;
} // chiude l&#39;if&lt;br /&gt;
else&lt;br /&gt;
echo &quot;Erorre durante l&#39;inserimento nel database&quot;; // se l&#39;inserimento non va a 
buon fine&lt;br /&gt;
mysql_close($conn);&lt;br /&gt;
} // chiude l&#39;if&lt;br /&gt;
else { // se esiste già un utente con quella mail glielo comunico&lt;br /&gt;
print &quot;&amp;lt;div&amp;gt;Indirizzo &quot; . $email . &quot; gi&amp;amp;agrave; esistente. 
&amp;lt;a href=\&quot;javascript:history.go(-1);\&quot;&amp;gt;Riprova&amp;lt;/a&amp;gt; 
con un&#39;altra mail.&amp;lt;/div&amp;gt;&quot;;&lt;br /&gt;
}&lt;br /&gt;
} // chiudo if($error == 0)&lt;br /&gt;
// ... se invece ci sono errori sull&#39;inserimento della mail (nulla o sintassi 
non valida), li stampo a video&lt;br /&gt;
else echo &quot;Errore: &quot; . $error_type;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Il codice è abbondantemente commentato, ma ulteriori chiarimenti possono essere 
necessari. Analizziamo quindi il codice riga per riga:&lt;br /&gt;
include(&quot;config.php&quot;);&lt;br /&gt;
Questa riga serve a richiamare il file di connessione al database. Se non sapete 
come creare tale file, aprite una nuova pagina php ed inseriteci all&#39;interno il 
seguente codice, salvandola in seguito come &quot;config.php&quot;. Se necessario, 
modificatelo con i parametri di accesso al vostro database.&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
$db_user = &quot;root&quot;;&lt;br /&gt;
$db_pass = &quot;&quot;;&lt;br /&gt;
$db_host = &quot;localhost&quot;;&lt;br /&gt;
$db_name = &quot;newsletter&quot;;&lt;br /&gt;
$conn = mysql_connect($db_host, $db_user, $db_pass);&lt;br /&gt;
mysql_select_db($db_name, $conn) or die (&quot;Errore nella connessione al 
database&quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
$error = 0&lt;br /&gt;
Inizializzo a 0 il numero degli errori. Tale variabile viene incrementata solo 
in presenza di errori, quindi se pari a 0 (non ci sono errori) procedo con 
l&#39;iscrizione dell&#39;email mentre se maggiore di 0 (ci sono errori) segnalo 
l&#39;errore che verrà memorizzato nella variabile $error_type e stampato a video.&lt;br /&gt;
$error_type = &quot;&quot;&lt;br /&gt;
Inizializzata come stringa vuota, assume un valore solo se si sono verificati 
errori durante la compilazione del form come, ad esempio, mail non inserita o 
non valida.&lt;br /&gt;
$query = &quot;SELECT COUNT(*) FROM newsletter_users WHERE email = &#39;$email&#39; &quot;;&lt;br /&gt;
$result = @mysql_query($query, $conn);&lt;br /&gt;
$n_row = @mysql_fetch_array($result) or die (&quot;Errore nell&#39;applicazione. &quot; . 
mysql_error());&lt;br /&gt;
Interrogo il database per vedere se l&#39;indirizzo email inserito è già esistente o 
meno.&lt;br /&gt;
if ($n_row[0] != 1)&lt;br /&gt;
Serve a verificare che la query precedentemente lanciata restituisca un numero 
di risultati diverso da 1. Se il valore è pari a 1 vuol dire che l&#39;indirizzo è 
già esistente, in caso contrario (diverso da 1) l&#39;indirizzo non è presente nel 
database e pertanto lo inseriamo nello stesso tramite la query che analizziamo 
di seguito.&lt;br /&gt;
$query = &quot;INSERT INTO newsletter_users (email) VALUES (&#39;$email&#39;)&quot;;&lt;br /&gt;
Serve ad inserire l&#39;email dell&#39;utente solo nel caso in cui questo non sià già 
presente nel database.&lt;br /&gt;
Ovviamente questo codice è da considerarsi a scopo puramente didattico e non ha 
alcuna pretesa di completezza su come realizzare un sistema di iscrizione ad una 
newsletter.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Un sistema di login con le sessioni&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Nelle lezioni precedenti abbiamo visto diverse volte come realizzare 
aree riservate tramite semplicissimi controlli if-else con i più noti linguaggi 
per il web. Tuttavia questi controlli sono da considerarsi poco sicuri in quanto 
username e password vengono definiti nella stessa pagina del controllo e quindi 
facilmente attaccabili.&lt;br /&gt;
Questa volta vedremo un sistema che, se progettato con il supporto di un 
database, può considerarsi più sicuro. Per esempio si può pensare ad un sito 
presso il quale l&#39;utente può registrarsi scegliendosi un username ed una 
password ed accedere ogni volta con tali credenziali di accesso.&lt;br /&gt;
Utilizzando le sessioni di Php è possibile definire una variabile che viene 
mantenuta &quot;attiva&quot; per tutta la durata della sessione, ovvero fino a quando 
viene chiuso il browser o effettuato il logout.&lt;br /&gt;
Il sistema più sicuro sarebbe quello di controllare che la tupla inserita 
dall&#39;utente in fase di login corrisponda a quella inserita in fase di 
registrazione (conservata nel database delle iscrizioni) e, in caso positivo, 
settare il valore della variabile di sessione ad esempio su &quot;loggato&quot; per 
mantenere lo stato dell&#39;utente attivo per tutta la sessione di lavoro. Poichè il 
lavoro di progettazione con supporto del database richiederebbe appunto una 
progettazione dello stesso e uno studio approfondito di query e controlli, ci 
limiteremo a definire una tupla di accesso unica per tutti gli utenti che sarà 
memorizzata all&#39;interno del file di controllo del login. Starà a voi &quot;mixare&quot; le 
vostre conoscenze sui database con quello che state per apprendere per poter 
realizzare quanto appena detto.&lt;br /&gt;
Prima di procedere, elenchiamo le pagine che faranno parte del nostro progetto, 
spiegandone attentamente la loro funzione.&lt;br /&gt;
* &quot;form.php&quot; sarà la pagina che conterrà il modulo di login nel quale l&#39;utente 
dovrà digitare l&#39;username e la password per poter accedere alla pagina 
riservata. In caso di login errato tale pagina sarà ricaricata per permettere un 
nuovo tentativo di riconoscimento.&lt;br /&gt;
* &quot;controlla.php&quot; conterrà innanzitutto le credenziali di accesso alla pagina 
riservata. Sarà inoltre incaricata al controllo del login e quindi al 
reindirizzamento alla pagina opportuna.&lt;br /&gt;
* &quot;pagina_riservata.php&quot; sarà appunto la pagina riservata alla quale si accederà 
in caso di login effettuato correttamente.&lt;br /&gt;
* &quot;session_check.php&quot; verrà inclusa in ogni pagina ad accesso riservato e 
servirà a non permettere l&#39;accesso diretto tramite url dal browser nel caso il 
cui si conosca il percorso della pagina.&lt;br /&gt;
* &quot;logout.php&quot; sarà la pagina incaricata per la &quot;distruzione&quot; della sessione di 
login. Dopo aver caricato tale pagina, l&#39;utente non sarà più riconosciuto dal 
browser e per accedere all&#39;area riservata dovrà nuovamente effettuare il login.&lt;br /&gt;
Iniziamo pertanto ad analizzare il codice delle singole pagine. Partiamo dalla 
realizzazione della più semplice, &quot;form.php&quot;, inserendo questo codice 
all&#39;interno del tag &amp;lt;body&amp;gt;:&lt;br /&gt;
&amp;lt;form name=&quot;login&quot; action=&quot;controlla.php&quot; method=&quot;POST&quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Fai il login:&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Username&lt;br /&gt;
&amp;lt;input type=&quot;text&quot; name=&quot;username&quot;&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Password&lt;br /&gt;
&amp;lt;input type=&quot;text&quot; name=&quot;password&quot;&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;submit&quot; value=&quot;Login&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
Tale codice serve solamente alla creazione del form di login e non necessita di 
ulteriori chiarimenti.&lt;br /&gt;
Passiamo ora alla creazione del codice della pagina &quot;controlla.php&quot; che, come 
anticipato, servirà alla verifica della corrispondenza della tupla inserita 
dall&#39;utente con quella definita all&#39;interno della pagina stessa. Eccovi il 
codice che commenteremo opportunamente:&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
$user = &quot;user&quot;;&lt;br /&gt;
$pass = &quot;password&quot;;&lt;br /&gt;
if ($_POST[&#39;username&#39;] == $user &amp;amp;&amp;amp; $_POST[&#39;password&#39;] == $pass) {&lt;br /&gt;
session_start();&lt;br /&gt;
$_SESSION[&#39;login&#39;] = &quot;loggato&quot;;&lt;br /&gt;
header(&quot;Location: pagina_riservata.php&quot;);&lt;br /&gt;
} else {&lt;br /&gt;
header(&quot;Location: form.php&quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Innanzitutto abbiamo definito la tupla di accesso alla pagina riservata tramite 
le variabili $user e $pass. Successivamente, grazie ad un semplice controllo su 
una doppia condizione, abbiamo verificato che la tupla di accesso sia identica a 
quella inserita dall&#39;utente nel form, i cui valori erano stati recuperati grazie 
alle variabili $_POST[&#39;username&#39;] e $_POST[&#39;password&#39;]. Nel caso in cui il login 
è stato effettuato correttamente, viene avviata una sessione grazie alla 
funzione session_start() e definita la variabile di sessione $_SESSION[&#39;login&#39;] 
alla quale viene associato il valore &quot;loggato&quot;. Tale variabile, così 
inizializzata, garantirà l&#39;accesso alla pagina &quot;pagina_riservata.php&quot;, alla 
quale l&#39;utente sarà rimandato. In caso di login errato l&#39;utente sarà indirizzato 
nuovamente alla pagina &quot;form.php&quot; dalla quale potrà ritentare il login.&lt;br /&gt;
La pagina &quot;pagina_riservata.php&quot; conterrà appunto le informazioni riservate agli 
utenti loggati. Proprio per far capire che si tratta di una pagina riservata, 
abbiamo utilizzato il codice che vi viene fornito di seguito, ma ovviamente 
siamo liberi di personalizzarlo come meglio crediamo. Un paio di cose sono 
d&#39;obbligo però:&lt;br /&gt;
* la riga &amp;lt;?php include(&quot;session_check.php&quot;); // questa riga è d&#39;obbligo ?&amp;gt; 
siamo tenuti a lasciarla in cima alla pagina, prima di qualsiasi tag html.&lt;br /&gt;
* la riga &amp;lt;p&amp;gt;&amp;lt;a href=&quot;logout.php&quot;&amp;gt;ESEGUI IL LOGOUT&amp;lt;/a&amp;gt; &amp;lt;/p&amp;gt; possiamo 
posizionarla dove meglio crediamo, ma dobbiamo lasciarla così com&#39;è in quanto 
permette all&#39;utente di abbandonare la sessione di lavoro e di non essere più 
riconosciuto dal browser, salvo nuovo login.&lt;br /&gt;
Eccovi il codice completo della pagina:&lt;br /&gt;
&amp;lt;?php include(&quot;session_check.php&quot;); // questa riga è d&#39;obbligo ?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; 
&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Untitled Document&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;PAGINA RISERVATA&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;contenuto della pagina riservata... &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&quot;logout.php&quot;&amp;gt;ESEGUI IL LOGOUT&amp;lt;/a&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
Passiamo ora ad analizzare il brevissimo codice della pagina 
&quot;session_check.php&quot;. Di seguito il codice, che sarà successivamente commentato:&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
session_start();&lt;br /&gt;
if ($_SESSION[&#39;login&#39;] != &quot;loggato&quot;) {&lt;br /&gt;
header(&quot;Location: form.php&quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Innanzitutto ci tengo a precisare che questa è una pagina a sè stante che viene 
richiamata in ogni pagina che dovrà innanzitutto essere riservata, e che 
pertanto non dovrà essere raggiungibile direttamente puntando il browser all&#39;url 
della pagina riservata. Supponendo infatti che il nostro sito sia 
&quot;http://www.miosito.it&quot;, dobbiamo fare in modo, grazie all&#39;inclusione di questa 
pagina, che digitando l&#39;indirizzo &quot;http://www.miosito.it/pagina_riservata.php&quot; 
l&#39;utente venga rimandato alla pagina di login e che non abbia quindi accesso ai 
contenuti della pagina, salvo dopo aver effettuato il login. Poichè la variabile 
di sessione $_SESSION[&#39;login&#39;] assuse il valore &quot;loggato&quot; solo se l&#39;utente ha 
eseguito correttamente il login, se il valore di tale variabile è diverso da &quot;loggato&quot; 
(o addirittura la variabile non è stata creata) l&#39;utente dovrà essere rimandato 
alla pagina &quot;form.php&quot; per poter farsi riconscere.&lt;br /&gt;
Per ultimo, ma non per importanza, vediamo come permettere all&#39;utente di 
abbandonare la sessione di lavoro grazie alla pagina &quot;logout.php&quot;. Tale pagina 
potrà essere richiamata solamente tramite il link &quot;Esegui il logout&quot; contenuto 
nella pagina riservata. Dopo aver effettuato il logout l&#39;utente non potrà più 
accedere alla pagina riservata, se non previo nuovo login. Eccovi il codice:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
$_SESSION = array();&lt;br /&gt;
session_destroy();&lt;br /&gt;
header(&quot;Location: form.php&quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Tramite la funzione session_start() abbiamo accesso alle eventuali variabili di 
sessione salvate in precedenza (nel nostro caso: $_SESSION[&#39;login&#39;]). Ci 
occuperemo successivamente di svuotare l&#39;array $_SESSION grazie alla funzione 
array() e con la funzione session_destroy() provvediamo all&#39;eliminazione del 
file contenente le variabili di sessione. Tramite header(&quot;Location: form.php&quot;), 
infine, reindirizziamo l&#39;utente al form di login per potersi nuovamente loggare.&lt;br /&gt;
Una volta compreso a pieno il codice potete personalizzarlo al meglio, ad 
esempio dando il benvenuto all&#39;utente una volta loggato e salutandolo una volta 
effettuato il logout. Avendo poi le conoscenze su come far interagire il 
linguaggio Php con i database è possibile utilizzare le sessioni per creare 
potentissimi sistemi di login personalizzati ed aree riservate ad hoc per ogni 
singolo utente.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Realizzare un sondaggio&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Questo tutorial, vi mostra come creare un semplice ed utile sondaggio da 
inserire nel vostro sito, così potrete conoscere le opinioni dei vostri 
visitatori.&lt;br /&gt;
Per questo tutorial abbiamo bisogno di 3 files.&lt;br /&gt;
1. poll_global.php: Questo file contiene le informazioni per la connessione al 
database.&lt;br /&gt;
2. poll_main.php: Questa è la pagina che i visitatori vedono e nella quale 
votano.&lt;br /&gt;
3. poll_send.php: Questa è la pagina dei ringraziamenti.&lt;br /&gt;
Ho cercato di scrivere il codice più chiaro possibile, inserendo anche dei 
commenti per una migliore comprensione.&lt;br /&gt;
poll_global.php&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
include(&quot;config.php&quot;);&lt;br /&gt;
//Connessione al database&lt;br /&gt;
@ $db = mysql_pconnect(&quot;$dbhost&quot;,&quot;$dbuname&quot;,&quot;$dbpass&quot;);&lt;br /&gt;
//Messaggio di errore nel caso che non avvenga una corretta connessione al 
database&lt;br /&gt;
if (!$db)&lt;br /&gt;
{&lt;br /&gt;
echo &quot;&amp;lt;font color=&#39;red&#39;&amp;gt;&amp;lt;b&amp;gt;Impossibile collegarsi al database. Riprova più 
tardi!&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&quot;;&lt;br /&gt;
exit;&lt;br /&gt;
}&lt;br /&gt;
//Seleziono il database&lt;br /&gt;
mysql_select_db(&quot;$dbname&quot;, $db);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Questi sono i dati da inserire nel phpMyAdmin per creare la tabella per il 
nostro sondaggio.&lt;br /&gt;
CREATE TABLE vota (&lt;br /&gt;
ip varchar(15) NOT NULL default &#39;&#39;,&lt;br /&gt;
vote int(11) NOT NULL default &#39;0&#39;,&lt;br /&gt;
PRIMARY KEY (ip)&lt;br /&gt;
);&lt;br /&gt;
Se non sapete come fare per creare una tabella nel vostro database, utilizzate 
lo script qui sotto:&lt;br /&gt;
poll_table.php&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
include (&quot;poll_global.php&quot;);&lt;br /&gt;
$sql = &quot;CREATE TABLE `vota` ( `ip` VARCHAR( 15 ) NOT NULL , `vote` INT NOT NULL 
, PRIMARY KEY ( `ip` ) )&quot;;&lt;br /&gt;
$result = mysql_query($sql);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
poll_main.php&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;SONDAGGIO&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;&amp;lt;font color=&#39;#660066&#39;&amp;gt;Sondaggio!!&amp;lt;/font&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
//includo poll_global.php&lt;br /&gt;
include (&quot;poll_global.php&quot;);&lt;br /&gt;
//Qui viene acquisito l&#39;indirizzo IP dell&#39;utente&lt;br /&gt;
$ip = $_SERVER[REMOTE_ADDR];&lt;br /&gt;
//Selezioniamo l&#39;intero database&lt;br /&gt;
$sql = &quot;SELECT * FROM `database_table`&quot;;&lt;br /&gt;
$result = mysql_query($sql);&lt;br /&gt;
//Numero di voti presenti nel database&lt;br /&gt;
$number_of_vote = mysql_num_rows($result);&lt;br /&gt;
//Visualizziamo il numero di voti&lt;br /&gt;
echo &quot;&amp;lt;h3&amp;gt;There are &amp;lt;b&amp;gt;$number_of_vote&amp;lt;/b&amp;gt; votes&amp;lt;/h3&amp;gt;&quot;;&lt;br /&gt;
//Variabile contatore&lt;br /&gt;
$i = 0;&lt;br /&gt;
$score =0;&lt;br /&gt;
//Calcoliamo la media dei voti&lt;br /&gt;
While ($i &amp;lt; $number_of_vote)&lt;br /&gt;
{&lt;br /&gt;
$score = $score + mysql_result($result, $i, vote);&lt;br /&gt;
$i++;&lt;br /&gt;
}&lt;br /&gt;
//Visualizziamo la media dei voti&lt;br /&gt;
echo &quot;&amp;lt;h3&amp;gt;Average vote is &quot;. number_format($score/$number_of_vote, 1) 
.&quot;/5&amp;lt;/h3&amp;gt;&quot;;&lt;br /&gt;
//Se l&#39;utente ha già votato, apparirà un messaggio di errore&lt;br /&gt;
$i = 0;&lt;br /&gt;
While ($i &amp;lt; $number_of_vote)&lt;br /&gt;
{&lt;br /&gt;
if ($ip == mysql_result($result, $i, ip))&lt;br /&gt;
{&lt;br /&gt;
echo &quot;Hai già votato!!&quot;;&lt;br /&gt;
exit;&lt;br /&gt;
}&lt;br /&gt;
$i++;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
//Inizio Form&lt;br /&gt;
&amp;lt;form action=&quot;poll_send.php&quot; method=&quot;post&quot;&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
Cosa ne pensi di questo sito&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;radio&quot; name=&quot;vote&quot; value=&quot;5&quot; checked&amp;gt;&lt;br /&gt;
Bellissimo!!!(5/5)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;radio&quot; name=&quot;vote&quot; value=&quot;4&quot;&amp;gt; Interessante (4/5)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;radio&quot; name=&quot;vote&quot; value=&quot;3&quot;&amp;gt; Carino (3/5)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;radio&quot; name=&quot;vote&quot; value=&quot;2&quot;&amp;gt; Così così (2/5)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;radio&quot; name=&quot;vote&quot; value=&quot;1&quot;&amp;gt; Non mi piace (1/5)&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;submit&quot; value=&quot;Vota&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
poll_send.php&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;SONDAGGIO&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
//Ricevo li valori delle variabili&lt;br /&gt;
$ip = $_SERVER[REMOTE_ADDR];&lt;br /&gt;
$vote = $HTTP_POST_VARS[&quot;vote&quot;];&lt;br /&gt;
//Includo poll_global.php&lt;br /&gt;
include (&quot;poll_global.php&quot;);&lt;br /&gt;
//Inserisco il voto nella tabella del database&lt;br /&gt;
$sql = &quot;INSERT INTO `database_name` ( `ip` , `vote` ) VALUES ( &#39;$ip&#39;, &#39;$vote&#39; 
)&quot;;&lt;br /&gt;
$result=mysql_query($sql);&lt;br /&gt;
//Ringrazio l&#39;utente per il suo voto e gli indico la pagina principale dei 
risultati&lt;br /&gt;
echo &quot;&amp;lt;h3&amp;gt;Grazie per aver votato!&amp;lt;br&amp;gt;&amp;lt;/h3&amp;gt;&quot;;&lt;br /&gt;
echo &quot;&amp;lt;h3&amp;gt;&amp;lt;a href=&#39;poll_main.php&#39;&amp;gt;Clicca qui&amp;lt;/a&amp;gt; per vedere i risultati del 
sondaggio!&amp;lt;/h3&amp;gt;&quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
Ricordati di inserire tutti i files nella stessa directory!&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Creare un guestbook&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Vedremo come costruire un libro degli ospiti, meglio conosciuto come 
Guestbook.&lt;br /&gt;
Cominciamo con l&#39;aprire il nostro editor e a salvare il primo file, chiamandolo 
config.php e inserendoci questo codice:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$msg_per_page = 5;&lt;br /&gt;
$mysql[&#39;host&#39;] = &quot;&quot;;&lt;br /&gt;
$mysql[&#39;pass&#39;] = &quot;&quot;;&lt;br /&gt;
$mysql[&#39;user&#39;] = &quot;&quot;;&lt;br /&gt;
$mysql[&#39;name&#39;] = &quot;&quot;;&lt;br /&gt;
@mysql_connect($mysql[&#39;host&#39;], $mysql[&#39;user&#39;], $mysql[&#39;pass&#39;]);&lt;br /&gt;
@mysql_select_db($mysql[&#39;name&#39;]);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
La prima variabile, $msg_per_page, ci serve per indicare il numero di messaggi 
che si vogliono visualizzare per ogni pagina; ovviamente, il numero è 
arbitrario, ma lasciatevi dare un consiglio... non alzate troppo la cifra 
altrimenti chi non ha connessioni veloci potrebbe aver difficolt? alla 
visualizzazione della pagina.&lt;br /&gt;
La seconda variabile, $mysql, è un array, e ci serve per indicare i dati del 
nostro database MySQL.&lt;br /&gt;
In questo file non sono presenti altre variabili, ma già incontriamo due 
funzioni: mysql_connect() e mysql_select_db().&lt;br /&gt;
Come è facile intuire le due funzioni sono legate a MySQL, infatti, la prima 
serve per la connessione al server e la seconda per selezionare il database che 
si vuole usare.&lt;br /&gt;
Passiamo ora alla creazione della tabella nel database MySQL.&lt;br /&gt;
Aprire un nuovo documento vuoto e inserire all&#39;intorno questo codice:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require(&quot;config.php&quot;);&lt;br /&gt;
@mysql_query(&quot;DROP TABLE IF EXISTS gbook&quot;);&lt;br /&gt;
@mysql_query(&quot;CREATE TABLE gbook (&lt;br /&gt;
`id` INT(11) DEFAULT &#39;0&#39; NOT NULL AUTO_INCREMENT,&lt;br /&gt;
`nome` VARCHAR(255) NOT NULL,&lt;br /&gt;
`email` VARCHAR(255) NOT NULL,&lt;br /&gt;
`url` VARCHAR(255),&lt;br /&gt;
`messaggio` TEXT NOT NULL,&lt;br /&gt;
`ip` VARCHAR(255) NOT NULL,&lt;br /&gt;
PRIMARY KEY (`id`)&lt;br /&gt;
);&quot;);&lt;br /&gt;
echo &quot;Operazione avvenuta con successo !!\n&quot;;&lt;br /&gt;
@mysql_close();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Non ci sono variabili ma sono presenti due query al database, la prima ci serve 
per cancellare la tabella se esiste già, la seconda per crearla.&lt;br /&gt;
Fatte attenzione, la tabella che serve a noi, si chiama &quot;gbook&quot;, e se esiste già 
verrà cancellata e tutti i dati presenti verrano cancellati e non saranno 
recuperabili in alcun modo.&lt;br /&gt;
Dopo aver visto la parte di configurazione, cominciamo ad entrare nel vivo 
dell&#39;applicazione.&lt;br /&gt;
Ora, aprire un nuovo documento vuoto e salvarlo come: leggi.php ed ecco il 
codice che dovrà contenere:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require(&quot;config.php&quot;);&lt;br /&gt;
$count_mess = @mysql_query(&quot;SELECT COUNT(id) FROM gbook&quot;);&lt;br /&gt;
$res_count = @mysql_fetch_array($count_mess);&lt;br /&gt;
if ($res_count[0] == FALSE) {&lt;br /&gt;
echo &quot;Nessun messaggio ? stato inserito nel database&quot;;&lt;br /&gt;
} else {&lt;br /&gt;
$tot_pages = ceil($res_count[0]/$msg_per_page);&lt;br /&gt;
$curr_page = (!$_GET[&#39;page&#39;]) ? 1 : (int)$_GET[&#39;page&#39;];&lt;br /&gt;
$primo = ($curr_page - 1) * $msg_per_page;&lt;br /&gt;
&lt;br /&gt;
$query = mysql_query(&quot;SELECT * FROM gbook ORDER BY id DESC LIMIT $primo,$msg_per_page&quot;);&lt;br /&gt;
while($result = mysql_fetch_array($query)) {&lt;br /&gt;
$result[&#39;messaggio&#39;] = str_replace(&quot;\n&quot;, &quot;&amp;lt;br&amp;gt;&quot;, $result[&#39;messaggio&#39;]);&lt;br /&gt;
echo &quot; &amp;lt;strong&amp;gt;? Nome:&amp;lt;/strong&amp;gt; &quot; . $result[&#39;nome&#39;] . &quot;&amp;lt;br&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;strong&amp;gt;? E-Mail:&amp;lt;/strong&amp;gt; &amp;lt;a href=\&quot;mailto:&quot; . $result[&#39;email&#39;] . &quot;\&quot;&amp;gt;&quot; 
. $result[&#39;email&#39;] . &quot;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;strong&amp;gt;? URL:&amp;lt;/strong&amp;gt; &amp;lt;a href=\&quot;&quot; . $result[&#39;url&#39;] . &quot;\&quot;&amp;gt;&quot; . $result[&#39;url&#39;] 
. &quot;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;strong&amp;gt;? Messaggio:&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt; &quot; . $result[&#39;messaggio&#39;] . &quot;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;hr&amp;gt;\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
for($page = 1; $page &amp;lt;= $tot_pages; $page++) {&lt;br /&gt;
if($page == $curr_page) {&lt;br /&gt;
$pag .= &quot;&amp;lt;strong&amp;gt;$page&amp;lt;/strong&amp;gt; &quot;;&lt;br /&gt;
} else {&lt;br /&gt;
$pag .= &quot;&amp;lt;a href=\&quot;?page=$page\&quot;&amp;gt;$page&amp;lt;/a&amp;gt; &quot;;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
echo $pag . &quot;&amp;lt;br&amp;gt;\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
echo &quot;&amp;lt;a href=\&quot;firma.php\&quot;&amp;gt;Firma il Guestbook&amp;lt;/a&amp;gt;&quot;;&lt;br /&gt;
@mysql_close();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Questo file servirà per visualizzare tutti i messaggi degli utenti.&lt;br /&gt;
Le prime due variabili, $count_mess e $res_count, ci serviranno per impaginare 
correttamente i messaggi presenti nel database.&lt;br /&gt;
Appena dopo queste due variabili ci troviamo davanti ad un if(), questo 
controllo ci è utile per vedere se sono presenti o meno messaggi nel database, 
se ce ne sono li stampa a video, in caso contrario viene fuori un messaggio di 
allerta.&lt;br /&gt;
Ora incontriamo tre variabile, che, anchesse servono per l&#39;impaginazione dei 
messaggi.&lt;br /&gt;
Ed ecco finalmente che arriviamo alla parte &#39;importante&#39; dello script.&lt;br /&gt;
Incontriamo subito la variabile $query che, tramite la funzione mysql_query() di 
php ci permette di inviare un &#39;comando&#39; al database.&lt;br /&gt;
Subito dopo si nota un ciclo while() che serve per stampare a video il tutto.&lt;br /&gt;
Infine, stampiamo a video tutte le pagine tramie un ciclo for() e chiudiamo la 
connessione al database MySQL.&lt;br /&gt;
Nell&#39;articolo precedente abbiamo visto come leggere i messaggi presenti nel 
database, ora vedremo come inserirli.&lt;br /&gt;
Creiamo un file chiamato firma.php e inseriamoci questo codice:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require(&quot;config.php&quot;);&lt;br /&gt;
if ($_POST[&#39;sign&#39;] == FALSE) {&lt;br /&gt;
echo &quot; &amp;lt;form action=\&quot;firma.php\&quot; method=\&quot;POST\&quot;&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;strong&amp;gt;- Nome *&amp;lt;/strong&amp;gt; &amp;lt;input type=\&quot;text\&quot; name=\&quot;nome\&quot;&amp;gt;&amp;lt;br&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;strong&amp;gt;- E-Mail *&amp;lt;/strong&amp;gt; &amp;lt;input type=\&quot;text\&quot; name=\&quot;email\&quot;&amp;gt;&amp;lt;br&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;strong&amp;gt;- URL&amp;lt;/strong&amp;gt; &amp;lt;input type=\&quot;text\&quot; name=\&quot;url\&quot;&amp;gt;&amp;lt;br&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;strong&amp;gt;- Messaggio *&amp;lt;/strong&amp;gt; &amp;lt;textarea name=\&quot;messaggio\&quot; cols=\&quot;35\&quot; 
rows=\&quot;10\&quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;br&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;input type=\&quot;hidden\&quot; name=\&quot;sign\&quot; value=\&quot;true\&quot;&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;input type=\&quot;submit\&quot; value=\&quot; Firma! \&quot;&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot; &amp;lt;/form&amp;gt;\n&quot;;&lt;br /&gt;
} else {&lt;br /&gt;
@mysql_query(&quot;INSERT INTO gbook (`id`, `nome`, `email`, `url`, `messaggio`, 
`ip`)&lt;br /&gt;
VALUES (&#39;&#39;, &#39;&quot; . $_POST[&#39;nome&#39;] . &quot;&#39;,&lt;br /&gt;
&#39;&quot; . $_POST[&#39;email&#39;] . &quot;&#39;,&lt;br /&gt;
&#39;&quot; . $_POST[&#39;url&#39;] . &quot;&#39;,&lt;br /&gt;
&#39;&quot; . $_POST[&#39;messaggio&#39;] . &quot;&#39;,&lt;br /&gt;
&#39;&quot; . $_SERVER[&#39;REMOTE_ADDR&#39;] . &quot;&#39;);&quot;);&lt;br /&gt;
echo &quot;Grazie per aver firmato il nostro Guestbook&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
echo &quot;&amp;lt;a href=\&quot;leggi.php\&quot;&amp;gt;Leggi i messaggi&amp;lt;/a&amp;gt;\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
@mysql_close();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
In questa parte del codice salta subito agli occhi che c&#39;è un if(), che serve 
per controllare se una variabile è esistente o meno.&lt;br /&gt;
In caso positivo, inserisce il messaggio nel database tramite una query con la 
funzione mysql_query(), altrimenti visualizza il form.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Eseguire l&#39;upload di un file&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Un&#39;altra delle operazioni molto frequenti è quella che concerne l&#39;upload 
di file online. Quando si parla di upload bisogna tenere in considerazione una 
serie di elementi per il corretto funzionamento dei propri script. Per prima 
cosa è necessario che il file php.ini sia configurato in modo da limitare 
correttamente le dimensioni dei file da caricare: se nella nostra applicazione è 
possibile effettuare l&#39;upload di file molto grossi, è necessario modificare la 
variabile di configurazione max_upload_size affinché il suo valore sia adatto 
alla nostra situazione.&lt;br /&gt;
In secondo luogo è importante ricordarsi che i form HTML che devono inviare i 
file devono avere l&#39;attributo enctype impostato a &quot;multipart/form-data&quot;, 
altrimenti i file non saranno inviati correttamente. Infine è bene ricordare che 
i file caricati non sono salvati all&#39;interno della variabile globale $_POST ma 
all&#39;interno di $_FILES, dalla quale saranno accessibili anche altre informazioni 
addizionali come il nome del file temporaneo locale in cui è stato salvato il 
file inviato, le dimensioni del file ed altro.&lt;br /&gt;
Vediamo nel dettagli come effettuare l&#39;upload di un file. Prima di tutto creiamo 
un semplice form HTML che si occuperà di richiedere all&#39;utente l&#39;inserimento di 
un file:&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;File upload&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form method=&quot;post&quot; action=&quot;testupload.php&quot; enctype=&quot;multipart/form-data&quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;upload&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;label&amp;gt;Carica il tuo file:&amp;lt;/label&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;file&quot; name=&quot;user_file&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;sumit&quot; value=&quot;Carica online&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
Tengo a precisare che potremmo specificare un campo di input nascosto chiamato 
MAX_FILE_SIZE avente come valore la dimensione massima in byte del file da 
caricare. Questo valore, anche se controllato sia dal browser che da PHP, non è 
comunque sicuro, dato che può essere facilmente aggirato. È buona norma 
effettuare sempre la validazione dei dati da PHP prima di salvarli o elaborarli 
per evitare spiacevoli sorprese.&lt;br /&gt;
Tornando a noi, passiamo alla creazione del file testupload.php:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
define(&quot;UPLOAD_DIR&quot;, &quot;./uploads/&quot;);&lt;br /&gt;
if(isset($_POST[&#39;action&#39;]) and $_POST[&#39;action&#39;] == &#39;upload&#39;)&lt;br /&gt;
{&lt;br /&gt;
if(isset($_FILES[&#39;user_file&#39;]))&lt;br /&gt;
{&lt;br /&gt;
$file = $_FILES[&#39;user_file&#39;];&lt;br /&gt;
if($file[&#39;error&#39;] == UPLOAD_ERR_OK and is_uploaded_file($file[&#39;tmp_name&#39;]))&lt;br /&gt;
{&lt;br /&gt;
move_uploaded_file($file[&#39;tmp_name&#39;], UPLOAD_DIR.$file[&#39;name&#39;]);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Queste poche righe di codice si occupano di controllare che i dati provenienti 
dalla pagina precedente siano corretti, controllano la validità del file 
caricato ed effettuano praticamente l&#39;upload salvando i dati ove necessario.&lt;br /&gt;
L&#39;array $_FILES permette di accedere ai seguenti valor:&lt;br /&gt;
* name: il nome del file caricato originariamente dall&#39;utente;&lt;br /&gt;
* tmp_name: il nome temporaneo del file salvato da PHP in una cartella locale;&lt;br /&gt;
* type: il mime type del file (nel caso in cui il browser fornisca questa 
informazione);&lt;br /&gt;
* size: le dimensioni in byte del file;&lt;br /&gt;
* error: un codice numerico che indica l&#39;eventuale errore durante il caricamento 
del file. Ad ogni numero possibile è associata una delle seguenti costanti:&lt;br /&gt;
o UPLOAD_ERR_OK (0): Non vi sono errori, l&#39;upload è stato eseguito con successo;&lt;br /&gt;
o UPLOAD_ERR_INI_SIZE (1): Il file inviato eccede le dimensioni specificate nel 
parametro upload_max_filesize di php.ini;&lt;br /&gt;
o UPLOAD_ERR_FORM_SIZE (2): Il file inviato eccede le dimensioni specificate nel 
parametro MAX_FILE_SIZE del form;&lt;br /&gt;
o UPLOAD_ERR_PARTIAL (3): Upload eseguito parzialmente;&lt;br /&gt;
o UPLOAD_ERR_NO_FILE (4): Nessun file è stato inviato;&lt;br /&gt;
o UPLOAD_ERR_NO_TMP_DIR (6): Mancanza della cartella temporanea;&lt;br /&gt;
Con tutte queste informazioni risulta molto semplice analizzare un&#39;operazione di 
upload e comportarsi di conseguenza. La funzione is_uploaded_file controlla che 
un file sia effettivamente uno di quelli caricati dall&#39;utente, mentre 
move_uploaded_file effettua fisicamente lo spostamento del file temporaneo nel 
fiel di destinazione specificato.&lt;br /&gt;
Aggiungendo alcuni accorgimenti sulle dimensioni ed impacchettando tutto in una 
libreria è possibile gestire in modo molto completo il caricamento di file 
online senza rischiare di incorrere in problemi o malfunzionamenti. Come sempre 
è importante ricordarsi che il path di destinazione di move_uploaded_file deve 
essere un path valido. &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Gestione dei file in PHP&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Di seguito riporto alcuner istruzioni su come gestire i file in php: &lt;br /&gt;
&lt;u&gt;&lt;i&gt;Apertura file                           
                  &lt;br /&gt;
&lt;/i&gt;&lt;/u&gt;&amp;lt;?&lt;br /&gt;
                                $file = fopen(nomefile.txt,&quot;r&quot;);&lt;br /&gt;
                                ?&amp;gt;                                &lt;br /&gt;
&lt;u&gt;&lt;i&gt;Chiusura file 
      &lt;br /&gt;
&lt;/i&gt;&lt;/u&gt;&amp;lt;?&lt;br /&gt;
        fclose($file);&lt;br /&gt;
        ?&amp;gt; &lt;br /&gt;
&lt;/span&gt;&lt;u&gt;&lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Modalità di apertura 
              &lt;/span&gt;&lt;/i&gt;&lt;/u&gt;&lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;8&quot; cellspacing=&quot;1&quot; id=&quot;table2&quot; style=&quot;width: 451px;&quot;&gt;
                                  &lt;tbody&gt;
&lt;tr&gt;
                                    &lt;th scope=&quot;row&quot; width=&quot;131&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;a&lt;/span&gt;&lt;/th&gt;
                                    &lt;td width=&quot;279&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Apre il file per accodare informazioni 
         &lt;/span&gt; &lt;/td&gt;
                                  &lt;/tr&gt;
&lt;tr&gt;
                                    &lt;th scope=&quot;row&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;a+&lt;/span&gt;&lt;/th&gt;
                                    &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Apre il file per le leggere/accodare informazioni 
         &lt;/span&gt; &lt;/td&gt;
                                  &lt;/tr&gt;
&lt;tr&gt;
                                    &lt;th scope=&quot;row&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;r&lt;/span&gt;&lt;/th&gt;
                                    &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Apre il file per sola lettura 
         &lt;/span&gt; &lt;/td&gt;
                                  &lt;/tr&gt;
&lt;tr&gt;
                                    &lt;th scope=&quot;row&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;r+&lt;/span&gt;&lt;/th&gt;
                                    &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Apre il file per lettura e scrittura 
         &lt;/span&gt; &lt;/td&gt;
                                  &lt;/tr&gt;
&lt;tr&gt;
                                    &lt;th scope=&quot;row&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;w&lt;/span&gt;&lt;/th&gt;
                                    &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Apre il file per sola scrittura 
         &lt;/span&gt; &lt;/td&gt;
                                  &lt;/tr&gt;
&lt;tr&gt;
                                    &lt;th scope=&quot;row&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;w+&lt;/span&gt;&lt;/th&gt;
                                    &lt;td&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Apre il file per scrittura/lettura 
         &lt;/span&gt; &lt;/td&gt;
                                  &lt;/tr&gt;
&lt;tr&gt;
                                    &lt;th colspan=&quot;2&quot; scope=&quot;row&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;
         Se si usa&quot;a&quot; e &quot;r&quot; il file deve già esistere&lt;/span&gt;&lt;/th&gt;
                                  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div align=&quot;left&quot;&gt;
&lt;u&gt;&lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Verifica apertura file 
          &lt;br /&gt;
        &lt;/span&gt;&lt;/i&gt;&lt;/u&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;?&lt;br /&gt;
        if(!$file = fopen(nomefile.txt,&quot;r&quot;))&lt;br /&gt;
        {&lt;br /&gt;
        echo &quot;Errore apertura file&quot;;&lt;br /&gt;
        exit;&lt;br /&gt;
        } 
        &lt;br /&gt;
        ?&amp;gt; &lt;br /&gt;
        &lt;u&gt;&lt;i&gt;Scrittura file 
                          &lt;br /&gt;
        &lt;/i&gt;&lt;/u&gt;&amp;lt;?&lt;br /&gt;
        fputs($file,&quot;Questo è un file scritto con PHP &quot;);&lt;br /&gt;
        ?&amp;gt;&lt;br /&gt;
        Naturalmente al posto di una stringa, possiamo inserire una variabile che contiene il nostro testo.&lt;span class=&quot;Stile9&quot;&gt;&lt;br /&gt;
        Se si vogliono scrivere su più righe basta utilizzare:&lt;br /&gt;
                                &quot;\r\n&quot;&lt;br /&gt;
        &lt;/span&gt;&lt;u&gt;&lt;i&gt;Leggere un file 
                          &lt;br /&gt;
        &lt;/i&gt;&lt;/u&gt;&amp;lt;?&lt;br /&gt;
        $testofile = fgets($file,255);&lt;br /&gt;
        ?&amp;gt; &lt;span class=&quot;Stile9&quot;&gt;&lt;br /&gt;
        Dove 255 sono i bytes da leggere &lt;br /&gt;
        &lt;/span&gt;&lt;u&gt;&lt;i&gt;Apertura file                           
                          &lt;br /&gt;
        &lt;/i&gt;&lt;/u&gt;&amp;lt;?&lt;br /&gt;
        $file = fopen(nomefile.txt,&quot;r&quot;);&lt;br /&gt;
        ?&amp;gt;&lt;br /&gt;
        &lt;i&gt;&lt;u&gt;Controlli sui file 
                          &lt;br /&gt;
        &lt;/u&gt;&lt;/i&gt;&amp;lt;?&lt;br /&gt;
                                  &lt;span class=&quot;Stile9&quot;&gt;//Dimensioni di un file&lt;/span&gt;&lt;br /&gt;
        filesize($file);&lt;br /&gt;
        &lt;span class=&quot;Stile9&quot;&gt;//Controllare se il file è una cartella &lt;/span&gt;&lt;br /&gt;
        is_dir($file);&lt;br /&gt;
        &lt;span class=&quot;Stile9&quot;&gt;//Controllare se il file è ordinario &lt;/span&gt;&lt;br /&gt; 
        is_file($file);&lt;br /&gt;
        &lt;span class=&quot;Stile9&quot;&gt;//Controllare se è eseguibile &lt;/span&gt;&lt;br /&gt;
        is_executable($file);&lt;br /&gt;
        &lt;span class=&quot;Stile9&quot;&gt;//Controllare se è leggibile &lt;/span&gt;&lt;br /&gt;
        is_readble($file);&lt;br /&gt;
        &lt;span class=&quot;Stile9&quot;&gt;//Controlare se è scrivibile &lt;/span&gt;&lt;br /&gt;
        is_writeable($file);&lt;br /&gt;
        &lt;span class=&quot;Stile9&quot;&gt;//Controllare il tipo &lt;/span&gt;&lt;br /&gt;
        filetype($file);&lt;br /&gt;
        ?&amp;gt;&lt;br /&gt;
        &lt;u&gt;&lt;i&gt;Aprire e leggere i contenuti di una cartella 
                            &lt;br /&gt;
        &lt;/i&gt;&lt;/u&gt;&amp;lt;?&lt;br /&gt;
        $lacartella = opendir(&#39;.&#39;);&lt;br /&gt;
        while($file = readdir($lacartella) &lt;br /&gt;
        {&lt;br /&gt;
        $tutti_i_file[] = $file &lt;br /&gt;
        }
        &lt;br /&gt;
        ?&amp;gt; &lt;br /&gt;
        In questo modo avremo un arrey con tutti i file contenuti nella cartella corrente.&lt;/span&gt;&lt;span class=&quot;Stile9&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;
        Se non usiamo il ciclo la funzione readdir legge solo il primo file della directory.
        &lt;/span&gt; &lt;/span&gt; 
        &lt;/div&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Realizzare un semplice contatore&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Per realizzare un semplice contatore php bastano poche righe di codice e 
il gioco è fatto.&lt;br /&gt;
Il codice da utilizzare per la realizzazione del contatore è questo:&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
$var=@fopen(&quot;contatore.txt&quot;,&#39;r&#39;);&lt;br /&gt;
$leggi=@fread($var,filesize(&quot;contatore.txt&quot;));&lt;br /&gt;
@fclose($var);&lt;br /&gt;
if ($leggi==null)&lt;br /&gt;
{&lt;br /&gt;
$leggi=1;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
$leggi = $leggi+1;&lt;br /&gt;
}&lt;br /&gt;
$var=@fopen(&quot;/indirizzo_directory/...../contatore.txt&quot;,&#39;w&#39;);&lt;br /&gt;
@fwrite($var,$leggi);&lt;br /&gt;
@fclose($var);&lt;br /&gt;
echo &quot;N° Visite: &quot;,$leggi,&quot;&quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Questo contatore si serve di un file di testo contatore.txt per segnare le 
visite.&lt;br /&gt;
E&#39; semplice da implementare ma ha un principale problema, ovvero: che si 
aggiorna a ogni refresh.&lt;br /&gt;
Questo problema però, può essere eliminato con l&#39;utilizzo dei cookie. &lt;br /&gt;
=====================================================&lt;br /&gt;
Realizzare un piccolo contatore&lt;br /&gt;
Il contatore che andremo a costruire, crea un cookie nel computer dell&#39;utente 
con il suo IP e aggiorna il conteggio in base allo stato del cookie. Se il 
cookie è presente e l&#39;IP scritto nel cookie è lo stesso IP dell&#39;utente corrente, 
allora lo script riconosce l&#39;utente e sa che ha già visitato il sito oppure se è 
presente il cookie, ma l&#39;IP è diverso da quello dell&#39;utente corrente oppure non 
è presente, lo script sa che l&#39;utente è nuovo oppure che il cookie è scaduto, 
allora aggiorna il conteggio. Questo script usa la funzione setcookie(), la 
quale deve essere inviata prima di inviare gli headers. Questo significa che 
questa funzione dve essere inserita prima del codice HTML. Il conteggio, per 
comodità, viene inserito in un file di testo ma se volete potete usare anche un 
database. Ecco il codice.&lt;br /&gt;
$c_ip = $HTTP_COOKIE_VARS[&quot;user_ip&quot;];&lt;br /&gt;
$counter_file = &quot;counter/count.txt&quot;;&lt;br /&gt;
$counter_file_line = file($counter_file); if(!$c_ip) {&lt;br /&gt;
setcookie(&quot;user_ip&quot;, $REMOTE_ADDR, time()+360000); $counter_file_line[0]++;&lt;br /&gt;
$cf = fopen($counter_file, &quot;w+&quot;);&lt;br /&gt;
fputs($cf, &quot;$counter_file_line[0]&quot;); fclose($cf);&lt;br /&gt;
}&lt;br /&gt;
elseif($c_ip != $REMOTE_ADDR){&lt;br /&gt;
$counter_file_line[0]++; $cf = fopen($counter_file, &quot;w+&quot;);&lt;br /&gt;
fputs($cf, &quot;$counter_file_line[0]&quot;);&lt;br /&gt;
fclose($cf);&lt;br /&gt;
}&lt;br /&gt;
Ora analizziamo lo script pezzo per pezzo.&lt;br /&gt;
$c_ip = $HTTP_COOKIE_VARS[&quot;user_ip&quot;];&lt;br /&gt;
$counter_file = &quot;counter/count.txt&quot;;&lt;br /&gt;
$counter_file_line = file($counter_file);&lt;br /&gt;
La prima riga assegna un nome ad una variabile. La variabile che abbiamo 
nominato, è la variabile che farà riferimento al nostro cookie se lo script lo 
ha creato in precedenza. Non è obbligatorio usare $HTTP_COOKIE_VARS[] per 
rimandare a un cookie, generalmente può essere chiamato col suo nome com una 
variabile (es. $user_ip). La seconda variabile, indica dove il file di testo per 
il contatore deve essere memorizzato. Questa directory può essere modificata in 
base alle esigenze di ognuno. La terza variabile apre il file di testo e ne 
scrive il contenuto in un array usando la funzione file().&lt;br /&gt;
if(!$c_ip) {&lt;br /&gt;
Questa riga è la nostra istruzione if() che controlla la presenza della nostra 
variabile.&lt;br /&gt;
setcookie(&quot;user_ip&quot;, $REMOTE_ADDR, time()+360000);&lt;br /&gt;
Questa riga crea il nostro cookie. Se non capite il funzionamento della funzione 
setcookie() fae riferimento al manuale del PHP per magiori detagli, ma 
fondamentalmente viene creato un cookie col nome &quot;user_ip&quot; e il suo valore è 
l&#39;IP dell&#39;utente. Il terzo argomento è il tempo che trascorrerà prima che il 
cookie venga cancellato e richiama la funzione time(). Come si può vedere, c&#39;è 
scritto time()+360000 che significa l&#39;ora corrente più 360000 secondi. Questo è 
il numero che ho scelto per il mio script ed è un valore accettabile prima che 
il cookie venga eliminato comunque può essere modificato a piacimento. Se non 
inserite il terzo elemento, il cookie non verrà mai eliminato, dovrete farlo a 
mano. Questo codice viene usato solamente se il server non trova il cookie 
richiesto.&lt;br /&gt;
$counter_file_line[0]++;&lt;br /&gt;
$cf = fopen($counter_file, &quot;w+&quot;);&lt;br /&gt;
fputs($cf, &quot;$counter_file_line[0]&quot;);&lt;br /&gt;
fclose($cf);&lt;br /&gt;
}&lt;br /&gt;
Questa è la parte di codice che aggiunge le informazioni al contatore. La prima 
riga aggiunge il numero 1 al valore della prima riga nel file di testo. La 
seconda riga apre il file per modificarlo ed inserirci i dati. La terza riga 
scrive i nuovi dati nel file di testo. Infine, l&#39;ultima riga chiude il file.&lt;br /&gt;
elseif($c_ip != $REMOTE_ADDR) {&lt;br /&gt;
Queste righe controllano il valore del cookie. Se il valore del cookie non è 
uguale all&#39;IP dell&#39;utente corrente questa parte di codice viene saltata.&lt;br /&gt;
$counter_file_line[0]++;&lt;br /&gt;
$cf = fopen($counter_file, &quot;w+&quot;);&lt;br /&gt;
fputs($cf, &quot;$counter_file_line[0]&quot;);&lt;br /&gt;
fclose($cf);&lt;br /&gt;
}&lt;br /&gt;
Per questa riga non servono spiegazioni. Per visualizzare il contatore ci serve 
solo una riga di codice come quella illustrata qui sotto.&lt;br /&gt;
echo $counter_file_line[0];&lt;br /&gt;
Il codice riportato qui sotto, visualizza il contatore. Se volete visualizzare 
il contatore in una pagina diversa da quella che dove è inserito il codice che 
incrementa il contatore, usa questo:&lt;br /&gt;
$counter_file = &quot;counter/count.txt&quot;;&lt;br /&gt;
$counter_file_line = file($counter_file);&lt;br /&gt;
echo $counter_file_line[0];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Configurare php per l&#39;invio di e-mail in locale&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Inviare email da ambiente locale&lt;br /&gt;
Quando si sviluppano, in ambiente locale, degli script in PHP che devono inviare 
email, molto spesso il test in locale non funziona perchè PHP non riesce a 
trovare il server SMTP da utilizzare per la posta in uscita.&lt;br /&gt;
Per fare in modo che PHP utilizzi il server SMTP a nostra disposizione è 
sufficiente aprire con un editor di testi, il file di configurazione di PHP che 
si chiama php.ini, situato nella directory principale del proprio sistema 
operativo (directory WINDOWS per XP), individuare la stringa smtp e impostarla 
con il proprio server SMTP preferito.&lt;br /&gt;
Per esempio: se utilizzate Libero.it impostate la riga nel seguente modo:&lt;br /&gt;
smtp = smtp.libero.it&lt;br /&gt;
In questo modo sarete in grado di testare anche in locale gli script PHP che 
inviano email.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Aggiornare automaticamente il copyright all&#39;anno attuale&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;In fondo ad ogni sito spesso è possibile trovare scritte del tipo &quot;Tutti 
i diritti riservati © 2005&quot;, che spesso vengono inserite manualmente in puro 
Html.&lt;br /&gt;
Ma cosa facciamo la notte di S. Silvestro? Invece di festeggiare e stappare lo 
spumante pensiamo a cambiare l&#39;anno del copyright in &quot;2006&quot;?... Non credo 
proprio.&lt;br /&gt;
Per evitare che la gente che si colleghi da quel momento fino a prima del nostro 
aggiornamento trovi ancora il copyright &quot;aggiornato&quot; al 2005 useremo la funzione 
date() di Php che recupererà e stamperà a video solo l&#39;anno, a partire dalla 
data corrente.&lt;br /&gt;
Lo script andrà così realizzato:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$anno = date (&quot;Y&quot;);&lt;br /&gt;
print &quot;Tutti i diritti riservati &amp;amp;copy; $anno&quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Ora potete festeggiare tranquillamente con i vostri amici e parenti senza 
pensare all&#39;aggiornamento del copyright. &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Il modulo Segnala ad un amico&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;In questo tutorial vedremo come realizzare un modulo cosiddetto &quot;Tell a 
friend&quot;, ossia un form mail attraverso cui un visitatore può segnalare ad un 
amico un sito web.&lt;br /&gt;
Lo script si compone di due pagine:&lt;br /&gt;
- modulo.htm , contenente il form per l&#39;inserimento dei dati;&lt;br /&gt;
- send.php , contenente il codice PHP per l&#39;invio dell&#39;email.&lt;br /&gt;
Apriamo quindi il nostro editor HTML o testuale e digitiamo il codice di &#39;modulo.htm&#39; 
:&lt;br /&gt;
&amp;lt;form method=&quot;post&quot; action=&quot;send.php&quot;&amp;gt;&lt;br /&gt;
Il tuo nome&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;input name=&quot;nomemittente&quot; type=&quot;text&quot; size=&quot;50&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Il tuo indirizzo e-mail&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;input name=&quot;emailmittente&quot; type=&quot;text&quot; size=&quot;50&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Il nome dell&#39;amico&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;input name=&quot;nomedestinatario&quot; type=&quot;text&quot; size=&quot;50&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
L&#39;indirizzo e-mail dell&#39;amico&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;input name=&quot;emaildestinatario&quot; type=&quot;text&quot; size=&quot;50&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;submit&quot; value=&quot;Invia segnalazione&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;reset&quot; value=&quot;Cancella segnalazione&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
Il codice qui sopra riguarda logicamente solo il form, e quindi dovremo 
aggiungerlo alla struttura di base, formata dai tag classici ed indispensabili, 
quali &amp;lt;HTML&amp;gt;, &amp;lt;HEAD&amp;gt; e &amp;lt;BODY&amp;gt;.&lt;br /&gt;
Procediamo ora con la realizzazione di &#39;send.php&#39; ; per spirito di eleganza, 
realizzeremo un codice PHP che invii l&#39;email in formato HTML, basandoci su 
quanto detto in un altro tutorial:&lt;br /&gt;
&amp;lt;?PHP&lt;br /&gt;
// Processo di recupero dei dati&lt;br /&gt;
$nomemittente = $_POST[&#39;nomemittente&#39;];&lt;br /&gt;
$emailmittente = $_POST[&#39;emailmittente&#39;];&lt;br /&gt;
$nomedestinatario = $_POST[&#39;nomedestinatario&#39;];&lt;br /&gt;
$emaildestinatario = $_POST[&#39;emaildestinatario&#39;];&lt;br /&gt;
// Configuro il testo del messaggio che apparirà all&#39;amico&lt;br /&gt;
$messaggio = &quot;Ciao $nomedestinatario, ricevi questa mail perchè $nomemittente ti 
ha consigliato di visitare AG web solutions&quot;;&lt;br /&gt;
// Processo di controllo [Opzionale]&lt;br /&gt;
if ($nomemittente==null)&lt;br /&gt;
{&lt;br /&gt;
echo (&quot;Errore: compilare il campo &#39;Il tuo nome&#39;&quot;);&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
if ($emailmittente==null)&lt;br /&gt;
{&lt;br /&gt;
echo (&quot;Errore: compilare il campo &#39;Il tuo indirizzo e-mail&#39;&quot;);&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
if ($nomedestinatario==null)&lt;br /&gt;
{&lt;br /&gt;
echo (&quot;Errore: compilare il campo &#39;Il nome dell&#39;amico&#39;&quot;);&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
if ($emaildestinatario==null)&lt;br /&gt;
{&lt;br /&gt;
echo (&quot;Errore: compilare il campo &#39;Indirizzo e-mail dell&#39;amico&#39;&quot;);&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
// Processo di configurazione dell&#39;email&lt;br /&gt;
// [Destinatario, mittente, ecc]&lt;br /&gt;
$mail_to = $emaildestinatario;&lt;br /&gt;
$mail_from = $emailmittente;&lt;br /&gt;
$mail_subject = &quot;$nomemittente ti segnala AG web solutions&quot;;&lt;br /&gt;
$mail_body = &quot;&amp;lt;p&amp;gt;&amp;lt;font color=#000000&amp;gt;$messaggio&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&quot;;&lt;br /&gt;
// Intestazioni HTML&lt;br /&gt;
$mail_in_html = &quot;MIME-Version: 1.0\r\n&quot;;&lt;br /&gt;
$mail_in_html .= &quot;Content-type: text/html; charset=iso-8859-1\r\n&quot;;&lt;br /&gt;
$mail_in_html .= &quot;From: &amp;lt;$mail_from&amp;gt;&quot;;&lt;br /&gt;
// Processo di invio&lt;br /&gt;
if (mail($mail_to, $mail_subject, $mail_body, $mail_in_html))&lt;br /&gt;
{&lt;br /&gt;
echo (&quot;E-mail inviata con successo&quot;);&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
echo (&quot;Errore interno durante l&#39;invio...&quot;);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Il codice è sufficientemente commentato, e presenta un processo di recupero dei 
dati iniziale, seguito da un controllo e dal processo di invio. Salviamo i files 
e proviamo a testare lo script. &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Operazioni sulle stringhe con Php&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Con questo tutorial impareremo a lavorare con le stringhe in Php. 
Sappiamo benissimo che anche con i Css è possibile modificare del testo. La 
differenza sostanziale sta nel fatto che mentre con i Css modifichiamo solo la 
visualizzazione, con Php modifichiamo la stringa vera e propria.&lt;br /&gt;
Ve ne chiedete l&#39;utilità di tutto ciò? Supponete di avere a che fare con un form 
e volete che tutti i dati in esso inseriti siano scritti in maiuscolo. Dato che 
ogni utente ha il suo modo di compilare i form, saremo noi a risolvere questo 
problema.&lt;br /&gt;
Innanzitutto ecco un codice che effettua tutte le possibili operazioni su 
stringhe:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//definisco la stringa su cui operare&lt;br /&gt;
$stringa = &quot;visita sassidesign&quot;;&lt;br /&gt;
//operazioni con le stringhe&lt;br /&gt;
$strtolower = strtolower($stringa); //la stringa rimane tale perchè è già 
minuscola&lt;br /&gt;
$strtoupper = strtoupper($stringa);&lt;br /&gt;
$ucfirst = ucfirst($stringa);&lt;br /&gt;
$ucwords = ucwords($stringa);&lt;br /&gt;
//stampo tutte le variabili&lt;br /&gt;
echo &quot;Il risultato con strtolower() è: $strtolower &amp;lt;br /&amp;gt;&quot;;&lt;br /&gt;
echo &quot;Il risultato con strtoupper() è: $strtoupper &amp;lt;br /&amp;gt;&quot;;&lt;br /&gt;
echo &quot;Il risultato con ucfirst() è: $ucfirst &amp;lt;br /&amp;gt;&quot;;&lt;br /&gt;
echo &quot;Il risultato con ucwords() è: $ucwords &amp;lt;br /&amp;gt;&quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Il codice è abbastanza commentato. Vediamo comunque in dettaglio le possibili 
funzioni:&lt;br /&gt;
strtolower()&lt;br /&gt;
Converte l&#39;intera stringa in minuscolo. Nel nostro caso la funzione non 
convertirà niente, dato che la stringa di partenza è già in minuscolo;&lt;br /&gt;
strtoupper()&lt;br /&gt;
Converte l&#39;intera stringa in maiuscolo;&lt;br /&gt;
ucfirst()&lt;br /&gt;
Converte la prima lettera della stringa in maiuscolo;&lt;br /&gt;
ucwords()&lt;br /&gt;
Converte la prima lettera di ogni parola in maiuscolo.&lt;br /&gt;
Ma veniamo al nostro problema. Vogliamo che tutti i dati inseriti nel form 
vengano immagazzinati nel database in maiuscolo. Ecco come fare:&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
$username = $_POST[&#39;username&#39;]; //recupero dal form&lt;br /&gt;
$usernamemaiuscolo = strtoupper($username); //converto in maiuscolo&lt;br /&gt;
// inserimento nel database della variabile &#39;usernamemaiuscolo&#39; e non di &#39;username&#39;&lt;br /&gt;
?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Generare password casuali&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Quante volte avete dimenticato una password? E quante volte che avete 
eseguito le operazioni di recupero della password vi è arrivata una mail con una 
password di lettere e numeri random?&lt;br /&gt;
Bhe, ecco un codice semplice ma che fa il suo dovere grazie alle funzioni rand e 
chr di php.&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Lunghezza della password da generare&lt;br /&gt;
$lunghezza_password = 10;&lt;br /&gt;
for ( $k=1;$k&amp;lt;=$lunghezza_password;$k++ )&lt;br /&gt;
{&lt;br /&gt;
// $k multiplo di 3&lt;br /&gt;
if ( $k % 3 )&lt;br /&gt;
{&lt;br /&gt;
// Scegliamo se maiuscola o minuscola&lt;br /&gt;
if ( rand( 0,200 ) &amp;lt;= 100 )&lt;br /&gt;
{&lt;br /&gt;
// Maiuscola&lt;br /&gt;
// Nella tabella ASCII da 65 a 90 ci sono le lettere dell&#39;alfabeto Maiuscole&lt;br /&gt;
$newpass .= chr( rand ( 65,90 ) );&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
// Minuscola&lt;br /&gt;
// Nella tabella ASCII da 97 a 122 ci sono le lettere dell&#39;alfabeto Minuscole&lt;br /&gt;
&lt;br /&gt;
$newpass .= chr( rand ( 97,122 ) );&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
// $k non è multiplo di 3&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
// Inseriamo un numero&lt;br /&gt;
$newpass .= rand( 0,9 );&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
print $newpass;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Con questo piccolo script, generiamo una stringa di lunghezza a vostra scelta 
composta da lettere (maiscole e minuscole) e numeri.&lt;br /&gt;
La funzione rand non fa altro che generare un numero casuale. Se non gli viene 
passato nessun range, sceglie autonomamente. La funzione chr recupera il valore 
nella tabella ASCII corrispondente al numero che gli viene passato.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Variabili PHP&lt;br /&gt;
&lt;/b&gt;&lt;u&gt;Ricavare la posizione sul server di una pagina web&lt;br /&gt;
&lt;/u&gt;&lt;/i&gt;Avete mai visto un sito che indica: Ti trovi in...&lt;br /&gt;
Bene, per fare in modo che sulla vostra pagina web appaia il percorso non dovete 
fare altro che inserire queste poche righe:&lt;br /&gt;
&amp;lt;?php print (&quot;Sei in: &quot;); ?&amp;gt;&lt;br /&gt;
&amp;lt;?php $currentPage = $_SERVER[&quot;PHP_SELF&quot;];&lt;br /&gt;
print ($currentPage); ?&amp;gt;&lt;br /&gt;
Testate tutto e dovreste avere come output: Sei in: /nomecartella/nomepagina.php&lt;br /&gt;
Recuperare la provenienza dell&#39;utente&lt;br /&gt;
Avete notato come molti siti che offrono un servizio di statistica per il nostro 
sito danno anche la possibilità di controllare i siti da cui provengono gli 
utenti?&lt;br /&gt;
Beh, per fare una cosa del genere viene usato questo piccolissimo script che 
recupera l&#39;indirizzo della pagina di provenienza dell&#39;utente...&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$refer = $_SERVER[&#39;HTTP_REFERER&#39;];&lt;br /&gt;
echo ($refer);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;u&gt;&lt;i&gt;Recuperare l&#39;indirizzo IP del visitatore&lt;br /&gt;
&lt;/i&gt;&lt;/u&gt;Molte volte, per svariati motivi, ci può essere utile conoscere 
l&#39;indirizzo IP (Internet Protocol) dei nostri visitatori, specie nelle 
applicazioni che riguardano operazioni di scrittura, modifica o eliminazione su 
database.&lt;br /&gt;
Dobbiamo sapere innanzitutto che generalmente il nostro IP è dinamico, nel senso 
che ogni volta che chiudiamo una sessione internet e ne riapriamo un&#39;altra, 
questo indirizzo IP cambia.&lt;br /&gt;
L&#39;indirizzo è formato da quattro numeri che possono variare tra 0 e 255 separati 
da un punto; quando lavoriamo in locale il nostro IP è 127.0.0.0, ma un esempio 
potrebbe benissimo essere 211.20.34.87.&lt;br /&gt;
Recuperare l&#39;indirizzo IP del visitatore è molto facile; il comando per 
stamparlo a video è questo,&lt;br /&gt;
&amp;lt;?php echo $REMOTE_ADDR ?&amp;gt;&lt;br /&gt;
ma potete modificare questa riga per fare in modo che l&#39;indirizzo venga salvato 
su un file di testo o su un database! &lt;br /&gt;
&lt;u&gt;&lt;i&gt;Conoscere la versione installata del Php&lt;br /&gt;
&lt;/i&gt;&lt;/u&gt;Capita spesso, specie a chi è alle prime armi con il php, di trovarsi 
dinanzi alla necessità di sapere quale versione di php è installata nel PC. Per 
esempio può capitare di dover scegliere se usare gli array $HTTP_POST_VARS[] e 
$HTTP_GET_VARS[] o i nuovi ed equivalenti array $_POST[] e $_GET[] dato che 
questi ultimi hanno sostituito i precedenti già dalla versione 4.1.0 di PHP.&lt;br /&gt;
La procedura per conoscerla è la seguente:&lt;br /&gt;
* Aprire l&#39;editor PHP (anche il classico notepad)&lt;br /&gt;
* Creare una nuova pagina PHP, immettendo in essa questa riga di codice:&lt;br /&gt;
&amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
* Salvare la pagina&lt;br /&gt;
* Lanciare ora la pagina sul vostro server locale. Apparirà una tabella dove 
sarà fornita la risposta al vostro interrogativo!&lt;br /&gt;
&lt;u&gt;&lt;i&gt;Dettagli sul client dell&#39;utente&lt;br /&gt;
&lt;/i&gt;&lt;/u&gt;Per meglio capire il funzionamento facciamo un esempio pratico 
verificando il browser del nostro visitatore. Per fare ciò utilizzeremo una 
delle variabili di sistema. Sto parlando della variabile globale $_SERVER[&#39;HTTP_USER_AGENT&#39;];.&lt;br /&gt;
Per prima cosa visualizziamo cosa contiene questa variabile con il seguente 
codice per pura curiosità:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
print $_SERVER[&#39;HTTP_USER_AGENT&#39;];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Con questo semplice codice abbiamo detto al nostro server di stampare a video il 
contenuto della variabile. Per rendere un pò più dinamico introduciamo un 
controllo if-else:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ( strstr($_SERVER[&#39;HTTP_USER_AGENT&#39;], &quot;MSIE&quot;) )&lt;br /&gt;
{&lt;br /&gt;
print &#39;Stai usando Internet Explorer&#39;;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
print &#39;Non stai usando Internet Explorer&#39;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
In poche parole la funzione strstr cerca nella variabile, la presenza del testo 
che gli abbiamo specificato, in questo caso MSIE e se lo trova risponde true. 
Quindi il controllo if risponde di conseguenza &quot;Stai usando Internet Explorer&quot; 
se la trova, altrimenti &quot;Non stai usando Internet Explorer&quot;.&lt;br /&gt;
&lt;u&gt;&lt;i&gt;Effettuare il redirect con Php&lt;br /&gt;
&lt;/i&gt;&lt;/u&gt;Per motivi di logistica o di organizzazzione alle volte può essere 
necessario spostare un file da una posizione sul server ad un&#39; altra. Per 
evitare di ritrovarsi con collegamenti interrotti e perdita di posizioni nei 
motori di ricerca si ricorre al redirect (reindirizzamento).&lt;br /&gt;
Questo argomento è stato già trattato in precedenza per due linguaggi: Html (Meta-tag) 
e Javascript.&lt;br /&gt;
Supponiamo di disporre della pagina &quot;guestbook.php&quot; inizialmente collocata nella 
root del sito, e di volerla trasferire nella cartella &quot;guestbook&quot;.&lt;br /&gt;
Sarà innanzitutto necessario creare la pagina &quot;guestbook/guestbook.php&quot; per il 
corretto funzionamento del guestbook nella sua nuova posizione sul server, 
nonchè rimpiazzare il codice di &quot;guestbook.php&quot; (quello nella root) con questo:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
header(&quot;Location: guestbook/guestbook.php&quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Tanto per spiegarmi meglio avremo due file adesso (e non più uno):&lt;br /&gt;
* guestbook.php (che punta al nuovo guestbook grazie al redirect);&lt;br /&gt;
* guestbook/guestbook.php (il nuovo guestbook).&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Inserire data e ora in una pagina web&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Inserire la data e l&#39;orario del server nelle proprie pagine web è 
facilissimo.&lt;br /&gt;
Basta solo incollare queste righe di codice php:&lt;br /&gt;
Per la data:&lt;br /&gt;
&amp;lt;?php print (date (&quot;d/m/Y&quot;)); ?&amp;gt;&lt;br /&gt;
Per l&#39;ora:&lt;br /&gt;
&amp;lt;?php print (date (&quot;H:i:s&quot;)); ?&amp;gt;&lt;br /&gt;
Quindi, con un po di ingegno potremmo avere, per esempio:&lt;br /&gt;
Sono le ore &amp;lt;?php print (date (&quot;H:i:s&quot;)); ?&amp;gt; del &amp;lt;?php print (date (&quot;d/m/Y&quot;)); 
?&amp;gt;&lt;br /&gt;
Per ottenere la data in altri formati, cambiate i caratteri nella sintassi del 
codice.&lt;br /&gt;
a - &quot;am&quot; o &quot;pm&quot;&lt;br /&gt;
A - &quot;AM&quot; o &quot;PM&quot;&lt;br /&gt;
d - giorno del mese a 2 cifre (con lo zero, eventualmente), da &quot;01&quot; a &quot;31&quot;&lt;br /&gt;
D - giorno della settimana in inglese a tre lettere&lt;br /&gt;
F - mese in forma estesa in inglese&lt;br /&gt;
h - ora in formato 12 ore&lt;br /&gt;
H - ora in formato 24 ore&lt;br /&gt;
g - ora in formato 12 ore (senza lo zero), da &quot;1&quot; a &quot;12&quot;&lt;br /&gt;
G - ora in formato 24 ore (senza lo zero), da &quot;0&quot; a &quot;23&quot;&lt;br /&gt;
i - minuti (con lo zero, eventualmente), da &quot;00&quot; a &quot;59&quot;&lt;br /&gt;
j - giorno del mese a 2 cifre (senza lo zero), da &quot;1&quot; a &quot;31&quot;&lt;br /&gt;
l - giorno della settimana in inglese; es. &quot;Friday&quot;&lt;br /&gt;
m - mese a 2 cifre (con lo zero, eventualmente), da &quot;01&quot; a &quot;12&quot;&lt;br /&gt;
n - mese a 2 cifre (senza lo zero), da &quot;1&quot; a &quot;12&quot;&lt;br /&gt;
M - mese in inglese a tre lettere&lt;br /&gt;
s - secondi a 2 cifre (con lo zero, eventualmente), da &quot;00&quot; a &quot;59&quot;&lt;br /&gt;
S - suffiso ordinale inglese&lt;br /&gt;
t - numero di giorni del mese specificato, da &quot;28&quot; a &quot;31&quot;&lt;br /&gt;
w - giorno della settimana espresso come numero, da &quot;0&quot; (Domenica) a &quot;6&quot; 
(Sabato)&lt;br /&gt;
Y - anno a 4 cifre&lt;br /&gt;
y - anno a 2 cifre&lt;br /&gt;
z - giorno dall&#39;inizio dell&#39;anno&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Recuperare la dimensione di un file&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Il php ci mette a disposizione un comando per ricavare la dimensione in 
byte di un file presente sul server.&lt;br /&gt;
Il comando da eseguire ? il seguente:&lt;br /&gt;
$dimensione = filesize(&quot;nomedelfile.xxx&quot;);&lt;br /&gt;
Pertanto, supponiamo di voler calcolare il peso del nostro file index.php... il 
codice sar? il seguente:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo (&quot;Il file pesa &quot;);&lt;br /&gt;
//recupero la dimensione del file in byte&lt;br /&gt;
$dimensione = filesize(&quot;index.php&quot;);&lt;br /&gt;
echo ($dimensione);&lt;br /&gt;
echo (&quot; byte, pari a &quot;);&lt;br /&gt;
//converto da byte a kilobyte&lt;br /&gt;
$dimensioneinkb = ($dimensione / 1024) ;&lt;br /&gt;
echo ($dimensioneinkb);&lt;br /&gt;
echo (&quot; kb.&quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
La riga $dimensioneinkb = ($dimensione / 1024) ; serve a convertire la grandezza 
da byte a kilobyte (1 kb = 1024 byte).&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Realizzare un sito facilmente aggiornabile&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Qui di seguito vedremo come realizzare un sito in PHP. In dettaglio 
vedremo le tecniche da utilizzare per un sito web facilmente aggiornabile.&lt;br /&gt;
Supponiamo di avere un sito con un header superiore, un corpo centrale ed un 
footer inferiore.&lt;br /&gt;
Inserendo in ogni pagina il codice di header, footer e corpo centrale, 
l&#39;aggiornamento risulterebbe assai difficoltoso e lento. Ci serviremo quindi del 
comando include() di PHP, che permette di richiamare più files in altri.&lt;br /&gt;
Creiamo un file &quot;header.php&quot; ed inseriamoci questo codice:&lt;br /&gt;
&amp;lt;div id=&quot;header&quot;&amp;gt;&lt;br /&gt;
Qui tutto il codice dell&#39;header...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Da notare come in questo file non siamo presenti i tags HTML o BODY.&lt;br /&gt;
Ora creiamo &quot;footer.php&quot;:&lt;br /&gt;
&amp;lt;div id=&quot;footer&quot;&amp;gt;&lt;br /&gt;
Qui tutto il codice del footer&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Quindi &quot;index.php&quot;:&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; 
&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Il mio sito con PHP&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;!-- Inizio HEADER --&amp;gt;&lt;br /&gt;
&amp;lt;?php include(&quot;header.php&quot;); ?&amp;gt;&lt;br /&gt;
&amp;lt;!-- Fine Header --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Inizio codice pagina --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&quot;corpo&quot;&amp;gt;&lt;br /&gt;
Qui il codice della pagina&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- Fine codice pagina --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Inizio codice footer --&amp;gt;&lt;br /&gt;
&amp;lt;?php include(&quot;footer.php&quot;); ?&amp;gt;&lt;br /&gt;
&amp;lt;!-- Fine codice footer --&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
Da notare come il codice di header e footer venga richiamato in ogni pagina, di 
modo che sia possibile modificarlo nei rispettivi file e rendere effettive le 
modifiche in tutte le pagine del sito.&lt;br /&gt;
Possiamo ora personalizzare la grafica dei tre DIV con i CSS. Sicuramente un 
passo in avanti nella realizzazione di un sito web.&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Creare un RSS con PHP e MySql&lt;br /&gt;
&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;RSS, o Rich Site Summary ormai si sta diffondendo 
a macchia d&#39;olio su tutto il web.&lt;br /&gt;
Il segreto del suo successo sta nel fatto che RSS è veloce e semplice allo 
stesso tempo.&lt;br /&gt;
In questo tutorial è descritto come creare e ad aggiornare il feed RSS 
automaticamente utilizzando PHP.&lt;br /&gt;
Il database&lt;br /&gt;
Creiamo la tabella news nel nostro database mysql&lt;br /&gt;
CREATE TABLE news (id int PRIMARY KEY AUTO_INCREMENT,&lt;br /&gt;
title varchar(255),&lt;br /&gt;
content text);&lt;br /&gt;
Iniziamo a riempire qualche campo di esempio&lt;br /&gt;
INSERT INTO news VALUES (&#39;&#39;, &#39;test&#39;, &#39;test content&#39;);&lt;br /&gt;
INSERT INTO news VALUES (&#39;&#39;, &#39;test2&#39;, &#39;more content&#39;);&lt;br /&gt;
Questa è la struttura del file RSS che dobbiamo ricreare.&lt;br /&gt;
&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;&lt;br /&gt;
&amp;lt;rss version=&quot;2.0&quot;&amp;gt;&lt;br /&gt;
&amp;lt;channel&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;TagTagWeb&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;link&amp;gt;http://www.tagtagweb.com&amp;lt;/link&amp;gt;&lt;br /&gt;
&amp;lt;description&amp;gt;Feed &amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;language&amp;gt;it&amp;lt;/language&amp;gt;&lt;br /&gt;
&amp;lt;item&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Titolo 1&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;link&amp;gt;http://www.yoururlhere.com/1&amp;lt;/link&amp;gt;&lt;br /&gt;
&amp;lt;description&amp;gt;Contenuto 1&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;item&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Titolo 2&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;link&amp;gt;http://www.yoururlhere.com/2&amp;lt;/link&amp;gt;&lt;br /&gt;
&amp;lt;description&amp;gt;Contenuto 2&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/channel&amp;gt;&lt;br /&gt;
&amp;lt;/rss&amp;gt;&lt;br /&gt;
Script Php&lt;br /&gt;
La prima cosa da fare è recuperare i dati presenti sul database&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$connection = mysql_connect(&quot;localhost&quot;, &quot;username&quot;, &quot;password&quot;);&lt;br /&gt;
mysql_select_db(&quot;database&quot;, $connection);&lt;br /&gt;
$select = &quot;SELECT * FROM news ORDER BY id DESC LIMIT 5&quot;;&lt;br /&gt;
$query = mysql_query($select) or die(mysql_error());&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Abbiamo chiesto al database di restituirci al massimo 5 righe ordinate dal più 
recente al più vecchio&lt;br /&gt;
Iniziamo adesso a scrivere il file:&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
$file = fopen(&quot;rss.xml&quot;, &quot;w&quot;);&lt;br /&gt;
fwrite($file, &quot;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;&lt;br /&gt;
&amp;lt;rss version=&quot;2.0&quot;&amp;gt;&lt;br /&gt;
&amp;lt;channel&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;TagTagWeb Feed&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;link&amp;gt;http://www.tagtagweb.com&amp;lt;/link&amp;gt;&lt;br /&gt;
&amp;lt;description&amp;gt;Feed &amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;language&amp;gt;it&amp;lt;/language&amp;gt;&quot;);&lt;br /&gt;
//cicliamo sugli elementi ricavati da db e scriviamo gli items&lt;br /&gt;
while($array = mysql_fetch_array($query)){&lt;br /&gt;
extract($array);&lt;br /&gt;
$content = htmlentities($content);&lt;br /&gt;
fwrite($file, &quot;&amp;lt;item&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;$title&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;link&amp;gt;http://www.tagtagweb.com/index.php?blog=post&amp;amp;amp;id=$id&amp;lt;/link&amp;gt;&lt;br /&gt;
&amp;lt;description&amp;gt;$content&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&quot;);&lt;br /&gt;
}&lt;br /&gt;
fwrite($file, &quot;&amp;lt;/channel&amp;gt;&amp;lt;/rss&amp;gt;&quot;);&lt;br /&gt;
fclose($file);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
In questo caso abbiamo creato un file rss.xml, è possibile inoltre creare RSS al 
volo e far visualizzare all&#39;utente il contenuto xml direttamente sul browser.&lt;br /&gt;
Il procedimento è simile cambiano solamente alcuni accorgimenti:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$connection = mysql_connect(&quot;localhost&quot;, &quot;username&quot;, &quot;password&quot;);&lt;br /&gt;
mysql_select_db(&quot;database&quot;, $connection);&lt;br /&gt;
$select = &quot;SELECT * FROM news ORDER BY id DESC LIMIT 5&quot;;&lt;br /&gt;
$query = mysql_query($select) or die(mysql_error());&lt;br /&gt;
header(&quot;Content-type: text/xml&quot;); //riga importate per far apparire l&#39;xml nel 
browser&lt;br /&gt;
//scrivo direttamente sul documento&lt;br /&gt;
echo &quot;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;&lt;br /&gt;
&amp;lt;rss version=&quot;2.0&quot;&amp;gt;&lt;br /&gt;
&amp;lt;channel&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;TagTagWeb RSS&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;link&amp;gt;http://www.tagtagweb.com&amp;lt;/link&amp;gt;&lt;br /&gt;
&amp;lt;description&amp;gt;Feed&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;language&amp;gt;it&amp;lt;/language&amp;gt;&quot;;&lt;br /&gt;
while($array = mysql_fetch_array($query)){&lt;br /&gt;
extract($array);&lt;br /&gt;
$content = str_replace(&quot;&amp;lt;br /&amp;gt;&quot;, &quot;\n&quot;, $content);&lt;br /&gt;
$content = htmlentities($content);&lt;br /&gt;
$content = str_replace(&quot;&amp;amp;&quot;, &quot;&amp;amp;amp;&quot;, $content);&lt;br /&gt;
echo &quot;&amp;lt;item&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;$title&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;link&amp;gt;http://www.tagtagweb.com/index.php?blog=post&amp;amp;amp;id=$id&amp;lt;/link&amp;gt;&lt;br /&gt;
&amp;lt;description&amp;gt;$content&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&quot;;&lt;br /&gt;
}&lt;br /&gt;
echo &quot;&amp;lt;/channel&amp;gt;&amp;lt;/rss&amp;gt;&quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
=======================================================================&lt;br /&gt;
Creare feed Rss con PHP e MySQL&lt;br /&gt;
In questo tutorial ci occuperemo della realizzazione di un sistema PHP e MySQL 
in grado di gestire in automatico un feed rss.&lt;br /&gt;
In particolare gestiremo la tabella MySQL &quot;News&quot;, composta da tre campi:&lt;br /&gt;
- ID&lt;br /&gt;
- TITOLO&lt;br /&gt;
- DESCRIZIONE&lt;br /&gt;
Ciò che il nostro sistema dovrà fare sarà connettersi al database MySQL, quindi 
selezionare la tabella &quot;news&quot;, estrapolare i dati e visualizzare le ultime news 
come elementi RSS.&lt;br /&gt;
Creiamo un nuovo file e chiamiamolo &quot;rss.php&quot;:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Eseguo le operazioni di connessione al database MySQL&lt;br /&gt;
$connessione = mysql_connect(&quot;localhost&quot;, &quot;username&quot;, &quot;password&quot;);&lt;br /&gt;
mysql_select_db(&quot;nomedatabase&quot;, $connessione);&lt;br /&gt;
$selezionedati = &quot;SELECT * FROM news ORDER BY ID DESC LIMIT 10&quot;;&lt;br /&gt;
$query = mysql_query($selezionedati) or die(mysql_error());&lt;br /&gt;
// Modifico l&#39;intestazione e il tipo di documento da PHP a XML&lt;br /&gt;
header(&quot;Content-type: text/xml&quot;);&lt;br /&gt;
// Eseguo le operazioni di scrittura sul file&lt;br /&gt;
echo (&quot;&amp;lt;rss version=\&quot;2.0\&quot;&amp;gt;&quot;);&lt;br /&gt;
echo (&quot;&amp;lt;channel&amp;gt;&quot;);&lt;br /&gt;
echo (&quot;&amp;lt;title&amp;gt;Nome del FEED &amp;lt;/title&amp;gt;&quot;);&lt;br /&gt;
echo(&quot;&amp;lt;link&amp;gt;http://www.miosito.com&amp;lt;/link&amp;gt;&quot;);&lt;br /&gt;
echo (&quot;&amp;lt;description&amp;gt;Una descrizione del FEED e del mio sito&amp;lt;/description&amp;gt;&quot;);&lt;br /&gt;
echo &quot;&amp;lt;copyright&amp;gt;Copyright 2006 Mio sito.com &amp;lt;/copyright&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;docs&amp;gt;http://blogs.law.harvard.edu/tech/rss&amp;lt;/docs&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;managingEditor&amp;gt;miamail@miosito.com&amp;lt;/managingEditor&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;webMaster&amp;gt;miamail@miosito.com&amp;lt;/webMaster&amp;gt;\n&quot;;&lt;br /&gt;
echo (&quot;&amp;lt;language&amp;gt;IT-it&amp;lt;/language&amp;gt;&quot;);&lt;br /&gt;
while($array = mysql_fetch_array($query)){&lt;br /&gt;
extract($array);&lt;br /&gt;
echo &quot;&amp;lt;item&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;$TITOLO&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;link&amp;gt;http://www.miosito.com/leggi.php?ID=$ID&amp;lt;/link&amp;gt;&lt;br /&gt;
&amp;lt;description&amp;gt;$DESCRIZIONE&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&quot;;&lt;br /&gt;
}&lt;br /&gt;
echo &quot;&amp;lt;/channel&amp;gt;&amp;lt;/rss&amp;gt;&quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Alcune considerazioni&lt;br /&gt;
Sebbene il codice sia sufficientemente commentato, sono necessarie alcune 
considerazioni.&lt;br /&gt;
Si notino innanzitutto le righe:&lt;br /&gt;
// Eseguo le operazioni di scrittura sul file&lt;br /&gt;
echo (&quot;&amp;lt;rss version=\&quot;2.0\&quot;&amp;gt;&quot;);&lt;br /&gt;
echo (&quot;&amp;lt;channel&amp;gt;&quot;);&lt;br /&gt;
echo (&quot;&amp;lt;title&amp;gt;Nome del FEED &amp;lt;/title&amp;gt;&quot;);&lt;br /&gt;
echo(&quot;&amp;lt;link&amp;gt;http://www.miosito.com&amp;lt;/link&amp;gt;&quot;);&lt;br /&gt;
echo (&quot;&amp;lt;description&amp;gt;Una descrizione del FEED e del mio sito&amp;lt;/description&amp;gt;&quot;);&lt;br /&gt;
echo &quot;&amp;lt;copyright&amp;gt;Copyright 2006 Mio sito.com &amp;lt;/copyright&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;docs&amp;gt;http://blogs.law.harvard.edu/tech/rss&amp;lt;/docs&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;managingEditor&amp;gt;miamail@miosito.com&amp;lt;/managingEditor&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;webMaster&amp;gt;miamail@miosito.com&amp;lt;/webMaster&amp;gt;\n&quot;;&lt;br /&gt;
echo (&quot;&amp;lt;language&amp;gt;IT-it&amp;lt;/language&amp;gt;&quot;);&lt;br /&gt;
in cui dovremo inserire le informazioni del nostro FEED e quindi del nostro sito 
web.&lt;br /&gt;
Alcuni di questi elementi sono facoltativi, ma è buona abitudine inserirli 
comunque.&lt;br /&gt;
Particolare attenzione al codice&lt;br /&gt;
while($array = mysql_fetch_array($query)){&lt;br /&gt;
extract($array);&lt;br /&gt;
echo &quot;&amp;lt;item&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;$TITOLO&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;link&amp;gt;http://www.miosito.com/leggi.php?ID=$ID&amp;lt;/link&amp;gt;&lt;br /&gt;
&amp;lt;description&amp;gt;$DESCRIZIONE&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&quot;;&lt;br /&gt;
}&lt;br /&gt;
in cui lo script effettua il ciclo di visualizzazione dei vari records.&lt;br /&gt;
Ogni elemento di un file RSS è contenuto nel TAG &quot;ITEM&quot;, e possiede tre 
sub-elementi:&lt;br /&gt;
- title&lt;br /&gt;
- link&lt;br /&gt;
- description&lt;br /&gt;
Come titolo, lo script manda a video il corrispondente testo presente nel campo 
TITOLO della tabella a livello del record selezionato.&lt;br /&gt;
Come description, lo script manda a video il rispettivo testo presente nel campo 
DESCRIPTION della tabella a livello del record selezionato.&lt;br /&gt;
Per quanto riguarda il sub-elemento LINK:&lt;br /&gt;
&amp;lt;link&amp;gt;http://www.miosito.com/leggi.php?ID=$ID&amp;lt;/link&amp;gt;&lt;br /&gt;
da notare il fatto che si presuppone nel nostro sito esista una pagina LEGGI.PHP 
che in base all&#39;ID digitato, visualizza i dati di una news particolare. Si 
tratta sostanzialmente di una semplice pagina di visualizzazione delle news.&lt;br /&gt;
Lo script visualizza l&#39;ID corrispondente al record selezionato per ogni elemento 
ITEM.&lt;br /&gt;
=======================================================================&lt;br /&gt;
Creare un feed RSS 2.0 in 6 passi&lt;br /&gt;
Come creare un feed RSS 2.0&lt;br /&gt;
Se siete in grado di imparare l’HTML, allora potete facilmente imparare a creare 
un feed RSS 2.0. In questo articolo vi accompagnerò passo passo nella creazione 
di un feed RSS partendo da zero.&lt;br /&gt;
Passo 1: Dichiarazione XML&lt;br /&gt;
Visto che RSS 2.0 deve essere un documento XML valido, la prima riga nel vostro 
feed rss deve essere la dichiarazione XML.&lt;br /&gt;
&amp;lt; ?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br /&gt;
L’encoding è opzionale ma raccomandato. Se state usando qualcosa di diverso da 
UTF-8, ricordatevi di cambiare la riga in accordo con il set di caratteri che 
utilizzate.&lt;br /&gt;
Passo 2: Canale RSS&lt;br /&gt;
In questo passo dobbiamo aprire il tag rss, e il tag channel. Tutto il contenuto 
del vostro feed andrà dantro a questi tag.&lt;br /&gt;
Passo 3: Informazioni del Feed RSS&lt;br /&gt;
Successivamente dovete inserire le informazioni che riguardano il vostro feed, 
tipo il titolo (spesso è uguale alnome del sito di orgine), la descrizione, e un 
link al sito a cui si riferisce.&lt;br /&gt;
Importante è il tag language, dove è importante specificare il codice della 
lingua in cui è scritto il feed. Nel nostro caso sarà it-it, ma potrebbe essere 
us-en, per esempio se il contenuto è in inglese&lt;br /&gt;
http://www.esempio.it/&lt;br /&gt;
Questa è la descrizione del mio feed&lt;br /&gt;
Mon, 12 Sep 2005 18:37:00 GMT&lt;br /&gt;
it-it&lt;br /&gt;
Il tag lastBuildDate dovrebbe indicare la date e l’ora dell’ultima modifica del 
feed. Le date nei feed RSS dovrebbero aderire al documento RFC 822.&lt;br /&gt;
Anche se il tag lastBuildDate non è obbligatorio è altamente consigliato 
inserirlo.&lt;br /&gt;
Passo 4: “Items” RSS&lt;br /&gt;
I contenuti del nostro feed sono elencati negli “item” (elemento) di ogni feed. 
Ogni Item ha un titolo, link, descrizione, data di pubblicazione e guid (un 
identificatore univoco di questo elemento).&lt;br /&gt;
http://esempio.it/item/123&lt;br /&gt;
http://esempio.it/item/123&lt;br /&gt;
Mon, 12 Sep 2005 18:37:00 GMT&lt;br /&gt;
[CDATA[ Questa è la descrizione. ]]&lt;br /&gt;
Assicuratevi di convertire ogni carattere che potrebbe causare la mancata 
validazione dell’XML, questi caratteri includono &amp;lt; , &amp;gt;, &amp;amp; - . E’ buona norma 
includere tutto il contenuto che potrebbe essere formattato in HTML in una 
sezione CDATA.&lt;br /&gt;
Passo 5: Chiusura del tag Channel e RSS.&lt;br /&gt;
Passo 6: Convalidate il Feed&lt;br /&gt;
Verificate la validità del vostro nuovo feed usando FeedValidator.org.&lt;br /&gt;
Altre cose di cui tener nota:&lt;br /&gt;
* Categorie – E’ una buona idea includere anche il tag category nel vostro feed 
RSS, questo va all’interno del tag item. Potete dare ad ogni item molteplici 
categorie, basta includere più elementi category.&lt;br /&gt;
* Questo è solo una micro introduzione a quello che si può fare con un feed RSS, 
vi rccomando di leggere le specifiche RSS 2.0 per maggiori informazioni.&lt;br /&gt;
&lt;a href=&quot;http://digitaldivide.garuti.it/2005/10/12/creare-un-feed-rss-20-in-6-passi/&quot;&gt;
http://digitaldivide.garuti.it/2005/10/12/creare-un-feed-rss-20-in-6-passi/&lt;/a&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Visualizzare un&#39;immagine... solo se il campo di un 
database non è vuoto&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;In molte applicazioni web, specie nei guestbook e nei forum notiamo come 
alcuni utenti hanno, a fianco del loro username, il disegno di una casetta 
linkata alla propria home page e altri utenti no! La spiegazione è semplice: 
l&#39;utente con la cesetta ha un sito web, quello senza no! La risposta è 
banalissima... ma non è questo che volevo spiegarvi :)&lt;br /&gt;
Vediamo la parte pratica. Chi ha avuto a che fare con un&#39;applicazione simile 
saprà che è impossibile (senza adottare lo script che spiegherò tra un po&#39;) 
scegliere di visualizzare l&#39;immagine se il campo del database è pieno o di non 
visualizzarla se questo è vuoto!&lt;br /&gt;
Creiamo pertanto uno script ad hoc per le nostre esigenze, supponendo di avere a 
che fare con un database (lascio a voi il compito della connessione) che dispone 
del campo &#39;sitoweb&#39; e di avere accesso ai dati grazie al recorset &#39;dati_utente&#39;:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$sitoweb = $row_dati_utente[&#39;sitoweb&#39;]; //la variabile sitoweb corrisponde al 
campo sitoweb del database&lt;br /&gt;
if ($row_dati_utente[&#39;sitoweb&#39;] != &quot;&quot;)&lt;br /&gt;
{&lt;br /&gt;
//se questa variabile non è vuota stampo la casetta con il collegamento&lt;br /&gt;
echo &quot;&amp;lt;a href=\&quot;http://$sitoweb\&quot;&amp;gt;&amp;lt;img src=\&quot;/images/home.jpg\&quot; alt=\&quot;Visita il 
sito dell&#39;autore\&quot; width=\&quot;17\&quot; height=\&quot;17\&quot; target=\&quot;blank\&quot; border=\&quot;0\&quot; 
/&amp;gt;&amp;lt;/a&amp;gt;&quot;;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
echo &quot;&quot;; //altrimenti non visualizzo niente&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Come potete capire abbiamo innanzitutto stabilito che la variabile &#39;$sitoweb&#39; 
viene presa in input dal campo &#39;sitoweb&#39; del database. In seguito abbiamo 
definito che se il campo &#39;sitoweb&#39; non è vuoto viene stampata l&#39;immagine della 
casetta (/images/home.jpg) con il link alla home page; in caso contrario non 
viene stampato niente.&lt;br /&gt;
L&#39;html relativo all&#39;inserimento dell&#39;immagine linkata è stato creato grazie al 
comando echo di php. Abbiamo dovuto pertanto usare le cosiddette sequenze di 
escape scrivendo \&quot; al posto delle sole &quot; (virgolette).&lt;br /&gt;
Più difficile a dirsi che a farsi! &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Invio e-mail&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;In questo tutorial vedremo come inviare e-mail dal web, con dei moduli a 
piacere con il PHP.&lt;br /&gt;
Creiamo la pagina contenete il modulo, &quot;modulo.htm&quot;. Ecco il codice del form, da 
inserire tra i tags BODY:&lt;br /&gt;
Codice&lt;br /&gt;
&amp;lt;form method=&quot;post&quot; action=&quot;inviamail.php&quot; name=&quot;inviamail&quot;&amp;gt;&lt;br /&gt;
Nome:&lt;br /&gt;
&amp;lt;input type=&quot;text&quot; size=&quot;40&quot; name=&quot;nome&quot;&amp;gt;&lt;br /&gt;
E-mail:&lt;br /&gt;
&amp;lt;input type=&quot;text&quot; size=&quot;40&quot; name=&quot;email&quot;&amp;gt;&lt;br /&gt;
Oggetto:&lt;br /&gt;
&amp;lt;input type=&quot;text&quot; size=&quot;40&quot; name=&quot;oggetto&quot;&amp;gt;&lt;br /&gt;
Messaggio:&lt;br /&gt;
&amp;lt;textarea cols=&quot;50&quot; rows=&quot;10&quot; name=&quot;messaggio&quot;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;submit&quot; value=&quot;Invia&quot;&amp;gt;&amp;lt;input type=&quot;reset&quot; value=&quot;Cancella&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
Ora creiamo &quot;inviamail.php&quot;. Essa conterrà le istruzioni PHP per inviare la mail 
ad indirizzo a piacere. Ecco il codice:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$indirizzo=&quot;tuamail@dominio.it&quot;;&lt;br /&gt;
{&lt;br /&gt;
mail($indirizzo,&quot;Messaggio da parte di $nome: $oggetto&quot;,&quot;$nome - $email ha 
inviato il seguente messaggio:&quot;,&quot;$messaggio&quot;);&lt;br /&gt;
echo (&quot;Il messaggio è stato inviato con successo &quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&quot;http://www.sito.com&quot;&amp;gt;Torna al sito&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
Ed ecco che, una volta impostata la variabile $indirizzo con il vostro indirizzo 
e-mail, lo script vi invierà tutti i contatti effettuati con il form della 
pagina &quot;modulo.htm&quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Inviare mail da un form: la funzione mail()&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;In questa lezione vediamo come creare un modulo html capace di spedire 
e-mail tramite il php.&lt;br /&gt;
Nel nostro caso creeremo il codice necessario per permettere all&#39;utente di 
inviarci un&#39;email compilando un semplice form sul nostro sito web!&lt;br /&gt;
Così facendo nascondiamo anche il nostro indirizzo agli occhi di eventuali 
spammer! Procediamo subito con la creazione delle due pagine... vediamo la prima 
modulo.htm&lt;br /&gt;
&amp;lt;form action=&quot;send_mail.php&quot; method=&quot;post&quot; name=&quot;mail&quot; id=&quot;mail&quot;&amp;gt;&lt;br /&gt;
&amp;lt;table width=&quot;80%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;div align=&quot;center&quot;&amp;gt;Inserisci l&#39;indirizzo presso il quale ricontattarti&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;div align=&quot;center&quot;&amp;gt;&lt;br /&gt;
&amp;lt;input name=&quot;indirizzo&quot; type=&quot;text&quot; id=&quot;indirizzo&quot; size=&quot;40&quot; maxlength=&quot;60&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;div align=&quot;center&quot;&amp;gt;Oggetto del messaggio:&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;div align=&quot;center&quot;&amp;gt;&lt;br /&gt;
&amp;lt;input name=&quot;oggetto&quot; type=&quot;text&quot; id=&quot;oggetto&quot; size=&quot;40&quot; maxlength=&quot;50&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;div align=&quot;center&quot;&amp;gt;Corpo del messaggio: &amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;div align=&quot;center&quot;&amp;gt;&lt;br /&gt;
&amp;lt;textarea name=&quot;corpo&quot; cols=&quot;40&quot; rows=&quot;7&quot; id=&quot;corpo&quot;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;div align=&quot;center&quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;Invia&quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;reset&quot; name=&quot;Submit2&quot; value=&quot;Pulisci&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
Ora passiamo alla pagina send_mail.php che recupererà i dati dal form e li 
invierà tramite e-mail all&#39;indirizzo specificato!&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$mail_mittente = $_POST[&#39;indirizzo&#39;];&lt;br /&gt;
$mail_destinatario = &quot;michele@sassi.it&quot;; //e-mail a cui saranno inviati i 
messaggi&lt;br /&gt;
$mail_oggetto = $_POST[&#39;oggetto&#39;];&lt;br /&gt;
$mail_corpo = $_POST[&#39;corpo&#39;];&lt;br /&gt;
if (mail($mail_destinatario, $mail_oggetto, $mail_corpo, &quot;From: $mail_mittente&quot;))&lt;br /&gt;
{&lt;br /&gt;
echo &quot;E-mail inviata con successo&quot;;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
echo &quot;Errore... Non è stato possibile inviare alcun messaggio.&quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Personalizzate voi la grafica del vostro form, non posso pensare a tutto io ;)&lt;br /&gt;
Attenzione però perchè questa operazione non va a buon fine se il nostro server 
è temporaneamente fuori servizio o se non dispone del SendMail. &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Creare un circuito banners in PHP&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;In questo tutorial vedremo come realizzare un semplice circuito di 
rotazione banner in PHP.&lt;br /&gt;
Supponiamo di voler far ruotare 3 banners, e di non disporre di database MySQL 
per memorizzare le informazioni dei singoli banners.&lt;br /&gt;
La pagina in cui ruotano i nostri banners si chiamerà &quot;circuito.php&quot;.&lt;br /&gt;
Tramite la funzione random genero un numero a caso compreso tra 1 e 3, quindi lo 
controllo con un ciclo SWITCH (il migliore in questo caso) e infine, in base al 
numero visualizzo un banner.&lt;br /&gt;
Ecco il codice da inserire all&#39;inizio della pagina prima dei TAGs HTML:&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
// Genero il numero casuale&lt;br /&gt;
$numero = rand(1,3);&lt;br /&gt;
// Ciclo SWITCH con tanti casi quanti sono i banners&lt;br /&gt;
switch($numero)&lt;br /&gt;
{&lt;br /&gt;
// Primo banner&lt;br /&gt;
case &quot;1&quot;:&lt;br /&gt;
$img = &quot;banner1.gif&quot;;&lt;br /&gt;
$link = &quot;http://www.link1.it&quot;;&lt;br /&gt;
break;&lt;br /&gt;
// Secondo banner&lt;br /&gt;
case &quot;2&quot;:&lt;br /&gt;
$img = &quot;banner2.gif&quot;;&lt;br /&gt;
$link = &quot;http://www.link2.it&quot;;&lt;br /&gt;
break;&lt;br /&gt;
// Terzo banner&lt;br /&gt;
case &quot;3&quot;:&lt;br /&gt;
$img = &quot;banner3.gif&quot;;&lt;br /&gt;
$link = &quot;http://www.link3.it&quot;;&lt;br /&gt;
break;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Ed ecco ora il codice da inserire nel punto in cui si vuole visualizzare il 
banner:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Visualizzo il banner&lt;br /&gt;
echo (&quot;&amp;lt;a href=&#39;$link&#39; target=&#39;_blank&#39;&amp;gt;&amp;lt;img src=&#39;$img&#39; border=&#39;0&#39;&amp;gt;&amp;lt;/a&amp;gt;&quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Potremmo inserire il primo codice in un file a parte del tipo &quot;cod.php&quot; e 
richiamarlo con un include() nei vari files in cui deve comparire il banner...&lt;br /&gt;
Aggiungiamo MySQL&lt;br /&gt;
E&#39; possibile far sì che le informazioni riguardo ai banners siano prelevate da 
MySQL.&lt;br /&gt;
Supponiamo di avere una tabella &quot;banners&quot; con tre campi:&lt;br /&gt;
- id, di tipo INT - chiave primaria - AUTO INCREMENT&lt;br /&gt;
- img, di tipo TEXT&lt;br /&gt;
- link, di tipo TEXT&lt;br /&gt;
La selezione del banner avverrebbe in base all&#39;ID:&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
// Genero il numero casuale&lt;br /&gt;
$numero = rand(1,3);&lt;br /&gt;
// Genero il codice MySQL per la selezione&lt;br /&gt;
$query = mysql_query(&quot;SELECT * FROM banners WHERE id = &#39;$numero&#39;&quot;);&lt;br /&gt;
// Quindi assegno i risultati&lt;br /&gt;
$img = $row_query[&#39;img&#39;];&lt;br /&gt;
$link = $row_query[&#39;link&#39;];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Il processo di visualizzazione è il medesimo del primo esempio.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Creiamo un Photoblog con PHP e MySQL&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Pixelpost (http://www.pixelpost.org/), un photoblog basato su un motore 
scritto in PHP e MySQL, usa correttamente XHTML e CSS tutto documentato e 
modificabile con grande semplicità.&lt;br /&gt;
Requisiti&lt;br /&gt;
* Spazio web sufficiente: non per il software in se (circa 400 KB), ma per le 
immagini&lt;br /&gt;
* Apache Webserver o Windows IIS&lt;br /&gt;
* PHP, versione 4.3.0 o superiore&lt;br /&gt;
* PHP con GD-lib con JPG-support. (richiesto per la corretta visualizzazione 
delle thumbnails)&lt;br /&gt;
* MySQL versione 3.24.58 o superiore&lt;br /&gt;
* Un database MySQL funzionante&lt;br /&gt;
Scarichiamo il file pixelpost: &lt;br /&gt;
http://www.pixelpost.org/releases/pixelpost_1.4.3.zip&lt;br /&gt;
Editare il file pixelpost.php&lt;br /&gt;
Attraverso il vostro editor di testo preferito, aprite pixelpost.php che potete 
trovare dentro la cartella /includes e modificate le seguenti righe:&lt;br /&gt;
// host del vostro database, spesso &quot;localhost&quot;&lt;br /&gt;
$pixelpost_db_host = &quot;localhost&quot;;&lt;br /&gt;
// utente del vostro database&lt;br /&gt;
$pixelpost_db_user = &quot;inserite utente qui&quot;;&lt;br /&gt;
// password del vostro database&lt;br /&gt;
$pixelpost_db_pass = &quot;inserite password qui&quot;;&lt;br /&gt;
// nome del database&lt;br /&gt;
$pixelpost_db_pixelpost = &quot;inserite nome qui&quot;;&lt;br /&gt;
Upload&lt;br /&gt;
Caricate sul vostro server la cartella precedentemente decompressa.&lt;br /&gt;
Create la cartella per le immagini e per le thumbnails (anteprime) &lt;br /&gt;
Attraverso il vostro client FTP, create dentro la cartella pixelpost (a livello 
della radice) le seguenti cartelle:&lt;br /&gt;
images/&lt;br /&gt;
thumbnails/&lt;br /&gt;
e date loro i seguenti privilegi: lettura (7), scrittura (7) ed esecuzione (7) 
in modo che pixelpost possa salvare all&#39;interno delle cartelle le vostre 
immagini.&lt;br /&gt;
Eseguiamo install.php&lt;br /&gt;
E&#39; arrivata l&#39;ora di installare pixelpost, basta aprire il proprio browser 
andando al seguente link, naturalmente cambiandolo opportunamente:&lt;br /&gt;
http://www.nomesito.com/cartella_pixelpost/admin/install.php &lt;br /&gt;
Apparirà, (se tutto è andato bene), una semplice schermata che vi guiderà in 
pochi passi alla corretta installazione del software.&lt;br /&gt;
Visualizzate il vostro photoblog&lt;br /&gt;
Ora non vi resta che visualizzare il vostro sito, ovvero, similmente al passo 
precedente andando su:&lt;br /&gt;
http://www.nomesito.com/cartella_pixelpost/.&lt;br /&gt;
Personalizzazione&lt;br /&gt;
Pixelpost è facilmente modificabile in tutte le sue componenti.&lt;br /&gt;
Potete modificare il suo motore, poichè scritto in PHP e completamente open 
source. Pixelpost gode di una folta schiera di seguaci, sviluppatori che hanno 
scelto questo software per il proprio blog e quindi lo migliorano. &lt;br /&gt;
Potete scaricare i così detti addons (&lt;a href=&quot;http://www.pixelpost.org/v1/index.php?x=downloads&amp;amp;page=addon&quot;&gt;http://www.pixelpost.org/v1/index.php?x=downloads&amp;amp;page=addon&lt;/a&gt;). 
Non sono altro che modifiche al motore di PHP che ne migliorano le potenzialità 
in molti aspetti.&lt;br /&gt;
Potete modificare l&#39;aspetto finale, scaricando diversi templates (&lt;a href=&quot;http://www.pixelpost.org/v1/index.php?x=downloads&amp;amp;page=template&quot;&gt;http://www.pixelpost.org/v1/index.php?x=downloads&amp;amp;page=template&lt;/a&gt;) 
messi a disposizione direttamente sul sito. Scaricateli, sono spesso in formato 
.zip, decomprimeteli e posizionateli sul vostro server dentro la cartella 
templates/.&lt;br /&gt;
Naturalmente, l&#39;aspetto vero e proprio del blog si basa su CSS quindi potete 
andare a modificare lo stile.css presente all&#39;interno delle cartelle dei vari 
templates.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Applicazione in Php per gestire facilmente una 
newsletter&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Piccola, facile da configurare e funzionante senza bisogno di alcun 
database. &lt;br /&gt;
E&#39; OpenNewsletter (http://www.selfexile.com/projects/opennewsletter), un set di 
script php che consente a chiunque di poter gestire una newsletter facilmente.&lt;br /&gt;
Basta avere un webserver con supporto a php, caricare la cartella contenentegli 
script di OpenNewsletter e il gioco è fatto.&lt;br /&gt;
Gli indirizzi di chi sottoscrive la newsletter vengono archiviati nel file di 
testo &#39;subscribers.txt&#39;.&lt;br /&gt;
Certo le possibilità offerte in fase di composizione della newsletter sono 
limitate ma non si può volere tutto in 60Kb.&lt;br /&gt;
Per chi volesse dare un&#39;occhiata a OpenNewsletter è disponibile una&lt;br /&gt;
demo online (&lt;a href=&quot;http://www.selfexile.com/projects/opennewsletter/demo&quot;&gt;http://www.selfexile.com/projects/opennewsletter/demo&lt;/a&gt;)
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Utilizzare MySQL con PHP&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Questa tecnologia mette a disposizione numerose funzioni per la 
connessione con MySQL, tutte presenti nel manuale ufficiale di questo 
linguaggio. Le principali funzioni sono:&lt;br /&gt;
* $Connessione=mysql_connect($server,$user,$password);&lt;br /&gt;
- E&#39; la funzione che permette di accedere a MySQL. Come primo parametro 
inseriremo il nome del server, notoriamente ?localhost?; come nome utente ?root? 
che è l&#39;utente di default e come password ?aspitalia? se si è seguito l&#39;esempio 
in questo articolo.&lt;br /&gt;
* $database=mysql_select_db($name_db,$connessione);&lt;br /&gt;
- Con questa funzione selezioniamo direttamente il database di MySQL da 
utilizzare presente, ?esempio? nel nostro caso o qualsiasi altro presente 
visibile dalla shell di MySQL con il comando: ?show databasese;?. Il secondo 
parametro è la connessione precedentemente aperta verso il server.&lt;br /&gt;
* $tutto=mysql_query($sql,$connessione);&lt;br /&gt;
- Con questa funzione effettuiamo la query. Il primo parametro è una stringa 
contente i comandi SQL (?select?,?update?,?insert?,?delete?); il secondo 
parametro è la connessione aperta inizialmente.&lt;br /&gt;
* Mysql_free_result($tutto);&lt;br /&gt;
- Libera la memoria e le risorse del computer dalla query effettuata.&lt;br /&gt;
* Mysql_close($connessione);&lt;br /&gt;
- Chiude la connessione con MySQL.&lt;br /&gt;
* cols=mysql_num_fields($tutto);&lt;br /&gt;
- Questa funzione restituisce il numero di campi della query ?select? 
memorizzata in $tutto.&lt;br /&gt;
* rows=mysql_num_rows($tutto);&lt;br /&gt;
- Questa funzione restituisce il numero di record della query ?select? 
memorizzata in $tutto.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Creare un circuito banners in PHP&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Supponiamo di voler far ruotare 3 banners, e di non disporre di database 
MySQL per memorizzare le informazioni dei singoli banners.&lt;br /&gt;
La pagina in cui ruotano i nostri banners si chiamerà &quot;circuito.php&quot;.&lt;br /&gt;
Tramite la funzione random genero un numero a caso compreso tra 1 e 3, quindi lo 
controllo con un ciclo SWITCH (il migliore in questo caso) e infine, in base al 
numero visualizzo un banner.&lt;br /&gt;
Ecco il codice da inserire all&#39;inizio della pagina prima dei TAGs HTML:&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
// Genero il numero casuale&lt;br /&gt;
$numero = rand(1,3);&lt;br /&gt;
// Ciclo SWITCH con tanti casi quanti sono i banners&lt;br /&gt;
switch($numero)&lt;br /&gt;
{&lt;br /&gt;
// Primo banner&lt;br /&gt;
case &quot;1&quot;:&lt;br /&gt;
$img = &quot;banner1.gif&quot;;&lt;br /&gt;
$link = &quot;http://www.link1.it&quot;;&lt;br /&gt;
break;&lt;br /&gt;
// Secondo banner&lt;br /&gt;
case &quot;2&quot;:&lt;br /&gt;
$img = &quot;banner2.gif&quot;;&lt;br /&gt;
$link = &quot;http://www.link2.it&quot;;&lt;br /&gt;
break;&lt;br /&gt;
// Terzo banner&lt;br /&gt;
case &quot;3&quot;:&lt;br /&gt;
$img = &quot;banner3.gif&quot;;&lt;br /&gt;
$link = &quot;http://www.link3.it&quot;;&lt;br /&gt;
break;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Ed ecco ora il codice da inserire nel punto in cui si vuole visualizzare il 
banner:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Visualizzo il banner&lt;br /&gt;
echo (&quot;&amp;lt;a href=&#39;$link&#39; target=&#39;_blank&#39;&amp;gt;&amp;lt;img src=&#39;$img&#39; border=&#39;0&#39;&amp;gt;&amp;lt;/a&amp;gt;&quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Potremmo inserire il primo codice in un file a parte del tipo &quot;cod.php&quot; e 
richiamarlo con un include() nei vari files in cui deve comparire il banner...&lt;br /&gt;
Aggiungiamo MySQL..&lt;br /&gt;
E&#39; possibile far sì che le informazioni riguardo ai banners siano prelevate da 
MySQL.&lt;br /&gt;
Supponiamo di avere una tabella &quot;banners&quot; con tre campi:&lt;br /&gt;
- id, di tipo INT - chiave primaria - AUTO INCREMENT&lt;br /&gt;
- img, di tipo TEXT&lt;br /&gt;
- link, di tipo TEXT&lt;br /&gt;
La selezione del banner avverrebbe in base all&#39;ID:&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
// Genero il numero casuale&lt;br /&gt;
$numero = rand(1,3);&lt;br /&gt;
// Genero il codice MySQL per la selezione&lt;br /&gt;
$query = mysql_query(&quot;SELECT * FROM banners WHERE id = &#39;$numero&#39;&quot;);&lt;br /&gt;
// Quindi assegno i risultati&lt;br /&gt;
$img = $row_query[&#39;img&#39;];&lt;br /&gt;
$link = $row_query[&#39;link&#39;];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Il processo di visualizzazione è il medesimo del primo esempio.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Un completo AdServer con PHP&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Ciao a tutti, in questo articolo vedremo come creare un sistema di 
rotazione banner (AdServer).&lt;br /&gt;
Cominciamo come al solito con il creare il file di configurazione (config.php) 
che ci servirà per configurare e per connettersi a MySQL.&lt;br /&gt;
Ecco il codice da inserire nel file:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$mysql[&#39;host&#39;] = &quot;&quot;;&lt;br /&gt;
$mysql[&#39;pass&#39;] = &quot;&quot;;&lt;br /&gt;
$mysql[&#39;user&#39;] = &quot;&quot;;&lt;br /&gt;
$mysql[&#39;name&#39;] = &quot;&quot;;&lt;br /&gt;
@mysql_connect($mysql[&#39;host&#39;], $mysql[&#39;user&#39;], $mysql[&#39;pass&#39;]);&lt;br /&gt;
@mysql_select_db($mysql[&#39;name&#39;]);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
In questo file, si nota il fatto che è presente una sola variabile, $mysql, che, 
in questo caso svolge la funzione di array().&lt;br /&gt;
E poi ci sono due funzioni, mysql_connect() e mysql_select_db(), che sono 
presenti nel PHP dalla versione 3 (compresa) in poi.&lt;br /&gt;
Ovviamente ora creiamo anche il file di installazione, install.php:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require(&quot;config.php&quot;);&lt;br /&gt;
@mysql_query(&quot;CREATE TABLE &#39;ads&#39; (&lt;br /&gt;
&#39;id&#39; INT( 11 ) NOT NULL ,&lt;br /&gt;
&#39;nome&#39; VARCHAR( 255 ) NOT NULL ,&lt;br /&gt;
&#39;banner&#39; VARCHAR( 255 ) NOT NULL ,&lt;br /&gt;
&#39;url&#39; VARCHAR( 255 ) NOT NULL ,&lt;br /&gt;
&#39;view&#39; VARCHAR( 255 ) DEFAULT &#39;0&#39; NOT NULL ,&lt;br /&gt;
&#39;click&#39; VARCHAR( 255 ) DEFAULT &#39;0&#39; NOT NULL ,&lt;br /&gt;
PRIMARY KEY ( &#39;id&#39; )&lt;br /&gt;
);&quot;);&lt;br /&gt;
echo &quot;Operazione avvenuta con successo !!\n&quot;;&lt;br /&gt;
@mysql_close();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Quì c&#39;è solamente una query che serve appunto per installare l&#39;applicazione 
creando una tabella nel tuo database MySQL.&lt;br /&gt;
Assicurarsi che non ne esista già una con lo stesso nome!&lt;br /&gt;
Ovviamente sarà necessario inserire qualche banner per vedere come funziona il 
nostro AdServer.&lt;br /&gt;
Per farlo potete facilmente crearvi un pannello di controllo ad hoc (cercate 
negli altri tuotorial come inserire dati in un db MySql) oppure lavorare 
direttamente sul database, con un semplice scriptino del genere:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require(&quot;config.php&quot;);&lt;br /&gt;
$banner[&#39;name&#39;] = &quot;banner1&quot;;&lt;br /&gt;
$banner[&#39;img&#39;] = &quot;http://www.miosito/banner.jpg&quot;;&lt;br /&gt;
$banner[&#39;link&#39;] = &quot;http://www.miosito.com&quot;;&lt;br /&gt;
@mysql_query(&quot;insert into &#39;ads&#39; value (&lt;br /&gt;
&#39;&#39;,&lt;br /&gt;
&#39;&quot; . $banner[&#39;name&#39;] . &quot;&#39;,&lt;br /&gt;
&#39;&quot; . $banner[&#39;img&#39;] . &quot;&#39;,&lt;br /&gt;
&#39;&quot; . $banner[&#39;link&#39;] . &quot;&#39;,&lt;br /&gt;
&#39;0&#39;,&lt;br /&gt;
&#39;0&#39;&lt;br /&gt;
);)&quot;;&lt;br /&gt;
echo &quot;Banner aggiunto con successo !!\n&quot;;&lt;br /&gt;
@mysql_close();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Vediamo ora come visualizzare i nostri banner in modo random (casuale)... 
ovviamente se abbiamo inserito un solo banner nel nostro DB vedremo semppre 
quello!&lt;br /&gt;
Creiamo una nuova pagina e salviamola come view.php, ecco il codice da inserire:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require(&quot;config.php&quot;);&lt;br /&gt;
$query = @mysql_query(&quot;SELECT * FROM ads ORDER BY RAND()&quot;);&lt;br /&gt;
$result = @mysql_fetch_array($query);&lt;br /&gt;
@mysql_query(&quot;UPDATE ads SET view = view+1 WHERE id = &#39;$result[0]&#39;&quot;);&lt;br /&gt;
echo &quot;&amp;lt;a href=\&quot;click.php?id=$result[0]\&quot;&amp;gt;&amp;lt;img border=\&quot;0\&quot; src=\&quot;$result[2]\&quot; 
alt=\&quot;$result[1]\&quot;&amp;gt;&amp;lt;/a&amp;gt;&quot;;&lt;br /&gt;
@mysql_close();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Nel codice appena visto, notiamo due variabili: $query e $result, la prima serve 
per inviare il comando al database MySQL, ossia quello di prelevare un record a 
caso fra quelli inseriti, la seconda variabile invece ci serve per ricavare i 
vari risultati, vale a dire l&#39;ID, l&#39;immagine e il nome del banner.&lt;br /&gt;
In oltre, c&#39;è anche un&#39;altra query che viene inviata al database, ossia quella 
che serve per aumentare il numero di visualizzazioni del banner.&lt;br /&gt;
I vari risultati sono stati inseriti in una stringa HTML che ci serve per 
visualizzare il banner e per collgarlo alla pagina che conterà il numero dei 
click e che lo reindirizzerà alla l&#39;url del banner stesso.&lt;br /&gt;
Vediamo ora la quarta e penultima pagina di questa applicazione.&lt;br /&gt;
Questa pagina si chiamerà click.php e conterrà questo codice:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require(&quot;config.php&quot;);&lt;br /&gt;
@mysql_query(&quot;UPDATE ads SET click = click+1 WHERE id = &#39;$id&#39;&quot;);&lt;br /&gt;
$query = @mysql_query(&quot;SELECT * FROM ads WHERE id = &#39;$id&#39;&quot;);&lt;br /&gt;
$result = @mysql_fetch_array($query);&lt;br /&gt;
header(&quot;Location: $result[3]&quot;);&lt;br /&gt;
@mysql_close();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Vediamo un po&#39; che dire riguardo a questo codice...&lt;br /&gt;
Una cosa salta agli occhi, che, ancora una volta sono presenti du query.&lt;br /&gt;
La prima query, svolge una funzione di UPDATE; o meglio... aumenta il numero di 
click nel banner che si è appena clickato.&lt;br /&gt;
Mentre la seconda, ancora una volta, invia una query per ricavare i dati dal 
database.&lt;br /&gt;
Questa volta, l&#39;unico dato che ci interessa è la destinazione del banner, ossia 
il sito internet a cui si riferisce.&lt;br /&gt;
Infine vediamo come realizzare delle piccole statistiche.&lt;br /&gt;
Creiamo un file e salviamolo come stats.php ed inseriamoci questo codice:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require(&quot;config.php&quot;);&lt;br /&gt;
echo &quot;&amp;lt;table width=\&quot;38%\&quot; border=\&quot;0\&quot; cellspacing=\&quot;0\&quot; cellpadding=\&quot;2\&quot;&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;tr&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;td width=\&quot;12%\&quot;&amp;gt;&amp;lt;strong&amp;gt;Nome&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;td width=\&quot;12%\&quot;&amp;gt;&amp;lt;strong&amp;gt;Visualizzazioni&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;td width=\&quot;12%\&quot;&amp;gt;&amp;lt;strong&amp;gt;Clicks&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;td width=\&quot;12%\&quot;&amp;gt;&amp;lt;strong&amp;gt;%&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;/tr&amp;gt;\n&quot;;&lt;br /&gt;
$query = @mysql_query(&quot;SELECT * FROM ads&quot;);&lt;br /&gt;
$totals = @mysql_query(&quot;SELECT * FROM ads&quot;);&lt;br /&gt;
while($res = @mysql_fetch_array($totals))&lt;br /&gt;
{&lt;br /&gt;
$total = $total + $res[4];&lt;br /&gt;
}&lt;br /&gt;
while($result = @mysql_fetch_array($query))&lt;br /&gt;
{&lt;br /&gt;
$percentuale = $result[4] / $total;&lt;br /&gt;
$percentuale = $percentuale * 100;&lt;br /&gt;
$percentuale = number_format($percentuale, 1);&lt;br /&gt;
echo &quot;&amp;lt;tr&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;td&amp;gt;$result[1]&amp;lt;/td&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;td&amp;gt;$result[4]&amp;lt;/td&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;td&amp;gt;$result[5]&amp;lt;/td&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;td&amp;gt;$percentuale%&amp;lt;/td&amp;gt;\n&quot;;&lt;br /&gt;
echo &quot;&amp;lt;/tr&amp;gt;\n&quot;;&lt;br /&gt;
}&lt;br /&gt;
echo &quot;&amp;lt;/table&amp;gt;&quot;;&lt;br /&gt;
@mysql_close();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Analiziamo un pochino questo codice...&lt;br /&gt;
Sulla prima parte del codice, c&#39;è poco ad dire, è semplicemente l&#39;inizio di una 
tabella che indica il conenuto delle sue colonne.&lt;br /&gt;
Subito dopo, troviamo due variabili, $query e $totals, che ci servono per 
inviare le query al database MySQL.&lt;br /&gt;
Nella parte di codice seguente troviamo due cicli while().&lt;br /&gt;
Il primo, che usa la variabile $totals, ci serve per sommare il numero delle 
visualizzazioni per poi creare la percentuale, il secondo per stampare a video 
il nome del banner, i click ricevuti e le visualizzazioni che sono state fatte 
con anche la percentuale.&lt;br /&gt;
Si nota comunque, che nel secondo ciclo viene fuori un&#39;altra variabile, ossia 
$percentuale, la stessa serve appunto per creare la percentuale delle 
visualizzazioni di tutti i banner!&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Scrivere i file con i form&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Sempre ricordandoci di avere i permessi sul nostro file, noi possiamo 
scrivere su file da un form. Per esempio possiamo realizzare questo per tante 
cose però dobbiamo strare attenti perchè è un pò pericoloso. Ammettiamo che 
qualcuno scriva su un file qualche operazione php dannosa......Diciamo che si 
deve stare attenti a cosa lo usiamo. Ma non vi preoccupate la scrittura da form 
a file non la faremo per cose importanti infatti per quelle ci sono i database. 
Siccome c&#39;e la scrittura nei file non posso mostrarvi l&#39;esempio se no intaserei 
la mia cartella e non mi va nemmeno di crearne altre(si il mio serve mi da una 
cartella e li posso scrivere e leggere i miei file). Basta che copiate e 
incollate il codice nel bloc notes e salvate le pagine con il loro nome.&lt;br /&gt;
Pagina dove si possono inserire annunci nome : uno.htm (si nota come uso il 
marcatore &amp;amp;nbsp; per fare gli spazi non è professionale ma dovevo fare in fretta&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;form method=get action=&quot;verifica.php&quot;&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Nome&lt;br /&gt;
&amp;lt;input type=&quot;text&quot; name=&quot;nome&quot; size=&quot;20&quot;&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Recapito&lt;br /&gt;
&amp;lt;input type=&quot;text&quot; name=&quot;recapito&quot; size=&quot;20&quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Oggetto&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;textarea name=&quot;oggetto&quot; rows=&quot;3&quot; cols=&quot;40&quot;&amp;gt;&amp;lt;/textarea&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;submit&quot; value=&quot;Invia&quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;reset&quot; value=&quot;Cancella&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
Non vi sto a spiegare il modulo perchè semplice(un semplice modulo con tre 
campi)&lt;br /&gt;
Come si nota il pulsante invia mi porta ad una pagina chiamate verifica.php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &quot;&amp;lt;center&amp;gt;&quot;;&lt;br /&gt;
echo &quot;Ciao ecco i risultati del tuo inserimento:&quot;;&lt;br /&gt;
$errore= false;&lt;br /&gt;
If((!$nome) || (!$recapito) || (!$oggetto)) {&lt;br /&gt;
#controllo che nessun campo sia vuoto&lt;br /&gt;
$errore=true;&lt;br /&gt;
echo &quot;Non hai compilato tutti i campi &amp;lt;a href=\&quot;uno.htm\&quot;&amp;gt;torna indietro&amp;lt;/a&amp;gt;&quot;;&lt;br /&gt;
exit;&lt;br /&gt;
}&lt;br /&gt;
else{&lt;br /&gt;
echo &quot; i campi sono ok&quot;;&lt;br /&gt;
}&lt;br /&gt;
#controllo che il file sia accessibile&lt;br /&gt;
if (!$apri = fopen (&quot;file.txt&quot;,&quot;a+&quot;)) {&lt;br /&gt;
$errore=true;&lt;br /&gt;
echo &quot;non posso aprire il file&quot;;&lt;br /&gt;
}else{&lt;br /&gt;
$apriw = fopen (&quot;file.txt&quot;,&quot;a+&quot;);&lt;br /&gt;
#ora creo una variabile che contiene la linea di reparazione&lt;br /&gt;
$linea =&quot;&amp;lt;hr color=red&amp;gt;&quot;;&lt;br /&gt;
# e sul file scrivo nome e vado a capo,il recapito e vado a capo&lt;br /&gt;
# l&#39;oggetto e vado a capo e la linea ti separazione&lt;br /&gt;
fputs($apriw,&quot;$nome\n&quot;);&lt;br /&gt;
fputs($apriw,&quot;$recapito\n&quot;);&lt;br /&gt;
fputs($apriw,&quot;$oggetto\n&quot;);&lt;br /&gt;
fputs($apriw,&quot;$linea&quot;);&lt;br /&gt;
#chiudo il file&lt;br /&gt;
fclose($apriw);&lt;br /&gt;
}&lt;br /&gt;
#se c&#39;e l&#39;errore mi dice di inserirli di nuovo altrimenti mi fa leggere gli 
annunci&lt;br /&gt;
if($errore){&lt;br /&gt;
echo&quot;&amp;lt;br&amp;gt; Riinseriscili perfavore&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
}&lt;br /&gt;
else{&lt;br /&gt;
echo &quot;&amp;lt;br&amp;gt; &amp;lt;a href=\&quot;annunci.php\&quot;&amp;gt;leggi gli annunci&amp;lt;/a&amp;gt;&quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Ecco la pagina che mi legge dal file chiamata annunci.php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &quot;Ecco i vostri annunci&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
if (!$apri = fopen(&quot;file.txt&quot;,&quot;r&quot;)){&lt;br /&gt;
echo &quot;Non posso aprire il file&quot;;&lt;br /&gt;
}else{&lt;br /&gt;
#Se il file si può leggere allora con un ciclo while&lt;br /&gt;
# leggo tutte le righe del mio file&lt;br /&gt;
while(!feof($apri)){&lt;br /&gt;
$leggo = fgets($apri,255);&lt;br /&gt;
echo &quot;$leggo&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
fclose($apri);&lt;br /&gt;
?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Come fare un sondaggio con php e mysql&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;3)scegli.htm&lt;br /&gt;
diamo un occhiatina veloce a questo file&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Sondaggio&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form action=&quot;vai.php&quot; method=&quot;post&quot;&amp;gt;&lt;br /&gt;
Italia&amp;lt;input type=&quot;radio&quot; value=&quot;italia&quot; name=&quot;paese&quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Spagna&amp;lt;input type=&quot;radio&quot; value=&quot;spagna&quot; name=&quot;paese&quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Portogallo&amp;lt;input type=&quot;radio&quot; value=&quot;portogallo&quot; name=&quot;paese&quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Francia&amp;lt;input type=&quot;radio&quot; value=&quot;francia&quot; name=&quot;paese&quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Inghilterra&amp;lt;input type=&quot;radio&quot; value=&quot;inghilterra&quot; name=&quot;paese&quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&quot;submit&quot; value=&quot;VOTA&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
Niente da spiegare qui un form semplice che punta a via.php con metodo post e 
usa il tipo radio passando il valore come nome&lt;br /&gt;
4)vai.php&lt;br /&gt;
Innanzitutto includo il file di connessione&lt;br /&gt;
PHP:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
include(&quot;db_connect.php&quot;);&lt;br /&gt;
$risultati_mysql=mysql_query(&quot;SELECT * FROM nomi &quot;);&lt;br /&gt;
while ($riga1=mysql_fetch_array($risultati_mysql))&lt;br /&gt;
{&lt;br /&gt;
$id=$riga1[&quot;$paese&quot;];&lt;br /&gt;
$idnuovo=($id + 1);&lt;br /&gt;
}&lt;br /&gt;
$sql=&quot;UPDATE nomi SET $paese=&#39;$idnuovo&#39; &quot;;&lt;br /&gt;
if(!mysql_query($sql)){&lt;br /&gt;
echo &quot;Errore impossibile votare&quot;;&lt;br /&gt;
echo &quot;&amp;lt;script&amp;gt;&lt;br /&gt;
function redirect(){&lt;br /&gt;
window.location.replace(\&quot;scegli.htm\&quot;);&lt;br /&gt;
}&lt;br /&gt;
setTimeout(\&quot;redirect()\&quot;, 2000);&lt;br /&gt;
&amp;lt;/script&amp;gt;&quot;;&lt;br /&gt;
exit();&lt;br /&gt;
}else{&lt;br /&gt;
echo &quot;Voto valido&quot;;&lt;br /&gt;
echo &quot;&amp;lt;script&amp;gt;&lt;br /&gt;
function redirect(){&lt;br /&gt;
window.location.replace(\&quot;guarda.php\&quot;);&lt;br /&gt;
}&lt;br /&gt;
setTimeout(\&quot;redirect()\&quot;, 2000);&lt;br /&gt;
&amp;lt;/script&amp;gt;&quot;;&lt;br /&gt;
}&lt;br /&gt;
mysql_close();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Ecco cosa faccio dopo essermi collegato a mysql dopo aver selezionato la nostra 
tabella sondaggi.&lt;br /&gt;
Faccio una query di selezione(mysql_query(&quot;SELECT * FROM nomi &quot;)) e prendo tutta 
la tabella nomi. La inserisco in un array (mysql_fetch_array($risultati_mysql)&lt;br /&gt;
ed subito dopo in una variabile chiamata $id metto il valore della colonna 
chiamata $paese (che è il nome che passo tramite form selezionando il paese). 
Poi creo&lt;br /&gt;
una nuova variabile $idnuovo e gli assegno il valore della variabile $id +1 . 
Dopo aver fatto cio faccio UPDATE nomi SET $paese=&#39;$idnuovo&#39; che praticamente 
modifica&lt;br /&gt;
il campo passato attraverso form con il nuovo valore. Dopidichè controllo che la 
query sia valida e nel caso sia errata lancio un javascript mandando l&#39;utente 
alla pagia scegli.htm&lt;br /&gt;
altrimenti se la query e valida lo mando alla pagina guarda.php .&lt;br /&gt;
quote:&lt;br /&gt;
PHP:&lt;br /&gt;
$risultati_mysql=mysql_query(&quot;SELECT * FROM nomi &quot;);&lt;br /&gt;
while ($riga1=mysql_fetch_array($risultati_mysql))&lt;br /&gt;
{&lt;br /&gt;
$id=$riga1[&quot;$paese&quot;];&lt;br /&gt;
$idnuovo=($id + 1);&lt;br /&gt;
}&lt;br /&gt;
$sql=&quot;UPDATE nomi SET $paese=&#39;$idnuovo&#39; &quot;;&lt;br /&gt;
if(!mysql_query($sql)){&lt;br /&gt;
echo &quot;Errore impossibile votare&quot;;&lt;br /&gt;
echo &quot;&amp;lt;script&amp;gt;&lt;br /&gt;
function redirect(){&lt;br /&gt;
window.location.replace(\&quot;scegli.htm\&quot;);&lt;br /&gt;
}&lt;br /&gt;
setTimeout(\&quot;redirect()\&quot;, 2000);&lt;br /&gt;
&amp;lt;/script&amp;gt;&quot;;&lt;br /&gt;
exit();&lt;br /&gt;
}&lt;br /&gt;
5)guarda.php&lt;br /&gt;
In questo file dovete avere dimestichezza con le operazioni matematiche....&lt;br /&gt;
Dopo aver incluso il file di connessione seleziono la tabella nomi e la metto in 
un array. Poi creo delle variabili che contengono ognuna i valori dei&lt;br /&gt;
campi di ogni squadra. Praticamente in ogni variabile ci sta il numero dei voti 
ottenuti. Quindi per vedere quanti voti in totale abbiamo facciamo la somma&lt;br /&gt;
delle variabili&lt;br /&gt;
$totale=$spagna+$italia+$portogallo+$francia+$inghilterra;&lt;br /&gt;
La somma a noi ci serve per due motivi: uno e che vogliamo mostrare agli utenti 
quante&lt;br /&gt;
persone fino ad ora hanno votato, l&#39;altro dobbiamo fare la percentuale di ogni 
paese. Per fare la percentuale si fa (VOTI OTTENUTI) per 100 diviso (VOTI 
TOTALI).&lt;br /&gt;
$percspagna= $spagna*100/$totale; . Per avere un sondaggio piu pulito io 
arrotondo il risultato a due cifre dopo la virgola con $s=round($percspagna, 2); 
$s e la&lt;br /&gt;
variabile che contiene il nostro dato round e la funzione che arrotonda 
$percspagna e la percentuale e 2 sono le cifre massime dopo la virgola. Ora noi 
abbiamo&lt;br /&gt;
ottenuto la percentuale. Questa io la usero per due motivi come per il totale: 
uno per mostrare agli utenti quanta percentuale ha un campo l&#39;altra la uso per 
dimensionare&lt;br /&gt;
la mia immagine. La percentuale che io ottengo non ha il simblo % dopo il numero 
quindi e solo un numero normale. Cioe se la spagna ha preso il 40% dei voti 
quando calcolo&lt;br /&gt;
la percentuale la variabile $s conterra 40 e non 40%. Questa precisazione va 
fatta perche quando inseriro il valore per mostrare la percentuale devo 
aggiunfere manualmente&lt;br /&gt;
il simbolo %. Quando devo mostrare la mia immagine è diverso perche modifico 
dinamicamente il width(GRAZIE BUBU BUBU). Se ho un immagine di 100px puo andare 
bene quella misura ma 100 px sono pochi. IO nel file&lt;br /&gt;
6)vota.gif ho una gif lunga 300 px. Allora per prendere le dimensioni della 
nostra barra che ogni paese avrà (il grafico che andremo a creare) moltiplico il 
numero che ottengo dalla&lt;br /&gt;
percentuale per 3.&lt;br /&gt;
Perche lo moltiplico per 3&lt;br /&gt;
E semplice : quanto ottengo la percentuale abbiamo detto prima che ottengo 40 e 
non 40%. Quindi la mia immagine avra di lunghezz 40 px(calcolo fatto su 100). La 
mia&lt;br /&gt;
immagine e 300 px quindi tre volte il valore con cui si calcola la percentuale. 
Come potete vedere sotto e molto chiaro lo schema e per mettere in ordine ho 
usato il tag pre&lt;br /&gt;
PHP:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
include(&quot;db_connect.php&quot;);&lt;br /&gt;
$risultati_mysql=mysql_query(&quot;SELECT * FROM nomi &quot;);&lt;br /&gt;
while ($riga1=mysql_fetch_array($risultati_mysql))&lt;br /&gt;
{&lt;br /&gt;
$spagna=$riga1[&quot;spagna&quot;];&lt;br /&gt;
$italia=$riga1[&quot;italia&quot;];&lt;br /&gt;
$portogallo=$riga1[&quot;portogallo&quot;];&lt;br /&gt;
$francia=$riga1[&quot;francia&quot;];&lt;br /&gt;
$inghilterra=$riga1[&quot;inghilterra&quot;];&lt;br /&gt;
}&lt;br /&gt;
$totale=$spagna+$italia+$portogallo+$francia+$inghilterra;&lt;br /&gt;
echo &quot;In totale ci sono $totale voti&quot;;&lt;br /&gt;
$percspagna= $spagna*100/$totale;&lt;br /&gt;
$s=round($percspagna, 2);&lt;br /&gt;
$percitalia= $italia*100/$totale;&lt;br /&gt;
$i=round($percitalia, 2);&lt;br /&gt;
$percfrancia= $francia*100/$totale;&lt;br /&gt;
$f=round($percfrancia, 2);&lt;br /&gt;
$percportogallo= $portogallo*100/$totale;&lt;br /&gt;
$p=round($percportogallo, 2);&lt;br /&gt;
$percin= $inghilterra*100/$totale;&lt;br /&gt;
$n=round($percin, 2);&lt;br /&gt;
//ora faccio il calcono della lunghezza dell immagine&lt;br /&gt;
$s1=$s*3;&lt;br /&gt;
$i1=$i*3;&lt;br /&gt;
$p1=$p*3;&lt;br /&gt;
$f1=$f*3;&lt;br /&gt;
$n1=$n*3;&lt;br /&gt;
echo &quot;&amp;lt;pre&amp;gt;&quot;;&lt;br /&gt;
echo &quot;Spagna &amp;lt;img src=\&quot;vota.jpg\&quot; height=10 width=$s1&amp;gt; $s%&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
echo &quot;Italia &amp;lt;img src=\&quot;vota.jpg\&quot; height=10 width=$i1&amp;gt; $i%&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
echo &quot;Portogallo &amp;lt;img src=\&quot;vota.jpg\&quot; height=10 width=$p1&amp;gt; $p%&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
echo &quot;Francia &amp;lt;img src=\&quot;vota.jpg\&quot; height=10 width=$f1&amp;gt; $f%&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
echo &quot;Inghilterra &amp;lt;img src=\&quot;vota.jpg\&quot; height=10 width=$n1&amp;gt; $n%&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
echo &quot; &amp;lt;/pre&amp;gt;&quot;;&lt;br /&gt;
mysql_close();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Questa applicazione puo essere implementata in tanti modi per far si che non si 
posssa votare piu di 1 volta in un giorno.&lt;br /&gt;
Si puo fare con i cookie oppure memorizzando l&#39;ip..&lt;br /&gt;
Io vi mostro con i cookie come si fa...&lt;br /&gt;
Prendete il file vai.php e subito dopo &amp;lt;?php mettete&lt;br /&gt;
PHP:&lt;br /&gt;
if($paese){&lt;br /&gt;
setcookie (&quot;sondaggio&quot;,&quot;cookie impostato&quot;,time()+86400,&quot;/&quot;);&lt;br /&gt;
}&lt;br /&gt;
if($sondaggio){&lt;br /&gt;
echo &quot;Si puo votare solo una volta al giorno&quot;;&lt;br /&gt;
exit();&lt;br /&gt;
}&lt;br /&gt;
Cioè se si passa un valore con $paese(perche uno puo provare anche a non votare) 
si setta un cookie chiamato sondaggio. Poi basta&lt;br /&gt;
Controllare se c&#39;e..... &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Ricavare IP &amp;amp; Hostname con Php&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Con Php è possibile ricavare l&#39;indirizzo IP da un Hostname e viceversa.&lt;br /&gt;
Le funzioni che ci permettono di fare ciò sono:&lt;br /&gt;
* gethostbyaddr(), per ricavere l&#39;Hostname&lt;br /&gt;
* gethostbyname(), per ricavere l&#39;IP&lt;br /&gt;
Ecco il codice:&lt;br /&gt;
&amp;lt;?PHP&lt;br /&gt;
$from = $HTTP_GET_VARS[&quot;f&quot;];&lt;br /&gt;
$query = $HTTP_GET_VARS[&quot;q&quot;];&lt;br /&gt;
if ($query != &quot;&quot;)&lt;br /&gt;
{&lt;br /&gt;
if ($from == &quot;IP&quot;)&lt;br /&gt;
{&lt;br /&gt;
$host = gethostbyaddr($query);&lt;br /&gt;
echo &quot;L&#39;hostname di &amp;lt;em&amp;gt;&quot;.$query.&quot;&amp;lt;/em&amp;gt; è &amp;lt;strong&amp;gt;&quot;.$host.&quot;&amp;lt;/strong&amp;gt;.&quot;;&lt;br /&gt;
}&lt;br /&gt;
else if ($from == &quot;Host&quot;)&lt;br /&gt;
{&lt;br /&gt;
$ip = gethostbyname($query);&lt;br /&gt;
echo &quot;L&#39;indirizzo IP di &amp;lt;em&amp;gt;&quot;.$query.&quot;&amp;lt;/em&amp;gt; è &amp;lt;strong&amp;gt;&quot;.$ip.&quot;&amp;lt;/strong&amp;gt;.&quot;;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
exit(&quot;Errore!&quot;);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
exit(&quot;Errore!&quot;);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Motore di ricerca con PHP&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Per inserire un motore di ricerca sfruttando il linguaggio PHP, 
utilizzeremo DGS Serach, un software molto veloce e semplice da installare, che 
consente di effettuare ricerche su pagine e su database(i database supportati 
sono MySQL, PostgreSQL, MSSQL e InterBase). Nell&#39;ultima versione i risultati 
vengono restituiti in un&#39;interfaccia simile al noto motore di ricerca Google.&lt;br /&gt;
Scarichiamo il file zip da questo indirizzo (http://www.webmasterpoint.org/php/tutorial/dgssearch.zip), 
e decomprimiamo l&#39;archivio.&lt;br /&gt;
Apriamo il file config.php, e cominciamo a modificare le variabili.&lt;br /&gt;
$config[&#39;installBase&#39;] = &#39;c:\\inetpub\\wwwroot\\dgssearch&#39;;&lt;br /&gt;
Il percorso in cui è installato DGS Serach&lt;br /&gt;
$config[&#39;searchModules&#39;] = array(&#39;fs&#39;);&lt;br /&gt;
I moduli da utilizzare nella ricerca. fs corrisponde al file system, db al 
database&lt;br /&gt;
$config[&#39;displayModules&#39;] = array(&#39;title&#39;, &#39;query&#39;, &#39;stats&#39;, &#39;hr&#39;, &#39;nav&#39;, &#39;results&#39;, 
&#39;nav&#39;);&lt;br /&gt;
Moduli da utilizzare per i risultati&lt;br /&gt;
$config[&#39;language&#39;] = &#39;english&#39;;&lt;br /&gt;
Linguaggio da utilizzare: sono disponibili english, german e spanish&lt;br /&gt;
$config[&#39;header&#39;] = &#39;header.php&#39;; &lt;br /&gt;
L&#39;header&lt;br /&gt;
$config[&#39;footer&#39;] = &#39;footer.php&#39;; &lt;br /&gt;
Il footer&lt;br /&gt;
$config[&#39;target&#39;] = &#39;_self&#39;;&lt;br /&gt;
Il target della pagina dei risultati&lt;br /&gt;
$config[&#39;fonts&#39;] = &#39;Arial, Sans-Serif, Helvetica&#39;;&lt;br /&gt;
Il font&lt;br /&gt;
$config[&#39;results&#39;] = 10;&lt;br /&gt;
Risultati per pagina&lt;br /&gt;
$config[&#39;urlBase&#39;] = &#39;http://www.xyz.com&#39;;&lt;br /&gt;
L&#39;url dl nostro sito&lt;br /&gt;
$config[&#39;siteBase&#39;] = &#39;c:\\inetpub\\wwwroot&#39;;&lt;br /&gt;
La root&lt;br /&gt;
$config[&#39;fsExclude&#39;] = array(&#39;^\.ht&#39;, &#39;^dgssearch$&#39;);&lt;br /&gt;
I file o le cartelle da escludere dalla ricerca&lt;br /&gt;
$config[&#39;exts&#39;] = array(&#39;s?html?&#39;, &#39;php3?&#39;, &#39;txt&#39;);&lt;br /&gt;
Le estensioni dei file da includere nella ricerca. Inserire &#39;&#39; per includerli 
tutti.&lt;br /&gt;
$database[0][&#39;type&#39;] = &#39;mysql&#39;;&lt;br /&gt;
Il tipo di database. E&#39; possibile inserire mysql, pgsql, mssql, ibase o odbc.&lt;br /&gt;
$database[0][&#39;server&#39;] = &#39;localhost&#39;;&lt;br /&gt;
Indirizzo per connettersi al database&lt;br /&gt;
$database[0][&#39;port&#39;] = 0;&lt;br /&gt;
La posta del database. Settare su 0 per quella di default&lt;br /&gt;
$database[0][&#39;username&#39;] = &#39;username&#39;;&lt;br /&gt;
Username per collegarsi al database&lt;br /&gt;
$database[0][&#39;password&#39;] = &#39;password&#39;;&lt;br /&gt;
Password per collegarsi al database&lt;br /&gt;
$database[0][&#39;database&#39;] = &#39;database&#39;;&lt;br /&gt;
Il nome del database&lt;br /&gt;
$database[0][&#39;persistent&#39;] = true;&lt;br /&gt;
Definisce se la connessione al database dev&#39;essere persistente&lt;br /&gt;
$database[0][&#39;table&#39;] = array(&#39;art&#39;);&lt;br /&gt;
Nome della tabella del database dove verrà effettuata la ricerca&lt;br /&gt;
$database[0][&#39;searchField&#39;] = array(&#39;title&#39;, &#39;artist&#39;);&lt;br /&gt;
Campi all&#39;interno dei quali cercare&lt;br /&gt;
$database[0][&#39;link&#39;] = &#39;Title is @1@&#39;;&lt;br /&gt;
Link utilizzato per i risultati&lt;br /&gt;
$database[0][&#39;url&#39;] = &#39;http://www.xyz.com/bogus.php?id=@0@&#39;;&lt;br /&gt;
L&#39;url usato per visualizzare i dati dal database&lt;br /&gt;
$database[0][&#39;desc&#39;] = array(&#39;The artists name is @2@.&#39;);&lt;br /&gt;
La descrizione che verrà mostrata&lt;br /&gt;
Adesso è sufficiente effettuare l&#39;upload dei file sul server. In seguito 
colleghiamoci all&#39;indirizzo 
http://www.nomesito.it/cartella_dove_si_trova_lo_script/index.php.&lt;br /&gt;
Adesso siamo pronti per utilizzare lo script.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Mostrare il numero degli utenti collegati al nostro sito&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;In tutta onestà, questo codice è molto più semplice di quanto uno possa 
pensare: lo script si collega a un database e aggiorna alcuni campi, dopodiché 
conta il numero degli utenti che sono online.&lt;br /&gt;
Diamo un&#39;occhiata a come sono settate le tabelle per il database:&lt;br /&gt;
CREATE TABLE useronline ( &lt;br /&gt;
timestamp int(15) DEFAULT &#39;0&#39; NOT NULL, &lt;br /&gt;
ip varchar(40) NOT NULL, &lt;br /&gt;
file varchar(100) NOT NULL, &lt;br /&gt;
PRIMARY KEY (timestamp), &lt;br /&gt;
KEY ip (ip), &lt;br /&gt;
KEY file (file) &lt;br /&gt;
); &lt;br /&gt;
&quot;Timestamp&quot; viene usato per mostrare il momento in cui un utente è entrato in 
una specifica pagina del vostro sito web.&lt;br /&gt;
In più, l&#39;indirizzo IP di ogni utente viene annotato per assicurarsi che 
identiche entrate non vengano aggiunte al database.&lt;br /&gt;
Il campo &quot;File&quot; è semplicemente la funzione PHP_SELF che da il percorso dello 
script attualmente in esecuzione.&lt;br /&gt;
Sul mio computer è così: /llama/www/php/script.php&lt;br /&gt;
Non voglio entrare nei particolari per quanto riguarda gli ultimi 3 campi, è 
sufficiente sapere che servono per il controllo e l&#39;affidabilità degli errori.&lt;br /&gt;
Diamo ora un&#39;occhiata a come funziona il codice PHP con il database per 
rintracciare quanti utenti stanno visitando una particolare pagina del vostro 
sito web.&lt;br /&gt;
Ecco qui l&#39;intero codice PHP.&lt;br /&gt;
Per prima cosa diamo un&#39;occhiata all&#39;intero script, dopodiché lo divideremo in 
sezioni che andremo a commentare.&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$server = &quot;xxx&quot;; &lt;br /&gt;
$db_user = &quot;xxx&quot;; &lt;br /&gt;
$db_pass = &quot;xxx&quot;; &lt;br /&gt;
$database = &quot;xxx&quot;; &lt;br /&gt;
$timeoutseconds = 300;&lt;br /&gt;
$timestamp = time(); &lt;br /&gt;
$timeout = $timestamp-$timeoutseconds;&lt;br /&gt;
mysql_connect($server, $db_user, $db_pass); &lt;br /&gt;
$insert = mysql_db_query($database, &quot;INSERT INTO useronline VALUES (&#39;$timestamp&#39;,&#39;$REMOTE_ADDR&#39;,&#39;$PHP_SELF&#39;)&quot;);&lt;br /&gt;
if(!($insert)) { &lt;br /&gt;
print &quot;Useronline Insert Failed &amp;gt; &quot;; &lt;br /&gt;
}&lt;br /&gt;
$delete = mysql_db_query($database, &quot;DELETE FROM useronline WHERE timestamp&amp;lt;$timeout&quot;);
&lt;br /&gt;
if(!($delete)) { &lt;br /&gt;
print &quot;Useronline Delete Failed &amp;gt; &quot;; &lt;br /&gt;
} &lt;br /&gt;
$result = mysql_db_query($database, &quot;SELECT DISTINCT ip FROM useronline WHERE 
file=&#39;$PHP_SELF&#39;&quot;); &lt;br /&gt;
if(!($result)) { &lt;br /&gt;
print &quot;Useronline Select Error &amp;gt; &quot;; &lt;br /&gt;
} &lt;br /&gt;
$user = mysql_num_rows($result); &lt;br /&gt;
mysql_close(); &lt;br /&gt;
if($user == 1) { &lt;br /&gt;
print(&quot;&amp;lt;b&amp;gt;$user&amp;lt;/b&amp;gt; user onlinen&quot;); &lt;br /&gt;
} else { &lt;br /&gt;
print(&quot;&amp;lt;b&amp;gt;$user&amp;lt;/b&amp;gt; users onlinen&quot;); &lt;br /&gt;
} &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
L&#39;inizio dello script contiene solo semplici istruzioni che servono per 
collegarsi a MySQL, dovete sostituire &quot;XXX&quot; con i valori del vostro database.&lt;br /&gt;
Ora interessiamoci alla variabile $timeoutseconds = 300.&lt;br /&gt;
Questa variabile va a dare istruzioni riguardo al time out. Verrà usata più 
avanti nello script per cancellare gli utenti dopo che sono passati 300 secondi 
(5 minuti).&lt;br /&gt;
Ora esaminiamo questa parte di codice:&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$insert = mysql_db_query($database, &quot;INSERT INTO useronline VALUES (&#39;$timestamp&#39;,&#39;$REMOTE_ADDR&#39;,&#39;$PHP_SELF&#39;)&quot;);
&lt;br /&gt;
if(!($insert)) { &lt;br /&gt;
print &quot;Useronline Insert Failed &amp;gt; &quot;; &lt;br /&gt;
} &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
Questo codice si connette semplicemente al vostro database e poi inserisce i 
valori nella tabella degli utenti online (useronline table)&lt;br /&gt;
La parte successiva del codice controlla il database e va a cancellare i record 
degli utenti sconessi (per esempio dopo che sono trascorsi i 300 secondi):&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$delete = mysql_db_query($database, &quot;DELETE FROM useronline WHERE timestamp&amp;lt;$timeout&quot;);
&lt;br /&gt;
if(!($delete)) { &lt;br /&gt;
print &quot;Useronline Delete Failed &amp;gt; &quot;; &lt;br /&gt;
} &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
Questa parte di codice è davvero molto utile e offre una tecnica molto accurata 
per tenere aggiornati i risultati.&lt;br /&gt;
Se questo metodo non venisse usato, avremmo una tabella che continuerebbe a 
crescere ogni volta che un utente accede alla pagina del sito e potrebbe così 
contenere molte centinaia di righe se avete un sito con un discreto numero di 
visite.&lt;br /&gt;
Ora diamo un&#39;occhiata al codice qui sotto:&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$result = mysql_db_query($database, &quot;SELECT DISTINCT ip FROM useronline WHERE 
file=&#39;$PHP_SELF&#39;&quot;); &lt;br /&gt;
if(!($result)) { &lt;br /&gt;
print &quot;Useronline Select Error &amp;gt; &quot;; &lt;br /&gt;
} &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
Questa parte di codice seleziona l&#39;indirizzo IP dal database e controlla in che 
pagina sta navigando l&#39;utente (PHP_SELF).&lt;br /&gt;
Operiamo in questo modo per poter visualizzare il numero degli utenti online 
nella parte seguente dello script.&lt;br /&gt;
NOTA: Le dichiarazioni IF() che abbiamo incontrato in alcune parti del codice 
sono dichiarazionI di controllo dell&#39;errore.&lt;br /&gt;
Il punto esclamativo (!) rappresenta semplicemente NON FOUND o NULL.&lt;br /&gt;
Continuiamo con il seguente codice:&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
$user = mysql_num_rows($result); &lt;br /&gt;
mysql_close(); &lt;br /&gt;
if($user == 1) { &lt;br /&gt;
print(&quot;&amp;lt;b&amp;gt;$user&amp;lt;/b&amp;gt; user onlinen&quot;); &lt;br /&gt;
} else { &lt;br /&gt;
print(&quot;&amp;lt;b&amp;gt;$user&amp;lt;/b&amp;gt; users onlinen&quot;); &lt;br /&gt;
} &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
La variabile $user conta semplicemente il numero delle righe nella tabella degli 
utenti online e questo andrà a rappresentare il numero degli utenti che sono 
online. Facile no?&lt;br /&gt;
Infine, il nostro codice PHP chiude la connessione a MySQL e poi mostra il 
numero degli utenti online usando la funzione &quot;print&quot;.&lt;br /&gt;
Se c&#39;è solo un utente online, l&#39;output sarà così: &quot;1 user online&quot; (1 utente 
connesso), se invece ci saranno più utenti online, per esempio 5, l&#39;output sarà 
&quot;5 users online&quot; (cinque utenti connessi).&lt;br /&gt;
Per coloro che scrivono script più avanzati, possiamo andare a sostituire il 
nostro blocco IF in questo modo:&lt;br /&gt;
&amp;lt;?php &lt;br /&gt;
print &quot;$user user&quot; . ($user == 1 ? &quot;&quot; : &quot;s&quot;) . &quot; online&quot;; &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Mostrare il numero di utenti online è un gran modo per far sapere alle gente che 
non sono da soli a navigare nel vostro sito web, ma ci possono essere anche 
degli inconvenienti: infatti se lo script contiene degli errori, la pagina non 
verrà caricata correttamente.&lt;br /&gt;
Inoltre, prima di utilizzare questo script, è bene assicurarsi che il nostro 
sito web abbia un traffico decente, sarebbe infatti inutile usarlo per un sito 
che ha solo un paio di visitatori al giorno.&lt;br /&gt;
&lt;br /&gt;
Un visualizzatore di immagini in Php&lt;br /&gt;
In Php possiamo con un semplice codice e con un minimo di ingegno costruire 
piccole utility per il nostro sito, come il visualizzatore di immagini che 
esamineremo in questo Articolo.&lt;br /&gt;
Si crei il file viewer.php (attenzione, se volete rinominarlo dovete cambiare il 
nome del file anche nel codice in fase di creazione del menu di navigazione) ed 
eseguitelo sul vostro server dopo aver copiato il codice che segue:&lt;br /&gt;
&amp;lt;?PHP&lt;br /&gt;
$id = $_GET[&#39;id&#39;];&lt;br /&gt;
$immagine = &quot;&quot;;&lt;br /&gt;
if (is_numeric($id) == FALSE)&lt;br /&gt;
{&lt;br /&gt;
$immagine = &quot;blank&quot;;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
$immagine = $id;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;h1 align=&quot;center&quot;&amp;gt;VISUALIZZATORE DI IMMAGINI&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p align=&quot;center&quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&quot;&amp;lt;?print $immagine?&amp;gt;.jpg&quot;&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;?PHP&lt;br /&gt;
for ($i=1; $i&amp;lt;5; $i++)&lt;br /&gt;
{&lt;br /&gt;
print &quot;[&amp;lt;a href=&#39;viewer.php?id=&quot; . $i . &quot;&#39;&amp;gt;&quot; . $i . &quot;&amp;lt;/a&amp;gt;] &quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Il funzionamento è semplice: si crei il file blank.jpg che rappresenti 
un&#39;immagine bianca, del colore di sfondo della vostra pagina o un simbolo a 
vostra scelta. Si prendano poi 4 file immagine con estensione .jpg e li si 
dispongano nella stessa cartella o posizione sul server.&lt;br /&gt;
Cliccando sul menu di navigazione verrà passata alla pagina una querystring che 
visualizzerà l&#39;immagine di cui al numero cliccato. Per aggiungere immagini è 
necessario modificare il ciclo for inserendo il numero di immagini che avete a 
disposizione (+ 1); si consiglia di usare una numerazione crescente senza 
lasciare spazi tra i numeri (es. 1 2 3 5 6 7 dove manca il 4).&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&lt;i&gt;&lt;b&gt;Grafici in HTML con PHP (da 
webmasterpoint.org)&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;Introduzione&lt;br /&gt;
Il linguaggio di scripting PHP può utilizzare la libreria grafica GD. E&#39; 
sufficiente compilare PHP col supporto per GD (che deve essere installata prima 
ovviamente), oppure in alcune distribuzioni (ad es. la Mandrake 7.2) basta 
installare il pacchetto php-gd e sarete in grado di creare &quot;dinamicamente&quot; 
immagini in formato PNG da script PHP. In particolare con le primitive di questa 
libreria potete creare grafici di ottima fattura. Tuttavia per alcune semplici 
applicazioni, come quelle che descriverò in questo articolo, non è necessario 
ricorrere a GD: anche solo con l&#39;utilizzo dell&#39;HTML si possono produrre grafici 
a barre esteticamente belli. Di certo non potete disegnare grafici 3D o a torta, 
cosa che invece potete fare con la GD, tuttavia vale la pena lo stesso di 
esplorare questa possibilità.&lt;br /&gt;
Installazione di HTML_Graphs&lt;br /&gt;
Iniziate ad installare HTML_Graphs (dovrebbe essere una class di php) che è un 
pacchetto di funzioni per generare con facilità grafici in HTML, scritto da Phil 
Davis, ed è free software distribuito secondo la licenza GPL (GNU General Public 
License). L&#39;installazione è molto semplice, basta scompattarlo al di sotto della 
document root. Ad es. nel mio PC con Linux la document root è /var/www/html/ e 
per scompattare i file zip utilizzo l&#39;utility unzip. Per ordine ho deciso di 
porre tutti i file dentro la directory web &quot;/HTML_Graphs&quot;:&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;# unzip HTML_Graphs.zip 
-d /var/www/html/HTML_Graphs&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Per far funzionare 
l&#39;esempio in un sistema UNIX, dove i nomi dei file sono case-sensitive, occorre 
che cambiate la riga&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;code&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;require(&quot;./html_graphs.php3&quot;);&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;
  &lt;/span&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;in HTML_Graphs_Example.php3 (dovrebbe 
essere la linea 79) in:&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;code&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;require(&quot;./HTML_Graphs.php3&quot;);&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;
  &lt;/span&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;o viceversa cambiate nome al file. 
Fatto questo con un browser andate all&#39;URL:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;
&lt;a href=&quot;http://localhost/HTML_Graphs/HTML_Graphs_Example.php3&quot; target=&quot;_blank&quot;&gt;
http://localhost/HTML_Graphs/HTML_Graphs_Example.php3&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Un esempio&lt;br /&gt;
Supponete di voler realizzare un semplice sondaggio online sul vostro sito, di 
quelli che vado molto di moda su alcuni portali ultimamente. Si tratta di porre 
ai visitatori una domanda con risposte multiple da scegliere. Volete che dopo 
aver votato il visitatore ritorni alla stessa pagina in cui però al posto del 
questionario appaiano le statistiche e che queste possano essere visionate anche 
senza dover votare tramite apposito link.&lt;br /&gt;
Ecco ad es. una domanda in cui si può dare una sola risposta:&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;screenshot&quot;&gt;
&lt;form action=&quot;http://queen.rett.polimi.it/~ant/php/html_graphs/index.php&quot; method=&quot;post&quot;&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Quale sistema operativo usi di più?&lt;/span&gt;&lt;br /&gt;
&lt;table border=&quot;0&quot;&gt;
      &lt;tbody&gt;
&lt;tr&gt;
        &lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Windows 95/98/Me&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;
        &lt;input name=&quot;voto&quot; type=&quot;radio&quot; value=&quot;Windows 95/98/Me&quot; /&gt;&lt;/span&gt;&lt;/td&gt;
      &lt;/tr&gt;
&lt;tr&gt;
        &lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Windows NT/2000&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;
        &lt;input name=&quot;voto&quot; type=&quot;radio&quot; value=&quot;Windows NT/2000&quot; /&gt;&lt;/span&gt;&lt;/td&gt;
      &lt;/tr&gt;
&lt;tr&gt;
        &lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;MacOS&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;
        &lt;input name=&quot;voto&quot; type=&quot;radio&quot; value=&quot;MacOS&quot; /&gt;&lt;/span&gt;&lt;/td&gt;
      &lt;/tr&gt;
&lt;tr&gt;
        &lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Linux&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;
        &lt;input name=&quot;voto&quot; type=&quot;radio&quot; value=&quot;Linux&quot; /&gt;&lt;/span&gt;&lt;/td&gt;
      &lt;/tr&gt;
&lt;tr&gt;
        &lt;td&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;altro Unix&lt;/span&gt;&lt;/td&gt;
        &lt;td&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;
        &lt;input name=&quot;voto&quot; type=&quot;radio&quot; value=&quot;altro Unix&quot; /&gt;&lt;/span&gt;&lt;/td&gt;
      &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;
    &lt;input onclick=&quot;alert(&#39;demo, non operativo&#39;); return false&quot; type=&quot;submit&quot; value=&quot;vota&quot; /&gt;&lt;/span&gt;&lt;/form&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&amp;nbsp;Il codice HTML relativo è piuttosto 
semplice (il file l&#39;ho chiamato index.php3):&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 
  3.2//EN&quot;&amp;gt;&lt;br /&gt;
  &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
  &amp;lt;meta name=&quot;generator&quot; content=&quot;HTML Tidy, see www.w3.org&quot;&amp;gt;&lt;br /&gt;
  &amp;lt;title&amp;gt;questionario&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form method=&quot;post&quot; action=&quot;index.php3&quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Quale sistema operativo usi di pi&amp;amp;ugrave;?&amp;lt;/p&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;table border=&quot;0&quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Windows 95/98/Me&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;voto&quot; value=&quot;Windows 95/98/Me&quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Windows NT/2000&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;voto&quot; value=&quot;Windows NT/2000&quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;MacOS&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;voto&quot; value=&quot;MacOS&quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Linux&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;voto&quot; value=&quot;Linux&quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;altro Unix&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;voto&quot; value=&quot;altro Unix&quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;/table&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;p&amp;gt;&amp;lt;input type=&quot;submit&quot; value=&quot;vota&quot;&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
  &amp;lt;/html&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Dobbiamo ora scrivere 
  il codice PHP che effettua il conteggio delle scelte, che ovviamente deve 
  essere salvato in qualche formato su disco. Una scelta conveniente è usare 
  queste due funzioni, disponibili sin da PHP 3.0.5:&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;br /&gt;
  &lt;span style=&quot;font-size: x-small;&quot;&gt;string serialize (mixed value);&lt;br /&gt;
  mixed unserialize (string str);&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&lt;br /&gt;
  Come risulta dal codice HTML visto prima, allo script viene passata una 
  variabile $voto la quale indica univocamente mediante una etichetta (ad es. 
  &quot;Windows 95/98/Me&quot;) quale voto è stato espresso. Per memorizzare tutta la 
  statistica, una struttura dati conveniente è un array associativo (spesso 
  detto anche &quot;hash&quot;) in cui l&#39;indice è l&#39;etichetta e il valore corrispondente a 
  quell&#39;indice indica il numero di voti espressi. Ho chiamato questo array $voti. 
  Verso la fine dello script, $voti viene serializzato, ossia trasformato in una 
  stringa che rappresenta valori e tipi della variabile, mediante la funzione 
  serialize. La stringa viene poi scritta su disco in un file chiamato &quot;voti.ser&quot; 
  (a cui potete dare il nome che vi pare comunque). All&#39;inizio il programma 
  recupera il valore precedente dell&#39;hash voti leggendo il file voti.ser e 
  deserializzandolo tramite la funzione unserialize.&lt;br /&gt;
  Grazie a queste due funzioni e ad un semplice file di testo siamo quindi in 
  grado di mantenere sul server lo stato dell&#39;array voti tra una richiesta e 
  l&#39;altra. Notate anche che non occorre conoscere il formato di memorizzazione 
  usato da serialize, anche se può essere interessante darci un&#39;occhiata.&lt;br /&gt;
  Ecco quindi index.php3 con l&#39;aggiunta del codice che effettua la 
  memorizzazione dei dati (tutto il codice aggiunto è evidenziato in neretto):&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD 
    HTML 3.2//EN&quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&quot;generator&quot; content=&quot;HTML Tidy, see www.w3.org&quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;questionario&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;b&gt;&amp;lt;?&lt;br /&gt;
    &lt;br /&gt;
    if (!empty($voto))&lt;br /&gt;
    {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # Cambia qui il nome del file di dati.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # Se il file non esiste va creato vuoto in modo&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # che almeno l&#39;utente web (di solito detto&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # apache o nobody) possa leggerlo e scriverlo.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # Usa i comandi:&lt;br /&gt;
&amp;nbsp;&amp;nbsp; #&amp;nbsp;&amp;nbsp;&amp;nbsp; # touch nome_file&lt;br /&gt;
&amp;nbsp;&amp;nbsp; #&amp;nbsp;&amp;nbsp;&amp;nbsp; # chown apache.apache nome_file&lt;br /&gt;
&amp;nbsp;&amp;nbsp; #&amp;nbsp;&amp;nbsp;&amp;nbsp; # chmod 600 nome_file&lt;br /&gt;
&amp;nbsp;&amp;nbsp; define(&#39;DFN&#39;, &#39;voti.ser&#39;);&lt;br /&gt;
    &lt;br /&gt;
&amp;nbsp;&amp;nbsp; # deserializza i dati da un file su disco&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $fp=fopen(DFN, &#39;r+b&#39;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # se il file può essere più grosso di 4096 bytes, aumentare ;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $voti=unserialize(fread($fp, 4096));&lt;br /&gt;
    &lt;br /&gt;
&amp;nbsp;&amp;nbsp; # conteggia questo voto&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $voti[$voto]++;&lt;br /&gt;
    &lt;br /&gt;
&amp;nbsp;&amp;nbsp; # serializza i dati sullo stesso file&lt;br /&gt;
&amp;nbsp;&amp;nbsp; rewind($fp);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; fwrite($fp, serialize($voti));&lt;br /&gt;
&amp;nbsp;&amp;nbsp; fclose($fp);&lt;br /&gt;
    &lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p&amp;gt;Grazie per aver votato. Torna alla &amp;lt;a href=&quot;/&quot;&amp;gt;home&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;&amp;lt;?&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
    ?&amp;gt;&lt;/b&gt;&lt;br /&gt;
    &amp;lt;form method=&quot;post&quot; action=&quot;index.php3&quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Quale sistema operativo usi di pi&amp;amp;ugrave;?&amp;lt;/p&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;table border=&quot;0&quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Windows 95/98/Me&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;voto&quot; value=&quot;Windows 95/98/Me&quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Windows NT/2000&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;voto&quot; value=&quot;Windows NT/2000&quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;MacOS&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;voto&quot; value=&quot;MacOS&quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Linux&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;voto&quot; value=&quot;Linux&quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;altro Unix&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;voto&quot; value=&quot;altro Unix&quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;input type=&quot;submit&quot; value=&quot;vota&quot;&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;b&gt;&amp;lt;?&lt;br /&gt;
    }&lt;br /&gt;
    ?&amp;gt;&lt;/b&gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Lucchetti e semafori&lt;br /&gt;
  Cosa avranno mai a che fare i lucchetti e addirittura i semafori con 
  l&#39;argomento di questo tutorial? L&#39;algoritmo visto prima non funziona 
  correttamente in ambiente multitasking, ma per mia fortuna non è da buttar 
  via. Invece basta solo aggiungere un&#39;istruzione per risolvere il problema, di 
  cui ho già parlato una volta nel mio
  &lt;a href=&quot;http://king.rett.polimi.it/%7Eant/php&quot;&gt;tutorial su PHP&lt;/a&gt;. Subito dopo 
  la fopen aggiungete:&lt;br /&gt;
  &lt;/span&gt;&lt;code&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;flock($fp, 2);&lt;br /&gt;
  &lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Se già conoscete il motivo 
  di questa istruzione, potete passare al paragrafo successivo, altrimenti vale 
  forse la pena di capirci qualcosa di più, anche se esula dall&#39;argomento di 
  questo tutorial. Vi propino una spiegazione semplice di un argomento secondo 
  me non tanto facile da capire.&lt;br /&gt;
  Considerate un file contenente dei dati che possono o devono essere 
  modificati. Ammettete poi di essere in un ambiente multitasking (dove 
  l&#39;esecuzione di un processo viene sospesa per un certo tempo per continuare 
  quella di un&#39;altro precedentemente sospeso, poi viene sospeso il secondo e il 
  primo viene ripreso ecc...) e che ci siano più processi che accedono a quel 
  file in lettura e/o scrittura. In questa situazione si possono verificare dei 
  problemi. Nel caso dell&#39;esempio precedente siamo in ambiente multitasking, 
  perché ci possono essere più copie dello stesso script index.php3 che accedono 
  allo stesso file voti.ser create dal server web che utilizzate per ottimizzare 
  in modo notevole le prestazioni (pensate a come lento sarebbe un server web 
  che non può gestire un&#39;altra richiesta se prima non è terminata la 
  precedente). Apache ad esempio, il web server più usato su internet e ancora 
  più diffuso in ambiente Unix, è un server multiprocesso e consiste in un 
  processo genitore che coordina una serie di processi figli che poi sono quelli 
  che servono le pagine.&lt;br /&gt;
  Esemplifico un genere di problemi che si può verificare. Come detto prima, in 
  un server multiprocesso come Apache, più persone possono accedere alle vostre 
  pagine web praticamente nello stesso tempo. Quindi ci possono essere due o più 
  processi che eseguono l&#39;interprete PHP sul file index.php3 e che leggeranno e 
  poi scriveranno nel file voti.ser. Detto in altri termini ci sono più persone 
  che stanno esprimendo il loro voto contemporaneamente (o quasi). Per 
  semplicità supponete siano solo due persone (a maggior ragione il problema si 
  potrà verificare se sono di più). Quindi ci sono due persone che attivano 
  l&#39;esecuzione del programma index.php3. Ogni programma index.php3 apre in 
  lettura il file voti.sar. Si può essere così sfortunati che può verificarsi ad 
  es. una cosa del genere:&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;il programma 1 incrementa il 
    contatore di Linux dal valore 43,768 a 43,769 e poi scrive il nuovo valore 
    sul file. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;il programma 2, quasi allo stesso 
    tempo apre il file e legge il valoredel contatore 43,768. Supponendo che 
    anche l&#39;altro utente abbia votato per il pinguino, quello che può succedere 
    è che il programma 2 incrementa il contatore di Linux e scriva il valore 
    43,769.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;L&#39;errore che si verifica è che avete 
  perso un voto. Non è una grande tragedia, tuttavia significa che il nostro 
  sistema di votazione online non è accurato e che più il sito è trafficato e 
  meno accurato diventa, perché maggiore è la probabilità che si verifichino 
  problemi come quello descritto sopra. Questo genere di problemi vengono detti 
  in gergo &quot;race condition&quot;.&lt;br /&gt;
  Potete immaginare una soluzione per questo problema della race condition? Se 
  ci pensate bene la soluzione dovrebbe essere ovvia:&lt;br /&gt;
  ogni volta che volete leggere e scrivere in un file che potrebbe essere 
  modificato da un altro processo, dovreste bloccare l&#39;altro processo, 
  impedendogli di modificare il file mentre il vostro processo lo vuole 
  modificare (&quot;file locking&quot;, dall&#39;inglese to lock che significa bloccare, 
  chiudere a chiave, mentre lock è la serratura).&lt;br /&gt;
  In pratica occorre un meccanismo con cui il primo processo, quello che per 
  primo ha messo le mani sul file, comunichi al secondo processo che sta 
  tentando di aprire un file già aperto dal primo un messaggio che gli indichi 
  che deve aspettare finché l&#39;altro processo ha finito di usare il file. Chi 
  prima arriva prima alloggia... e mette il lucchetto alla risorsa :)&lt;br /&gt;
  Un modo per comunicare questo messaggio, usando un proprio meccanismo di 
  locking, potrebbe consistere nel convenire di utilizzare un&#39;altro file che in 
  qualche modo, ad es. semplicemente attraverso la sua esistenza, comunica che 
  il file voti.ser è bloccato. Questo file viene spesso chiamato &quot;semaforo&quot; (in 
  inglese semaphore), perché analogamente ai semafori stradali che segnalano 
  quando la strada è libera o occupata, questo file segnala quando una risorsa 
  di sistema (nel nostro esempio l&#39;altro file voti.ser) è disponibile. Il codice 
  seguente implementa in PHP questo tipo di file-locking usando un proprio file 
  di lock:&lt;br /&gt;
  &lt;br /&gt;
  while (file_exists(&#39;voti.ser.lock&#39;))&lt;br /&gt;
  {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; usleep(1000);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; clearstatcache();&lt;br /&gt;
  }&lt;br /&gt;
  $lock_fp=fopen(&#39;voti.ser.lock&#39;,&#39;w&#39;);&lt;br /&gt;
  ...&lt;br /&gt;
  # codice che legge e/o scrive voti.ser, come sopra&lt;br /&gt;
  ...&lt;br /&gt;
  fclose($lock_fp);&lt;br /&gt;
  unlink(&#39;voti.ser.lock&#39;);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Questo codice come vedremo purtroppo 
  è da buttare, comunque è molto istruttivo descriverne il funzionamento. Con la 
  funzione file_exists controlliamo se il file di lock esiste. Se esiste vuol 
  dire che un altro processo sta usando il file voti.ser. Se siamo in questo 
  caso col while precedente il nostro processo aspetterà finché il file di lock, 
  voti.ser.lock non esiste più. Aspetterà anche all&#39;infinito, ma questo è un 
  altro problema che possiamo supporre che in condizioni normali non si 
  verifichi. Tra uno sguardo e l&#39;altro al semaforo attendiamo un tempo definito 
  dal parametro della funzione usleep, per non appesantire il sistema con una 
  raffica di chiamate a file_exists. Usiamo usleep perché la funzione sleep() 
  accetta un numero intero di secondi come unità di ritardo, che per un lock è 
  un tempo molto lungo di attesa. Considerando la notevole velocità dei 
  calcolatori, il tempo necessario ad uno sblocco dovrebbe essere mediamente 
  solo di alcuni microsecondi. L&#39;argomento della funzione usleep è il numero di 
  microsecondi di attesa (la u è una stilizzazione della lettera greca mu spesso 
  usata per indicare un milionesimo).&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Quando il file di lock non esiste 
  più, il programma sa che può creare il suo file di lock e cominciare a 
  modificare il file voti.ser. Perciò crea un file di lock con la funzione fopen. 
  Con questo comando, il programma dice a tutti gli altri programmi che sta per 
  modificare il file voti.ser e lo blocca, come quando si mette il lucchetto a 
  qualcosa. Quando il programma ha finito di riscrivere il file voti.ser, chiude 
  il file di lock (voti.ser.lock) e poi usa la funzione unlink per cancellare il 
  lock file. Dopo che il lock file è stato cancellato, un altro programma che 
  stava aspettando su quel semaforo può reiniziare il processo che abbiamo 
  descritto.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Il file di lock che abbiamo usato non 
  è un file speciale; è solo un nome di file comune usato da ogni processo che 
  vuole modificare il file voti.ser. Per convenzione ho scelto di utilizzare il 
  nome del file da bloccare più l&#39;ulteriore estensione .lock come nome del file 
  di lock, ma è solo una buona convenzione. Il file di lock viene creato da una 
  comune chiamata a fopen e cancellato tramite il comando unlink. Quando un file 
  di lock esiste, ogni processo sa che deve aspettare prima di modificare il 
  file bloccato (voti.ser nel nostro caso).&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&lt;i&gt;Note:&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;La funzione usleep non è 
    supportata dai sistemi Windows, perciò siete costretti ad usare sleep(1). 
    Naturalmente sovradimensionare il tempo di ritardo non produce errori, solo 
    riduce le prestazioni, similmente ad avere un tempo di ritardo molto più 
    basso del tempo medio di sblocco o del tutto nullo. Inoltre la funzione 
    unlink può non funzionare sui sistemi Windows. Avete capito quindi quale 
    sistema conviene usare con PHP ;) &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;La ragione della chiamata della 
    funzione clearstatcache è dovuta al fatto che l&#39;interprete PHP, allo scopo 
    di aumentare le prestazioni si tiene in una cache i risultati dell&#39;ultima 
    chiamata a molte funzioni che hanno a che fare col filesystem, tra cui 
    file_exists. Se la prossima chiamata a file_exists viene fatta con lo stesso 
    nome di file come argomento, l&#39;interprete restituisce il valore messo nella 
    cache, senza rifare alcun controllo dello stato attuale del file. Poiché nel 
    nostro caso lo stato del file voti.ser.lock viene controllato molte volte e 
    può cambiare repentinamente (il file stesso può scompare perché un altro 
    processo toglie il lock al file), occorre chiamare la funzione 
    clearstatcache per svuotare la cache prima di fare un&#39;altra chiamata a 
    file_exists, forzando così file_exists ad effettuare un vero e proprio 
    controllo sullo stato del file tramite le funzioni del sistema operativo. 
    Devo anche precisare che ogni singola richiesta usa una cache separata per 
    le funzioni che operano sul filesystem che viene rilasciata al termine della 
    richiesta stessa.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Se siete acuti avrete già notato cosa 
  c&#39;è che non va nel programma precedente. Il problema è rappresentato dal 
  multitasking. Chi vi assicura che subito dopo essere usciti dal ciclo while e 
  prima che l&#39;azione della fopen sia portata a completamento, il sistema 
  operativo non decida di interrompere l&#39;esecuzione e passare ad un altro 
  processo index.php3? In questo caso il primo processo, quando se ne riprende 
  l&#39;esecuzione, considera il file voti.ser sbloccato, e questo potrebbe non 
  esserlo, con la conseguenza che si verifica di nuovo una &quot;race condition&quot;. 
  Anche se le probabilità sono minori rispetto al caso in cui non c&#39;è alcun 
  controllo sull&#39;accesso contemponeraneo alla risorsa, il baco rimane.&lt;br /&gt;
  Per risolvere questo problema occorrerebbe assicurare che le due operazioni di 
  verifica dell&#39;esistenza del lock e creazione di un nuovo lock siano 
  &quot;atomiche&quot;, vale a dire non interrompibili. Non c&#39;è in PHP alcuna funzione per 
  assicurare questo, mentre in assembly sì. Tuttavia in PHP non avete bisogno di 
  programmarvi un meccanismo di locking. Poiché il file locking è spesso 
  necessario, PHP vi mette a disposizione una funzione sicura e semplice da 
  usare per effettuare questo task che si appoggia a sua volta ad una system 
  call del vostro sistema operativo.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Quindi invece di usare un vostro 
  meccanismo di locking, dovreste usare uno dei meccanismi di locking di 
  sistema, che garantiscono il funzionamento corretto della procedura di locking 
  in tutti i casi e sono accessibili dal PHP tramite la funzione flock, sia su 
  piattaforma Unix che Windows.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;La funzione flock (che sta per &quot;file 
  lock&quot;) ha la seguente sintassi:&lt;/span&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;bool flock (int fp, int 
  operation [, int wouldblock])&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Per il tipo di locking che ci serve a 
  noi (lock esclusivo, che può essere posseduto solo da un processo per volta), 
  settate operation uguale a 2 oppure a LOCK_EX (se avete PHP &amp;gt;=4.0.1). fp è l&#39;handle 
  del file da lockkare ritornato da fopen. Se passate il valore 3 (o LOCK_UN per 
  PHP&amp;gt;=4.0.1) il lock viene rilasciato. Comunque un lock viene rilasciato 
  all&#39;atto della chiusura del file su cui vige tramite fclose, quindi possiamo 
  risparmiarci di chiamare prima la flock.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Definendo un lock esclusivo (exclusive 
  lock) sul file, quando un altro processo tenta di accedere al file bloccato, 
  chiamando a sua volta la flock, questa chiamata della flock lo pone in attesa 
  finché il file non viene sbloccato dall&#39;altro processo e appena viene 
  sbloccato stabilisce un nuovo lock sul file. Il codice eseguito dalla flock è 
  simile a quello del nostro meccanismo di locking, ma garantisce l&#39;atomicità 
  della sequenza di operazioni di verifica e acquisizione del lock. Oltretutto 
  la flock è anche più semplice da usare: apri il file, poi passi il filehandle 
  a flock. Se un altro processo cerca di usare il file si bloccherà al comando 
  flock() finché il primo processo ha finito col file. Non c&#39;è altro da fare.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;$fp=fopen(DFN, &#39;r+b&#39;);&lt;br /&gt;
  flock($fp, 2);&lt;br /&gt;
  ...&lt;br /&gt;
  # codice che legge e/o scrive voti.ser, come sopra&lt;br /&gt;
  ...&lt;br /&gt;
  fclose($fp);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Naturalmente questo meccanismo di 
  locking è consultivo (advisory lock), perché la flock non ha il potere di 
  bloccare l&#39;accesso fisico al file: se un processo non chiama la flock e quindi 
  non attende sulla flock lo sbloccaggio, si può verificare lo stesso la 
  condizione di gara. Assicuratevi perciò che tutti i processi che accedano al 
  file comune usino lock. Nel caso precedente avevamo tutti processi identici 
  copie di un unico codice, quello di index.php3 e quindi ogni copia per il 
  fatto di essere identica alla prima usa flock.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Il primo grafico&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Torniamo all&#39;argomento principale di 
  questo tutorial. Nella prima versione del nostro semplice questionario online, 
  anziché presentare le statistiche viene stampato il messaggio &quot;Grazie per aver 
  votato. Torna alla home&quot;. Si tratta adesso solo di sostituire quel messaggio 
  con la stampa del grafico delle statistiche. I dati, compreso l&#39;ultimo voto 
  conteggiato, sono già disponibili nell&#39;array $voti. Naturalmente, essendo in 
  un contesto multitasking, potrebbe accadere che subito dopo aver registrato un 
  voto e prima che venga emesso il grafico, il processo venga sospeso per 
  registrare un altro voto e quando si ritorna al primo utente, questo si 
  ritrova stampata una statistica falsata per mancanza di un voto. Pensavate di 
  esservene liberati eppure troviamo di nuovo qui il problema del locking. La 
  cosa non è qui così grave, poiché i voti vengono comunque registrati 
  correttamente grazie al file locking, ma è così semplice porre rimedio al 
  problema che non ho resistito. Basta ritardare la chiusura del file puntato da 
  $fp a dopo la stampa del grafico, in modo che il lock sul file rimanga anche 
  durante la stampa del grafico stesso. In pratica lettura, aggiornamento del 
  file voti.ser e stampa della statistica sono operazioni che ogni processo 
  index.php3 deve portare a termine, prima che possa iniziarle un altro 
  processo.&lt;br /&gt;
  Veniamo ora finalmente alla generazione del grafico con HTML_Graphs. La prima 
  cosa è includere la libreria. Ho messo index.php3 nella directory web /quest e 
  lì dentro ho creato dei link simbolici con lo stesso nome ad HTML_Graphs.php3 
  (che sta in /HTML_Graphs) e alle immagini contenute nella sottodirectory 
  images di /HTML_Graphs che useremo tra poco usando il comando Unix &quot;ls -s 
  nomefile nomelink&quot;. In questo modo scrivo semplicemente:&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;require(&#39;HTML_Graphs.php3&#39;); &lt;/span&gt;
  &lt;/div&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Per creare un grafico a barre 
  orizzontali è sufficiente chiamare la funzione html_graph che genera il codice 
  HTML necessario. I parametri che è obbligatorio passare sono 4:&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;un array contenente le etichette 
    delle barre. Nel nostro caso passiamo semplicemente l&#39;array formato dalle 
    chiavi di $voti, cosa che rende il nostro codice più generico e più 
    semplice. Per ottenere la lista delle chiavi di un array associativo sotto 
    forma di un array scalare basta chiamare la funzione array_keys sull&#39;array 
    associativo.&lt;br /&gt;
&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;l&#39;array dei valori di ogni barra 
    ordinati in modo corrispondente alle etichette delle barre indicate nell&#39;array 
    precedente. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;l&#39;array dei corrispondenti codici 
    di colore delle barre. Un codice di colore va preceduto da # come in HTML, 
    altrimenti si intende il percorso di un file di immagine che verrà usato 
    come tile per riempire la barra. Con i grafici verticali si possono usare 
    solo i file di immagine. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;un array associativo che definisce 
    lo stile dell&#39;intero grafico, documentato con precisione in 
    HTML_Graphs.php3. Tutte le chiavi hanno associati dei valori di default. 
    L&#39;unico valore che nel nostro caso è necessario cambiare è il fattore di 
    scala che per default vale 1.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Un problema è rappresentato dal fatto 
  che il nostro codice ordina gli elementi dell&#39;array $voti a seconda di come 
  gli vengono i primi voti. Per far sì che gli elementi dell&#39;array $voti siano 
  nello stesso ordine in cui sono presentati nella form di votazione, basta 
  creare un array $voti in cui gli elementi sono in quest&#39;ordine ed i voti sono 
  tutti zero e scriverlo come valore iniziale nel file voti.ser. La cosa è 
  banale, comunque se avete intenzione di usare lo script sul vostro sito per 
  proporre periodicamente dei sondaggi, conviene farsi uno scriptino facilmente 
  riutilizzabile per inizializzare il file voti.ser. Ho chiamato questo script 
  reset.php3. Dovete semplicemente inizializzare l&#39;array $voti (che stavolta è 
  un semplice array) e lanciare lo script da web oppure da riga di comando se 
  avete installato la versione CGI di PHP. Dopodiché eliminate lo script dalla 
  directory web in modo che nessun utente web abbia la possibilità di invocarlo 
  e di resettarvi le statistiche.&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD 
    HTML 3.2//EN&quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&quot;generator&quot; content=&quot;HTML Tidy, see www.w3.org&quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;reset del questionario&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;?&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # se avete installato PHP da linea di comando potete&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # lanciare questo script da linea di comando con:&lt;br /&gt;
&amp;nbsp;&amp;nbsp; #&amp;nbsp;&amp;nbsp;&amp;nbsp; # php reset.php3&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # altrimenti lanciatelo da web&lt;br /&gt;
    &lt;br /&gt;
&amp;nbsp;&amp;nbsp; # Cambia qui il nome del file di dati.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # Se il file non esiste va creato vuoto in modo&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # che almeno l&#39;utente web (di solito detto&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # apache o nobody) possa leggerlo e scriverlo.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # Usa i comandi:&lt;br /&gt;
&amp;nbsp;&amp;nbsp; #&amp;nbsp;&amp;nbsp;&amp;nbsp; # touch nome_file&lt;br /&gt;
&amp;nbsp;&amp;nbsp; #&amp;nbsp;&amp;nbsp;&amp;nbsp; # chown apache.apache nome_file&lt;br /&gt;
&amp;nbsp;&amp;nbsp; #&amp;nbsp;&amp;nbsp;&amp;nbsp; # chmod 600 nome_file&lt;br /&gt;
&amp;nbsp;&amp;nbsp; define(&#39;DFN&#39;, &#39;voti.ser&#39;);&lt;br /&gt;
    &lt;br /&gt;
&amp;nbsp;&amp;nbsp; # definisci qui i voti iniziali&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # nell&#39;ordine desiderato per il grafico&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # attenzione: le chiavi devono corrispondere&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # ai valori degli attributi value nei&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # tag &amp;lt;input type=&quot;radio&quot;&amp;gt; di index.php3&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $voti = array(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;Windows 95/98/Me&#39; =&amp;gt; 0,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;Windows NT/2000&#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
    =&amp;gt; 0,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;MacOS&#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
    =&amp;gt; 0,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;Linux&#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
    =&amp;gt; 0,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;altro Unix&#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
    =&amp;gt; 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; );&lt;br /&gt;
    &lt;br /&gt;
&amp;nbsp;&amp;nbsp; # serializza voti tutti nulli&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $fp=fopen(DFN, &#39;wb&#39;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; fwrite($fp, serialize($voti));&lt;br /&gt;
&amp;nbsp;&amp;nbsp; fclose($fp);&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p&amp;gt;Fine dello script. Ricordarsi di rimuoverlo o spostarlo in modo&lt;br /&gt;
    che non possa essere pi&amp;amp;ugrave; invocato via web.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Ecco quindi la prossima versione di 
  index.php3 che finalmente genera il grafico delle statistiche dopo la 
  votazione:&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD 
    HTML 3.2//EN&quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&quot;generator&quot; content=&quot;HTML Tidy, see www.w3.org&quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;questionario&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;?&lt;br /&gt;
    &lt;br /&gt;
    if (!empty($voto))&lt;br /&gt;
    {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # Cambia qui il nome del file di dati.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;b&gt;# Questo file va creato usando lo script reset.php3&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; define(&#39;DFN&#39;, &#39;voti.ser&#39;);&lt;br /&gt;
    &lt;br /&gt;
&amp;nbsp;&amp;nbsp; # deserializza i dati da un file su disco&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $fp=fopen(DFN, &#39;r+b&#39;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; flock($fp, 2);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # se il file può essere più grosso di 4096 bytes, aumentare ;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $voti=unserialize(fread($fp, 4096));&lt;br /&gt;
    &lt;br /&gt;
&amp;nbsp;&amp;nbsp; # conteggia questo voto&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $voti[$voto]++;&lt;br /&gt;
    &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;b&gt;# stampa il grafico con HTML_Graphs&lt;br /&gt;
&amp;nbsp;&amp;nbsp; require(&#39;HTML_Graphs.php3&#39;);&lt;br /&gt;
    &lt;br /&gt;
&amp;nbsp;&amp;nbsp; $names = array_keys($voti);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $values = array_values($voti);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $largest = max($values);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # alcuni colori per le barre: blu, verde, fucsia, rosso, ciano&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $bars = array(&#39;#0000ff&#39;, &#39;#00ff00&#39;, &#39;#ff00ff&#39;, &#39;#ff0000&#39;, 
    &#39;#00ffff&#39;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # scale = fattore che moltiplicato ai valori fornisce la&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # dimensione della barra. Il valore maggiore $largest avrà&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # una barra lunga 150 pixel settando scale a 150/$largest&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $graph_vals = array(&#39;scale&#39;=&amp;gt;150/$largest);&lt;br /&gt;
    &lt;br /&gt;
&amp;nbsp;&amp;nbsp; html_graph($names, $values, $bars, $graph_vals);&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; # serializza i dati sullo stesso file&lt;br /&gt;
&amp;nbsp;&amp;nbsp; rewind($fp);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; fwrite($fp, serialize($voti));&lt;br /&gt;
&amp;nbsp;&amp;nbsp; fclose($fp);&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;form method=&quot;post&quot; action=&quot;index.php3&quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Quale sistema operativo usi di pi&amp;amp;ugrave;?&amp;lt;/p&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;table border=&quot;0&quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Windows 95/98/Me&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;voto&quot; value=&quot;Windows 95/98/Me&quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Windows NT/2000&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;voto&quot; value=&quot;Windows NT/2000&quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;MacOS&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;voto&quot; value=&quot;MacOS&quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Linux&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;voto&quot; value=&quot;Linux&quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;altro Unix&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;input type=&quot;radio&quot; name=&quot;voto&quot; value=&quot;altro Unix&quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;p&amp;gt;&amp;lt;input type=&quot;submit&quot; value=&quot;vota&quot;&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;?&lt;br /&gt;
    }&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Ecco poi un esempio dell&#39;aspetto che 
  ha il grafico sul mio browser Mozilla:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;
  &lt;img alt=&quot;primo esempio di grafico&quot; height=&quot;205&quot; src=&quot;http://leotardi.no-ip.com/html/graficiphp/grafici.png&quot; width=&quot;510&quot; /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Le barre sono state generata da 
  HTML_Graphs come delle celle di tabella contenenti un &quot;nonbreaking space&quot; (&amp;amp;nbsp;), 
  un trucco noto un po&#39; a tutti i webmaster per evitare che alcuni browser non 
  disegnino proprio delle celle di tabella che si vogliono vuote. Possiamo 
  migliorare il grafico, aggiustando vari parametri. Prima di tutto mettiamo più 
  spazio tra le barre ed inseriamo un titolo. Per fare questo basta aggiungere 
  qualche parametro nell&#39;hash $graph_vals:&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: x-small;&quot;&gt; $graph_vals = array(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;scale&#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt;&amp;nbsp; 
    150/$largest,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;hlabel&#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt;&amp;nbsp; 
    &#39;# di voti&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #&#39;border&#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt;&amp;nbsp; 
    1,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;cellpadding&#39;&amp;nbsp; =&amp;gt;&amp;nbsp; 4&lt;br /&gt;
&amp;nbsp;&amp;nbsp; );&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;border specifica la dimensione del 
  bordo della tabella più esterna ed è utile in fase di sviluppo per rendervi 
  conto di com&#39;è la struttura tabellare con cui è costruito il grafico. 
  cellpadding imposta lo spazio tra le celle ed il contenuto per questa tabella 
  principale. Il risultato della modifica è mostrato in figura:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;
  &lt;img alt=&quot;Il grafico migliorato&quot; height=&quot;296&quot; src=&quot;http://leotardi.no-ip.com/html/graficiphp/grafici2.png&quot; width=&quot;498&quot; /&gt;
  &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;A questo punto provvedere un link per 
  visualizzare il grafico senza registrare alcun voto è piuttosto semplice: 
  passiamo un parametro flag (stat=on) per indicare che vogliamo le statistiche 
  e non vogliamo alcuna votazione. Un paio di if e il gioco è fatto.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Per evitare che un valore zero venga 
  comunque rappresentato con uno spazio, potete usare delle immagini che verrano 
  &quot;stirate&quot; per costituire le barre. Per far questo basta modificare l&#39;array 
  $bars ad es. come segue:&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;font-size: x-small;&quot;&gt;$bars = array(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;images/hbar_blue.gif&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;images/hbar_green.gif&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;images/hbar_orange.gif&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;images/hbar_red.gif&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;images/hbar_aqua.gif&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; );&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Quando ci sono le immagini potete 
  trasformare un grafico a barre orizzontali in uno a barre verticali in uno 
  snap. Il grafico orizzontale è del tipo 0 (predefinito), quello verticale del 
  tipo 1, quindi aggiungete questo elemento all&#39;array $graph_vals:&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;code&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&#39;type&#39; =&amp;gt; 1&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&lt;span class=&quot;piccolo&quot;&gt;&lt;b&gt;Come fare 
un sondaggio&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;code&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;&lt;br /&gt;
Salve a tutti.........ci sono molte applicazioni web che un utente può usare per 
arricchire il proprio sito e renderlo &lt;br /&gt;
più interessante e dinamico. Una di queste sono i sondaggi. Questo sondaggio (Ho 
messo delle squadre solo cosi per indicazione)che vi sto per illustrare e creato 
in php naturalmente appoggiandosi ad &lt;br /&gt;
un database Mysql con qualche effetto di javascript. Non ho curato la grafica 
l&#39;ho solo fatto funzionare poi ognuno sceglie la grafica migliore. &lt;br /&gt;
E&#39; molto facile da comprendere come state per vedere. Scusate gli &quot;Orrori&quot; di 
ortografia e altro...... &lt;br /&gt;
Questa applicazione e ha i seguenti file.... &lt;br /&gt;
1)db_connect.php &lt;br /&gt;
2)install.php &lt;br /&gt;
3)scegli.htm &lt;br /&gt;
4)vai.php &lt;br /&gt;
5)guarda.php &lt;br /&gt;
6)vota.gif &lt;br /&gt;
Guardiamoli uno per uno le loro funzionalità &lt;br /&gt;
1)db_connect.php &lt;br /&gt;
Questo è il file che verra incluso nei file vai.php, guarda.php. E il file di 
connessione a mysql e di selezione al database &lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;piccolo&quot;&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;PHP:&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;hr /&gt;

&lt;dl&gt;&lt;dd&gt;&lt;code&gt;&lt;span style=&quot;color: black; font-size: x-small;&quot;&gt;
  &lt;span style=&quot;color: #0000cc; font-family: Times New Roman;&quot;&gt;&amp;lt;?php &lt;br /&gt;
  mysql_connect&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;color: #006600;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;localhost&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;root&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;)&amp;nbsp;or&amp;nbsp;die(&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;Impossibile 
  connettersi al database&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;); &lt;br /&gt;
  &lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;mysql_select_db&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;sondaggio&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;)&amp;nbsp;or&amp;nbsp;die(&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;Impossibile 
  selezionare il database&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;); &lt;br /&gt;
  &lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;?&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/dd&gt;&lt;/dl&gt;
&lt;hr /&gt;
&lt;code&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;Come si puo notare dopo essermi 
connesso al database seleziono la tabella sondaggio che ancora non ho creato ma 
che faro presto &lt;br /&gt;
2)install.php &lt;br /&gt;
Questo file è quello che uso per installare la mia tabella. Per sicurezza dopo 
aver creato la tabella cancello il file.Ora posto il codice e poi lo commentiamo 
zona per zona. &lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;piccolo&quot;&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: x-small;&quot;&gt;PHP:&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;hr /&gt;

&lt;dl&gt;&lt;dd&gt;&lt;code&gt;&lt;span style=&quot;color: black; font-size: x-small;&quot;&gt;
  &lt;span style=&quot;color: #0000cc; font-family: Times New Roman;&quot;&gt;&amp;lt;?php &lt;br /&gt;
  $connessione&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;color: #006600;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;mysql_connect&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;localhost&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;root&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;)&amp;nbsp;or&amp;nbsp;die(&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;Impossibile 
  connettersi al database&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;); &lt;br /&gt;
  if&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$connessione&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;)&amp;nbsp;{
  &lt;br /&gt;
  echo&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;Connessione a mysql riuscita&amp;lt;br&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;;
  &lt;br /&gt;
  }else{ &lt;br /&gt;
  echo&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot; Connessione fallita&amp;lt;br&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;;
  &lt;br /&gt;
  } &lt;br /&gt;
  &lt;br /&gt;
  &lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$database&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;=&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;mysql_create_db&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;sondaggio&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$connessione&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;);&lt;br /&gt;
  &lt;br /&gt;
  if&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$database&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;)&amp;nbsp;{ &lt;br /&gt;
  echo&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;Creazione&amp;nbsp;&amp;nbsp;database riuscita&amp;lt;br&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;;
  &lt;br /&gt;
  }else{ &lt;br /&gt;
  echo&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot; Creazione database fallita probabilmente 
  c&#39;e già&amp;lt;br&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;; &lt;br /&gt;
  } &lt;br /&gt;
  &lt;br /&gt;
  &lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$db_name&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;sondaggio&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;;
  &lt;br /&gt;
  &lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$selezione&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;mysql_select_db&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$db_name&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;);
  &lt;br /&gt;
  if&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$selezione&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;)&amp;nbsp;{
  &lt;br /&gt;
  echo&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;Selezione&amp;nbsp;&amp;nbsp;database riuscita&amp;lt;br&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;;
  &lt;br /&gt;
  }else{ &lt;br /&gt;
  echo&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot; Selezione fallita&amp;lt;br&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;;
  &lt;br /&gt;
  } &lt;br /&gt;
  &lt;br /&gt;
  &lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$creatabella&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;CREATE 
  TABLE nomi ( &lt;br /&gt;
  id INT (5) UNSIGNED not null AUTO_INCREMENT, &lt;br /&gt;
  italia&amp;nbsp;&amp;nbsp;DECIMAL, &lt;br /&gt;
  portogallo&amp;nbsp;&amp;nbsp;DECIMAL, &lt;br /&gt;
  spagna&amp;nbsp;&amp;nbsp;DECIMAL, &lt;br /&gt;
  francia&amp;nbsp;&amp;nbsp;DECIMAL, &lt;br /&gt;
  inghilterra&amp;nbsp;&amp;nbsp;DECIMAL, &lt;br /&gt;
  PRIMARY KEY (id))&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;; &lt;br /&gt;
  &lt;br /&gt;
  &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$crea&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;mysql_query&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$creatabella&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$connessi&lt;br /&gt;
  one&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;)&amp;nbsp;or&amp;nbsp;die(&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;Impossibile&amp;nbsp;eseguire&amp;nbsp;la&amp;nbsp;query&amp;nbsp;&amp;lt;b&amp;gt;$ciao&amp;lt;/b&amp;gt;&amp;lt;a&amp;nbsp;href=&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;inserisci.php&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&amp;gt;&amp;lt;br&amp;gt;Inserisci&amp;nbsp;un&amp;nbsp;messaggio&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;Errore&amp;lt;/b&amp;gt;:&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;mysql_error&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;());
  &lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  if&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$crea&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;)&amp;nbsp;{ &lt;br /&gt;
  echo&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;Creazione Tabella riuscita&amp;lt;br&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;;
  &lt;br /&gt;
  }else{ &lt;br /&gt;
  echo&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot; Creazione&amp;nbsp;&amp;nbsp;Tabella fallita&amp;lt;br&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;;
  &lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  } &lt;br /&gt;
  &lt;br /&gt;
  &lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$creatabella&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;INSERT 
  INTO nomi (italia, portogallo, spagna, francia, inghilterra) &lt;br /&gt;
  VALUES( &lt;br /&gt;
  &#39;0&#39;, &lt;br /&gt;
  &#39;0&#39;, &lt;br /&gt;
  &#39;0&#39;, &lt;br /&gt;
  &#39;0&#39;, &lt;br /&gt;
  &#39;0&#39; &lt;br /&gt;
  ) &lt;br /&gt;
  &lt;br /&gt;
  &quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;; &lt;br /&gt;
  &lt;br /&gt;
  &lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$crea&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;mysql_query&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$creatabella&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;)&amp;nbsp;or&amp;nbsp;die(&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;Impossibile&amp;nbsp;eseguire&amp;nbsp;la&amp;nbsp;query&amp;nbsp;&amp;lt;b&amp;gt;$ciao&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;Errore&amp;lt;/b&amp;gt;:&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;mysql_error&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;());
  &lt;br /&gt;
  &lt;br /&gt;
  if&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;$crea&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;)&amp;nbsp;{ &lt;br /&gt;
  echo&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;Inserimento riuscito&amp;lt;br&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;;
  &lt;br /&gt;
  }else{ &lt;br /&gt;
  echo&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;Inserimento Fallito&amp;lt;br&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;;
  &lt;br /&gt;
  } &lt;br /&gt;
  &lt;br /&gt;
  &lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;mysql_close&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;(); &lt;br /&gt;
  &lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;?&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/dd&gt;&lt;/dl&gt;</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/5929294888668809536/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/10/trucchi-ed-esempi-php.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/5929294888668809536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/5929294888668809536'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/10/trucchi-ed-esempi-php.html' title='trucchi ed esempi php'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-3133546013912012874</id><published>2011-10-24T14:48:00.001-07:00</published><updated>2011-10-24T14:48:29.987-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="feed"/><title type='text'>leggere feed</title><content type='html'>&lt;pre&gt;&amp;lt;?php

  $doc = new DOMDocument();
  $doc-&amp;gt;load(&#39;http://www.softarea51.com/rss/windows/Web_Development/XML_CSS_Utilities.xml&#39;);
  $arrFeeds = array();
  foreach ($doc-&amp;gt;getElementsByTagName(&#39;item&#39;) as $node) {
    $itemRSS = array ( 
      &#39;title&#39; =&amp;gt; $node-&amp;gt;getElementsByTagName(&#39;title&#39;)-&amp;gt;item(0)-&amp;gt;nodeValue,
      &#39;desc&#39; =&amp;gt; $node-&amp;gt;getElementsByTagName(&#39;description&#39;)-&amp;gt;item(0)-&amp;gt;nodeValue,
      &#39;link&#39; =&amp;gt; $node-&amp;gt;getElementsByTagName(&#39;link&#39;)-&amp;gt;item(0)-&amp;gt;nodeValue,
      &#39;date&#39; =&amp;gt; $node-&amp;gt;getElementsByTagName(&#39;pubDate&#39;)-&amp;gt;item(0)-&amp;gt;nodeValue
      );
    array_push($arrFeeds, $itemRSS);
  }

?&amp;gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/3133546013912012874/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/10/leggere-feed.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/3133546013912012874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/3133546013912012874'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/10/leggere-feed.html' title='leggere feed'/><author><name>logistar</name><uri>http://www.blogger.com/profile/04182847575807150550</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-4638701082868600611</id><published>2011-10-24T13:59:00.001-07:00</published><updated>2011-10-24T13:59:36.416-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="feed"/><category scheme="http://www.blogger.com/atom/ns#" term="rss"/><category scheme="http://www.blogger.com/atom/ns#" term="sintassi"/><title type='text'>Fedd rss</title><content type='html'>&lt;h1&gt;
Specifiche RSS 2.0&lt;/h1&gt;
&lt;div class=&quot;subtitle&quot;&gt;
Traduzione italiana delle specifiche inglesi del formato RSS 2.0.&lt;/div&gt;
&lt;!-- start translationNotes --&gt;
&lt;div class=&quot;disclaimer&quot; id=&quot;translationNotes&quot;&gt;

&lt;strong&gt;Note di traduzione&lt;/strong&gt;&lt;br /&gt;

La presente documentazione è una traduzione italiana delle specifiche
 RSS 2.0, pubblicate da RSS Advisory Board il 12 Agosto 2006.&lt;br /&gt;

&lt;ul&gt;
&lt;li&gt;
L&#39;URI di questo documento è
&lt;a href=&quot;http://www.specifiche.it/rss/2.0/&quot;&gt;http://www.specifiche.it/rss/2.0/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
L&#39;URI della versione originale in lingua inglese è
&lt;a href=&quot;http://www.rssboard.org/rss-2-0-8&quot;&gt;http://www.rssboard.org/rss-2-0-8&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
L&#39;URI della versione più recente in lingua inglese è
&lt;a href=&quot;http://www.rssboard.org/rss-specification&quot;&gt;http://www.rssboard.org/rss-specification&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
Questo documento è da considerare come risorsa di supporto. L&#39;unica 
versione normativa è rappresentata dalle specifiche ufficiali in lingua 
inglese.&lt;br /&gt;

La traduzione italiana è stata eseguita da &lt;a href=&quot;http://www.simonecarletti.com/&quot;&gt;Simone Carletti&lt;/a&gt; &amp;lt;&lt;a href=&quot;mailto:weppos@weppos.net&quot;&gt;weppos@weppos.net&lt;/a&gt;&amp;gt;. Traduzione completata il 2006-04-16.&lt;br /&gt;

Nonostante sia stata usata la massima cura possibile nella fase di traduzione, &lt;strong&gt;non si esclude la presenza di errori nel presente documento&lt;/strong&gt;.
 Qualsiasi errore individuato e segnalato all&#39;autore della traduzione 
verrà verificato e corretto nel più breve tempo possibile. &lt;br /&gt;

&lt;/div&gt;
&lt;!-- end translationNotes --&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://www.specifiche.it/rss/2.0/#whatIsRss&quot;&gt;Che cos&#39;è l&#39;RSS? &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.specifiche.it/rss/2.0/#sampleFiles&quot;&gt;File di esempio &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.specifiche.it/rss/2.0/#aboutThisDocument&quot;&gt;Informazioni su questo documento &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.specifiche.it/rss/2.0/#requiredChannelElements&quot;&gt;Elementi obbligatori per channel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.specifiche.it/rss/2.0/#optionalChannelElements&quot;&gt;Elementi opzionali per channel &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.specifiche.it/rss/2.0/#hrelementsOfLtitemgt&quot;&gt;Elementi per &amp;lt;item&amp;gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.specifiche.it/rss/2.0/#comments&quot;&gt;Commenti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.specifiche.it/rss/2.0/#extendingRss&quot;&gt;Estendere l&#39;RSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.specifiche.it/rss/2.0/#roadmap&quot;&gt;Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.specifiche.it/rss/2.0/#licenseAndAuthorship&quot;&gt;Licenza e proprietà&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;whatIsRss&quot;&gt;
Che cos&#39;è l&#39;RSS?&lt;/h2&gt;
L&#39;RSS è un formato per la distribuzione di contenuti nel Web.&lt;br /&gt;

Il suo nome è acronimo di Really Simple Syndication. &lt;br /&gt;

L&#39;RSS è un dialetto dell&#39;XML. Ogni file RSS deve essere conforme alle &lt;a href=&quot;http://www.w3.org/TR/REC-xml&quot; title=&quot;Specifiche W3C XML 1.0&quot;&gt;specifiche&lt;/a&gt; XML 1.0, così come pubblicato sul sito del World Wide Web Consortium (W3C).&lt;br /&gt;

Cronologia delle &lt;a href=&quot;http://www.rssboard.org/rss-history&quot; title=&quot;Cronologia delle versioni RSS&quot;&gt;versioni dell&#39;RSS&lt;/a&gt;.&lt;br /&gt;

Al livello più alto, un documento RSS è costituito da un elemento &lt;code&gt;&amp;lt;rss&amp;gt;&lt;/code&gt; con un attributo obbligatorio chiamato &lt;code&gt;version&lt;/code&gt;, che specifica la versione RSS con la quale il file risulta conforme. Per essere conforme a queste specifiche l&#39;attributo &lt;code&gt;version&lt;/code&gt; deve avere come valore &lt;code&gt;2.0&lt;/code&gt;.&lt;br /&gt;

Subordinato all&#39;elemento &lt;code&gt;&amp;lt;rss&amp;gt;&lt;/code&gt; è l&#39;elemento &lt;code&gt;&amp;lt;channel&amp;gt;&lt;/code&gt;, che contiene informazioni relative al canale (metadati) e il suo contenuto.&lt;br /&gt;

&lt;h2 id=&quot;sampleFiles&quot;&gt;
File di esempio&lt;/h2&gt;
Ecco alcuni file di esempio per: RSS &lt;a href=&quot;http://www.specifiche.it/rss/files/1.0/sample-rss-091.xml&quot; title=&quot;Esempio di file RSS 0.91&quot;&gt;0.91&lt;/a&gt;, &lt;a href=&quot;http://www.specifiche.it/rss/files/1.0/sample-rss-092.xml&quot; title=&quot;Esempio di file RSS 0.92&quot;&gt;0.92&lt;/a&gt; e &lt;a href=&quot;http://www.specifiche.it/rss/files/1.0/sample-rss-2.xml&quot; title=&quot;Esempio di file RSS 2.0&quot;&gt;2.0&lt;/a&gt;. &lt;br /&gt;

Da notare che i file di esempio potrebbero puntare a documenti o 
servizi non più esistenti. L&#39;esempio 0.91 è stato creato nel momento in 
cui è stata scritta la documentazione per la versione corrispondente. 
Mantenere una traccia degli esempi è sembrata una buona idea.&lt;br /&gt;

&lt;h2 id=&quot;aboutThisDocument&quot;&gt;
Informazioni su questo documento&lt;/h2&gt;
Questo documento rappresenta lo stato dell&#39;RSS nell&#39;autunno del 2002, versione 2.0.1. &lt;br /&gt;

Incorpora tutti i cambiamenti e le aggiunte, cominciando dalle specifiche di base per l&#39;&lt;a href=&quot;http://www.rssboard.org/rss-0-9-1&quot; title=&quot;Specifiche della versione 0.91&quot;&gt;RSS 0.91&lt;/a&gt; (Giugno 2000) ed include le nuove caratteristiche introdotte con l&#39;&lt;a href=&quot;http://www.rssboard.org/rss-0-9-2&quot; title=&quot;Specifiche della versione 0.92&quot;&gt;RSS 0.92&lt;/a&gt; (Dicembre 2000) e l&#39;RSS 0.94 (Agosto 2002).&lt;br /&gt;

Le note relative alle modifiche sono riportate &lt;a href=&quot;http://www.rssboard.org/rss-change-notes&quot; title=&quot;Cronologia delle versioni RSS&quot;&gt;qui&lt;/a&gt;. &lt;br /&gt;

In primo luogo queste specifiche documentano i sottoelementi obbligatori ed opzionali per l&#39;elemento &lt;code&gt;&amp;lt;channel&amp;gt;;&lt;/code&gt; in seguito quelli per l&#39;elemento &lt;code&gt;&amp;lt;item&amp;gt;&lt;/code&gt;.
 La sezione finale contiene risposte alle domande più frequenti e 
fornisce una roadmap per evoluzioni future, oltre che linee guida 
estendere l&#39;RSS.&lt;br /&gt;

&lt;h2 id=&quot;requiredChannelElements&quot;&gt;
Elementi obbligatori per channel&lt;/h2&gt;
Questa è una lista degli elementi obbligatori per &lt;code&gt;&amp;lt;channel&amp;gt;&lt;/code&gt;, ciascuno con una breve descrizione, un esempio e, dove disponibile, un collegamento ad una risorsa maggiormente descrittiva.&lt;br /&gt;

&lt;table class=&quot;grid&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Elemento&lt;/th&gt;
&lt;th&gt;Descrizione&lt;/th&gt;
&lt;th&gt;Esempio&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;title&lt;/td&gt;
&lt;td&gt;Il nome del canale. Per gli utenti rappresenta il riferimento a chi 
fornisce il servizio. Se è disponibile un sito che presenta le stesse 
informazioni del file RSS, il titolo del canale (channel) dovrebbe 
essere lo stesso titolo del sito web.&lt;/td&gt;
&lt;td&gt;GoUpstate.com News Headlines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;link&lt;/td&gt;
&lt;td&gt;L&#39;URL del sito web HTML che corrisponde al canale.&lt;/td&gt;
&lt;td&gt;http://www.goupstate.com/&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;description&lt;/td&gt;
&lt;td&gt;Una frase o un riassunto per descrivere il canale. &lt;/td&gt;
&lt;td&gt;The latest news from GoUpstate.com, a Spartanburg Herald-Journal Web site.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;optionalChannelElements&quot;&gt;
Elementi opzionali per channel&lt;/h2&gt;
Questa è una lista degli elementi opzionali per &amp;lt;channel&amp;gt;.&lt;br /&gt;

&lt;table class=&quot;grid&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Elemento&lt;/th&gt;
&lt;th&gt;Descrizione&lt;/th&gt;
&lt;th&gt;Esempio&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;language&lt;/td&gt;
&lt;td&gt;La lingua nella quale è scritto il canale. Questo tag consente agli 
aggregatori di raggruppare tutti i siti italiani, per esempio, in una 
singola pagina. Una lista di valori consentiti per questo elemento, così
 come fornita da Netscape, è disponibile &lt;a href=&quot;http://www.rssboard.org/rss-language-codes&quot;&gt;qui&lt;/a&gt;. E&#39; possibile usare i &lt;a href=&quot;http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes&quot;&gt;valori definiti&lt;/a&gt; dal W3C.&lt;/td&gt;
&lt;td&gt;en-us&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;copyright&lt;/td&gt;
&lt;td&gt;Informativa sul copyright per il contenuto del canale.&lt;/td&gt;
&lt;td&gt;Copyright 2002, Spartanburg Herald-Journal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;managingEditor&lt;/td&gt;
&lt;td&gt;Indirizzo email della persona responsabile dei contenuti editoriali.&lt;/td&gt;
&lt;td&gt;geo@herald.com (George Matesky)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;webMaster&lt;/td&gt;
&lt;td&gt;Indirizzo email della persona responsabile dei problemi tecnici relativi al canale.&lt;/td&gt;
&lt;td&gt;betty@herald.com (Betty Guernsey)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pubDate&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;Sat, 07 Sep 2002 00:00:01 GMT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;lastBuildDate&lt;/td&gt;
&lt;td&gt;La data dell&#39;ultima modifica dei contenuti del canale.&lt;/td&gt;
&lt;td&gt;Sat, 07 Sep 2002 09:42:31 GMT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;category&lt;/td&gt;
&lt;td&gt;Specifica una o più categorie alle quali fa parte il canale. Segue le stesse regole dell&#39;elemento &lt;a href=&quot;http://www.specifiche.it/rss/2.0/#ltcategorygtSubelementOfLtitemgt&quot;&gt;category&lt;/a&gt; del livello &lt;code&gt;&amp;lt;item&amp;gt;&lt;/code&gt;. Maggiori &lt;a href=&quot;http://www.specifiche.it/rss/2.0/#syndic8&quot;&gt;informazioni&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&amp;lt;category&amp;gt;Newspapers&amp;lt;/category&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;generator&lt;/td&gt;
&lt;td&gt;Una stringa indicante il programma usato per generare il canale. &lt;/td&gt;
&lt;td&gt;MightyInHouse Content System v2.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;docs&lt;/td&gt;
&lt;td&gt;Un URL che punta alla &lt;a href=&quot;http://www.specifiche.it/rss/2.0/&quot;&gt;documentazione&lt;/a&gt;
 del formato usato per il file RSS. Probabilmente si tratterà di un 
collegamento a questa pagina (NdT. &quot;questa pagina&quot; identifica il 
documento orginale). L&#39;utilità è per gli utenti che potranno incrociare 
un file RSS in un web server tra 25 anni che si chiederanno di cosa si 
tratti.&lt;/td&gt;
&lt;td&gt;http://www.rssboard.org/rss-specification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cloud&lt;/td&gt;
&lt;td&gt;Consente di registrare processi con un cloud (NdT. Servizio web che 
supporti l&#39;interfaccia rssCloud) per essere notificati degli 
aggiornamenti del canale, implementando un protocollo leggero di 
pubblicazione-iscrizione per feed RSS. Maggiori informazioni &lt;a href=&quot;http://www.specifiche.it/rss/2.0/#ltcloudgtSubelementOfLtchannelgt&quot;&gt;qui&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&amp;lt;cloud domain=&quot;rpc.sys.com&quot; port=&quot;80&quot; path=&quot;/RPC2&quot; registerProcedure=&quot;pingMe&quot; protocol=&quot;soap&quot;/&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ttl&lt;/td&gt;
&lt;td&gt;ttl sta per time to live. E&#39; il numero di minuti che indica per 
quanto tempo un canale può essere mantenuto in cache prima di rieseguire
 un aggiornamento dalla sorgente. Maggiori informazioni &lt;a href=&quot;http://www.specifiche.it/rss/2.0/#ltttlgtSubelementOfLtchannelgt&quot;&gt;qui&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&amp;lt;ttl&amp;gt;60&amp;lt;/ttl&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;image&lt;/td&gt;
&lt;td&gt;Specifica una immagine GIF, JPEG o PNG che può essere mostrata con il canale. Maggiori informazioni &lt;a href=&quot;http://www.specifiche.it/rss/2.0/#ltimagegtSubelementOfLtchannelgt&quot;&gt;qui&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rating&lt;/td&gt;
&lt;td&gt;Il &lt;a href=&quot;http://www.w3.org/PICS/&quot;&gt;PICS&lt;/a&gt; per la votazione del canale.&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;textInput&lt;/td&gt;
&lt;td&gt;Specifica un campo input text che può essere mostrato con il canale. Maggiori informazioni &lt;a href=&quot;http://www.specifiche.it/rss/2.0/#lttextinputgtSubelementOfLtchannelgt&quot;&gt;qui&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;skipHours&lt;/td&gt;
&lt;td&gt;Un suggerimento per gli aggregatori indicante in quali orari possono saltare la lettura. Maggiori informazioni &lt;a href=&quot;http://www.rssboard.org/skip-hours-days#skiphours&quot;&gt;qui&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;skipDays&lt;/td&gt;
&lt;td&gt;Un suggerimento per gli aggregatori indicante in quali giorni possono saltare la lettura. Maggiori informazioni &lt;a href=&quot;http://www.rssboard.org/skip-hours-days#skipdays&quot;&gt;qui&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;ltimagegtSubelementOfLtchannelgt&quot;&gt;
&amp;lt;image&amp;gt; sub-element of &amp;lt;channel&amp;gt;&lt;/h3&gt;
&lt;code&gt;&amp;lt;image&amp;gt;&lt;/code&gt; è un sotto elemento opzionale di &lt;code&gt;&amp;lt;channel&amp;gt;&lt;/code&gt;, che contiene a sua volta tre sotto elementi obbligatori e tre sotto elementi facoltativi.&lt;br /&gt;

&lt;code&gt;&amp;lt;url&amp;gt;&lt;/code&gt; è l&#39;URL di una immagine GIF, JPEG o PNG che rappresenta il canale.&lt;br /&gt;

&lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; descrive l&#39;immagine, è usato come contenuto dell&#39;attributo ALT del tag HTML &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; quando il canale è rappresentato come HTML.&lt;br /&gt;

&lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; è l&#39;URL del sito, quando il canale è rappresentato come HTML l&#39;immagine è un collegamento al sito. (Nota. in pratica i tag &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; e &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; dell&#39;immagine dovrebbero avere gli stessi valori di &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; appartenenti a &lt;code&gt;channel&lt;/code&gt;).&lt;br /&gt;

Gli elementi opzionali includono &lt;code&gt;&amp;lt;width&amp;gt;&lt;/code&gt; e &lt;code&gt;&amp;lt;height&amp;gt;&lt;/code&gt;, numeri indicanti la larghezza e l&#39;altezza in pixel dell&#39;immagine. &lt;code&gt;&amp;lt;description&amp;gt;&lt;/code&gt; contiene il testo da includere come contenuto dell&#39;attributo &lt;code&gt;title&lt;/code&gt; del link creato attorno all&#39;immagine in fase di rappresentazione HTML.&lt;br /&gt;

Il valore massimo per &lt;code&gt;width&lt;/code&gt; è 144, quello predefinito è 88.&lt;br /&gt;

Il valore massimo per &lt;code&gt;height&lt;/code&gt; è 400, quello predefinito è 31.&lt;br /&gt;

&lt;h3 id=&quot;ltcloudgtSubelementOfLtchannelgt&quot;&gt;
&amp;lt;cloud&amp;gt; sub-element of &amp;lt;channel&amp;gt;&lt;/h3&gt;
&lt;code&gt;&amp;lt;cloud&amp;gt;&lt;/code&gt; è un sotto elemento opzionale di &lt;code&gt;&amp;lt;channel&amp;gt;&lt;/code&gt;.&lt;br /&gt;

Specifica un servizio web che supporti l&#39;interfaccia rssCloud che può essere implementata in HTTP-POST, XML-RPC o SOAP 1.1.&lt;br /&gt;
Il suo scopo è consentire la registrazione di processi per essere 
notificati degli aggiornamenti del canale, implementando un protocollo 
leggero di pubblicazione-iscrizione per feed RSS.&lt;br /&gt;

&lt;code&gt;&amp;lt;cloud domain=&quot;rpc.sys.com&quot; port=&quot;80&quot; path=&quot;/RPC2&quot; registerProcedure=&quot;myCloud.rssPleaseNotify&quot; protocol=&quot;xml-rpc&quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;

In questo esempio, per richiedere la notifica del canale riportato, è
 necessario inviare un messaggio XML-RPC alla porta 80 del server 
rpc.sys.com, con il percorso /RPC2. La procedura da richiamare è 
denominata myCloud.rssPleaseNotify.&lt;br /&gt;

Una spiegazione completa di questo elemento e dell&#39;interfaccia rssCloud è &lt;a href=&quot;http://www.rssboard.org/rsscloud-interface&quot;&gt;qui&lt;/a&gt;.&lt;br /&gt;

&lt;h3 id=&quot;ltttlgtSubelementOfLtchannelgt&quot;&gt;
&amp;lt;ttl&amp;gt; sub-element of &amp;lt;channel&amp;gt;&lt;/h3&gt;
&lt;code&gt;&amp;lt;ttl&amp;gt;&lt;/code&gt; è un sotto elemento opzionale di &lt;code&gt;&amp;lt;channel&amp;gt;&lt;/code&gt;.&lt;br /&gt;

ttl sta per time to live. E&#39; un numero di minuti che indica per 
quanto tempo un canale può essere mantenuto in cache prima di rieseguire
 un aggiornamento dalla sorgente. Questo rende possibile la gestione 
delle sorgenti RSS tramite un network di file sharing come &lt;a href=&quot;http://www.gnutellanews.com/information/what_is_gnutella.shtml&quot;&gt;Gnutella&lt;/a&gt;.&lt;br /&gt;

Esempio: &lt;code&gt;&amp;lt;ttl&amp;gt;60&amp;lt;/ttl&amp;gt;&lt;/code&gt;&lt;br /&gt;

&lt;h3 id=&quot;lttextinputgtSubelementOfLtchannelgt&quot;&gt;
&amp;lt;textInput&amp;gt; sub-element of &amp;lt;channel&amp;gt;&lt;/h3&gt;
Un &lt;code&gt;channel&lt;/code&gt; può contenere, facoltativamente, un sotto elemento &lt;code&gt;&amp;lt;textInput&amp;gt;&lt;/code&gt;, che contiene a sua volta 4 sotto elementi obbligatori.&lt;br /&gt;

&lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; -- L&#39;etichetta del bottone di invio (NdT. campo input type submit) del modulo input text.&lt;br /&gt;

&lt;code&gt;&amp;lt;description&amp;gt;&lt;/code&gt; -- Spiega il modulo input text.&lt;br /&gt;

&lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt; -- Il nome della casella di testo nel campo input text.&lt;br /&gt;

&lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; -- L&#39;URL dello script CGI predisposto per processare le richieste dell&#39;input text. &lt;br /&gt;

Lo scopo dell&#39;elemento &lt;code&gt;&amp;lt;textInput&amp;gt;&lt;/code&gt; è ancora 
qualcosa di misterioso. E&#39; possibile fare uso di questo tag per 
specificare il campo di un motore di ricerca interno. In alternativa lo 
si può adottare per consentire ai lettori di inviare un feedback.&lt;br /&gt;
La maggior parte degli aggregatori ignora questo tag.&lt;br /&gt;

&lt;h2 id=&quot;hrelementsOfLtitemgt&quot;&gt;
Elementi per &amp;lt;item&amp;gt;&lt;/h2&gt;
Un &lt;code&gt;channel&lt;/code&gt; può contenere un qualsiasi numero di &lt;code&gt;&amp;lt;item&amp;gt;&lt;/code&gt;. &lt;br /&gt;
Un &lt;code&gt;item&lt;/code&gt; può rappresentare una &quot;storia&quot;, come ad esempio una
 storia in un giornale o una rivista; in questo caso la sua descrizione è
 una sintesi della storia ed il collegamento indirizza alla storia 
completa. &lt;br /&gt;

Un &lt;code&gt;item&lt;/code&gt; può anche contenere informazioni sufficienti per
 essere autonomo; in questo caso la descrizione contiene il testo (è 
ammesso un testo HTML con le entità codificate, vedi &lt;a href=&quot;http://www.rssboard.org/rss-encoding-examples&quot; title=&quot;Encoding and item-level descriptions&quot;&gt;esempi&lt;/a&gt;) ed i tag &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; e &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; possono essere omessi. &lt;br /&gt;

Tutti gli elementi di un &lt;code&gt;&amp;lt;item&amp;gt;&lt;/code&gt; sono opzionali, tuttavia deve essere almeno presente un &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; o una &lt;code&gt;&amp;lt;description&amp;gt;&lt;/code&gt;. &lt;br /&gt;

&lt;table class=&quot;grid&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Elemento&lt;/th&gt;
&lt;th&gt;Descrizione&lt;/th&gt;
&lt;th&gt;Esempio&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;title&lt;/td&gt;
&lt;td&gt;Il titolo di &lt;code&gt;item&lt;/code&gt;. &lt;/td&gt;
&lt;td&gt;Venice Film Festival Tries to Quit Sinking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;link&lt;/td&gt;
&lt;td&gt;L&#39;URL di &lt;code&gt;item&lt;/code&gt;. &lt;/td&gt;
&lt;td&gt;http://nytimes.com/2004/12/07FEST.html&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;description&lt;/td&gt;
&lt;td&gt;Una sintesi di &lt;code&gt;item&lt;/code&gt;. &lt;/td&gt;
&lt;td&gt;Some of the most heated chatter at the Venice Film Festival this 
week was about the way that the arrival of the stars at the Palazzo del 
Cinema was being staged.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;author&lt;/td&gt;
&lt;td&gt;Indirizzo email dell&#39;autore di &lt;code&gt;item&lt;/code&gt;. &lt;a href=&quot;http://www.specifiche.it/rss/2.0/#ltauthorgtSubelementOfLtitemgt&quot;&gt;Approfondimento&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;category&lt;/td&gt;
&lt;td&gt;Include &lt;code&gt;item&lt;/code&gt; in una o più categorie. &lt;a href=&quot;http://www.specifiche.it/rss/2.0/#ltcategorygtSubelementOfLtitemgt&quot;&gt;Approfondimento&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;comments&lt;/td&gt;
&lt;td&gt;URL di una pagina contenente i commenti correlati a &lt;code&gt;item&lt;/code&gt;. &lt;a href=&quot;http://www.specifiche.it/rss/2.0/#ltcommentsgtSubelementOfLtitemgt&quot;&gt;Approfondimento&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;enclosure&lt;/td&gt;
&lt;td&gt;Descrive un oggetto multimediale allegato a &lt;code&gt;item&lt;/code&gt;. &lt;a href=&quot;http://www.specifiche.it/rss/2.0/#ltenclosuregtSubelementOfLtitemgt&quot;&gt;Approfondimento&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;guid&lt;/td&gt;
&lt;td&gt;Una stringa che identifica univocamente &lt;code&gt;item&lt;/code&gt;. &lt;a href=&quot;http://www.specifiche.it/rss/2.0/#ltguidgtSubelementOfLtitemgt&quot;&gt;Approfondimento&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pubDate&lt;/td&gt;
&lt;td&gt;Indica quando &lt;code&gt;item&lt;/code&gt; è stato pubblicato. &lt;a href=&quot;http://www.specifiche.it/rss/2.0/#ltpubdategtSubelementOfLtitemgt&quot;&gt;Approfondimento&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;source&lt;/td&gt;
&lt;td&gt;Il canale RSS dal quale proviene &lt;code&gt;item&lt;/code&gt;. &lt;a href=&quot;http://www.specifiche.it/rss/2.0/#ltsourcegtSubelementOfLtitemgt&quot;&gt;Appronfondimento&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;ltsourcegtSubelementOfLtitemgt&quot;&gt;
&amp;lt;source&amp;gt; sub-element of &amp;lt;item&amp;gt;&lt;/h3&gt;
&lt;code&gt;&amp;lt;source&amp;gt;&lt;/code&gt; è un sotto elemento opzionale di &lt;code&gt;&amp;lt;item&amp;gt;&lt;/code&gt;.&lt;br /&gt;

Il suo valore è il nome del canale RSS da quale proviene l&#39;item, derivato dal suo &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt;. Ha un attributo obbligatorio, &lt;code&gt;url&lt;/code&gt;, che collega alla rappresentazione XML della sorgente. &lt;br /&gt;

&lt;code&gt;&amp;lt;source url=&quot;http://www.tomalak.org/links2.xml&quot;&amp;gt;Tomalak&#39;s Realm&amp;lt;/source&amp;gt;&lt;/code&gt;&lt;br /&gt;

Lo scopo di questo elemento è di diffondere i crediti per link e di 
pubblicizzare le sorgenti delle news / degli elementi del feed. Può 
essere utilizzato nel comando Post di un aggregatore.&lt;br /&gt;

Dovrebbe essere generato automaticamente quando si invia un elemento da un aggregatore ad uno strumento di scrittura per blog.&lt;br /&gt;

&lt;h3 id=&quot;ltenclosuregtSubelementOfLtitemgt&quot;&gt;
&amp;lt;enclosure&amp;gt; sub-element of &amp;lt;item&amp;gt;&lt;/h3&gt;
&lt;code&gt;&amp;lt;enclosure&amp;gt;&lt;/code&gt; è un sotto elemento opzionale di &lt;code&gt;&amp;lt;item&amp;gt;&lt;/code&gt;.&lt;br /&gt;

Ha tre attributi obbligatori. &lt;code&gt;url&lt;/code&gt; indica doce si trova l&#39;allegato, &lt;code&gt;length&lt;/code&gt; indica la dimensione espressa in byte e &lt;code&gt;type&lt;/code&gt; indica il tipo di file corrispondente ad uno dei MIME type standard. &lt;br /&gt;

L&#39;&lt;code&gt;url&lt;/code&gt; deve essere un url http. &lt;br /&gt;

&lt;code&gt;&amp;lt;enclosure url=&quot;http://www.scripting.com/mp3s/weatherReportSuite.mp3&quot; length=&quot;12216320&quot; type=&quot;audio/mpeg&quot; /&amp;gt;&lt;/code&gt;&lt;br /&gt;

Un possibile scenario di con uso narrativo di questo elemento è &lt;a href=&quot;http://www.thetwowayweb.com/payloadsforrss&quot;&gt;qui&lt;/a&gt;.&lt;br /&gt;

&lt;h3 id=&quot;ltcategorygtSubelementOfLtitemgt&quot;&gt;
&amp;lt;category&amp;gt; sub-element of &amp;lt;item&amp;gt;&lt;/h3&gt;
&lt;code&gt;&amp;lt;category&amp;gt;&lt;/code&gt; è un sotto elemento opzionale di &lt;code&gt;&amp;lt;item&amp;gt;&lt;/code&gt;.&lt;br /&gt;

Ha un attributo opzionale, &lt;code&gt;domain&lt;/code&gt;, una stringa che identifica una classificazione tassonomica per categorie. &lt;br /&gt;

Il valore dell&#39;elemento è una stringa separata da slash ( / ) che 
identifica una collocazione gerarchica all&#39;interno della tassonomia 
indicata. Gli interpreti possono stabilire convenzioni per 
l&#39;interpretazione delle categorie. Due esempi sono forniti di seguito:&lt;br /&gt;

&lt;code&gt;&amp;lt;category&amp;gt;Grateful Dead&amp;lt;/category&amp;gt;&lt;/code&gt;&lt;br /&gt;

&lt;code&gt;&amp;lt;category domain=&quot;http://www.fool.com/cusips&quot;&amp;gt;MSFT&amp;lt;/category&amp;gt;&lt;/code&gt;&lt;br /&gt;

E&#39; possibile includere tanti elementi &lt;code&gt;category&lt;/code&gt; quanti 
siano necessari, per domini differenti, ed avere un elemento con 
riferimenti incrociati in diverse parti dello stesso dominio. &lt;br /&gt;

&lt;h3 id=&quot;ltpubdategtSubelementOfLtitemgt&quot;&gt;
&amp;lt;pubDate&amp;gt; sub-element of &amp;lt;item&amp;gt;&lt;/h3&gt;
&lt;code&gt;&amp;lt;pubDate&amp;gt;&lt;/code&gt; è un sotto elemento opzionale di &lt;code&gt;&amp;lt;item&amp;gt;&lt;/code&gt;.&lt;br /&gt;

Il suo valore è una &lt;a href=&quot;http://asg.web.cmu.edu/rfc/rfc822.html&quot;&gt;data&lt;/a&gt;, corrispondente alla pubblicazione di &lt;code&gt;item&lt;/code&gt;. Se la data fa riferimento ad un periodo futuro gli aggregatori possono scegliere di non visualizzare &lt;code&gt;item&lt;/code&gt; fino a quella data. &lt;br /&gt;

&lt;code&gt;&amp;lt;pubDate&amp;gt;Sun, 19 May 2002 15:21:36 GMT&amp;lt;/pubDate&amp;gt;&lt;/code&gt;&lt;br /&gt;

&lt;h3 id=&quot;ltguidgtSubelementOfLtitemgt&quot;&gt;
&amp;lt;guid&amp;gt; sub-element of &amp;lt;item&amp;gt;&lt;/h3&gt;
&lt;code&gt;&amp;lt;guid&amp;gt;&lt;/code&gt; è un sotto elemento opzionale di &lt;code&gt;&amp;lt;item&amp;gt;&lt;/code&gt;.&lt;br /&gt;

&lt;code&gt;guid&lt;/code&gt; per Globally Inique Identifier. E&#39; una stringa che identifica in modo univoco &lt;code&gt;item&lt;/code&gt;.&lt;br /&gt;
Quando presente, l&#39;aggregatore può scegliere di usare questa stringa per determinare se un &lt;code&gt;item&lt;/code&gt; è nuovo. &lt;br /&gt;

&lt;code&gt;&amp;lt;guid&amp;gt;http://some.server.com/weblogItem3207&amp;lt;/guid&amp;gt;&lt;/code&gt;&lt;br /&gt;

Non ci sono regole particolari per la sintassi dell&#39;elemento &lt;code&gt;guid&lt;/code&gt;. Gli aggregatori devono considerarlo come stringa. Spetta alla sorgente del feed garantire l&#39;unicità del valore della stringa.&lt;br /&gt;

Se l&#39;elemento guid ha un attributo chiamato &lt;code&gt;isPermalink&lt;/code&gt; impostato con valore &lt;var&gt;true&lt;/var&gt;,
 il lettore può assumere che si tratti di un permalink all&#39;elemento, 
ovvero un URL che può essere aperto in un web browser e che punta 
all&#39;intero contenuto descritto dall&#39;elemento &lt;code&gt;&amp;lt;item&amp;gt;&lt;/code&gt;. Un esempio:&lt;br /&gt;

&lt;code&gt;&amp;lt;guid isPermaLink=&quot;true&quot;&amp;gt;http://inessential.com/2002/09/01.php#a2&amp;lt;/guid&amp;gt;&lt;/code&gt;&lt;br /&gt;

&lt;code&gt;isPermalink&lt;/code&gt; è opzionale ed il suo valore predefinito è &lt;var&gt;true&lt;/var&gt;. Se il suo valore è &lt;var&gt;false&lt;/var&gt;, l&#39;elemento &lt;code&gt;guid&lt;/code&gt; non può essere considerato un URL o un indirizzo a qualcosa in particolare.&lt;br /&gt;

&lt;h3 id=&quot;ltcommentsgtSubelementOfLtitemgt&quot;&gt;
&amp;lt;comments&amp;gt; sub-element of &amp;lt;item&amp;gt;&lt;/h3&gt;
&lt;code&gt;&amp;lt;comments&amp;gt;&lt;/code&gt; è un sotto elemento opzionale di &lt;code&gt;&amp;lt;item&amp;gt;&lt;/code&gt;.&lt;br /&gt;

Se presente, corrisponde all&#39;URL della pagina contenente i commenti a &lt;code&gt;item&lt;/code&gt;. &lt;br /&gt;

&lt;code&gt;&amp;lt;comments&amp;gt;http://ekzemplo.com/entry/4403/comments&amp;lt;/comments&amp;gt;&lt;/code&gt;&lt;br /&gt;

Maggiori informazioni sui commenti &lt;a href=&quot;http://backend.userland.com/weblogComments&quot;&gt;qui&lt;/a&gt;.&lt;br /&gt;

&lt;h3 id=&quot;ltauthorgtSubelementOfLtitemgt&quot;&gt;
&amp;lt;author&amp;gt; sub-element of &amp;lt;item&amp;gt;&lt;/h3&gt;
&lt;code&gt;&amp;lt;author&amp;gt;&lt;/code&gt; è un sotto elemento opzionale di &lt;code&gt;&amp;lt;item&amp;gt;&lt;/code&gt;.&lt;br /&gt;

Corrisponde all&#39;indirizzo email dell&#39;autore di &lt;code&gt;item&lt;/code&gt;. Per i giornali e le riviste che distribuiscono un feed RSS, l&#39;autore è la persona che ha scritto l&#39;articolo che &lt;code&gt;item&lt;/code&gt; descrive. For blog composti da più collaboratori, l&#39;autore di &lt;code&gt;item&lt;/code&gt;
 potrebbe essere differente dall&#39;editore responsabile (managin editor) o
 dal webmaster. Per un blog gestito da un singolo individuo avrebbe 
senso omettere l&#39;elemento &lt;code&gt;&amp;lt;author&amp;gt;&lt;/code&gt;. &lt;br /&gt;

&lt;h2 id=&quot;comments&quot;&gt;
Commenti&lt;/h2&gt;
L&#39;RSS imposta delle restrizioni al primo carattere non spazio e non 
bianco che compone il valore degli elementi &amp;lt;link&amp;gt; e &amp;lt;url&amp;gt;. 
Il valore di questi elementi deve cominciare con uno schema URI &lt;a href=&quot;http://www.iana.org/assignments/uri-schemes&quot;&gt;IANA-registrato&lt;/a&gt;, come ad esempio &lt;code&gt;http://&lt;/code&gt;, &lt;code&gt;https://&lt;/code&gt;, &lt;code&gt;news://&lt;/code&gt;, &lt;code&gt;mailto://&lt;/code&gt; e &lt;code&gt;ftp://&lt;/code&gt;. Prima del formato RSS 2.0 le specifiche consentivano solo &lt;code&gt;http://&lt;/code&gt; e &lt;code&gt;ftp://&lt;/code&gt;,
 tuttavia, in pratica gli altri schemi URI erano ugualmente usati dagli 
sviluppatori e supportati dagli aggregatori. Gli aggregatori possono 
avere dei limiti per quanto riguarda il supporto a schemi URI. Gli 
sviluppatori di contenuti non dovrebbero dare per scontato che ogni 
lettore per feed supporti tutti gli schemi.&lt;br /&gt;

Nell&#39;RSS 0.91, molti elementi sono limitati a 500 o 100 caratteri. Non ci possono essere più di 15 &lt;code&gt;&amp;lt;items&amp;gt;&lt;/code&gt; in un &lt;code&gt;&amp;lt;channel&amp;gt;&lt;/code&gt;
 nel formato 0.91. Non ci sono limiti di lunghezza per le stringhe o 
limiti a livelli XML nell&#39;RSS 0.92 e superiori. Gli interpreti possono 
imporre limiti specifici e i produttori di contenuti possono avere 
preferenze sul numero massimo di &amp;lt;&lt;code&gt;item&amp;gt;&lt;/code&gt; che desiderano inserire in un &lt;code&gt;channel&lt;/code&gt;, o quali stringhe devono avere limiti di lunghezza. &lt;br /&gt;

Nell&#39;RSS 2.0 c&#39;è un modo per collegare un canale al suo 
identificatore in un sistema di catalogazione usando la funzionalità 
dell&#39;elemento &lt;code&gt;category&lt;/code&gt; a livello &lt;code&gt;channel&lt;/code&gt;, come
 descritto in precedenza. Per esempio, per collegare un canale al suo 
identificatore in Syndic8, basta includere un elemento &lt;code&gt;category&lt;/code&gt; come sub-elemento di &lt;code&gt;&amp;lt;channel&amp;gt;&lt;/code&gt;,
 con dominio &quot;Syndic8&quot; e come valore l&#39;identificativo per il canale nel 
database di Syndic8. L&#39;elemento category appropriato per Scripting News 
dovrebbe essere &lt;code&gt;&amp;lt;category domain=&quot;Syndic8&quot;&amp;gt;1765&amp;lt;/category&amp;gt;&lt;/code&gt;.&lt;br /&gt;

Una domanda frequente per quanto riguarda gli elementi &lt;code&gt;&amp;lt;guid&amp;gt;&lt;/code&gt; è se/come possano essere comparati agli elementi &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt;. Non sono la stessa cosa? Sì, in alcuni sistemi di contenuti, e no in altri. In alcuni sistemi, &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; è un permalink ad un post di un blog. Tuttavia, in altri sistemi, ogni &lt;code&gt;&amp;lt;item&amp;gt;&lt;/code&gt; è un riassunto di un articolo più lungo, &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; punta all&#39;articolo e &lt;code&gt;&amp;lt;guid&amp;gt;&lt;/code&gt; è il permalink al post del blog. &lt;br /&gt;
In ogni caso, è consigliato fornire un &lt;code&gt;guid&lt;/code&gt; e se possibile renderlo un permalink. Questo consente agli aggregatori di evitare la ripetizione di &lt;code&gt;item&lt;/code&gt;, anche se è stato modificato o sono stati apportati cambiamenti. &lt;br /&gt;

Se avete domande sul formato RSS 2.0, siete invitati a postarle nella mailing list pubblica &lt;a href=&quot;http://groups.yahoo.com/group/rss-public&quot;&gt;RSS-Public&lt;/a&gt;.
 La mailing list, gestita dall&#39;RSS Advisory Board, serve come risorsa di
 supporto per utenti, autori e sviluppatori alle prese con la creazione e
 l&#39;uso di contenuti nel formato RSS 2.0. &lt;br /&gt;

&lt;h2 id=&quot;extendingRss&quot;&gt;
Estendere l&#39;RSS&lt;/h2&gt;
L&#39;RSS ha avuto origine nel 1999 e si è sforzato di essere un formato 
semplice, facile da comprendere con obiettivi relativamente modesti. 
Dopo essere diventato un formato popolare, gli sviluppatori hanno 
desiderato estenderlo attraverso moduli definiti via namespace, così 
come &lt;a href=&quot;http://www.w3.org/TR/REC-xml-names/&quot;&gt;specificato&lt;/a&gt; dal W3C.&lt;br /&gt;

RSS 2.0 introduce questa possibilità, seguendo una semplice regola. 
Un feed RSS può contenere elementi non descritti in questa pagina solo 
se questi elementi sono definiti in un namespace.&lt;br /&gt;

Gli stessi elementi definiti in questo documenti non parte di un 
namespace, così che l&#39;RSS 2.0 risulti compatibile con versioni 
precedenti in questo senso -- un file in versione 0.91 o 0.92 è anche un
 file 2.0 valido. Se gli elementi di un RSS 2.0 fossero stati inseriti 
in un namespace, questa restrizione sarebbe venuta meno, un file in 
versione 0.9x non sarebbe stato un file 2.0 valido. &lt;br /&gt;

&lt;h2 id=&quot;roadmap&quot;&gt;
Roadmap&lt;/h2&gt;
RSS non è in alcun modo un formato perfetto, ma è molto diffuso e 
largamente supportato. Disporre di una specifica stabile è qualcosa che 
l&#39;RSS necessitava da molto tempo. Lo scopo di questo lavoro è di aiutare
 il formato a diventare un qualcosa di definito, garantirne la crescita 
nel mercato che si sta sviluppando attorno e di spianare la strada per 
innovazioni in nuovi formati di distribuzione. Perciò, le specifiche 
RSS, per necessità pratiche, sono bloccate alla versione 2.0.1. 
Anticipiamo la possibilità di versioni 2.0.2 o 2.0.3, ecc unicamente con
 lo scopo di chiarire ulteriormente le specifiche, non per aggiungere 
nuove funzionalità al formato. Lavori successivi dovrebbero 
concretizzarsi in moduli, attraverso l&#39;uso di namespace, ed in formati 
di distribuzione completamente nuovi, con nuovi nomi.</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/4638701082868600611/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/10/fedd-rss.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/4638701082868600611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/4638701082868600611'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/10/fedd-rss.html' title='Fedd rss'/><author><name>logistar</name><uri>http://www.blogger.com/profile/04182847575807150550</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-6712737652659300805</id><published>2011-05-02T08:05:00.000-07:00</published><updated>2011-05-02T08:37:27.447-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hashtable"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><title type='text'>Utilizzare hastable in javascript</title><content type='html'>&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;In JavaScript non abbiamo alcun built-in hashtable.&lt;/span&gt; &lt;span style=&quot;-moz-background-clip: border; -moz-background-origin: padding; -moz-background-size: auto auto; background-attachment: scroll; background-image: none; background-position: 0% 0%; background-repeat: repeat; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Ma hashtable è una struttura molto utile dato che spesso ne abbiamo bisogno.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Anche se non abbiamo hashtable in JavaScript, è davvero molto semplice implementare una hashtable in JavaScript.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;In questo post, implementiamo un semplice hashtable.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% rgb(230, 236, 249); border: 0pt none; color: black; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Sicuramente non useremo alcun loop per cercare gli articoli.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Perché, in tal caso il vero scopo della hashtable non sarà ottenuto.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;In JavaScript, è possibile utilizzare la proprietà oggetto per ottenere l&#39;oggetto Hashtable.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Prima di tutto vediamo i principi fondamentali dell&#39;oggetto JavaScript e proprietà dell&#39;oggetto.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Dichiarazione di un oggetto JavaScript:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Ci sono vie alternative di creazione di un oggetto JavaScript.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Il più semplice è il seguente:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;var&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt; HashTable = {};&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Questo crea un oggetto semplice javascript che non ha proprietà.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Possiamo anche creare un nuovo oggetto usando javascript.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;var&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt; = HashTable new &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Object ();&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Creazione di una proprietà di un oggetto:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Siamo in grado di creare una proprietà di un oggetto esistente come segue:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;hashTable.id = 1;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;hashTable.name = &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #a31515;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&#39;a hashtable&#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt; ;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Qui abbiamo due proprietà.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Possiamo anche avere proprietà che sono una funzione.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;hashTable.SetItem = function&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;(chiave, valore) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 60px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: green;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;/ / implementare hashtable voce qui impostato sulla base di chiave&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;hashTable.GetItem = &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;function&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;(key) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 60px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: green;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;/ / implementare hashtable ottenere elemento chiave da qui&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Accesso Javascript oggetto di proprietà:&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;E  &#39;molto semplice capire che siamo in grado di accedere a una  proprietà di un oggetto JavaScript, semplicemente utilizzando.  Property_name.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;hashTable.name&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Ma c&#39;è un altro modo di accedere alla proprietà.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; hashTable[&lt;span style=&quot;color: #a31515;&quot;&gt;&#39;name&#39;&lt;/span&gt;]&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; hashTable[&lt;span style=&quot;color: #a31515;&quot;&gt;&#39;id&#39;&lt;/span&gt;]&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; hashTable[&lt;span style=&quot;color: #a31515;&quot;&gt;&#39;SetItem&#39;&lt;/span&gt;](&lt;span style=&quot;color: #a31515;&quot;&gt;‘akey’&lt;/span&gt;, &lt;span style=&quot;color: #a31515;&quot;&gt;‘aValue’&lt;/span&gt;);&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; hashTable[&lt;span style=&quot;color: #a31515;&quot;&gt;&#39;GetItem&#39;&lt;/span&gt;](&lt;span style=&quot;color: #a31515;&quot;&gt;‘akey’&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Il vantaggio di utilizzare questo approccio,&amp;nbsp; possiamo usare come variabile l&#39;indice.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Così possiamo accedere alle proprietà dinamicamente in base alle variabili.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Implementazione HashTable:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Ora siamo in grado di generare facilmente Hashtable utilizzando le conoscenze di cui sopra.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;var&lt;/span&gt; hashTable = {};&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;hashTable.SetItem = &lt;span style=&quot;color: blue;&quot;&gt;function&lt;/span&gt;(key, value) {&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 60px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; hashTable[key] = value;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; }&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;hashTable.GetItem = &lt;span style=&quot;color: blue;&quot;&gt;function&lt;/span&gt;(key) {&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 60px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt; hashTable[key];&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; }&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;hashTable.SetItem(&lt;span style=&quot;color: #a31515;&quot;&gt;‘aKey’&lt;/span&gt;, &lt;span style=&quot;color: #a31515;&quot;&gt;‘aValue’&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; alert(hashTable.GetItem(&lt;span style=&quot;color: #a31515;&quot;&gt;‘aKey’&lt;/span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Creazione di una classe Hashtable:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Usando il modo di cui sopra, non saremo in grado di utilizzare più hashtable, se abbiamo bisogno.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Così possiamo creare una classe javascript hashtable.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;function&lt;/span&gt; HashTable() {&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 60px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;var&lt;/span&gt; hashTableItems = {};&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 60px;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;this&lt;/span&gt;.SetItem = &lt;span style=&quot;color: blue;&quot;&gt;function&lt;/span&gt;(key, value) {&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 90px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; hashTableItems[key] = value;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 60px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; }&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 60px;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;this&lt;/span&gt;.GetItem = &lt;span style=&quot;color: blue;&quot;&gt;function&lt;/span&gt;(key) {&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 90px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt; hashTableItems[key];&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 60px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; }&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; }&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;/div&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Possiamo usare la hashtable come segue:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-family: Georgia,&#39;Times New Roman&#39;,&#39;Bitstream Charter&#39;,Times,serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; &lt;span style=&quot;color: blue;&quot;&gt;var&lt;/span&gt; hashTable = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; HashTable();&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; hashTable.SetItem(&lt;span style=&quot;color: #a31515;&quot;&gt;‘aKey’&lt;/span&gt;, &lt;span style=&quot;color: #a31515;&quot;&gt;‘aValue’&lt;/span&gt;);&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; alert(hashTable.GetItem(&lt;span style=&quot;color: #a31515;&quot;&gt;‘aKey’&lt;/span&gt;));&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;var&lt;/span&gt; hashTable_new = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; HashTable();&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; hashTable_new.SetItem(&lt;span style=&quot;color: #a31515;&quot;&gt;‘anotherKey’&lt;/span&gt;, &lt;span style=&quot;color: #a31515;&quot;&gt;‘anotherValue’&lt;/span&gt;);&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt; alert(hashTable_new.GetItem(&lt;span style=&quot;color: #a31515;&quot;&gt;‘anotherKey’&lt;/span&gt;));&lt;/span&gt;&lt;span style=&quot;font-family: Courier New; font-size: 10pt;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/6712737652659300805/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/05/utilizzare-hastable-in-javascript.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/6712737652659300805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/6712737652659300805'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/05/utilizzare-hastable-in-javascript.html' title='Utilizzare hastable in javascript'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-6099600046333355521</id><published>2011-04-12T09:39:00.001-07:00</published><updated>2011-04-12T09:39:21.806-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Come Creare Un Blog"/><title type='text'>Come Creare Un Blog</title><content type='html'>&lt;h2&gt;Come Creare Un Blog: Le Migliori Piattaforme di Pubblicazione Online Gratuite&lt;/h2&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;h2&gt;WordPress&lt;/h2&gt;&lt;img src=&quot;http://www.masternewmedia.org/images/tools_WordPress_logo_c.gif&quot; /&gt; &lt;br /&gt;
WordPress è il servizio più famoso in assoluto sul Web per &lt;a href=&quot;http://www.masternewmedia.org/it/independent_publishing/come-fare-un-blog/come-pubblicare-online-il-tuo-primo-blog-20071112.htm&quot;&gt;creare un blog&lt;/a&gt;.  Wordpress è altamente personalizzabile grazie all&#39;impressionante numero  di funzioni aggiuntive e template utilizzabili. WordPress consente di  utilizzare filtri anti-spam di qualità, feed RSS, effettuare statistiche  in tempo reale sul traffico. WordPress possiede un&#39;attivissima  community di supporto pronta ad aiutarti per risolvere qualsiasi tipo di  problema. Inoltre, WordPress, se hai bisogno di creare un blog privo di  annunci pubblicitari, un dominio personalizzato, esportare i contenuti  del tuo blog o utilizzare le impostazioni avanzate per la privacy, ti  mette a disposizione le &lt;a href=&quot;http://en.wordpress.com/products/&quot;&gt;premium features&lt;/a&gt;, funzioni avanzate attivabili sottoscrivendo un account a pagamento. I prezzi sono consultabili sul sito web.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://it.wordpress.com/&quot;&gt;WordPress&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;Blogger&lt;/h2&gt;&lt;img src=&quot;http://www.masternewmedia.org/images/tools_blogger_logo.gif&quot; /&gt;&lt;br /&gt;
Blogger è un servizio gratuito di Google che ti permette di creare il  tuo blog personale. Blogger funziona con i tuoi dati di accesso a Google  ed è totalmente integrato con altri servizi del motore di ricerca come  AdSense e Analytics, che ti permettono di monetizzare il tuo blog e  controllare le statistiche sul traffico. Blogger supporta anche  l&#39;opzione multi-autore, i feed RSS, diverse funzionalità per la  personalizzazione del template, la pubblicazione tramite cellulare e le  impostazioni per la privacy. Blogger possiede anche una vasta comunità  degli utenti a cui ti puoi rivolgere per ricevere aiuti per qualsiasi  tipo di problema. Blogger, però, non supporta i domini personalizzati.  Non esistono account premium: tutte le funzionalità sono disponibili  gratuitamente.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://https//www.blogger.com&quot;&gt;Blogger&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;Windows Live Spaces&lt;/h2&gt;&lt;img src=&quot;http://www.masternewmedia.org/images/tools_live-spaces_logo.gif&quot; /&gt;&lt;br /&gt;
Windows Live Spaces è un servizio di Microsoft che ti permette di  creare blog. Windows Live Spaces ti permette di accedere alle  funzionalità di creazione del blog con il tuo Windows LiveID e di  integrare all&#39;interno del blog i contenuti che hai pubblicato su altri  servizi di Microsoft, come ad esempio SkyDrive. Windows Live Spaces  organizza il tuo blog, chiamato anche &quot;&lt;em&gt;Space&lt;/em&gt;&quot;, in moduli che  puoi spostare in qualsiasi punto della tua pagina web. Windows Live  Spaces non ha la personalizzazione del CSS o dell&#39;HTML, ma ti consente  di modificare le impostazioni sulla privacy, pubblicare tramite  cellulare e usufruire di un servizio limitato di statistiche sul  traffico. Windows Live Spaces non ti consente di scegliere un dominio  personalizzato o esportare i tuoi contenuti verso un&#39;altra piattaforma.  La Live community offre un ottimo supporto a qualunque esigenza tu possa  avere durante la creazione del tuo nuovo blog. Non sono disponibili  account a pagamento.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://home.live.com/&quot;&gt;Windows Live Spaces&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;LiveJournal&lt;/h2&gt;&lt;img src=&quot;http://www.masternewmedia.org/images/tools_livejournal_logo.gif&quot; /&gt;&lt;br /&gt;
LiveJournal è una comunità virtuale all&#39;interno della quale gli  utenti registrati possono creare un blog gratuito e ricevere aiuti dagli  altri utenti in qualsiasi momento. LiveJournal ti consente di costruire  il tuo elenco di amici e leggere i loro aggiornamenti (e/o permettere  che loro leggano i tuoi) attraverso un feed RSS. LiveJournal ti mette a  disposizione anche un account a pagamento che ti consente di accedere a  una serie di funzioni avanzate, tra le quali funzioni sulla privacy, per  impostare quali utenti potranno accedere al tuo blog, la possibilità di  esportare il tuo blog verso un&#39;altra piattaforma di pubblicazione  online, l&#39;opzione &quot;&lt;em&gt;phone to blog&lt;/em&gt;&quot;, che ti permette di postare  direttamente dal tuo cellulare. LiveJournal non consente di utilizzare  statistiche sul traffico e domini personalizzati.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.livejournal.com/&quot;&gt;LiveJournal&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;Vox&lt;/h2&gt;&lt;img src=&quot;http://www.masternewmedia.org/images/tools_Vox_logo.gif&quot; /&gt;&lt;br /&gt;
Vox è una piattaforma di pubblicazione online per creare blog. Vox è prodotto da &lt;a href=&quot;http://www.sixapart.com/&quot;&gt;Six Apart &lt;/a&gt;(l&#39;azienda  che produce anche la piattaforma di blogging MovableType). Vox  necessita solo dei tuoi dati di registrazione, inseriti i quali potrai  iniziare immediatamente a creare il tuo blog con pochi semplici  passaggi: dovrai semplicemente selezionare il template che vuoi  utilizzare da una libreria di modelli, aggiungere i tuoi contenuti  (testi, video, immagini, tracce audio), impostare le opzioni per la  privacy. Vox possiede una funzionalità di integrazione del tuo blog con i  siti di video e photo sharing come YouTube e Flickr. Vox non consente  di acquistare account premium, di pubblicare tramite cellulare o  personalizzare il nome del tuo dominio. Il solido servizio clienti è  sempre a tua disposizione per risolvere tutti i possibili problemi.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.vox.com/&quot;&gt;Vox&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;Xanga&lt;/h2&gt;&lt;img src=&quot;http://www.masternewmedia.org/images/tools_Xanga_logo.gif&quot; /&gt;&lt;br /&gt;
Xanga è una piattaforma di pubblicazione online gratuita per la  creazione di blog. Xanga, dopo aver effettuato la registrazione, ti  consente di personalizzare il layout del tuo blog con uno dei tanti  template disponibili, di impostare il livello di protezione dei  contenuti pubblicati, scegliendo gli utenti che avranno accesso ai tuoi  post. Xanga non mette a disposizione nessuna funzione per effettuare le  statistiche sul traffico, la pubblicazione tramite cellulare e la  personalizzazione del nome del dominio. Xanga si avvale del supporto di  una comunità, molto utile per risolvere i diversi problemi che si  possono incontrare durante la creazione e la gestione di un blog. Xanga  consente di acquistare account premium con maggiori funzionalità a  partire da $4 al mese.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.xanga.com/&quot;&gt;Xanga&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;Tripod&lt;/h2&gt;&lt;img src=&quot;http://www.masternewmedia.org/images/tools_tripod_logo.gif&quot; /&gt; &lt;br /&gt;
Tripod è un servizio online che puoi utilizzare per creare  gratuitamente un blog e distribuirlo tramite feed RSS. Tripod, se già  possiedi un account Lycos, ti permette di iniziare subito a gestire il  tuo blog online.Tripod non ti consente di avere statistiche sul  traffico, di effettuare la pubblicazione tramite cellulare, di eseguire  l&#39;esportazione dei contenuti o di utilizzare impostazioni avanzate per  la privacy. Tripod ha un forum di supporto abbastanza limitato, ma ti  consente di accedere a altre funzionalità avanzate (come la creazione  dei domini personalizzati) mediante degli account a pagamento,  disponibili a partire dai $4.95 al mese.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.tripod.lycos.com/&quot;&gt;Tripod&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;Blog.com&lt;/h2&gt;&lt;img src=&quot;http://www.masternewmedia.org/images/tools_blog_logo.gif&quot; /&gt; &lt;br /&gt;
Blog.com è un servizio gratuito che ti permette di creare il tuo blog  personale. Blog.com, dopo una semplice registrazione, ti consente  immediatamente di creare un blog che potrai distribuire via feed RSS o  Atom (un altro sistema per la sottoscrizione di contenuti web). Blog.com  ti permette di acquistare un account premium a partire da 4.95 dollari  al mese, che ti consentirà di utilizzare le funzionalità avanzate come  le impostazioni della privacy, la personalizzazione del CSS, ecc.  Blog.com non offre statistiche sul traffico, i domini personalizzati,  l&#39;esportazione dei contenuti o la possibilità di postare tramite  cellulare.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://int.blog.com/&quot;&gt;Blog.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;Yahoo! Pulse&lt;/h2&gt;&lt;img src=&quot;http://www.masternewmedia.org/it/images/yahoo.gif&quot; /&gt;&lt;br /&gt;
Yahoo! Pulse è un servizio gratuito che ti permette di creare il tuo  blog personale. Yahoo! Pulse, una volta effettuato il login utilizzando i  dati di accesso del tuo account Yahoo! (se non ne possiedi uno lo puoi  creare direttamente dal sito di Yahoo! Pulse), ti consente di  selezionare i colori del tuo blog, impostare le opzioni per la privacy,  condividere i tuoi contenuti (puoi utilizzare anche i feed RSS). Yahoo!  Pulse ti permette di postare dal tuo cellulare utilizzando l&#39;opzione  Yahoo! Mobile. Yahoo! Pulse non offre account premium, la  personalizzazione dei domini e nemmeno le statistiche sul traffico.  Yahoo! Pulse si avvale di un buon supporto offerto dalla communityy di  Yahoo!.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://pulse.yahoo.com/y/landing&quot;&gt;Yahoo! Pulse&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;Blogr&lt;/h2&gt;&lt;img src=&quot;http://www.masternewmedia.org/images/tools_blogr_logo.gif&quot; /&gt;&lt;br /&gt;
Blogr è un servizio gratuito per creare il tuo blog e a condividere i  tuoi contenuti sul Web. Blogr ha un&#39;interfaccia davvero intuitiva  mediante la quale puoi pubblicare testi, foto e video in maniera  semplice. Blogr ti consente di organizzare i tuoi contenuti utilizzando  uno dei template disponibili e distribuirli tramite feed RSS. Blogr non  supporta le statistiche sul traffico, la pubblicazione tramite  cellulare, le impostazioni della privacy e i domini personalizzati.  Buono il supporto del forum per far fronte a tutti i problemi derivanti  dall&#39;utilizzo di Blogr.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.blogr.com/&quot;&gt;Blogr&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;Squarespace&lt;/h2&gt;&lt;img src=&quot;http://www.masternewmedia.org/images/tools_Squarespace_logo_b.gif&quot; /&gt;&lt;br /&gt;
Squarespace è una piattaforma di pubblicazione on line a pagamento  per creare blog. Squarespace, grazie alla sua interfaccia davvero  semplice, ti consente di modificare, impostare e persino trascinare gli  elementi del tuo layout all&#39;interno della pagina web senza alcuna  conoscenza tecnica. Squarespace ti mette a disposizione opzioni per la  privacy, statistiche per il traffico, i feed RSS e tutorial che ti  spiegano come iniziare a bloggare in pochi passi. Squarespace non  supporta la pubblicazione tramite cellulare. Squarespace può essere  provato gratuitamente per 14 giorni, trascorsi i quali è necessario  acquistare uno degli account a pagamento (a partire da $8 al mese) che  ti consentono di accedere ad una serie di funzioni aggiuntive, tra le  quali quelle per la personalizzazione del nome del tuo dominio e di  ricevere supporto dal servizio clienti dedicato.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.squarespace.com/&quot;&gt;Squarespace&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;TypePad&lt;/h2&gt;&lt;img src=&quot;http://www.masternewmedia.org/images/tools_Typepad_logo.gif&quot; /&gt;&lt;br /&gt;
TypePad è una piattaforma di pubblicazione online a pagamento, che ti  aiuta a creare il tuo blog in maniera del tutto semplice. TypePad  possiede centinaia di template che ti permettono di personalizzare  l&#39;aspetto del tuo blog. TypePad ti consente di effettuare la  pubblicazione tramite cellulare e tramite Facebook, utilizzare i feed  RSS, effettuare statistiche sul traffico, attivare filtri anti-spam,  gestire gli annunci, ecc. TypePad non ti permette di esportare il tuo  blog verso un&#39;altra piattaforma. TypePad può essere provato  gratuitamente per 14 giorni, trascorsi i quali, per continuare ad  utilizzarlo, è necessario scegliere uno dei piani tariffari, disponibili  a partire da $4.95 al mese.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.typepad.com/&quot;&gt;TypePad&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;DBlog&lt;/h2&gt;&lt;img src=&quot;http://www.masternewmedia.org/it/images/dblog.JPG&quot; /&gt;&lt;br /&gt;
DBlog è una piattaforma di pubblicazione online opensource per creare  blog. DBlog è sia un weblog sia un photoblog, permette cioè la  pubblicazione sia di articoli sia di fotografie, organizzate in due aree  differenti. DBlog consente di sfruttare i feed RSS, utilizzare filtri  per il contenuto del testo degli articoli in modo da eliminare parole e  termini indesiderati, gestire la classifiche degli articoli e delle  fotografie più visitate, ecc.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.dblog.it/sito/default.asp?lingua=0&quot;&gt;DBlog&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;Blog:CMS&lt;/h2&gt;&lt;img src=&quot;http://www.masternewmedia.org/it/images/blog_cms.JPG&quot; /&gt;&lt;br /&gt;
Blog:CMS è una piattaforma di pubblicazione online gratuita per  creare blog. Blog:CMS integra le funzioni per realizzare e gestire  weblog, fotogallery, forum, news. Blog:CMS è ottimizzato per funzionare  sui più recenti browser, come Firefox, Safari, Opera, ecc. Blog:CMS  attualmente non è disponibile in lingua italiana.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://blogcms.com/&quot;&gt;Blog:CMS&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/6099600046333355521/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/04/come-creare-un-blog.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/6099600046333355521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/6099600046333355521'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/04/come-creare-un-blog.html' title='Come Creare Un Blog'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-3171624025848980471</id><published>2011-04-12T06:52:00.000-07:00</published><updated>2011-04-12T06:52:01.247-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Questo-è-un-blog-sulla-SEO"/><title type='text'>Questo-è-un-blog-sulla-SEO</title><content type='html'>&lt;div id=&quot;header-wrapper&quot;&gt; &lt;div class=&quot;header section&quot; id=&quot;header&quot;&gt;&lt;div class=&quot;widget Header&quot; id=&quot;Header1&quot;&gt; &lt;div id=&quot;header-inner&quot;&gt; &lt;div class=&quot;titlewrapper&quot;&gt; &lt;h1 class=&quot;title&quot;&gt; &lt;a href=&quot;http://maddaliena.blogspot.com/&quot;&gt;Questo-è-un-blog-sulla-SEO&lt;/a&gt; &lt;/h1&gt;&lt;/div&gt;&lt;div class=&quot;descriptionwrapper&quot;&gt; &lt;div class=&quot;description&quot;&gt;&lt;span&gt;Notizie sulla SEO in Italiano tradotte dai  più importanti blog di SEO nel mondo. Il meglio del SEO internazionale  per essere sempre aggiornati e mettere in pratica le proprie strategie  oltre a informazioni su come vive una SEO&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;twitter-div&quot;&gt;&lt;ul id=&quot;twitter_update_list&quot;&gt;&lt;li&gt;&lt;span&gt;RT @&lt;a href=&quot;http://twitter.com/Radio4SEO&quot;&gt;Radio4SEO&lt;/a&gt; Erste Ausgabe der SEOs Finest Show mit Marcell Sarközy auf Radio4SEO. Gast Florian Stelzner . Please RT &lt;a href=&quot;http://bit.ly/eu39rN&quot;&gt;http://bit.ly/eu39rN&lt;/a&gt;&lt;/span&gt; &lt;a href=&quot;http://twitter.com/maddygraziosi/statuses/57495323483971584&quot; style=&quot;font-size: 85%;&quot;&gt;about 20 hours ago&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;addthis_toolbox&quot;&gt; &lt;div class=&quot;add-this-text&quot;&gt;Subscribe:&lt;/div&gt;&lt;a class=&quot;addthis_button_rss&quot; href=&quot;http://maddaliena.blogspot.com/feeds/posts/default&quot;&gt;&lt;img alt=&quot;Subscribe&quot; height=&quot;32&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEqhO3taXHLxrLIjhivsQM1NDvZdPDwh6nyyofZQLhpdNkE3TThhoHD5D4WsBxIL6jETN9AvBKjvtnvwL_4WWicvzCHwLeHzIjT8X4uQ7t0Tow4_2k8H_PCSiOpqaSyUoXvICWrQXVms8/s1600/1276785300_rss.png&quot; width=&quot;32&quot; /&gt;&lt;/a&gt; &lt;a class=&quot;addthis_button_twitter&quot; href=&quot;http://twitter.com/maddygraziosi&quot;&gt;&lt;img alt=&quot;Twitter&quot; height=&quot;32&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTcOQ2EihV5ZrODQ78YPC8E_uUfLQxQpbYFY7UOg8yi7uGHQq5rlQ4TOuKqnDnLa1_l45xYqkRbixU9USQTqO656lbHhB8PbPiQnRTA3hBSvrNR1cR0GMKlul2ueTEhP5pUXhlla65O7w/s1600/1276785321_twitter.png&quot; width=&quot;32&quot; /&gt;&lt;/a&gt; &lt;a class=&quot;addthis_button_facebook&quot; href=&quot;http://www.facebook.com/posted.php?id=243027136133=101600746551525=1#%21/pages/Italian-SEO/243027136133&quot;&gt;&lt;img alt=&quot;Facebook&quot; height=&quot;32&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSZZtjPUacPBI3p4gNObd1QFXDk6OT1pmY7vIkqjh0MOdMlV-0zW8pIJP2-NJbMa-lJVPMwMn9J8eOQro16RSzCFa4gEhuqLcsgDRqszVyIXOfM7GD9197S2gqoaoN9E7xea33N8C6yi8/s1600/1276785333_facebook.png&quot; width=&quot;32&quot; /&gt;&lt;/a&gt; &lt;/div&gt;&lt;!-- google_ad_section_start(name=default) --&gt;                  &lt;h2 class=&quot;date-header&quot;&gt;&lt;span&gt;Friday, January 14, 2011&lt;/span&gt;&lt;/h2&gt;&lt;a href=&quot;&quot; name=&quot;8843567635039045943&quot;&gt;&lt;/a&gt; &lt;h3 class=&quot;post-title entry-title&quot;&gt; &lt;a href=&quot;http://maddaliena.blogspot.com/2011/01/ranking-factors-elementi-che.html&quot;&gt;Ranking factors: Elementi che determinano la posizione su Google&lt;/a&gt; &lt;/h3&gt;&lt;div class=&quot;post-header&quot;&gt;  &lt;/div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiewpq0NwxbwfotdhwasoTM1G0TQ5vQ0YxwTGNslAPUbCvXAZW0_PSdyuKn-lHEs213mEIrRYuheBViHM7zAU34NUlZZOUIYuUfUhuRqQ74tMikNmizXjuP_TuAiZ-U1geIsV1mB6H_GLM/s1600/google-vintage.jpg&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5562105472110402834&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiewpq0NwxbwfotdhwasoTM1G0TQ5vQ0YxwTGNslAPUbCvXAZW0_PSdyuKn-lHEs213mEIrRYuheBViHM7zAU34NUlZZOUIYuUfUhuRqQ74tMikNmizXjuP_TuAiZ-U1geIsV1mB6H_GLM/s400/google-vintage.jpg&quot; style=&quot;cursor: pointer; display: block; height: 284px; margin: 0px auto 10px; text-align: center; width: 400px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;A cosa prestare massima attenzione per salire nei motori di  ricerca? SeoMoz sta stilando una classifica dei principali &lt;strong&gt;ranking factors&lt;/strong&gt;  ( fattori di ranking) e non fa mai male ripeterli e trovarne di nuovi.  Subito dopo meta title, description e parole chiave nel  testo, troviamo  proprio l’algoritmo LDA per la coerenza semantica del testo che  mi sta  tanto a cuore.&lt;br /&gt;
&lt;br /&gt;
Questi  sono i fattori  on page che chiunque  voglia lanciare un business online deve tenere presente se  vuole  comparire nelle prima posizioni di Google. Se non sapete a cosa si   riferiscono questi termini, vi consiglio di leggere &lt;a href=&quot;http://seopower.it/&quot;&gt;&lt;strong&gt;SEO Power&lt;/strong&gt;&lt;/a&gt; di Giorgio Taverniti che spiega in maniera semplice e  sintetica il significato di tutti questi ranking factors.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;1)&lt;/span&gt;Parola chiave nel titolo, Prima parola chiave nel titolo ,Parola chiave nel titolo 2X, Parola  chiave nel titolo 3X+,&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;2)&lt;/span&gt;Parola  chiave nell’ H1, La prima parola chiave in H1,Parola  chiave in H1 2X,  Parola Chiave in H1 3X+, Parola chiave in H(x) (2+)    &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;3)&lt;/span&gt;Parola  chiave nell’URL, Parola chiave tra le Meta Keywords,  Parola chiave nel  Meta Description, Parola chiave nel Meta Tag (non  Description/Keyword)             &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;4)&lt;/span&gt;Parola  chiave tra le prime 10 parole nella pagina ,Parola chiave  tra le prime  100 parole nella pagina, Parola chiave tra le prime 500 parole  nella  pagina, &lt;a href=&quot;http://www.giorgiotave.it/wikigt/os/Tf-idf&quot;&gt;TF*IDF&lt;/a&gt;, Densità  di parole chiave, # di ripetizioni della parola chiave      &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;5)&lt;/span&gt;LDA sul contenuto, LDA nel titolo&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;6)&lt;/span&gt; Numero di parole del contenuto, Numero di caratteri, Livello  di lettura del documento,&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;7)&lt;/span&gt;#  numero di immagini nel documento, # di immagini  &amp;gt;30x30px nel  documento, # di link interni al documento, # di link esterni al   documento, # di dofollow link interni nel documento, # di dofollow link  esterni  nel documento, # di link interni nofollow nel documento, # di  link esterni no  follow nei documento, # totale di links nel documento, #  totale di links  dofollow nel documento, # totale di links no follow  nel documento, # totale di  link esterni  DA 80+ domini, # totale di   link esterni DA &amp;lt;40 Domains, # totale di link esterni  DmT 6+  Domains, # totale di link esterni  DmT &amp;lt;3 Domains, # più alto di link  esterni  per ogni singolo dominio,Presenza di link alla Privacy Policy  sulla pagina            &lt;br /&gt;
&lt;/div&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;8)&lt;/span&gt;Grandezza  della pagina  in KB,Velocità  di download ,Presenza di contenuto video,  Presenza di  External iFrame, Presenza di Internal iFrame    &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;9)&lt;/span&gt; Presenza della data,(se esiste la data) quanto è recente     &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;10) &lt;/span&gt;Presenza  di   AdSense nella pagina, Presenza di   Annunci di Microsoft Powered  Ads sulla pagina, Presenza di  Google Ad Network Powered Ads sulla  pagina&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;11)&lt;/span&gt;Versione HTML/XHTML in Markup, W3C Code Validation, # di  errori secondo W3C Code Validation, Presenza di tabelle in HTML &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;12)&lt;/span&gt;Presenza  di un link ad un account twitter,Presennza di un  link ad un account  facebook, Presenza di un link verso una pagina *.Google.com,  Presenza  di un link verso una pagina*.Microsoft.com  &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;13)&lt;/span&gt; Presenza di linguaggio per adulti o scurrile&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;14)&lt;/span&gt;  Caratteri presenti nell’URL , Numeri di slash nella URL  (folder  depth), Uso del trattino nella URL, Uso di underscore nell’ URL, http   vs. https, presenza di  ?= nella stringa  dell’URL, presenza di  2+ ?=  nella  stringa dell’URL, Presenza di  Rel=Canonical sulla pagina       &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;15)&lt;/span&gt;  Se la pagina è l’homepage,Se la pagina ha &amp;gt;100 di  link dofollow, Se  la pagina ha &amp;gt;100 di link in totale, Se la pagina ha&amp;gt;300  di link  dofollowed, Se la pagina ha &amp;gt;300 di link totali, Se il breadcrumb   viene mostrato nelle SERP di Google  (solo  l’ URL)             &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;16)&lt;/span&gt;Se  la pagina è https (secure server), Se l’url contiene  &quot;www&quot;, Se si usa   piattaforma wordpress, Se si usa piattaforma  Tumblr/Posterous/Blogger/Typepad/etc.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.seomoz.org/article/search-ranking-factors&quot;&gt;SEOmoz&lt;/a&gt; chiede l&#39;aiuto di tutti i SEO per stilare una lista ancora più ricca per il 2011. Tenete sotto controllo il sito!</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/3171624025848980471/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/04/questo-e-un-blog-sulla-seo.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/3171624025848980471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/3171624025848980471'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/04/questo-e-un-blog-sulla-seo.html' title='Questo-è-un-blog-sulla-SEO'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEqhO3taXHLxrLIjhivsQM1NDvZdPDwh6nyyofZQLhpdNkE3TThhoHD5D4WsBxIL6jETN9AvBKjvtnvwL_4WWicvzCHwLeHzIjT8X4uQ7t0Tow4_2k8H_PCSiOpqaSyUoXvICWrQXVms8/s72-c/1276785300_rss.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-659456172336152725</id><published>2011-04-06T00:23:00.000-07:00</published><updated>2011-04-06T00:36:00.280-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="FI - Come disattivare la cache di Firefox?"/><title type='text'>Come disattivare la cache di Firefox?</title><content type='html'>&lt;h2&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Come disattivare la cache di Firefox?&lt;/span&gt;&lt;/h2&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;  È possibile forzare tutte le richieste relative ad un aggiornamento  per essere effettivamente richiesto dal server (aggirando qualsiasi  tipo di contenuto già nella cache, e l&#39;aggiornamento della cache con la  nuova versione) utilizzando Ctrl + F5 invece di F5. &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;  Questo non  funziona per le richieste effettuate tramite la pagina all&#39;interno di  codice sul lato client .  Quando questo è un problema è necessario  utilizzare il metodo POST (richieste POST non dovrebbero mai essere  messi in cache), invece di GET o aggiungere un valore in continua  evoluzione per la querystring (come ad esempio l&#39;ora attuale in ms)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;  Disattivare la cache di una pagina particolare.  il modo corretto è  quello di impostare la direttiva cache nella richiesta Http: &lt;/span&gt;&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;code&gt;Cache-Control: no-cache &lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style=&quot;background-color: yellow; color: black;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;  &lt;b&gt;&lt;span style=&quot;font-size: small;&quot;&gt;attivare la capacità di Firefox intera cache off attraverso la sua pagina&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: yellow; color: black;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: small;&quot;&gt;about: config&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;code&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&amp;nbsp;&amp;nbsp; network.http.use-cache = false.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;code&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Direi che il modo migliore che ho trovato è fare clic su Strumenti di 
Firefox e iniziare la navigazione privata che non cache le pagine e 
ripristinare tutte le pagine che erano aperte prima di andare a 
Navigazione privata.  Nizza funzionalità. &lt;/span&gt;&lt;code&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/659456172336152725/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/04/blog-post.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/659456172336152725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/659456172336152725'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/04/blog-post.html' title='Come disattivare la cache di Firefox?'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-9003343557265148519</id><published>2011-03-04T02:46:00.000-08:00</published><updated>2011-03-04T02:46:56.925-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eseguibili"/><category scheme="http://www.blogger.com/atom/ns#" term="pg_dump"/><category scheme="http://www.blogger.com/atom/ns#" term="postgres"/><category scheme="http://www.blogger.com/atom/ns#" term="psql"/><title type='text'>Gli eseguibili di PostgreSQL</title><content type='html'>&lt;h2&gt;Gli eseguibili di PostgreSQL&lt;/h2&gt;&lt;div&gt;&lt;div class=&quot;noindent&quot;&gt;Le  locazioni degli eseguibili di PostgreSQL cambiano in funzione della  modalità di installazione e del sistema operativo scelto per ospitarlo.&lt;!--l. 1068--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Nel caso di un’installazione binaria su sistema debian questi vengono posizionati nella directory /usr/bin. &lt;!--l. 1071--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Nel caso di un’installazione da sorgenti, se il  configure è stato lanciato senza specificare il PREFIX allora gli  eseguibili vengono posizionati nella directory /usr/local/pgsql/bin.&lt;!--l. 1075--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;In questo caso particolare, la directory  /usr/local/pgsql ospita l’intera struttura di eseguibili,  documentazione, librerie ed eventuali moduli contrib.&lt;!--l. 1079--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Pertanto il percorso degli eseguibili, per maggiore comodità d’uso da riga di comando, va aggiunto al PATH del nostro sistema. &lt;!--l. 1082--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;In genere si preferisce editare il file /etc/profile  per avere una mappatura automatica oppure, se non si ha accesso come  utente root al sistema si può modificare il file .bash_profile della  home dell’utente postgres.&lt;!--l. 1087--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Sui sistemi windows invece l’installazione crea nella cartella c:postgresPostgreSQLXXX&lt;span class=&quot;footnote-mark&quot;&gt;&lt;/span&gt;  l’intera struttura con directory bin contenente gli eseguibili e Data  contenente il cluster, se questi è stato creato contestualmente  all’installazione.&lt;!--l. 1093--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Passiamo quindi ad analizzarli nel dettaglio.&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;postgres&lt;/h4&gt;&lt;!--l. 1098--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;postgres è il server PostgreSQL. &lt;!--l. 1100--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Ogni volta che un client si collega, in maniera  locale oppure via tcp, l’istanza postgres avvia un nuovo processo server  che prende in carico la connessione.&lt;!--l. 1104--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;È possibile avere solo un’istanza postgres per un database cluster. &lt;!--l. 1106--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Questi è una directory dedicata, chiamata  normalmente «data area», che contiene tutti i database associati  all’instanza postgres.&lt;!--l. 1109--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;E possibile avere più istanze postgres sullo stesso  sistema a patto di avere data area differenziate e porte d’ascolto TCP  diverse.&lt;!--l. 1112--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Quando postgres viene lanciato, come comando oppure con pg_ctl, deve conoscere la posizione della data area. &lt;!--l. 1115--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Il parametro da riga di comando -D oppure la  variabile d’ambiente PGDATA devono quindi essere definite affinchè  postmaster possa partire.&lt;!--l. 1118--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Per ragioni puramente pratiche è preferibile  definire PGDATA al momento del login utente in modo da rendere  disponibile questa informazione a postgres e ai programmi che devono  conoscere la posizione della data area, come initdb e pg_ctl.&lt;!--l. 1123--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Per ragioni storiche è presente l’alias postmaster che punta all’eseguibile postgres &lt;!--l. 1127--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;psql&lt;/h4&gt;&lt;!--l. 1129--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;psql è il terminale interattivo di PostgreSQL. &lt;!--l. 1131--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Permette di inviare query in modalità interattiva, permette di salvare l’output su file e di leggere file sql. &lt;!--l. 1134--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Per tale motivo è lo strumento principale per il restore da dump sql. &lt;!--l. 1136--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Se viene ricompilato con le funzionalità readline permette di lavorare in maniera del tutto simile alla bash.  &lt;!--l. 1140--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;clusterdb&lt;/h4&gt;&lt;!--l. 1142--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;L’eseguibile clusterdb è un wrapper per il comando SQL CLUSTER. &lt;!--l. 1144--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Semplicemente opera un recluster di tutte le tabelle nel database bersaglio. &lt;!--l. 1147--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;È possibile specificare quale tabella sottoporre a clusterizzazione. &lt;!--l. 1150--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;createdb&lt;/h4&gt;&lt;!--l. 1152--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;createdb crea un nuovo database nel cluster. &lt;!--l. 1154--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;L’eseguibile e’ un wrapper per il comando SQL CREATE DATABASE &lt;!--l. 1157--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;L’utente di database che esegue il comando diventa l’owner del nuovo database. &lt;!--l. 1160--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;È possibile specificare un owner diverso con l’opzione -O. &lt;!--l. 1163--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;&lt;span class=&quot;titlemark&quot;&gt; &lt;/span&gt;createlang&lt;/h4&gt;&lt;!--l. 1165--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;createlang crea un nuovo linguaggio nel database bersaglio. &lt;!--l. 1167--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;L’eseguibile e’ un wrapper per il comando SQL CREATE LANGUAGE &lt;!--l. 1171--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;createuser&lt;/h4&gt;&lt;!--l. 1173--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;createuser crea un nuovo ruolo utente nel cluster PostgreSQL. &lt;!--l. 1175--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Solo gli utenti con la grant CREATEROLE possono creare nuovi utenti. &lt;!--l. 1178--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;createuser è un wrapper per il comando SQL CREATE ROLE .  &lt;!--l. 1182--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;&lt;span class=&quot;titlemark&quot;&gt; &lt;/span&gt;dropdb&lt;/h4&gt;&lt;!--l. 1184--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;dropdb distrugge un database presente nel cluster PostgreSQL. &lt;!--l. 1186--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;L’utente per eseguire il comando dropdb deve essere superutente oppure owner del database da cancellare. &lt;!--l. 1189--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;dropdb è un wrapper SQL del comando DROP DATABASE. &lt;!--l. 1193--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;droplang&lt;/h4&gt;&lt;!--l. 1195--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;droplang elimina un linguaggio procedurale nel database bersaglio. &lt;!--l. 1197--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;È consigliabile adoperare droplang per la  cancellazione poiché questo comando esegue una serie di controlli che  altrimenti andrebbero fatti a mano.&lt;!--l. 1202--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;dropuser&lt;/h4&gt;&lt;!--l. 1204--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;dropuser è un wrapper da riga di comando per il comando SQL DROP USER. &lt;!--l. 1209--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;&lt;span class=&quot;titlemark&quot;&gt; &lt;/span&gt;ecpg&lt;/h4&gt;&lt;!--l. 1211--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;ecpg è il preprocessore C con comandi SQL embedded. &lt;!--l. 1213--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Sostanzialmente converte i programmi scritti in C  aventi comandi SQL in codice C sostituendo ai comandi SQL chiamate a  funzioni specifiche per l’elaborazione SQL.&lt;!--l. 1217--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Il file sorgente prodotto da ecpg può essere elaborato da un qualsiasi compilatore C. &lt;!--l. 1220--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;ecpg trasforma qualsiasi file specificato dalla riga di comando nel corrispondente nome file con estensione .c .  &lt;!--l. 1223--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;L’estensione di input preferita da ecpg è .pgc a indicare che si tratta di file specifici per l’ecpg. &lt;!--l. 1226--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Qualora il file avesse estensione diversa da .pgc  allora ecpg produce un file di output con l’intero nome file,  comprensivo di estensione, con l’aggiunta di .c in fondo.&lt;!--l. 1230--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Il nome del file di output può essere specificato usando l’opzione -o. &lt;!--l. 1234--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;initdb&lt;/h4&gt;&lt;!--l. 1236--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;initdb crea un nuovo cluster PostgreSQL. &lt;!--l. 1238--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Un cluster è una collezione di database gestiti da una singola istanza server. &lt;!--l. 1241--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Il programma produce, in una directory specifica,  che può essere indicata da riga di comando oppure attraverso la  variabile d’ambiente PGDATA, una serie di sottodirectory.&lt;!--l. 1245--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;La struttura di queste directory le vedremo in dettaglio nel capitolo 10&lt;!--tex4ht:ref: cha:Lo-storage-fisico --&gt;. &lt;!--l. 1248--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;La creazione del cluster genera il catalogo di  sistema, le directory che andranno ad ospitare i file specifici  dell’istanza PostgreSQL e i due database template0 e template1.&lt;!--l. 1252--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Il database template0 è il database master di template1 ed ha la peculiarità di non essere accedibile in alcun modo. &lt;!--l. 1255--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Il database template1 viene prodotto copiando  template0 su di una nuova directory oggetto e da questi, dalla versione  8.1 in poi, viene generato il database postgres.&lt;!--l. 1259--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Ogni volta che si va a generare un nuovo database  con il comando createdb o con CREATE DATABASE, se non viene indicato il  template di partenza allora viene adoperato template1 come master per la  creazione.&lt;!--l. 1263--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;È quindi consigliato apportare le modifiche che si  vogliono propagare ai nuovi database, come ad esempio un linguaggio  procedurale specifico, al template1 prima di iniziare a creare nuovi  database.&lt;!--l. 1267--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Ovviamente le modifiche fatte a template1 si propagano solo ai nuovi database, quelli già presenti vanno editati a mano. &lt;!--l. 1270--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;inidb deve essere lanciato con l’utente di sistema che andrà a gestire il processo postgres. &lt;!--l. 1273--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Inoltre iniddb inizializza il default locale e character set encoding del cluster database.  &lt;!--l. 1276--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;La collation order e il character set sono fissi e non possono essere modificati. &lt;!--l. 1279--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Ordini di collation diversi da C e POSIX possono dare decadimenti di performance. &lt;!--l. 1282--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Diventa quindi strategico scegliere il locale corretto prima di lanciare initdb. &lt;!--l. 1285--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Un diverso character set può essere definito durante  la creazione di un nuovo database con l’opzione –encoding di createdb  oppure con la clausola ENCODING del corrispondente comando SQL.&lt;!--l. 1290--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;&lt;span class=&quot;titlemark&quot;&gt; &lt;/span&gt; ipcclean&lt;/h4&gt;&lt;!--l. 1292--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;ipcclean rimuove tutti i segmenti di memoria condivisa e i semafori dell’utente di sistema che lancia il comando. &lt;!--l. 1295--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Il suo utilizzo è specifico quando avviene un crash di istanza per ripulire la memoria. &lt;!--l. 1298--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Considerato che il rilancio del server effettua una pulizia della memoria, questo comando è abbastanza inutile. &lt;!--l. 1301--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Lanciare questo comando con il server in esecuzione  provoca la deallocazione di tutta la memoria condivisa dal processo  postgres con serie conseguenze sul server.&lt;!--l. 1306--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;&lt;span class=&quot;titlemark&quot;&gt; &lt;/span&gt;pg_config&lt;/h4&gt;&lt;!--l. 1308--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;L’utilità pg_config stampa a video i parametri di configurazione della versione installata di PostgreSQL. &lt;!--l. 1311--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Viene utilizzato per determinare la posizione dei file di header e delle librerie. &lt;!--l. 1315--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;&lt;span class=&quot;titlemark&quot;&gt; &lt;/span&gt;pg_controldata&lt;/h4&gt;&lt;!--l. 1317--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;pg_controldata stampa a video le informazioni del  processo di inizializzazione del cluster fatto da initdb come versione  del catalogo e il locale del server.&lt;!--l. 1321--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Oltre a queste informazioni vengono estratti dati  specifici relativi al cluster come ad esempio lo stato dei WAL ed i  checkpoint.&lt;!--l. 1325--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;pg_ctl&lt;/h4&gt;&lt;!--l. 1327--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;pg_ctl è l’utilità specifica per l’avvio, l’arresto il rilancio e il ricaricamento del server PostgreSQL. &lt;!--l. 1330--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Permette inoltre di interrogare lo status del server in esercizio. &lt;!--l. 1332--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Il suo utilizzo è da preferirsi al lancio manuale  del comando postgres in quanto ha delle opzioni specifiche per lo  shutdown controllato del server.&lt;!--l. 1337--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;&lt;span class=&quot;titlemark&quot;&gt; &lt;/span&gt; pg_dump&lt;/h4&gt;&lt;!--l. 1339--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;pg_dump è lo strumento principale per il backup dei database PostgreSQL. &lt;!--l. 1341--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Esegue backup consistenti all’istante di lancio del comando anche se il cluster è acceduto da più client. &lt;!--l. 1344--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;pg_dump, a parte l’overhead sul server, non blocca  la normale attività del cluster e può essere lanciato senza rischi di  blocchi.&lt;!--l. 1347--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;I backup possono essere effettuati sia in formato  testo, semplici comandi SQL che vanno a ricreare oggetti e dati, che in  formato binario compresso e non.&lt;!--l. 1351--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Il restore dei file di testo avviene con l’invio di  questi file al comando psql mentre per il restore dei file binari è  necessaria l’utilità pg_restore.&lt;!--l. 1356--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;&lt;span class=&quot;titlemark&quot;&gt; &lt;/span&gt; pg_dumpall&lt;/h4&gt;&lt;!--l. 1358--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;pg_dumpall è un wrapper per pg_dump che esegue il backup di tutti i database del cluster su cui è lanciato.  &lt;!--l. 1362--&gt;&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;&lt;span class=&quot;titlemark&quot;&gt; &lt;/span&gt;pg_resetxlog&lt;/h4&gt;&lt;!--l. 1364--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;pg_resetxlog rimuove i WAL dalla directory pg_xlog  ed eventualmente resetta le informazioni di controllo memorizzate nel  file pg_control.&lt;!--l. 1367--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Questo comando va considerato alla stregua di ultima  spiaggia in caso di corruzione dei WAL in quanto il reset di questi  file cancella ogni riferimento consistente tra i dati disco e lo stato  delle transazioni.&lt;!--l. 1371--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;In caso di utilizzo di pg_resetxlog una volta  riavviata l’istanza va immediatamente eseguito un dump del cluster nella  sua interezza con pg_dump, reinizializzato un nuovo cluster con initdb  sul quale va reimportato il dump.&lt;!--l. 1376--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;Per ragioni di sicurezza pg_resetxlog non accetta la  variabile d’ambiente PGDATA ma richiede l’indicazione da riga di  comando della directory data.&lt;!--l. 1381--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;&lt;span class=&quot;titlemark&quot;&gt; &lt;/span&gt;pg_restore&lt;/h4&gt;&lt;!--l. 1383--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;pg_restore serve a importare un database PostgreSQL esportato in maniera binaria da pg_dump. &lt;!--l. 1387--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;&lt;span class=&quot;titlemark&quot;&gt; &lt;/span&gt;reindexdb&lt;/h4&gt;&lt;!--l. 1389--&gt;&lt;br /&gt;
&lt;div class=&quot;noindent&quot;&gt;reindexdb è un wrapper per il comando SQL REINDEX che effettua la ricostruzione degli indici in un database PostgreSQL. &lt;!--l. 1393--&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h4 class=&quot;subsectionHead&quot;&gt;&lt;span class=&quot;titlemark&quot;&gt; &lt;/span&gt;vacuumdb&lt;/h4&gt;&lt;!--l. 1395--&gt;&lt;br /&gt;
vacuumdb è un wrapper per il comando VACUUM che opera il vacuum sui database PostgreSQL.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/9003343557265148519/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/03/gli-eseguibili-di-postgresql.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/9003343557265148519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/9003343557265148519'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/03/gli-eseguibili-di-postgresql.html' title='Gli eseguibili di PostgreSQL'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-5543611196775265310</id><published>2011-03-04T01:05:00.000-08:00</published><updated>2011-03-04T03:11:02.784-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="copie"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><title type='text'>Linux copie</title><content type='html'>&lt;pre style=&quot;font-family: Verdana,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;Il comando di copia è pg_dump che dovrebbe trovarsi in /usr/bin &lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;font-family: Verdana,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;h2 style=&quot;font-family: Verdana,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Il pg_dump&lt;/span&gt;&lt;/h2&gt;&lt;div style=&quot;font-family: Verdana,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Verdana,sans-serif;&quot;&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;L’esecuzione del comando pg_dump non fa altro che  aprire un nuovo backend verso il database server e interrogare il  catalogo di sistema per andare a costruire le DDL e l’export dei dati  che poi andranno a finire nel file di output.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;L’operazione avviene come di consueto attraverso una  transazione che rispetterà le regole di isolamento delle transazioni  presenti in PostgreSQL.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;pg_dump una volta invocato, fatti i debiti controlli  sui parametri e una volta connesso al database server esegue il  seguente comando: &lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;BEGIN; &lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; &lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;In questo modo apre esplicitamente una transazione e  impone il massimo livello di isolamento delle transazioni per il suo  backend vincolando il cluster a garantirgli la consistenza in lettura  senza nessun compromesso. &lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Successivamente, come si legge dal sorgente  pg_dump.c, esegue una serie di query sul catalogo di sistema per  generare le tabelle interessate dal dump e infine, se previsto dai  parametri, i dati. &lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;È interessante osservare come l’elaborazione e la costruzione del file di dump sia alquanto “furba“. &lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Infatti la parte più onerosa durante la fase di restore, la creazione delle primary keys e gli indici, viene tenuta per ultima. &lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Inoltre di default per il caricamento dei dati viene  adoperato il comando copy che, a differenza delle insert, attraversa  gli stage dell’esecuzione di una query soltanto una volta velocizzando  notevolmente il processo di caricamento.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;noindent&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Verdana,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Verdana,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Verdana,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Verdana,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;pg_dump -v -f&amp;nbsp; /var/newstar/copie  -U newstar -Fc newstar&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Verdana,sans-serif;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Verdana,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;-v &amp;nbsp; verbose&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Verdana,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;-f&amp;nbsp;&amp;nbsp; file di backup&amp;nbsp; in output&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Verdana,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;-U&amp;nbsp; user&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Verdana,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;-Fc&amp;nbsp; formato compresso e utilizzabile per restore (consigliato)&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/5543611196775265310/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/03/linux-copie.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/5543611196775265310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/5543611196775265310'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/03/linux-copie.html' title='Linux copie'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-1512718884533551282</id><published>2011-02-28T07:31:00.000-08:00</published><updated>2011-02-28T07:39:54.441-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="debug"/><category scheme="http://www.blogger.com/atom/ns#" term="notepad"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>Notepad per php con debugger</title><content type='html'>&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Debuggare pagine PHP con Notepad&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
1)&lt;b&gt;scaricare plugin&lt;/b&gt;&lt;br /&gt;
Scaricare &lt;span style=&quot;background-color: yellow;&quot;&gt;il plugin &lt;/span&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;background-color: yellow;&quot;&gt;DBGpPlugin&lt;/span&gt;_0_12b_dll.zip&lt;/b&gt;&lt;/i&gt; o versioni equivalenti.&lt;br /&gt;
Una volta scaricato ed installato il  plugin per l&#39;editor (cosa che consiste nel &lt;span style=&quot;background-color: yellow;&quot;&gt;copiare la dll&lt;/span&gt; contenuta nel  pacchetto zip del plugin, nella cartella &quot;&lt;span style=&quot;background-color: yellow;&quot;&gt;plugins&lt;/span&gt;&quot; nel percorso di  installazione del Notepad++), siamo pronti ad attrezzare la nostra  installazione di PHP dei moduli necessari per il debug.&lt;br /&gt;
2) &lt;b&gt;installare Xdebug&lt;/b&gt;&lt;br /&gt;
Il modulo in  questione è il modulo &lt;a href=&quot;http://www.xdebug.org/&quot; style=&quot;background-color: yellow;&quot; target=&quot;_new&quot;&gt;XDebug&lt;/a&gt;. Anche  in questo caso l&#39;installazione risulta poco complessa. L&#39;unica  particolarità risiede nel fatto che si deve installare la versione del  debugger compilata ad-hoc per la versione di PHP presente sul sistema  per il debug.&lt;br /&gt;
&lt;br /&gt;
Una volta scaricato il modulo corrispondente alla  nostra versione del PHP, lo si può copiare nella &lt;span style=&quot;background-color: yellow;&quot;&gt;cartella ext &lt;/span&gt;di PHP o  direttamente sotto la radice di PHP stesso.&lt;br /&gt;
Per permettere la  gestione del modulo da parte di PHP è necessario aprire il file &lt;span style=&quot;background-color: yellow;&quot;&gt;PHP.ini  &lt;/span&gt;presente nella cartella di installazione del PHP e aggiungere le  seguenti righe di configurazione:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;#zend_extension_ts=&quot;Drive:/percorso/verso/il/modulo/xdebug/php_xdebug-2.0.5-5.2.dll&quot;&lt;/i&gt;&lt;br /&gt;
zend_extension=&quot;C:\xampp\php\ext\php_xdebug.dll&quot;&lt;br /&gt;
&lt;br /&gt;
xdebug.profiler_append=1&lt;br /&gt;
xdebug.profiler_enable=0&lt;br /&gt;
xdebug.profiler_enable_trigger=0&lt;br /&gt;
xdebug.profiler_output_dir=&lt;br /&gt;
xdebug.profiler_output_name=cachegrind.out&lt;br /&gt;
xdebug.remote_enable=on&lt;br /&gt;
xdebug.remote_handler=dbgp&lt;br /&gt;
xdebug.remote_host=localhost&lt;br /&gt;
xdebug.remote_port=9000&lt;br /&gt;
xdebug.trace_output_dir=&quot;C:\xampp\tmp&quot;&lt;br /&gt;
zend_extension_ts=C:\xampp\php\ext\php_xdebug.dll&lt;br /&gt;
xdebug.default_enable=On&lt;br /&gt;
xdebug.remote_log=&lt;br /&gt;
xdebug.remote_mode=req&lt;br /&gt;
xdebug.idekey=devphp&lt;br /&gt;
&lt;br /&gt;
3) &lt;b&gt;verificare php&lt;/b&gt;&lt;br /&gt;
A questo punto, se abbiamo scelto il modulo giusto per la nostra  versione di PHP, il debugger dobrebbe essere integrato. Si può  verificare l&#39;installazione del modulo controllando l&#39;output della  funzione &lt;i&gt;phpinfo()&lt;/i&gt; che dovrebbe riportare una sezione relativa a xdebug.&lt;br /&gt;
4)&lt;b&gt;eseguire&lt;/b&gt;&lt;br /&gt;
A questo punto dovrebbero sussistere tutti i presupposti per poter eseguire il debug degli script PHP.&lt;br /&gt;
&lt;span style=&quot;background-color: yellow;&quot;&gt;Aprire  &lt;/span&gt;quindi con il notepad++ il file all&#39;interno dello spazio web gestito da  Apache che vogliamo debuggare e &lt;span style=&quot;background-color: yellow;&quot;&gt;attivare &lt;/span&gt;il plugin del debugger  selezionandolo dall&#39;apposito menu (plugins -&amp;gt; DBGp -&amp;gt; Debugger).&lt;br /&gt;
Portandoci  su una riga di codice PHP, possiamo inserirvi un breakpoint, clickando sul pallino rosso, in modo che  l&#39;esecuzione dello script si fermi su quella linea.&lt;br /&gt;
Per &lt;span style=&quot;background-color: yellow;&quot;&gt;lanciare  l&#39;esecuzione dello script, aprire un browser internet e digitare il  percorso&lt;/span&gt; della pagina da debuggare sul&amp;nbsp;server locale.&lt;br /&gt;
In &lt;span style=&quot;background-color: yellow;&quot;&gt;fondo al  percorso&lt;/span&gt; alla pagina all&#39;interno del browser web, dobbiamo aggiungere un  parametro get che permetta la definizione del nome di una sessione di  debug.&lt;br /&gt;
&lt;br /&gt;
Ecco un esempio di percorso alla pagina da debuggare con la formattazione necessaria:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style=&quot;background-color: yellow;&quot;&gt;http://localhost/pagDaDebuggare.php?XDEBUG_SESSION_START=NomeSessione&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
Il  nome della sessione può essere del tutto arbitrario. A questo punto  dovrebbe iniziare a &lt;span style=&quot;background-color: yellow;&quot;&gt;lampeggiare&lt;/span&gt; l&#39;applicazione del Notepadd++ nella  barra di sistema, a segnalare che il debug dello script è stato avviato.&lt;br /&gt;
&lt;br /&gt;
5)Watchs&lt;br /&gt;
Clikare su watchs -&amp;gt;tasto dx mouse -&amp;gt;&amp;nbsp; add watch&amp;nbsp; -&amp;gt; inserire nome variabile</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/1512718884533551282/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/02/notepad-per-php-con-debugger.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/1512718884533551282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/1512718884533551282'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/02/notepad-per-php-con-debugger.html' title='Notepad per php con debugger'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-6843575875621605480</id><published>2011-02-26T14:24:00.000-08:00</published><updated>2011-02-26T14:24:19.097-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Concorrenza"/><title type='text'>problemi di concorrenza</title><content type='html'>&lt;div class=&quot;FeatureHeadline&quot;&gt;Strumenti e tecniche per identificare i problemi di concorrenza&lt;/div&gt;&lt;div class=&quot;FeatureByLine&quot;&gt;Rahul V. Patil e Boby George&lt;/div&gt;&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr valign=&quot;top&quot;&gt;                                                                       &lt;td&gt;                                                                                 &lt;span class=&quot;CodeDownloadText&quot;&gt;In questo articolo verranno discussi i seguenti argomenti:&lt;/span&gt;                                                                                 &lt;ul&gt;&lt;li class=&quot;ListingBullet&quot;&gt;Problemi nel test della concorrenza&lt;/li&gt;
&lt;li class=&quot;ListingBullet&quot;&gt;Bug elusivi e loro dipendenze&lt;/li&gt;
&lt;li class=&quot;ListingBullet&quot;&gt;Nuovi strumenti per individuare gli ostacoli&lt;/li&gt;
&lt;li class=&quot;ListingBullet&quot;&gt;Procedure consigliate per progettare i test&lt;/li&gt;
&lt;/ul&gt;&lt;/td&gt;                                                                       &lt;td&gt;                                                                                 &lt;span class=&quot;CodeDownloadText&quot;&gt;In questo articolo verranno utilizzate le seguenti tecnologie:&lt;/span&gt;                                                                                 &lt;br /&gt;
Analisi dinamica, analisi statica e controllo del modello&lt;/td&gt;                                                             &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;                                                             &lt;span&gt; &lt;div class=&quot;MTPS_CollapsibleRegion&quot;&gt; &lt;div class=&quot;CollapseRegionLink&quot;&gt; &lt;!-- ApplyClick with current id --&gt; &lt;img class=&quot;LibC_o&quot; src=&quot;http://i.msdn.microsoft.com/Global/Images/clear.gif&quot; style=&quot;border-width: 0px; vertical-align: middle;&quot; /&gt; &amp;nbsp;Sommario &lt;/div&gt;&lt;div class=&quot;MTPS_CollapsibleSection&quot; style=&quot;display: block;&quot;&gt;                                                                          &lt;a href=&quot;http://msdn.microsoft.com/it-it/magazine/cc546569.aspx#id0030004&quot;&gt;Condizioni di competizione, deadlock e altro&lt;/a&gt;                                                                       &lt;br /&gt;
&lt;a href=&quot;http://msdn.microsoft.com/it-it/magazine/cc546569.aspx#id0030022&quot;&gt;Problemi di riordino della memoria&lt;/a&gt;                                                                       &lt;br /&gt;
&lt;a href=&quot;http://msdn.microsoft.com/it-it/magazine/cc546569.aspx#id0030043&quot;&gt;Strategie di test &lt;/a&gt;                                                                       &lt;br /&gt;
&lt;a href=&quot;http://msdn.microsoft.com/it-it/magazine/cc546569.aspx#id0030052&quot;&gt;Strumenti di test della concorrenza&lt;/a&gt;                                                                       &lt;br /&gt;
&lt;a href=&quot;http://msdn.microsoft.com/it-it/magazine/cc546569.aspx#id0030072&quot;&gt;Test delle prestazioni &lt;/a&gt;                                                                       &lt;br /&gt;
&lt;a href=&quot;http://msdn.microsoft.com/it-it/magazine/cc546569.aspx#id0030089&quot;&gt;Test di stress&lt;/a&gt;                                                                       &lt;br /&gt;
&lt;a href=&quot;http://msdn.microsoft.com/it-it/magazine/cc546569.aspx#id0030093&quot;&gt;Conclusioni&lt;/a&gt;                                                                       &lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;                                                   &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030000&quot;&gt;                                                             &lt;span class=&quot;ArticleInlineTitle&quot;&gt;Per soddisfare&lt;/span&gt;  l&#39;eterna esigenza di aumentare la potenza di calcolo, il settore  dell&#39;hardware si sta costantemente muovendo verso sistemi di processori  multicore. Al contrario del miglioramento delle prestazioni ottenuto  grazie a processori più veloci con velocità di clock più elevate, il  miglioramento delle prestazioni in sistemi multicore può essere ottenuto  solo scrivendo programmi paralleli efficienti. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030001&quot;&gt;Da  molto tempo nel settore del software esistono forme di parallelismo.  Tuttavia, per creare applicazioni software tradizionali che utilizzino  la piena potenza dell&#39;hardware parallelo, è necessario modificare in  modo sostanziale le pratiche pensate per le applicazioni sequenziali. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030002&quot;&gt;Il  test delle applicazioni parallele non è semplice. Ad esempio, è  difficile rilevare bug di concorrenza a causa del comportamento non  deterministico mostrato dalle applicazioni parallele. Anche se si riesce  a rilevare questi bug, è difficile riprodurli in modo coerente.  Inoltre, dopo aver corretto un difetto, è difficile essere certi che  quel difetto è stato veramente risolto e non semplicemente mascherato.  La parallelizzazione può anche comportare nuovi colli di bottiglia delle  prestazioni che devono essere identificati.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030003&quot;&gt;In  questo articolo, esaminerò le tecniche di test per i programmi  paralleli e presenterò sei utili strumenti che possono essere usati per  individuare difetti potenzialmente gravi. Inizierò definendo le seguenti  categorie di bug di concorrenza: condizioni di competizione, esclusioni  reciproche errate e riordino della memoria. &lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;ArticleTypeTitle&quot; id=&quot;id0030004&quot;&gt;Condizioni di competizione, deadlock e altro&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030005&quot;&gt;Una  condizione di competizione si verifica quando due o più thread di  esecuzione di un programma multithread tentano di accedere agli stessi  dati condivisi e almeno uno degli accessi è in scrittura. Condizioni di  competizione dannose comportano imprevedibilità e sono spesso difficile  da rilevare. Le conseguenze di una condizione di competizione possono  diventare visibili solo molto tempo dopo o in una parte completamente  diversa del programma. Sono anche difficilissime da riprodurre. È  possibile evitare le competizioni usando tecniche di sincronizzazione  per mettere correttamente in sequenza le operazioni tra i thread.&lt;/div&gt;&lt;div class=&quot;SidebarContainer&quot; id=&quot;id006&quot;&gt;                                                             &lt;div class=&quot;SidebarHeadline&quot;&gt;Identificazione dei dati di test e reporting delle metriche&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0060000&quot;&gt;Nel  caso delle applicazioni parallele, i dati di test vengono definiti  identificando gli aspetti di scalabilità dello scenario. La scalabilità  mostrata dall&#39;applicazione dipende in realtà dalla capacità di  parallelizzazione dell&#39;algoritmo usato. Determinati algoritmi possono  produrre uno speedup superlineare per certi campi problematici (ad  esempio una ricerca in una distribuzione non uniforme). Altri algoritmi  non possono produrre speedup paralleli a causa della limitata capacità  di parallelizzazione, di conseguenza la velocità di runtime totale  aumenta in misura non proporzionale al numero di CPU. Altri algoritmi  ancora, ad esempio quelli di ordinamento, non scalano in modo lineare  attraverso la dimensione del set di dati. È evidente che è importante  capire come scalano le prestazioni dell&#39;applicazione con le categorie  seguenti:&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0060001&quot;&gt;Numero  di thread o core CPU - L&#39;utente in genere si aspetta che l&#39;applicazione  parallela scalerà in modo lineare man mano che aumenta il numero di CPU  o thread. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0060002&quot;&gt;Dimensione  del set di dati - L&#39;utente in genere si aspetta che le prestazioni  dell&#39;applicazione parallela non debbano diminuire all&#39;aumentare della  dimensione del set di dati di input.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0060003&quot;&gt;Carico  di lavoro dell&#39;esecuzione - Con il procedere dell&#39;esecuzione, la  quantità di lavoro svolto dal thread può non rimanere costante. Può  aumentare o diminuire, variare in modo casuale o essere distribuita  normalmente. Le variazioni del carico di lavoro nel corso  dell&#39;esecuzione possono influire sulle caratteristiche delle prestazioni  dell&#39;applicazione. I tipi di variazione del carico di lavoro nel corso  dell&#39;esecuzione sono: carico di lavoro costante, carico di lavoro in  aumento, carico di lavoro in diminuzione, carico di lavoro casuale e  carico di lavoro distribuito normalmente.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0060004&quot;&gt;Il  tempo di esecuzione è la metrica più comunemente usata per il  reporting. Altre metriche di reporting includono lo speedup ottenuto  rispetto all&#39;applicazione sequenziale e lo speedup attraverso le  categorie di scalabilità. È importante definire la metrica di reporting e  la modalità di misurazione. Ecco alcune domande utili per iniziare:  Quali valori devono essere riportati? Come verranno riportati? La  strumentazione usata per la misurazione influisce sulle prestazioni?  Inoltre, quando possibile, effettuare la misurazione in parti, in modo  da capire le prestazioni delle sottoparti del sistema.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030006&quot;&gt;Talvolta  le competizioni possono essere sicure e intenzionali. Ad esempio, può  esserci un flag globale chiamato done, per il quale esiste solo un  thread scrittore ma molti thread lettori. Il thread scrittore imposta il  flag in modo da indicare a tutti i thread di terminare in modo sicuro.  Tutti i thread lettori possono essere eseguiti in un loop utilizzando  while (!done), leggendo ripetutamente il flag. Dopo che un thread ha  rilevato l&#39;impostazione del flag done, esce dal proprio loop while. In  molti casi si tratta di una competizione favorevole. Come vedremo più  avanti in questo articolo, sono disponibili degli strumenti per il  rilevamento delle condizioni di competizione. Tuttavia tali strumenti  potrebbero segnalare competizioni che in realtà sono favorevoli,  riportando errori conosciuti come falsi positivi. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030007&quot;&gt;Un  deadlock si verifica quando due o più thread sono in attesa l&#39;uno  dell&#39;altro, dando vita a un ciclo e impedendo a tutti loro di fare  ulteriori progressi. I deadlock possono essere introdotti dal  programmatore nel tentativo di evitare condizioni di competizione. Ad  esempio, l&#39;uso errato di primitivi di sincronizzazione, come  l&#39;acquisizione di blocchi in un ordine sbagliato, può comportare  l&#39;attesa reciproca di due o più thread. I deadlock possono verificarsi  anche nei casi in cui non si usano costrutti di blocco; qualsiasi tipo  di attesa circolare può risolversi in un deadlock.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030008&quot;&gt;Esaminiamo l&#39;esempio seguente di una potenziale situazione di deadlock. Il thread 1 effettua quanto segue:&lt;/div&gt;&lt;span id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl02&quot; xmlns:msxsl=&quot;urn:schemas-microsoft-com:xslt&quot;&gt; &lt;div class=&quot;libCScode&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl02_&quot;&gt;          &lt;div class=&quot;CodeSnippetTitleBar&quot;&gt;         &lt;div class=&quot;CodeDisplayLanguage&quot;&gt;                      &lt;/div&gt;&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;background-color: #dddddd;&quot;&gt;     &lt;pre class=&quot;libCScode&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl02_code&quot; space=&quot;preserve&quot;&gt;Acquire Lock A;
Acquire Lock B; 
Release Lock B; 
Release Lock A;
Thread 2 proceeds like so:
Acquire Lock B;
Acquire Lock A; // if thread 1 has already acquired lock 
                // A and waiting to acquire lock B, then 
                // this is a deadlock
Release Lock A;
Release Lock B;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;                                                   &lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030020&quot;&gt;Per  starvation, o inedia, si intende un ritardo indefinito o un blocco  permanente di uno o più thread eseguibili in un&#39;applicazione  multithread. I thread la cui esecuzione non è pianificata, sebbene non  stiano bloccando o aspettando nulla, vengono detti in condizione di  starvation. La condizione di starvation è generalmente il risultato di  regole e criteri di pianificazione. Ad esempio, se si pianifica un  thread ad alta priorità, non bloccante e continuamente in esecuzione  insieme a un thread a bassa priorità, in una CPU a singolo core, il  thread a bassa priorità non avrà mai la possibilità di essere eseguito.  Per evitare tali condizioni, l&#39;utilità di pianificazione di Windows&lt;span class=&quot;sup&quot;&gt;®&lt;/span&gt; interviene frequentemente per ridurre la starvation, aumentando occasionalmente le priorità dei thread in starvation.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030021&quot;&gt;I  livelock, attese indefinite, si verificano quando i thread sono  pianificati ma non stanno facendo progressi perché stanno reagendo  continuamente al cambiamento di stato di ognuno di loro. Il modo  migliore per descrivere questa condizione è con questo esempio: due  persone che si avvicinano in un corridoio stretto e ognuna si fa da  parte per far passare l&#39;altra, bloccandosi reciprocamente la strada.  Questo farsi da parte impedisce l&#39;avanzamento e comporta un livelock. Un  elevato utilizzo di CPU senza alcun sintomo di un lavoro realmente in  corso è il classico segnale di un livelock. I livelock sono  difficilissimi da rilevare e diagnosticare.&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;ArticleTypeTitle&quot; id=&quot;id0030022&quot;&gt;Problemi di riordino della memoria&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030023&quot;&gt;Quando  il compilatore ottimizza il codice, può decidere di riordinare parti di  codice per migliorare le prestazioni. Tuttavia può generare un  comportamento imprevisto nei thread che tengono sotto controllo le  modifiche allo stato globale. Ad esempio, supponiamo di avere due thread  di esecuzione: il thread 1 e il thread 2. Supponiamo anche di avere due  variabili globali, x e y, inizializzate entrambe su 0. Il thread 1  esegue queste righe:&lt;/div&gt;&lt;span id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl03&quot; xmlns:msxsl=&quot;urn:schemas-microsoft-com:xslt&quot;&gt; &lt;div class=&quot;libCScode&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl03_&quot;&gt;          &lt;div class=&quot;CodeSnippetTitleBar&quot;&gt;         &lt;div class=&quot;CodeDisplayLanguage&quot;&gt;                      &lt;/div&gt;&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;background-color: #dddddd;&quot;&gt;     &lt;pre class=&quot;libCScode&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl03_code&quot; space=&quot;preserve&quot;&gt;x=10;
y=5;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;                                                   &lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030026&quot;&gt;Il thread 2 esegue queste righe:&lt;/div&gt;&lt;span id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl04&quot; xmlns:msxsl=&quot;urn:schemas-microsoft-com:xslt&quot;&gt; &lt;div class=&quot;libCScode&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl04_&quot;&gt;          &lt;div class=&quot;CodeSnippetTitleBar&quot;&gt;         &lt;div class=&quot;CodeDisplayLanguage&quot;&gt;                      &lt;/div&gt;&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;background-color: #dddddd;&quot;&gt;     &lt;pre class=&quot;libCScode&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl04_code&quot; space=&quot;preserve&quot;&gt;if (y == 5)
{
  Assert(x != 10);
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;                                                   &lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030031&quot;&gt;In  questo caso il compilatore di ottimizzazione potrebbe osservare che,  alla fine, a y verrà riassegnato comunque il valore 5 e potrebbe  riordinare il codice in modo che a y venga assegnato 5 prima che a x  venga assegnato 10; dal punto di vista del singolo thread che esegue  queste due assegnazioni, l&#39;ordinamento è ininfluente. Pertanto c&#39;è una  possibilità che l&#39;asserzione del thread 2 non valga più, dato che x  potrebbe non essere uguale a 10. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030032&quot;&gt;Se  necessario, è possibile evitare il riordino della memoria da parte del  compilatore usando variabili volatili ed elementi intrinseci del  compilatore. È importante accennare anche al fatto che, con comuni flag  di ottimizzazione attivati, il thread 2 potrebbe non vedere mai un  aggiornamento alle variabili y o x. In questo caso sarà necessario usare  variabili volatili.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030033&quot;&gt;Il  riordino da parte del compilatore non è l&#39;unica complicazione. Con le  ottimizzazioni dell&#39;accesso alla memoria, come il caching e il recupero  avanzato per mezzo di esecuzioni speculative, può succedere che le  operazioni di memoria eseguite da un thread in una CPU vengano percepite  come eseguite in un ordine diverso da un altro thread su un&#39;altra CPU.  Questo tipo di percezione di riordino della memoria può verificarsi solo  in un sistema con più CPU o CPU multicore. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030034&quot;&gt;Per  chiarire supponiamo di avere due thread di esecuzione: il thread 1 e il  thread 2. Quindi supponiamo che m e n siano variabili globali  inizializzate entrambe su 0 e che a, b, c, d siano variabili locali. Il  thread 1 (nel processore 1) ha queste istruzioni:&lt;/div&gt;&lt;span id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl05&quot; xmlns:msxsl=&quot;urn:schemas-microsoft-com:xslt&quot;&gt; &lt;div class=&quot;libCScode&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl05_&quot;&gt;          &lt;div class=&quot;CodeSnippetTitleBar&quot;&gt;         &lt;div class=&quot;CodeDisplayLanguage&quot;&gt;                      &lt;/div&gt;&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;background-color: #dddddd;&quot;&gt;     &lt;pre class=&quot;libCScode&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl05_code&quot; space=&quot;preserve&quot;&gt;m = 5;     // A1
int a = m; // A2
int b = n; // A3&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;                                                   &lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030038&quot;&gt;Il thread 2 (nel processore 2) ha queste istruzioni:&lt;/div&gt;&lt;span id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl06&quot; xmlns:msxsl=&quot;urn:schemas-microsoft-com:xslt&quot;&gt; &lt;div class=&quot;libCScode&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl06_&quot;&gt;          &lt;div class=&quot;CodeSnippetTitleBar&quot;&gt;         &lt;div class=&quot;CodeDisplayLanguage&quot;&gt;                      &lt;/div&gt;&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;background-color: #dddddd;&quot;&gt;     &lt;pre class=&quot;libCScode&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl06_code&quot; space=&quot;preserve&quot;&gt;n = 5;     //A4
int c = n; //A5
int d = m; //A6&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;                                                   &lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030042&quot;&gt;Per  logica, in un ambito di memoria coerente e sequenziale, dopo  l&#39;esecuzione di tutte queste istruzioni, non può mai verificarsi b == d  == 0. Tuttavia, con il riordino della memoria hardware, le scritture  nella memoria condivisa (A1 e A4) possono essere indirizzate al buffer  di archiviazione, di conseguenza diversi processori possono osservare le  scritture in modo diverso. &lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;ArticleTypeTitle&quot; id=&quot;id0030043&quot;&gt;Strategie di test &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030044&quot;&gt;Il  test di un&#39;applicazione concorrente implica le verifica della  correttezza, dell&#39;affidabilità, delle prestazioni e della scalabilità.  La correttezza dell&#39;applicazione viene determinata usando tecniche quali  l&#39;analisi statica, l&#39;analisi dinamica e il controllo del modello. Le  prestazioni e l&#39;affidabilità vengono controllate per mezzo dello studio  degli overhead introdotti dal parallelismo e il test di stress. La  scalabilità viene controllata analizzando le prestazioni  dell&#39;applicazione in sistemi di diversa grandezza.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030045&quot;&gt;Le  tecniche di analisi statica analizzano il codice senza eseguire  effettivamente il programma. Di solito, l&#39;analisi statica viene eseguita  esaminando i metadati di un&#39;applicazione compilata o il codice sorgente  con annotazioni. L&#39;analisi include in genere un&#39;ispezione formale per  garantire che l&#39;intento e i presupposti del programmatore impediscano un  comportamento errato. I due strumenti di analisi statica per le  applicazioni native più famosi sono Prefix e Prefast mentre FxCop è  molto usato per il codice gestito.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030046&quot;&gt;L&#39;analisi  statica presenta vantaggi e svantaggi. Tra i vantaggi vi sono la  copertura completa e dettagliata, la garanzia dell&#39;affidabilità del  progetto del codice e la precisione dei report sugli errori che  facilitano l&#39;individuazione e la correzione dei bug. Tuttavia, per  gestire i bug di concorrenza, l&#39;analisi statica richiede un grosso  impegno di annotazione. Inoltre, queste annotazioni devono essere  corrette da sole. Gli strumenti che usano l&#39;analisi statica tendono  anche a generare molti falsi positivi e quindi richiedono un notevole  impegno per ridurli al minimo. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030047&quot;&gt;Nell&#39;analisi  dinamica i bug vengono rilevati dall&#39;esame dei footprint di esecuzione.  Esistono due tipi di analisi dinamica: online e offline. Gli strumenti  che usano l&#39;analisi dinamica online analizzano un programma mentre è in  esecuzione; gli strumenti che usano l&#39;analisi dinamica offline  registrano le tracce e le analizzano in un secondo momento per rilevare i  bug. L&#39;analisi dinamica è uno strumento utile in quanto richiede un  lavoro minimo, se non nessuno, allo sviluppatore al momento della  programmazione, genera un numero minore di falsi positivi e facilita la  soluzione dei problemi più ovvi. Poiché i bug vengono rilevati solo nel  percorso di esecuzione, i percorsi attraversati più spesso generano la  prima serie di bug. In questo modo è più facile migliorare  l&#39;affidabilità.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030048&quot;&gt;Ma  ci sono anche degli svantaggi. I bug possono essere rilevati solo nel  percorso di esecuzione ed è necessario affidarsi ai test case per avere  una buona copertura del codice. Infatti alcuni strumenti possono  cogliere una competizione solo se questa si verifica in  quell&#39;esecuzione. Pertanto, se lo strumento non riporta nessun bug, non  si può essere certi che non ve ne siano. Molti strumenti di analisi  dinamica si fondano su una sorta di strumentazione che può modificare il  comportamento del runtime, il che è un altro svantaggio. A causa della  complessità, le prestazioni di questi strumenti tendono a essere molto  scarse.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030049&quot;&gt;L&#39;ultimo  metodo è il controllo del modello: il metodo per verificare la  correttezza di un sistema concorrente con stato finito. Consente un  ragionamento deduttivo formale. Uno strumento di controllo del modello  cerca di simulare condizioni di competizione e deadlock. Utilizzando il  controllo del modello, è possibile dimostrare formalmente l&#39;assenza di  competizioni e deadlock. Questo metodo garantisce una maggiore  affidabilità del progetto e dell&#39;architettura e richiede un numero  minimo di driver esterni.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030050&quot;&gt;Come  altri metodi di test, il controllo del modello presenta alcuni  svantaggi. Spesso è molto difficile estrarre automaticamente il modello  dal codice (esistono rari casi con uso limitato). Anche l&#39;esecuzione  manuale dell&#39;estrazione del modello è piuttosto noiosa. Inoltre richiede  una verifica estesa a causa del problema conosciuto come &quot;state space  explosion&quot;, una condizione in cui il numero potenziale di stati  possibili è troppo grande da analizzare. Questa condizione può essere  controllata in una certa misura applicando tecniche di riduzione che  usano una complicata euristica. Anche l&#39;euristica presenta dei limiti,  come il non saper rilevare i bug in applicazioni a esecuzione  prolungata.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030051&quot;&gt;Infine  il controllo del modello richiede una rigorosa pianificazione del  progetto e dell&#39;implementazione. Il controllo del modello può dimostrare  che il progetto è privo di errori ma non l&#39;implementazione. In pratica,  il controllo del modello è utile per piccole e importanti sezioni di un  prodotto. Altre tecniche ibride includono la combinazione di analisi  dinamica e controllo del modello. Un esempio è dato da CHESS che verrà  descritto in breve.&lt;/div&gt;&lt;div class=&quot;SidebarContainer&quot; id=&quot;id008&quot;&gt;                                                             &lt;div class=&quot;SidebarHeadline&quot;&gt;Algoritmi di rilevamento delle competizioni&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0080000&quot;&gt;L&#39;algoritmo  &quot;lockset&quot;, usato in entrambi gli strumenti di analisi statica e  dinamica, segnala una competizione potenziale quando due o più thread  accedono alla memoria condivisa senza gestire un blocco comune.  L&#39;algoritmo indica in sostanza che, per ogni variabile v della memoria  condivisa, ogni thread gestirà una serie non vuota di blocchi C(v)  durante l&#39;accesso alla variabile. Inizialmente C(v) è l&#39;elenco di tutti i  blocchi. Ogni thread gestisce anche due serie di blocchi: locks(t)  indica tutti i blocchi gestiti e writeLocks(t) indica tutti i blocchi in  scrittura gestiti. Ecco come procede l&#39;algoritmo:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Per  ogni variabile v della memoria condivisa gestisce una serie C(v) di  blocchi. Inizialmente C(v) è l&#39;elenco di tutti i blocchi.&lt;/li&gt;
&lt;li&gt;Ogni  thread gestisce anche due serie di blocchi: locks(t) indica tutti i  blocchi gestiti e writeLocks(t) indica tutti i blocchi in scrittura  gestiti.&lt;/li&gt;
&lt;li&gt;In ogni lettura di v da parte del thread t: &lt;ol&gt;&lt;li&gt;Set C(v) = C(v) intersection locks(t).&lt;/li&gt;
&lt;li&gt;If C(v) == NULL set, then raise an error.&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;In ogni scrittura di v da parte del thread t: &lt;ol&gt;&lt;li&gt;Set C(v) = C(v) intersection writeLocks(t).&lt;/li&gt;
&lt;li&gt;If C(v) ==NULL set, then raise an error.&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0080009&quot;&gt;Sostanzialmente,  man mano che l&#39;applicazione procede, la serie C(v) di ogni variabile  inizia a restringersi. Viene generato un errore se C(v) diventa nullo  (ad esempio, se le intersezioni dei lockset dei thread sono nulle al  momento di accedere alla memoria condivisa).&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0080010&quot;&gt;Purtroppo  non tutte le competizioni segnalate da un algoritmo &quot;lockset&quot; sono  competizioni reali. È possibile scrivere codice libero da competizioni  senza usare blocchi applicando trucchi intelligenti di programmazione o  usando primitivi di sincronizzazione come la segnalazione. Ciò complica  notevolmente l&#39;individuazione dei veri bug. Le annotazioni e determinate  soppressioni possono aiutare ad alleviare questo problema.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0080011&quot;&gt;Un  altro algoritmo per rilevare le competizioni è &quot;happens-before&quot; che si  basa sull&#39;ordinamento parziale degli eventi in sistemi distribuiti. Ecco  una panoramica dell&#39;algoritmo che calcola l&#39;ordine parziale per  stabilire quali eventi sono successi prima di un altro evento (in questo  contesto, per eventi si intendono tutte le istruzioni, comprese quelle  di lettura, scrittura e blocchi):&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0080012&quot;&gt;                                                                       &lt;ul&gt;&lt;li&gt;All&#39;interno di ogni singolo thread, gli eventi vengono ordinati in base al loro verificarsi. &lt;/li&gt;
&lt;li&gt;Tra  i thread, gli eventi vengono ordinati in base alle proprietà dei  primitivi di sincronizzazione. Ad esempio, se lock(a) viene acquisito da  due thread, allora si è verificato uno sblocco da parte di un thread  prima del blocco di un altro thread. &lt;/li&gt;
&lt;li&gt;Se  due o più thread accedono a una variabile condivisa e gli accessi non  sono ordinati in modo deterministico dalla relazione &quot;happens-before&quot;,  allora si è verificata una competizione. &lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0080015&quot;&gt;L&#39;algoritmo è illustrato nella Figura A.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0080016&quot;&gt;Lo  sblocco del thread 1 si è verificato prima del blocco del thread 2.  Pertanto, l&#39;accesso alla variabile condivisa non può mai verificarsi  allo stesso tempo e non esiste competizione. Uno dei principali  svantaggi dell&#39;algoritmo deriva dal fatto che il monitoraggio di tali  relazioni può essere molto dispendioso.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0080017&quot;&gt;Il  problema più grande è che la capacità di questo algoritmo di rilevare  le competizioni dipende completamente dall&#39;ordine di pianificazione.  L&#39;ordine parziale viene creato solo per questa specifica istanza della  pianificazione e può non cogliere i bug per lo stesso test in un altro  giorno. La &lt;strong&gt;Figura B&lt;/strong&gt; non riporta nessuna competizione mentre un ordine di esecuzione nella &lt;strong&gt;Figura C&lt;/strong&gt;  riporta le competizioni. È stato appurato che molte competizioni si  sono verificate solo diversi anni dopo il rilascio di un prodotto.  Pertanto questo rilevamento non garantisce di avere un&#39;assoluta  copertura.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0080018&quot;&gt;D&#39;altro  canto, l&#39;algoritmo &quot;happens-before&quot; genera solo pochi falsi positivi.  La maggior parte dei bug sono reali. Tuttavia &quot;happens-before&quot; induce a  molti falsi negativi, non rilevando diversi errori, ed è molto difficile  da implementare in modo efficiente. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0080019&quot;&gt;L&#39;algoritmo  &quot;lockset&quot;, invece, è molto efficiente e può rilevare più errori,  sebbene tenda a generare troppi falsi positivi. Si sono fatti molti  sforzi per unificare questi algoritmi e superare gli svantaggi di  entrambi gli approcci. Nota: questi algoritmi di rilevamento delle  competizioni si sono evoluti nel corso di diversi anni; informazioni su  di essi sono reperibili nei portali ACM /IEEE.&lt;/div&gt;&lt;div class=&quot;ArticleImageSpacer&quot;&gt;                                                                       &lt;img alt=&quot;&quot; onclick=&quot;var large=&#39;http://i.msdn.microsoft.com/cc546569.fig01_L(it-it).gif&#39;; var small=&#39;http://i.msdn.microsoft.com/cc546569.fig01(it-it).gif&#39;; var current= this.src; if (current == small) this.src = large; else this.src = small;&quot; onmouseover=&quot;this.style.cursor=&#39;pointer&#39;;&quot; src=&quot;http://i.msdn.microsoft.com/cc546569.fig01%28it-it%29.gif&quot; style=&quot;cursor: pointer;&quot; /&gt;                                                                       &lt;div class=&quot;ArticleImageCaptionText&quot;&gt;Figura A &lt;strong&gt;Algoritmo Happens-Before &lt;/strong&gt;(Fare clic sull&#39;immagine per ingrandire la vista)&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ArticleImageSpacer&quot;&gt;                                                                       &lt;img alt=&quot;&quot; onclick=&quot;var large=&#39;http://i.msdn.microsoft.com/cc546569.fig02_L(it-it).gif&#39;; var small=&#39;http://i.msdn.microsoft.com/cc546569.fig02(it-it).gif&#39;; var current= this.src; if (current == small) this.src = large; else this.src = small;&quot; onmouseover=&quot;this.style.cursor=&#39;pointer&#39;;&quot; src=&quot;http://i.msdn.microsoft.com/cc546569.fig02%28it-it%29.gif&quot; style=&quot;cursor: pointer;&quot; /&gt;                                                                       &lt;div class=&quot;ArticleImageCaptionText&quot;&gt;Figura B &lt;strong&gt;Non verranno rilevate competizioni &lt;/strong&gt;(Fare clic sull&#39;immagine per ingrandire la vista)&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ArticleImageSpacer&quot;&gt;                                                                       &lt;img alt=&quot;&quot; onclick=&quot;var large=&#39;http://i.msdn.microsoft.com/cc546569.fig03_L(it-it).gif&#39;; var small=&#39;http://i.msdn.microsoft.com/cc546569.fig03(it-it).gif&#39;; var current= this.src; if (current == small) this.src = large; else this.src = small;&quot; onmouseover=&quot;this.style.cursor=&#39;pointer&#39;;&quot; src=&quot;http://i.msdn.microsoft.com/cc546569.fig03%28it-it%29.gif&quot; style=&quot;cursor: pointer;&quot; /&gt;                                                                       &lt;div class=&quot;ArticleImageCaptionText&quot;&gt;Figura C &lt;strong&gt;Verranno rilevate competizioni &lt;/strong&gt;(Fare clic sull&#39;immagine per ingrandire la vista)&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;ArticleTypeTitle&quot; id=&quot;id0030052&quot;&gt;Strumenti di test della concorrenza&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030053&quot;&gt;In  commercio sono disponibili diversi strumenti di test della concorrenza,  utili per gestire potenziali deadlock, livelock, blocchi e tutti gli  altri problemi che possono presentarsi durante l&#39;esecuzione di  transazioni parallele. Ogni strumento che esamineremo è utile in una  particolare area.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030054&quot;&gt;                                                             &lt;span class=&quot;ArticleInlineTitle&quot;&gt;CHESS.&lt;/span&gt; Creato da Microsoft Research, CHESS è un&#39;originale combinazione di controllo del modello e di analisi dinamica (vedere &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkId=116523&quot;&gt;go.microsoft.com/fwlink/?LinkId=116523&lt;/a&gt;,  in inglese). Rileva gli errori di concorrenza esplorando  sistematicamente le pianificazioni dei thread e l&#39;interfoliazione. È in  grado di trovare condizioni di competizione, deadlock, blocchi, livelock  e problemi di danneggiamento dei dati. Per aiutare il debugging,  fornisce anche un&#39;esecuzione completamente ripetibile. Come molti  controlli del modello, l&#39;esplorazione sistematica fornisce una copertura  totale.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030055&quot;&gt;In  quanto strumento di analisi dinamica, CHESS esegue ripetutamente un  normale unit test a determinati intervalli, in base a una speciale  pianificazione. A ogni ripetizione, sceglie un ordine di pianificazione  diverso. In quanto strumento di controllo del modello, controlla la  speciale utilità di pianificazione che è in grado di creare specifiche  interfoliazioni di thread. Per controllare il problema &quot;state space  explosion&quot;, CHESS applica la riduzione dell&#39;ordine parziale e  un&#39;originale limitazione del contesto di iterazione. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030056&quot;&gt;Nella  limitazione del contesto di iterazione, invece di limitare lo &quot;state  space explosion&quot; in base alla profondità, CHESS limita il numero di  passaggi di thread in una determinata esecuzione. Il thread può eseguire  qualsiasi numero di fasi tra un passaggio e l&#39;altro, lasciando la  profondità di esecuzione illimitata (un grande successo sul tradizionale  controllo del modello). Ciò si basa sulla prova empirica che un numero  limitato di passaggi di thread sistematici è sufficiente a mostrare la  maggior parte dei bug di concorrenza.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030057&quot;&gt;CHESS può rilevare deadlock e competizioni, usando l&#39;algoritmo &quot;Goldilocks lockset&quot; spiegato in &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkId=116877&quot;&gt;go.microsoft.com/fwlink/?LinkId=116877&lt;/a&gt;  (in inglese) ma si basa sulle asserzioni del programmatore per la  verifica di altri stati. Inoltre prevede la chiusura di tutti i  programmi e garantisce l&#39;equità di progresso per tutti i thread.  Pertanto, se il programma entra in uno stato di loop continuo, CHESS  segnala un livelock.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030058&quot;&gt;Dal  punto di vista del test, è preferibile iniziare eseguendo CHESS con un  limite del contesto di iterazione di 2. Una volta che non ci sono più  bug da trovare, aumentare il limite a 3 e così via. È stato dimostrato  in modo empirico che la maggior parte dei bug viene rilevata con un  limite di 2 e 3. Pertanto si tratta di un modo molto efficiente per  eliminare subito i bug. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030059&quot;&gt;Per quanto riguarda la strumentazione, CHESS devia le chiamate di sincronizzazione dell&#39;API Win32&lt;span class=&quot;sup&quot;&gt;®&lt;/span&gt;  da controllare e introduce intenzionalmente il non determinismo.  Inoltre richiede che il codice dello sviluppatore includa molte  asserzioni per garantire la coerenza degli stati (ciò che ogni buon  codice dovrebbe fare comunque). Tuttavia, come la maggior parte degli  strumenti di analisi dinamica, richiede una valida suite di test per  garantire un&#39;ampia copertura. CHESS costituisce un vantaggio per tutti  quegli sviluppatori e collaudatori che devono affidarsi esclusivamente  allo stress per eseguire un test interfoliato migliore. Esegue normali  unit test e simula metodicamente interessanti interfoliazioni. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030060&quot;&gt;                                                             &lt;span class=&quot;ArticleInlineTitle&quot;&gt;Intel Thread Checker.&lt;/span&gt;  È uno strumento di analisi dinamica per trovare i deadlock (compresi  quelli potenziali), gli stalli, le competizioni di dati e gli usi  impropri delle API di sincronizzazione native Windows (vedere &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkId=115727&quot;&gt;go.microsoft.com/fwlink/?LinkId=115727&lt;/a&gt;,  in inglese). Thread Checker deve dotare sia il codice sorgente sia il  codice binario compilato degli strumenti necessari a rendere osservabili  ogni riferimento alla memoria e ogni primitivo di sincronizzazione  Win32 standard. In fase di runtime, il codice binario così attrezzato  fornisce informazioni sufficienti affinché l&#39;utilità di analisi  costruisca un ordine parziale di esecuzione. Lo strumento quindi esegue  un&#39;analisi &quot;happens-before&quot; dell&#39;ordine parziale. Fare riferimento  all&#39;intestazione laterale &quot;Algoritmi di rilevamento delle competizioni&quot;  per ulteriori informazioni sull&#39;analisi &quot;happens-before&quot;.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030061&quot;&gt;Per  motivi di prestazioni e scalabilità, invece di ricordare tutti gli  accessi a una variabile condivisa, lo strumento ricorda solo gli accessi  recenti. Ciò aiuta a migliorare l&#39;efficienza dello strumento durante  l&#39;analisi di applicazioni a esecuzione prolungata, tuttavia lo strumento  non rileverà alcuni bug,  un classico compromesso: forse è più  importante trovare molti bug in applicazioni a esecuzione prolungata che  trovare tutti i bug in un&#39;applicazione di durata molto breve. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030062&quot;&gt;L&#39;altro  grande svantaggio dello strumento è che non può rendere conto della  sincronizzazione tramite operazioni interlock, come quelle usate in  blocchi rotanti personalizzati. Tuttavia, per le applicazioni che usano  solo primitivi di sincronizzazione standard, si tratta di uno degli  strumenti di test meglio supportati a disposizione per le applicazioni  native di test della concorrenza. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030063&quot;&gt;RacerX.  Questo strumento di analisi statica sensibile al flusso è usato per  rilevare competizioni e deadlock. Non richiede noiose annotazioni  nell&#39;intero codice sorgente. Infatti, l&#39;unico requisito di annotazione è  quello per cui gli utenti devono fornire una tabella che specifica le  API usate per acquisire e rilasciare i blocchi. È possibile specificare  anche gli attributi dei primitivi di blocco, come spinning, blocking e  re-entrancy. Questa tabella in genere sarà molto piccola (30 voci al  massimo). In questo modo si riduce enormemente l&#39;onere dell&#39;annotazione  del codice sorgente per grandi sistemi.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030064&quot;&gt;Nella  prima fase, RacerX esegue l&#39;iterazione in ogni file del codice sorgente  e crea un CFG (Control Flow Graph). Il CFG contiene informazioni  relative alle chiamate alle funzioni, alla memoria condivisa, all&#39;uso di  puntatori e ad altri dati. Mentre crea il CFG, fa anche riferimento  alla tabella dei primitivi di sincronizzazione ed effettua chiamate a  queste API.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030065&quot;&gt;Una  volta creato il CFG, subentra la fase di analisi che include  l&#39;esecuzione dello strumento di controllo delle competizioni e dei  deadlock. Attraversare il CFG può essere un&#39;operazione lunga ma è  possibile usare tecniche appropriate di riduzione e caching per ridurre  al minimo l&#39;impatto. Man mano che si attraversa il flusso del contesto,  viene usato l&#39;algoritmo &quot;lockset&quot; per rilevare competizioni potenziali  (fare riferimento all&#39;intestazione laterale &quot;Algoritmi di rilevamento  delle competizioni&quot; per dettagli sull&#39;algoritmo). Per quanto riguarda  l&#39;analisi dei deadlock, lo strumento calcola i cicli di blocco ogni  volta che viene preso un blocco. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030066&quot;&gt;La  fase finale riguarda la postelaborazione di tutti gli errori segnalati  per stabilire la priorità di importanza e la pericolosità dell&#39;errore.  Come per l&#39;analisi statica, gli autori hanno dedicato molto tempo al  tentativo di ridurre i falsi positivi e presentare i bug con una  notevole sicurezza. I risultati di questo strumento sono stati  impressionanti; sembra molto pratico dal punto di vista dell&#39;ingegneria  di test. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030067&quot;&gt;                                                             &lt;span class=&quot;ArticleInlineTitle&quot;&gt;Chord&lt;/span&gt;.  È uno strumento di analisi statica per Java, sensibile al contesto e  insensibile al flusso. Essendo insensibile al flusso, è molto più  scalabile di altri strumenti statici ma a scapito della precisione.  Prende anche in considerazione i primitivi di sincronizzazione  disponibili in Java. L&#39;algoritmo usato è molto complesso e richiederebbe  l&#39;introduzione di molti concetti. Per ulteriori informazioni su Chord,  vedere &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkId=116526&quot;&gt;go.microsoft.com/fwlink/?LinkId=116526&lt;/a&gt; (in inglese).&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030068&quot;&gt;                                                             &lt;span class=&quot;ArticleInlineTitle&quot;&gt;KISS&lt;/span&gt;.  Sviluppato da Microsoft Research, questo strumento di controllo del  modello è valido per i programmi C concorrenti. Poiché in un sistema  concorrente si verifica subito un problema &quot;state space explosion&quot;, KISS  trasforma un programma C concorrente in un programma sequenziale che  simula l&#39;esecuzione dell&#39;interfoliazione. Per eseguire l&#39;analisi, viene  quindi usato uno strumento di controllo del modello sequenziale.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030069&quot;&gt;L&#39;applicazione  viene dotata di istruzioni che convertono il programma concorrente in  un programma sequenziale e KISS si occupa di controllare il non  determinismo. Il passaggio al contesto di non determinismo è limitato da  principi simili a quelli descritti sopra per CHESS. Si presuppone che  il programmatore introduca asserzioni che convalidano i presupposti di  concorrenza. Lo strumento non riporta falsi positivi. Lo strumento è un  prototipo di ricerca ed è stato usato dal team dei driver di Windows,  che usa principalmente il codice C (vedere &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkId=115723&quot;&gt;go.microsoft.com/fwlink/?LinkId=115723&lt;/a&gt;, in inglese).&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030070&quot;&gt;                                                             &lt;span class=&quot;ArticleInlineTitle&quot;&gt;Zing&lt;/span&gt;.  Questo strumento è un puro strumento di controllo del modello, pensato  per la verifica del progetto di programmi concorrenti. Zing ha un  proprio linguaggio personalizzato che è usato per descrivere transizione  e stati complessi ed è perfettamente in grado di modellare macchine a  stati. Come gli altri strumenti di controllo del modello, Zing fornisce  un metodo completo per verificare i progetti; aiuta a garantire la  qualità del progetto in quanto è possibile verificare i presupposti e  dimostrare formalmente la presenza o l&#39;assenza di determinate  condizioni. Affronta anche il problema &quot;state space explosion&quot; con  innovative tecniche di riduzione.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030071&quot;&gt;Il  modello usato da Zing (per controllare la correttezza del programma)  deve essere creato manualmente o da convertitori. Mentre è possibile  scrivere alcuni convertitori specifici, dobbiamo ancora trovare  convertitori completi e funzionanti per le applicazioni native o CLR.  Senza convertitori, crediamo che Zing non possa essere usato in grandi  progetti software tranne che per la verifica della correttezza di  sottosezioni critiche del progetto (vedere &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkId=115725&quot;&gt;go.microsoft.com/fwlink/?LinkId=115725&lt;/a&gt;, in inglese).&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;ArticleTypeTitle&quot; id=&quot;id0030072&quot;&gt;Test delle prestazioni &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030073&quot;&gt;Il  test delle prestazioni è parte integrante ed essenziale del processo di  test della concorrenza. In fondo, uno dei motivi principali per  sviluppare applicazioni parallele è offrire prestazioni migliori di  quelle delle applicazioni sequenziali. Come postulato nella legge di  Amdahl e nella legge di Gustafson, il miglioramento delle prestazioni  ottenuto per mezzo di un&#39;applicazione parallela è in gran parte  influenzato dalla capacità di parallelizzazione dell&#39;algoritmo, dalla  quantità di parti sequenziali nel programma, dall&#39;overhead di  parallelizzazione e dalle caratteristiche di dati/carico di lavoro.  L&#39;esecuzione di test delle prestazioni consente ai soggetti interessati  di capire e analizzare le caratteristiche delle prestazioni delle  applicazioni parallele.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030074&quot;&gt;La  metodologia generale per eseguire test delle prestazioni delle  applicazioni parallele resta la stessa del test delle prestazioni delle  applicazioni sequenziali. La sezione seguente descrive come alcune fasi  essenziali del test delle prestazioni debbano essere adattate alle  applicazioni concorrenti. Per una comprensione dei fattori di  misurazione più utili, vedere l&#39;intestazione laterale &quot;Identificazione  dei dati di test e reporting delle metriche&quot;.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030075&quot;&gt;La  fase più importante del test delle prestazioni consiste nel definire  gli obiettivi o lo scopo del test. Per le applicazioni parallele, tra  gli obiettivi validi del test vi sono la comprensione della capacità di  parallelizzazione/scalabilità dell&#39;algoritmo usato, la comprensione  delle caratteristiche delle prestazioni di varie alternative di  progettazione, la scoperta degli overhead di comunicazione e  sincronizzazione e la convalida che i requisiti delle prestazioni sono  stati soddisfatti. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030076&quot;&gt;È  opportuno notare che gli obiettivi e lo scopo del test delle  prestazioni possono variare anche in base a chi conduce il test. Ad  esempio, i clienti che implementano un&#39;applicazione parallela potrebbero  eseguire test delle prestazioni per assicurarsi che siano soddisfatte  le esigenze dell&#39;azienda, mentre il team di sviluppo potrebbe essere  interessato a eseguire un test completo delle prestazioni per  identificare i colli di bottiglia e migliorare la capacità di  parallelizzazione del programma. Inoltre, gli obiettivi del test possono  variare nel ciclo di sviluppo del software. Durante la fase di  progettazione e implementazione, l&#39;obiettivo del test potrebbe essere  comprendere e migliorare le caratteristiche delle prestazioni  dell&#39;applicazione, mentre durante le fasi di test e rilascio (fasi di  stabilizzazione) l&#39;obiettivo potrebbe essere assicurarsi che le  prestazioni non peggiorino durante i build.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030077&quot;&gt;La  definizione degli scenari del test e la definizione degli obiettivi  sono un&#39;altra fase importante nel processo di test delle prestazioni. I  team di sviluppo interessati alla comprensione delle caratteristiche  delle prestazioni di un&#39;applicazione parallela dovrebbero definire tre  tipi di scenari di test: test in scenari dei clienti, test  dell&#39;indicatore KPI (Key Performance Indicator) e test dei MBM (Micro  BenchMark). &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030078&quot;&gt;La  relazione tra questi tipi diversi di test delle prestazioni può essere  considerata equivalente a quella che esiste tra i test di sistema, i  test di integrazione e gli unit test. In altre parole, i test di uno  scenario dei clienti generano una serie di test KPI e un test KPI genera  una serie di test MBM. La comprensione della relazione tra questi tipi  diversi di test consente agli sviluppatori di comprendere le relazioni  delle prestazioni tra le varie sottoparti di un&#39;applicazione parallela.  Acquisire questa comprensione permette anche di definire una migliore  priorità dei bug delle prestazioni e, ancora più importante, consente al  team di sviluppo di rispondere alle lamentele dei clienti sulle  prestazioni con suggerimenti orientati ai risultati.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030079&quot;&gt;L&#39;impostazione  di obiettivi di prestazioni per qualsiasi applicazione non banale è  un&#39;operazione difficile, figuriamoci per le applicazioni parallele. Un  approccio consiste nel ricavare l&#39;obiettivo da metriche di  triangolazione ottenute da una determinata metrica delle prestazioni a  livello teoretico o di algoritmo per ogni componente e sottocomponente  dell&#39;applicazione, dall&#39;analisi comparativa (tra i candidati al  confronto ci sono applicazioni simili rivali) e dalla definizione del  profilo dell&#39;implementazione/applicazione eventualmente esistente.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030080&quot;&gt;Ogni  scenario di test dovrebbe definire una serie di criteri di accettazione  (una serie di valori che convalidano i risultati del test). Nel caso di  scenari di test paralleli, è possibile usare le variabili seguenti come  criteri di accettazione.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030081&quot;&gt;                                                             &lt;span class=&quot;ArticleInlineTitle&quot;&gt;Varianza nei risultati del test&lt;/span&gt;.  Indica un&#39;applicazione instabile. La varianza nei risultati del test  può essere compresa calcolando la deviazione standard dei risultati. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030082&quot;&gt;                                                             &lt;span class=&quot;ArticleInlineTitle&quot;&gt;Utilizzo della CPU&lt;/span&gt;.  Un basso utilizzo della CPU potrebbe indicare bug di concorrenza, come  deadlock e overhead di sincronizzazione. Al contrario, un elevato  utilizzo della CPU non è necessariamente un indicatore positivo in  quanto i livelock si verificano proprio con un elevato utilizzo della  CPU.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030083&quot;&gt;                                                             &lt;span class=&quot;ArticleInlineTitle&quot;&gt;Garbage Collection&lt;/span&gt;.  Per le applicazioni gestite, troppe operazioni di gestione della  memoria possono ostacolare l&#39;esecuzione effettiva del lavoro e  potrebbero indicare errori di progettazione o implementazione.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030084&quot;&gt;                                                             &lt;span class=&quot;ArticleInlineTitle&quot;&gt;Tempo totale di esecuzione del thread&lt;/span&gt;.  Consente di calcolare all&#39;incirca il tempo totale di esecuzione se il  programma doveva essere eseguito sequenzialmente. Confrontando il tempo  totale di esecuzione del thread con il tempo trascorso  dell&#39;implementazione sequenziale dello stesso programma algoritmo, è  possibile comprendere gli overhead di parallelizzazione (e vedere se il  test è valido).&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030085&quot;&gt;                                                             &lt;span class=&quot;ArticleInlineTitle&quot;&gt;Utilizzo totale della memoria&lt;/span&gt;.  La misura dell&#39;utilizzo totale della memoria è preziosa per capire il  profilo della memoria dell&#39;applicazione. Per le applicazioni gestite, il  garbage collector ricopre un ruolo significativo nel modificare  l&#39;utilizzo totale della memoria dell&#39;applicazione e dovrebbe essere  preso in considerazione durante la valutazione dell&#39;utilizzo della  memoria. &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030086&quot;&gt;Prima  di iniziare il test delle prestazioni, ci sono tre fasi importanti da  seguire per garantire risultati più pertinenti. Innanzitutto, ridurre al  minimo la varianza nell&#39;ambiente di test (la varianza può essere  introdotta sia dall&#39;applicazione che dall&#39;ambiente di test). È possibile  ridurre le varianze nell&#39;ambiente di test interrompendo i servizi e le  applicazioni non necessarie e riducendo le interferenze di rete. La  varianza causata dall&#39;applicazione può essere ridotta eseguendo  iterazioni warm-up e raccogliendo misure da più iterazioni del test.&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030087&quot;&gt;In  secondo luogo, per le applicazioni gestite, l&#39;esecuzione inopportuna  del garbage collector può invalidare i risultati del test. Di  conseguenza, è opportuno ridurre al minimo le possibilità che il garbage  collector venga richiamato durante le misurazioni delle prestazioni  forzandone il richiamo prima o dopo la raccolta della misura e/o  cambiando GCLatencyMode in LowLatency (ciò è vero solo in Microsoft&lt;span class=&quot;sup&quot;&gt;®&lt;/span&gt; .NET Framework 3.5).&lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0030088&quot;&gt;In  terzo luogo, eseguire il warm-up prima della raccolta delle metriche.  Il warm-up, ottenuto eseguendo il test una volta prima della raccolta  della misurazione, riduce il costo di operazioni come l&#39;inizializzazione  delle variabili, il costo JITing (nelle applicazioni gestite) ed evita  la latenza per la cache iniziale. Notare che, a seconda degli scenari  delle prestazioni, potrebbe essere importante misurare anche l&#39;avvio a  freddo delle prestazioni (per ulteriori informazioni sul miglioramento  delle prestazioni all&#39;avvio di un&#39;applicazione, vedere &lt;a href=&quot;http://msdn2.microsoft.com/magazine/cc337892.aspx&quot;&gt;msdn2.microsoft.com/magazine/cc337892.aspx&lt;/a&gt;).&lt;/div&gt;&lt;div class=&quot;SidebarHeadline&quot;&gt;Letture consigliate sul test della concorrenza (in inglese)&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;ArticleTypeTitle&quot; id=&quot;id0130000&quot;&gt;Using Synchronization &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0130001&quot;&gt;                                                                       &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkId=115730&quot;&gt;go.microsoft.com/fwlink/?LinkId=115730&lt;/a&gt;                                                             &lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;ArticleTypeTitle&quot; id=&quot;id0130002&quot;&gt;Bugslayer: Wait Chain Traversal &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0130003&quot;&gt;                                                                       &lt;a href=&quot;http://msdn2.microsoft.com/magazine/cc163395&quot;&gt;msdn2.microsoft.com/magazine/cc163395&lt;/a&gt;                                                             &lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;ArticleTypeTitle&quot; id=&quot;id0130004&quot;&gt;No More Hangs: Advanced Techniques to Avoid and Detect Deadlocks in .NET Apps &lt;/div&gt;&lt;div class=&quot;ArticleNormalPara&quot; id=&quot;id0130005&quot;&gt;                                                                       &lt;a href=&quot;http://msdn2.microsoft.com/magazine/cc163618&quot;&gt;msdn2.microsoft.com/magazine/cc163618&lt;/a&gt;                                                             &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/6843575875621605480/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/02/problemi-di-concorrenza.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/6843575875621605480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/6843575875621605480'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/02/problemi-di-concorrenza.html' title='problemi di concorrenza'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-6960013098252128857</id><published>2011-02-11T10:36:00.001-08:00</published><updated>2011-03-02T00:25:20.984-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="varie"/><title type='text'>sviluppo di un business online</title><content type='html'>&lt;div class=&quot;archive-meta&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-origin: padding; -moz-background-size: auto auto; background-attachment: scroll; background-image: none; background-position: 0% 0%; background-repeat: repeat; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Articoli su sviluppo di un business online.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-origin: padding; -moz-background-size: auto auto; background-attachment: scroll; background-image: none; background-position: 0% 0%; background-repeat: repeat; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Ecco alcuni suggerimenti per iniziare:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/leadership-blindness-on-social-media-example&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Leadership cecità&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/soft-launch-of-a-new-local-website-from-seo-perspective&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Come lanciare un sito web&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/how-not-to-turn-3000-to-5000-in-two-weeks&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Come non trasformare $ 3000 in 5.000 dollari&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/improve-search-engine-placement-with-tags&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Gestione del tempo consulenza&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;navigation&quot; id=&quot;nav-above&quot;&gt;&lt;div class=&quot;nav-next&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/topic/business/page/2&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;I post più vecchi &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;meta-nav&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;»&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;hentry p1 post publish author-vladimir category-business comments-open pings-closed y2010 m12 d08 h14 slug-bookmarklet-goodies-gmail-and-respelt&quot; id=&quot;post-1458&quot;&gt;&lt;h2 class=&quot;entry-title&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/bookmarklet-goodies-gmail-and-respelt&quot; rel=&quot;bookmark&quot; title=&quot;Permalink to Bookmarklet goodies: Gmail and Respelt&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-origin: padding; -moz-background-size: auto auto; background-attachment: scroll; background-image: none; background-position: 0% 0%; background-repeat: repeat; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Bookmarklet chicche: Gmail e Respelt&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class=&quot;entry-meta&quot;&gt;&lt;span class=&quot;entry-date&quot;&gt;&lt;abbr class=&quot;published&quot; title=&quot;2010-12-08T12:31:40+0000&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;8 Dicembre 2010&lt;/span&gt;&lt;/span&gt;&lt;/abbr&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;entry-content&quot;&gt;&lt;div style=&quot;float: right; padding-left: 10px;&quot;&gt;&lt;img alt=&quot;Bookmarklet goodies: Gmail and Respelt&quot; src=&quot;http://farm1.static.flickr.com/30/99553029_a61858947a_m.jpg&quot; style=&quot;width: 150px;&quot; /&gt;&lt;/div&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Ho iniziato a usare le relativamente recenti, e ha scoperto che sono bookmarklets ottimo modo per aumentare la produttività.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Per  utilizzare il bookmarklet basta trascinare i link bookmarklet (come  quelli di seguito) per la vostra barra dei segnalibri del browser.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;cat-links&quot;&gt;&lt;/span&gt; &lt;span class=&quot;comments-link&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/bookmarklet-goodies-gmail-and-respelt#comments&quot; title=&quot;Comment on Bookmarklet goodies: Gmail and Respelt&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Lascia un commento&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;hentry p2 post publish author-vladimir category-business comments-open pings-closed y2010 m11 d22 h15 alt slug-leadership-blindness-on-social-media-example&quot; id=&quot;post-1443&quot;&gt;&lt;h2 class=&quot;entry-title&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/leadership-blindness-on-social-media-example&quot; rel=&quot;bookmark&quot; title=&quot;Permalink to Leadership blindness on social media example&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Leadership sulla cecità sociale esempio media&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class=&quot;entry-meta&quot;&gt;&lt;span class=&quot;entry-date&quot;&gt;&lt;abbr class=&quot;published&quot; title=&quot;2010-11-22T13:26:41+0000&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;22 novembre 2010&lt;/span&gt;&lt;/span&gt;&lt;/abbr&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;entry-content&quot;&gt;&lt;div style=&quot;float: right; padding-left: 10px;&quot;&gt;&lt;img alt=&quot;Leadership blindness on social media example&quot; src=&quot;http://www.prelovac.com/vladimir/wp-content/uploads/2010/11/digg.coms-rank-197-Site-Profile-Compete_1290195447003-150x46.png&quot; style=&quot;width: 150px;&quot; /&gt;&lt;/div&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Non  considero me stesso un avido utilizzatore di social media, ma io seguo  quello che sta succedendo, e alcuni sviluppi recenti sono stati molto  interessante dal punto di vista business.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Pochi  mesi fa, la leadership del sito di social media Digg.com deciso di fare  alcuni cambiamenti radicali, nella speranza di aumentare la popolarità  del sito tramite questo makeover.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;In primo luogo hanno cambiato l&#39;interfaccia ma purtroppo invece di essere originali che appena copiato Facebook.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;cat-links&quot;&gt;&lt;/span&gt; &lt;span class=&quot;comments-link&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/leadership-blindness-on-social-media-example#comments&quot; title=&quot;Comment on Leadership blindness on social media example&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;3 Commenti&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;hentry p3 post publish author-vladimir category-business comments-open pings-closed y2010 m11 d19 h15 slug-with-power-comes-responsibility&quot; id=&quot;post-1440&quot;&gt;&lt;h2 class=&quot;entry-title&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/with-power-comes-responsibility&quot; rel=&quot;bookmark&quot; title=&quot;Permalink to With power comes responsibility&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Con il potere viene responsabilità&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class=&quot;entry-meta&quot;&gt;&lt;span class=&quot;entry-date&quot;&gt;&lt;abbr class=&quot;published&quot; title=&quot;2010-11-19T13:39:04+0000&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;19 novembre 2010&lt;/span&gt;&lt;/span&gt;&lt;/abbr&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;entry-content&quot;&gt;&lt;div style=&quot;float: right; padding-left: 10px;&quot;&gt;&lt;img alt=&quot;With power comes responsibility&quot; src=&quot;http://www.prelovac.com/vladimir/wp-content/uploads/2010/11/Discussions-Suggest-a-Labs-feature-Google-Groups_1290166490959-150x127.png&quot; style=&quot;width: 150px;&quot; /&gt;&lt;/div&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Questa è l&#39;immagine di un sostegno Gmail labs forum di questa mattina quando mi sono recato di lasciare il feedback.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Ho subito perso le motivazioni.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Quanto  costa a Google di assumere 3-4 persone che lavoreranno a tempo pieno  come moderatori dei propri forum? Btw la caratteristica che stavo per  suggerire è stato quando si preme il pulsante segnala come spam di Gmail  (che io mai così spesso fanno) , il sistema automaticamente invia un  bel messaggio personalizzato per lo spammer.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;cat-links&quot;&gt;&lt;/span&gt; &lt;span class=&quot;comments-link&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/with-power-comes-responsibility#comments&quot; title=&quot;Comment on With power comes responsibility&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;3 Commenti&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 class=&quot;entry-title&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/respelt-com-spell-check-your-blogs-automatically&quot; rel=&quot;bookmark&quot; title=&quot;Permalink to Respelt.com – Spell check your blogs automatically&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Respelt.com - Controllo ortografico automatico il tuo blog&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class=&quot;entry-meta&quot;&gt;&lt;span class=&quot;entry-date&quot;&gt;&lt;abbr class=&quot;published&quot; title=&quot;2010-11-17T09:55:52+0000&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;17 novembre 2010&lt;/span&gt;&lt;/span&gt;&lt;/abbr&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;entry-content&quot;&gt;&lt;div style=&quot;float: right; padding-left: 10px;&quot;&gt;&lt;img alt=&quot;Respelt.com – Spell check your blogs automatically&quot; src=&quot;http://www.prelovac.com/vladimir/wp-content/uploads/2010/11/Respelt-%C2%BB-Spell-check-your-website-online_1289978494639-150x110.png&quot; style=&quot;width: 150px;&quot; /&gt;&lt;/div&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-origin: padding; -moz-background-size: auto auto; background-attachment: scroll; background-image: none; background-position: 0% 0%; background-repeat: repeat; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Felice  di annunciare che abbiamo appena lanciato una nuova applicazione  chiamata Respelt.Respelt controllo ortografico consente di eseguire il  controllo ortografico qualsiasi testo o una pagina, ma anche possibile  controllare i tuoi post automaticamente.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;E &#39;molto semplice e facile da usare.&lt;/span&gt; &lt;span style=&quot;-moz-background-clip: border; -moz-background-origin: padding; -moz-background-size: auto auto; background-attachment: scroll; background-image: none; background-position: 0% 0%; background-repeat: repeat; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Basta registrarsi per un account gratuito, e aggiungere i feed RSS del vostro blog.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Otterrete i report via email, se si verificano eventuali errori di ortografia.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Ecco il video.Sign introduttivo su al Respelt.com&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/6960013098252128857/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/02/sviluppo-di-un-business-online.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/6960013098252128857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/6960013098252128857'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/02/sviluppo-di-un-business-online.html' title='sviluppo di un business online'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm1.static.flickr.com/30/99553029_a61858947a_t.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-3945397068192089214</id><published>2011-02-11T10:35:00.001-08:00</published><updated>2011-03-02T00:26:26.667-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="varie"/><title type='text'>seo doctor</title><content type='html'>&lt;div class=&quot;hentry p1 post publish author-vladimir category-wordpress comments-open pings-closed y2011 m02 d09 h01 slug-managewp-gets-more-powerul&quot; id=&quot;post-1496&quot;&gt;&lt;h2 class=&quot;entry-title&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/managewp-gets-more-powerul&quot; rel=&quot;bookmark&quot; title=&quot;Permalink to ManageWP gets more powerful&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-origin: padding; -moz-background-size: auto auto; background-attachment: scroll; background-image: none; background-position: 0% 0%; background-repeat: repeat; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;ManageWP diventa più potente&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class=&quot;entry-meta&quot;&gt;&lt;span class=&quot;entry-date&quot;&gt;&lt;abbr class=&quot;published&quot; title=&quot;2011-02-08T23:24:49+0000&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;8 febbraio 2011&lt;/span&gt;&lt;/span&gt;&lt;/abbr&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;entry-content&quot;&gt;&lt;div style=&quot;float: right; padding-left: 10px;&quot;&gt;&lt;img alt=&quot;ManageWP gets more powerful&quot; src=&quot;http://managewp.com/wp-content/login-logo.png&quot; style=&quot;width: 150px;&quot; /&gt;&lt;/div&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;ManageWP.com  sta attualmente gestendo più di 6.000 blog e noi siamo noi siamo felici  di annunciare un altro importante aggiornamento di oggi.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Cosa  c&#39;è di nuovo? Caricamento statistiche blog ora è asincrono, che  migliora drasticamente il tempo di caricamento cruscotto in particolare  per quelli di voi che gestiscono 100 blog.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;L&#39;interfaccia è stata inoltre rinnovato per una migliore esperienza utente.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;cat_nav_link&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/topic/wordpress&quot; rel=&quot;category tag&quot; title=&quot;View all posts in WordPress&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;WordPress&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;cat-links&quot;&gt;&lt;/span&gt; &lt;span class=&quot;comments-link&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/managewp-gets-more-powerul#comments&quot; title=&quot;Comment on ManageWP gets more powerful&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;2 Commenti&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;hentry p2 post publish author-vladimir category-wordpress comments-open pings-closed y2011 m02 d07 h14 alt slug-i-will-not-download-and-use-your-plugin&quot; id=&quot;post-1493&quot;&gt;&lt;h2 class=&quot;entry-title&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/i-will-not-download-and-use-your-plugin&quot; rel=&quot;bookmark&quot; title=&quot;Permalink to I will not download and use your plugin!&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Non mi scaricare e utilizzare il plugin!&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class=&quot;entry-meta&quot;&gt;&lt;span class=&quot;entry-date&quot;&gt;&lt;abbr class=&quot;published&quot; title=&quot;2011-02-07T12:07:47+0000&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;7 Febbraio 2011&lt;/span&gt;&lt;/span&gt;&lt;/abbr&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;entry-content&quot;&gt;&lt;div style=&quot;float: right; padding-left: 10px;&quot;&gt;&lt;img alt=&quot;I will not download and use your plugin!&quot; src=&quot;http://www.prelovac.com/vladimir/wp-content/uploads/2011/02/bart-plugin-150x80.png&quot; style=&quot;width: 150px;&quot; /&gt;&lt;/div&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Ricevo questo tipo di osservazioni più e più volte.&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Non  mi scaricare e utilizzare il plugin se non si &quot;(fai come ti dico)&quot; O è  un ottimo plugin, ma purtroppo dovrò disinstallarlo a meno di te  &quot;(aggiungere qualche ricatto virgolette)&quot; E &#39;una situazione del genere  buffo in modo che mi ha spinto a fare questa immagine:) Su una nota più  seria, ho trovato questo articolo grande chiamata &quot;Hey WordPress,  smettere di trattare gli sviluppatori di plugin per uso professionale,  come cittadini di seconda classe&quot;, che rispecchia un altro problema su  un fronte diverso.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;cat_nav_link&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/topic/wordpress&quot; rel=&quot;category tag&quot; title=&quot;View all posts in WordPress&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;WordPress&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;cat-links&quot;&gt;&lt;/span&gt; &lt;span class=&quot;comments-link&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/i-will-not-download-and-use-your-plugin#comments&quot; title=&quot;Comment on I will not download and use your plugin!&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;9 Commenti&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;hentry p3 post publish author-vladimir category-wordpress comments-open pings-closed y2011 m01 d31 h20 slug-wordpress-top-plugins-review&quot; id=&quot;post-1490&quot;&gt;&lt;h2 class=&quot;entry-title&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/wordpress-top-plugins-review&quot; rel=&quot;bookmark&quot; title=&quot;Permalink to WordPress Top Plugins Review&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-origin: padding; -moz-background-size: auto auto; background-attachment: scroll; background-image: none; background-position: 0% 0%; background-repeat: repeat; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Plugin Wordpress Top Recensione&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class=&quot;entry-meta&quot;&gt;&lt;span class=&quot;entry-date&quot;&gt;&lt;abbr class=&quot;published&quot; title=&quot;2011-01-31T18:56:57+0000&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;31 Gennaio 2011&lt;/span&gt;&lt;/span&gt;&lt;/abbr&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;entry-content&quot;&gt;&lt;div style=&quot;float: right; padding-left: 10px;&quot;&gt;&lt;img alt=&quot;WordPress Top Plugins Review&quot; src=&quot;https://www.packtpub.com/sites/default/files/imagecache/productview/1407OS_MockupCover.jpg&quot; style=&quot;width: 150px;&quot; /&gt;&lt;/div&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Ho  ricevuto il libro &quot;Top Wordpress Plugin&quot; di Brandon Corbin da Packt  Publishing, la società stessa che ha pubblicato il mio libro paio di  anni fa (Tornerò a quella successiva).&lt;/span&gt; &lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;La  revisione può sembrare po &#39;troppo critico e mi scuso con Brandon  up-front come so che tipo di sforzo che doveva mettere in ordine per  ottenere questo libro.&lt;/span&gt; &lt;span style=&quot;-moz-background-clip: border; -moz-background-origin: padding; -moz-background-size: auto auto; background-attachment: scroll; background-image: none; background-position: 0% 0%; background-repeat: repeat; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Il Buono Il libro spiega come cercare, caricare e installare plugin in dettaglio, che è qualcosa di neofiti apprezzeranno.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;cat_nav_link&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/topic/wordpress&quot; rel=&quot;category tag&quot; title=&quot;View all posts in WordPress&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;WordPress&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;entry-utility&quot;&gt;&lt;span class=&quot;cat-links&quot;&gt;&lt;/span&gt; &lt;span class=&quot;comments-link&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/wordpress-top-plugins-review#comments&quot; title=&quot;Comment on WordPress Top Plugins Review&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;4 Commenti&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 class=&quot;entry-title&quot;&gt;&lt;a href=&quot;http://www.prelovac.com/vladimir/how-to-search-google-with-personalized-search-disabled&quot; rel=&quot;bookmark&quot; title=&quot;Permalink to How to search Google with personalized search disabled&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-origin: padding; -moz-background-size: auto auto; background-attachment: scroll; background-image: none; background-position: 0% 0%; background-repeat: repeat; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;Come per la ricerca di Google con la ricerca personalizzata per disabili&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class=&quot;entry-meta&quot;&gt;&lt;span class=&quot;entry-date&quot;&gt;&lt;abbr class=&quot;published&quot; title=&quot;2011-01-29T00:34:43+0000&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% transparent; border: 0pt none; display: inline; font-size: 100%; margin: 0pt; outline: 0pt none; padding: 0pt; vertical-align: baseline;&quot;&gt;29 gennaio 2011&lt;/span&gt;&lt;/span&gt;&lt;/abbr&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;float: right; padding-left: 10px;&quot;&gt;&lt;img alt=&quot;How to search Google with personalized search disabled&quot; src=&quot;http://farm3.static.flickr.com/2601/3914729343_6ba95723dc_m.jpg&quot; style=&quot;width: 150px;&quot; /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/3945397068192089214/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/02/seo-doctor.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/3945397068192089214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/3945397068192089214'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/02/seo-doctor.html' title='seo doctor'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm3.static.flickr.com/2601/3914729343_6ba95723dc_t.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-8847441001232278682</id><published>2011-02-09T11:20:00.001-08:00</published><updated>2011-03-02T00:26:59.065-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keywords"/><title type='text'>parole chiave</title><content type='html'>Oggi ti propongo le 100 poarole chiave più costose in Adwords,cioè  le Keywords dove gli inserzionisti spendono una fortuna per far cliccare  un singolo utente sul loro annuncio,quindi sicuramente un buon modo per  scegliere un argomento di un articolo o addirittura il tema principale  di un blog.&lt;br /&gt;
&lt;br /&gt;
Certo,il tema di un blog dovrebbe sempre raffigurare  la propria passione,le proprie competenze,la voglia di scrivere di un  certo argomento,ma dare un’occhiata alle keywords (quindi a potenziali  nicchie) proficue non è certo un male… :mrgreen:&lt;br /&gt;
Keyword Cost Per Click Clicks/Day Cost/Day&lt;br /&gt;
selling structured settlements $64.81 0.1 $0.00&lt;br /&gt;
cash for structured settlements $63.87 0.1 $0.00&lt;br /&gt;
auto insurance quotes florida $62.57 0.1 $0.00&lt;br /&gt;
california auto insurance quotes $57.34 0.1 $0.00&lt;br /&gt;
auto insurance quotes california $57.01 0.1 $0.00&lt;br /&gt;
student loan consolidation interest rate $56.86 0.1 $0.00&lt;br /&gt;
lendingtree .com $56.35 3.5 $197.22&lt;br /&gt;
consolidate loan refinance student $55.86 0.1 $0.00&lt;br /&gt;
audio conference calling $55.32 0.1 $0.00&lt;br /&gt;
arizona divorce attorneys $53.56 0.1 $0.00&lt;br /&gt;
dui attorney los angeles $52.75 0.5 $26.37&lt;br /&gt;
business conference calls $52.41 0.1 $0.00&lt;br /&gt;
personal injury attorneys chicago $51.59 0.1 $0.00&lt;br /&gt;
mesothelioma treatment options $51.31 0.1 $0.00&lt;br /&gt;
copper repiping $50.94 0.1 $0.00&lt;br /&gt;
conference calling services $49.65 1.0 $49.65&lt;br /&gt;
houston criminal lawyer $49.59 0.5 $24.79&lt;br /&gt;
criminal houston lawyer $49.59 0.5 $24.79&lt;br /&gt;
corporate conference calls $49.35 0.1 $0.00&lt;br /&gt;
sell annuity settlement $49.11 0.1 $0.00&lt;br /&gt;
student loan consolidation rates $48.80 0.1 $0.00&lt;br /&gt;
irs tax attorney $48.78 1.0 $48.78&lt;br /&gt;
california criminal defense lawyers $48.38 0.1 $0.00&lt;br /&gt;
universal life insurance quote $48.34 2.0 $96.68&lt;br /&gt;
san diego criminal lawyer $48.30 0.1 $0.00&lt;br /&gt;
irs help $48.27 4.5 $217.21&lt;br /&gt;
web based conferencing services $47.80 0.1 $0.00&lt;br /&gt;
american tax relief $47.37 0.5 $23.68&lt;br /&gt;
criminal defense attorney los angeles $47.34 0.1 $0.00&lt;br /&gt;
pacific coast pillows $47.24 1.0 $47.24&lt;br /&gt;
chicago personal injury lawyers $46.81 0.1 $0.00&lt;br /&gt;
sell annuity payments $46.73 0.1 $0.00&lt;br /&gt;
san diego criminal attorney $46.61 0.1 $0.00&lt;br /&gt;
los angeles criminal defense attorney $46.59 0.1 $0.00&lt;br /&gt;
data recovery seattle $46.59 0.1 $0.00&lt;br /&gt;
student loan consolidation rate $46.29 2.0 $92.58&lt;br /&gt;
college loan consolidation $46.29 2.5 $115.72&lt;br /&gt;
dui attorney san diego $46.04 0.1 $0.00&lt;br /&gt;
consolidate school loans $45.94 0.1 $0.00&lt;br /&gt;
federal criminal defense attorneys $45.86 0.1 $0.00&lt;br /&gt;
irs problem $45.68 1.5 $68.52&lt;br /&gt;
mesothelioma lawyers $45.48 2.0 $90.96&lt;br /&gt;
chicago injury lawyers $45.22 0.1 $0.00&lt;br /&gt;
federal criminal lawyer $45.18 0.5 $22.59&lt;br /&gt;
white water rafting maine $45.18 0.5 $22.59&lt;br /&gt;
maine white water rafting $45.18 0.5 $22.59&lt;br /&gt;
best home equity loans $45.14 1.5 $67.71&lt;br /&gt;
universal life quote $45.11 2.5 $112.77&lt;br /&gt;
consolidate college loans $45.09 0.5 $22.54&lt;br /&gt;
&lt;br /&gt;
Queste  sono parole chiave che in Google Adwords costano davvero parecchio, ma  come vedi nella terza colonna non sempre queste Keywords generato clic e  quindi profitto.&lt;br /&gt;
&lt;br /&gt;
Per questo ecco un’altra tabella che ti mostra le parole chiave più redditizie cioè che generano tanti clic,a livello mondiale:&lt;br /&gt;
Keyword Cost Per Click Clicks/Day Cost/Day&lt;br /&gt;
insurance $17.41 49,893.5 $868,645.81&lt;br /&gt;
hotels $3.52 200,636.0 $706,238.75&lt;br /&gt;
film $2.88 183,044.0 $527,166.75&lt;br /&gt;
home $3.89 102,282.5 $397,878.91&lt;br /&gt;
car $5.09 52,069.5 $265,033.75&lt;br /&gt;
schools $4.13 60,913.0 $251,570.69&lt;br /&gt;
acting $2.28 106,337.0 $242,448.36&lt;br /&gt;
credit $8.67 25,705.0 $222,862.34&lt;br /&gt;
cheap $2.71 82,139.5 $222,598.05&lt;br /&gt;
digital $1.70 130,607.0 $222,031.91&lt;br /&gt;
hotel $2.38 84,776.5 $201,768.06&lt;br /&gt;
film schools $5.64 35,501.5 $200,228.45&lt;br /&gt;
software $3.23 61,259.5 $197,868.19&lt;br /&gt;
new $2.17 90,415.0 $196,200.55&lt;br /&gt;
auto insurance $29.48 6,453.0 $190,234.44&lt;br /&gt;
rental $5.97 31,635.5 $188,863.94&lt;br /&gt;
free $1.06 172,680.5 $183,041.33&lt;br /&gt;
travel $5.02 35,084.5 $176,124.19&lt;br /&gt;
auto $7.28 23,610.5 $171,884.44&lt;br /&gt;
video $2.01 83,295.0 $167,422.95&lt;br /&gt;
mortgage $13.03 12,172.0 $158,601.16&lt;br /&gt;
flights $1.91 75,692.0 $144,571.72&lt;br /&gt;
editing $2.37 57,747.0 $136,860.39&lt;br /&gt;
refinance $20.01 6,827.0 $136,608.27&lt;br /&gt;
loans $9.38 13,966.5 $131,005.77&lt;br /&gt;
uk $1.43 86,623.5 $123,871.60&lt;br /&gt;
computer $3.67 33,043.5 $121,269.64&lt;br /&gt;
buy $2.06 58,840.5 $121,211.43&lt;br /&gt;
extended stay $20.13 5,758.0 $115,908.54&lt;br /&gt;
home insurance $18.75 6,152.0 $115,350.00&lt;br /&gt;
training $3.60 31,112.0 $112,003.20&lt;br /&gt;
travel insurance $11.29 9,861.0 $111,330.69&lt;br /&gt;
cars $3.90 26,198.5 $102,174.15&lt;br /&gt;
debt $9.17 11,104.5 $101,828.26&lt;br /&gt;
furniture $1.76 57,463.5 $101,135.76&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Trackbacks&lt;br /&gt;
&lt;br /&gt;
1. Technotizie.it&lt;br /&gt;
2. pligg.com&lt;br /&gt;
3. pligg.it&lt;br /&gt;
4. &lt;a href=&quot;http://www.upnews.it/&quot; target=&quot;_blank&quot;&gt;www.upnews.it&lt;/a&gt;&lt;br /&gt;
5. feedburner.it&lt;br /&gt;
6. BlocNum.com&lt;br /&gt;
7. rankalo.net&lt;br /&gt;
8. pligg.com&lt;br /&gt;
9. Anonimo&lt;br /&gt;
10. &lt;a href=&quot;http://www.pubblicanews.it/&quot; target=&quot;_blank&quot;&gt;www.pubblicanews.it&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/8847441001232278682/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/02/parole-chiave.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/8847441001232278682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/8847441001232278682'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/02/parole-chiave.html' title='parole chiave'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-113659219847810577</id><published>2011-02-09T11:15:00.000-08:00</published><updated>2011-03-02T00:28:35.395-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="informatica"/><category scheme="http://www.blogger.com/atom/ns#" term="lista"/><category scheme="http://www.blogger.com/atom/ns#" term="Pionieri"/><title type='text'>Pionieri dell&#39;informatica</title><content type='html'>&lt;h1 class=&quot;firstHeading&quot; id=&quot;firstHeading&quot;&gt;Elenco dei pionieri in informatica&lt;/h1&gt;&lt;div id=&quot;siteSub&quot;&gt;Da Wikipedia, l&#39;enciclopedia libera&lt;/div&gt;&lt;table class=&quot;metadata plainlinks ambox ambox-content&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;mbox-image&quot;&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td class=&quot;mbox-text&quot;&gt;&lt;small&gt;&lt;i&gt;&lt;/i&gt;&lt;/small&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;Questo articolo presenta un elenco di persone che hanno contribuito alla creazione, allo sviluppo e immaginare di che cosa &lt;a href=&quot;http://en.wikipedia.org/wiki/Computer&quot; title=&quot;Computer&quot;&gt;computer&lt;/a&gt; e &lt;a href=&quot;http://en.wikipedia.org/wiki/Electronics&quot; title=&quot;Elettronica&quot;&gt;elettronica&lt;/a&gt; potrebbe fare.&lt;br /&gt;
&lt;table class=&quot;toc&quot; id=&quot;toc&quot;&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;td&gt;&lt;div id=&quot;toctitle&quot;&gt;&lt;h2&gt;Contenuti&lt;/h2&gt;&lt;span class=&quot;toctoggle&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;script type=&quot;text/javascript&quot;&gt;
//&lt;![CDATA[
if (window.showTocToggle) { var tocShowText = &quot;show&quot;; var tocHideText = &quot;hide&quot;; showTocToggle(); } 
//]]&gt;
&lt;/script&gt;  &lt;br /&gt;
&lt;table class=&quot;wikitable sortable&quot; id=&quot;sortable_table_id_0&quot;&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;th&gt;Persona&lt;a class=&quot;sortheader&quot; href=&quot;http://en.wikipedia.org/wiki/List_of_pioneers_in_computer_science#&quot; onclick=&quot;ts_resortTable(this);return false;&quot;&gt;&lt;span class=&quot;sortarrow&quot;&gt;&lt;img alt=&quot;↓&quot; src=&quot;http://bits.wikimedia.org/skins-1.5/common/images/sort_none.gif&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/th&gt; &lt;th&gt;Realizzazione&lt;a class=&quot;sortheader&quot; href=&quot;http://en.wikipedia.org/wiki/List_of_pioneers_in_computer_science#&quot; onclick=&quot;ts_resortTable(this);return false;&quot;&gt;&lt;span class=&quot;sortarrow&quot;&gt;&lt;img alt=&quot;↓&quot; src=&quot;http://bits.wikimedia.org/skins-1.5/common/images/sort_none.gif&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/th&gt; &lt;th&gt;Ach. Data&lt;a class=&quot;sortheader&quot; href=&quot;http://en.wikipedia.org/wiki/List_of_pioneers_in_computer_science#&quot; onclick=&quot;ts_resortTable(this);return false;&quot;&gt;&lt;span class=&quot;sortarrow&quot;&gt;&lt;img alt=&quot;↓&quot; src=&quot;http://bits.wikimedia.org/skins-1.5/common/images/sort_none.gif&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/th&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td style=&quot;width: 120px;&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/John_Vincent_Atanasoff&quot; title=&quot;John Vincent Atanasoff&quot;&gt;John Atanasoff&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Costruito il primo computer elettronico digitale, il &lt;a href=&quot;http://en.wikipedia.org/wiki/Atanasoff%E2%80%93Berry_Computer&quot; title=&quot;Atanasoff-Berry Computer&quot;&gt;Atanasoff-Berry Computer&lt;/a&gt;, Anche se non era né programmabile né Turing-completo.&lt;/td&gt; &lt;td&gt;1939&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Charles_Babbage&quot; title=&quot;Charles Babbage&quot;&gt;Charles Babbage&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Progettato il &lt;a href=&quot;http://en.wikipedia.org/wiki/Analytical_engine&quot; title=&quot;Analytical Engine&quot;&gt;Analytical Engine&lt;/a&gt; e costruito un prototipo di meno potente &lt;a href=&quot;http://en.wikipedia.org/wiki/Difference_engine&quot; title=&quot;Difference Engine&quot;&gt;calcolatore meccanico&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1822&lt;br /&gt;
1837&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/John_Backus&quot; title=&quot;John Backus&quot;&gt;John Backus&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Inventato &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/FORTRAN&quot; title=&quot;FORTRAN&quot;&gt;FORTRAN&lt;/a&gt; (&lt;i&gt;Per&lt;/i&gt;mula &lt;i&gt;Tran&lt;/i&gt;tuite), la prima pratica di programmazione ad alto livello linguistico, e ha formulato le &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Backus-Naur_form&quot; title=&quot;Backus-Naur form&quot;&gt;Backus-Naur form&lt;/a&gt; che ha descritto il linguaggio formale &lt;a href=&quot;http://en.wikipedia.org/wiki/Syntax&quot; title=&quot;Sintassi&quot;&gt;sintassi&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1954&lt;br /&gt;
1963&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/George_Boole&quot; title=&quot;George Boole&quot;&gt;George Boole&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Formalizzati &lt;a href=&quot;http://en.wikipedia.org/wiki/Boolean_algebra_%28logic%29&quot; title=&quot;Algebra booleana (logica)&quot;&gt;Algebra booleana&lt;/a&gt;, La base per &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Digital_logic&quot; title=&quot;Logica digitale&quot;&gt;logica digitale&lt;/a&gt; e informatica.&lt;/td&gt; &lt;td&gt;1847&lt;br /&gt;
1854&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Nikolay_Brusentsov&quot; title=&quot;Nikolay Brusentsov&quot;&gt;Nikolay Brusentsov&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Costruito &lt;a href=&quot;http://en.wikipedia.org/wiki/Ternary_computer&quot; title=&quot;Ternario computer&quot;&gt;computer ternario&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Setun&quot; title=&quot;SHENAR&quot;&gt;SHENAR&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1958&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Vint_Cerf&quot; title=&quot;Vint Cerf&quot;&gt;Vint Cerf&lt;/a&gt; e &lt;a href=&quot;http://en.wikipedia.org/wiki/Bob_Kahn&quot; title=&quot;Bob Kahn&quot;&gt;Bob Kahn&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Progettato il &lt;a href=&quot;http://en.wikipedia.org/wiki/Transmission_Control_Protocol&quot; title=&quot;Transmission Control Protocol&quot;&gt;Transmission Control Protocol&lt;/a&gt; e &lt;a href=&quot;http://en.wikipedia.org/wiki/Internet_Protocol&quot; title=&quot;Internet Protocol&quot;&gt;Internet Protocol&lt;/a&gt; (&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/TCP/IP&quot; title=&quot;TCP / IP&quot;&gt;TCP / IP&lt;/a&gt;), I dati primari &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Communication_protocols&quot; title=&quot;I protocolli di comunicazione&quot;&gt;protocolli di comunicazione&lt;/a&gt; della &lt;a href=&quot;http://en.wikipedia.org/wiki/Internet&quot; title=&quot;Internet&quot;&gt;Internet&lt;/a&gt; e altri &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Computer_networks&quot; title=&quot;Reti informatiche&quot;&gt;reti di computer&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1978&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Alonzo_Church&quot; title=&quot;Alonzo Church&quot;&gt;Alonzo Church&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Fondata contributi alla scienza informatica teorica, in particolare per lo sviluppo del &lt;a href=&quot;http://en.wikipedia.org/wiki/Lambda_calculus&quot; title=&quot;Lambda calcolo&quot;&gt;lambda calcolo&lt;/a&gt; e la scoperta del &lt;a href=&quot;http://en.wikipedia.org/wiki/Undecidable_problem&quot; title=&quot;problema indecidibili&quot;&gt;indecidibilità problema&lt;/a&gt; all&#39;interno di esso.&lt;/td&gt; &lt;td&gt;1936&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Wesley_A._Clark&quot; title=&quot;Wesley Clark A.&quot;&gt;Wesley Clark A.&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Progettato &lt;a href=&quot;http://en.wikipedia.org/wiki/LINC&quot; title=&quot;LINC&quot;&gt;LINC&lt;/a&gt;,  Il primo computer funzionante in scala verso il basso e un prezzo per  il singolo utente. Messo in servizio nel 1963, molte delle sue  caratteristiche sono visti come prototipi di quello che dovevano essere  gli elementi essenziali dei personal computer.&lt;/td&gt; &lt;td&gt;1962&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Edmund_M._Clarke&quot; title=&quot;Edmund M. Clarke&quot;&gt;Edmund M. Clarke&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Sviluppato &lt;a href=&quot;http://en.wikipedia.org/wiki/Model_checking&quot; title=&quot;Model checking&quot;&gt;model checking&lt;/a&gt; e la verifica formale di software e hardware con &lt;a href=&quot;http://en.wikipedia.org/wiki/E._Allen_Emerson&quot; title=&quot;E. Allen Emerson&quot;&gt;E. Allen Emerson&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1981&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Edgar_F._Codd&quot; title=&quot;Edgar F. Codd&quot;&gt;Edgar F. Codd&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Proposto e formalizzato la &lt;a href=&quot;http://en.wikipedia.org/wiki/Relational_model&quot; title=&quot;Il modello relazionale&quot;&gt;modello relazionale&lt;/a&gt; di gestione dei dati, la base teorica di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Relational_databases&quot; title=&quot;Basi di dati relazionali&quot;&gt;basi di dati relazionali&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1970&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Stephen_Cook&quot; title=&quot;Stephen Cook&quot;&gt;Stephen Cook&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Formalizzata la nozione di NP-completezza, ispirando un grande sforzo di ricerca in &lt;a href=&quot;http://en.wikipedia.org/wiki/Computational_complexity_theory&quot; title=&quot;Teoria della complessità computazionale&quot;&gt;teoria della complessità computazionale&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1971&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/James_Cooley&quot; title=&quot;James Cooley&quot;&gt;James Cooley&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Con &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/John_W._Tukey&quot; title=&quot;John W. Tukey&quot;&gt;John W. Tukey&lt;/a&gt;, Ha creato il &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Cooley-Tukey_FFT_algorithm&quot; title=&quot;Cooley-Tukey algoritmo FFT&quot;&gt;Fast Fourier Transform&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1965&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ole-Johan_Dahl&quot; title=&quot;Ole-Johan Dahl&quot;&gt;Ole-Johan Dahl&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Con &lt;a href=&quot;http://en.wikipedia.org/wiki/Kristen_Nygaard&quot; title=&quot;Kristen Nygaard&quot;&gt;Kristen Nygaard&lt;/a&gt;, Ha inventato il proto-oggetto linguaggio orientato &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/SIMULA&quot; title=&quot;SIMULA&quot;&gt;SIMULA&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1962&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Edsger_Dijkstra&quot; title=&quot;Edsger Dijkstra&quot;&gt;Edsger Dijkstra&lt;/a&gt;&lt;/td&gt; &lt;td&gt;progressi compiuti in algoritmi, &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Goto_%28command%29&quot; title=&quot;Goto (comando)&quot;&gt;Goto considerato nocivo&lt;/a&gt;, Il &lt;a href=&quot;http://en.wikipedia.org/wiki/Semaphore_%28programming%29&quot; title=&quot;Semaforo (programmazione)&quot;&gt;semaforo (programmazione)&lt;/a&gt;, &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Rigor&quot; title=&quot;Rigor&quot;&gt;rigore&lt;/a&gt;, E la pedagogia.&lt;/td&gt; &lt;td&gt;1968&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/J._Presper_Eckert&quot; title=&quot;J. Presper Eckert&quot;&gt;J. Presper Eckert&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Con &lt;a href=&quot;http://en.wikipedia.org/wiki/John_Mauchly&quot; title=&quot;John Mauchly&quot;&gt;John Mauchly&lt;/a&gt;, Progettato e costruito la &lt;a href=&quot;http://en.wikipedia.org/wiki/ENIAC&quot; title=&quot;ENIAC&quot;&gt;ENIAC&lt;/a&gt;, Il moderno, di prima (tutte elettronico, Turing-completo) computer, e il &lt;a href=&quot;http://en.wikipedia.org/wiki/UNIVAC_I&quot; title=&quot;UNIVAC I&quot;&gt;UNIVAC I&lt;/a&gt;, Il primo computer disponibile in commercio.&lt;/td&gt; &lt;td&gt;1943&lt;br /&gt;
1951&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/E._Allen_Emerson&quot; title=&quot;E. Allen Emerson&quot;&gt;E. Allen Emerson&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Sviluppato &lt;a href=&quot;http://en.wikipedia.org/wiki/Model_checking&quot; title=&quot;Model checking&quot;&gt;model checking&lt;/a&gt; e la verifica formale di software e hardware con &lt;a href=&quot;http://en.wikipedia.org/wiki/Edmund_M._Clarke&quot; title=&quot;Edmund M. Clarke&quot;&gt;Edmund M. Clarke&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1981&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Douglas_Engelbart&quot; title=&quot;Douglas Engelbart&quot;&gt;Douglas Engelbart&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Meglio conosciuto per aver inventato il mouse del computer (in uno  sforzo congiunto con Bill in inglese), come un pioniere dell&#39;interazione  uomo-computer il cui gruppo ha sviluppato Augment &lt;a href=&quot;http://en.wikipedia.org/wiki/Hypertext&quot; title=&quot;Ipertesto&quot;&gt;ipertesto&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Network_computing&quot; title=&quot;Network Computing&quot;&gt;computer collegati in rete&lt;/a&gt;, E precursori di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/GUI&quot; title=&quot;GUI&quot;&gt;GUI&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1963&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Tommy_Flowers&quot; title=&quot;Tommy Flowers&quot;&gt;Tommy Flowers&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Progettato e costruito la Mark 1 e le dieci migliori Mark 2 &lt;a href=&quot;http://en.wikipedia.org/wiki/Colossus_computer&quot; title=&quot;Colosso computer&quot;&gt;Colosso computer&lt;/a&gt;, Il primo al mondo programmabile, digitale, elettronica, informatica dispositivi.&lt;/td&gt; &lt;td&gt;1943&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Gottlob_Frege&quot; title=&quot;Gottlob Frege&quot;&gt;Gottlob Frege&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Sviluppato &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/First-order_predicate_calculus&quot; title=&quot;Primo ordine calcolo dei predicati&quot;&gt;primo ordine di calcolo dei predicati&lt;/a&gt;, Che è stato precursore di un requisito fondamentale per poter sviluppare la teoria di calcolo.&lt;/td&gt; &lt;td&gt;1879&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Seymour_Ginsburg&quot; title=&quot;Seymour Ginsburg&quot;&gt;Seymour Ginsburg&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Dimostrato &quot;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Don%27t-care&quot; title=&quot;Don&#39;t-cura&quot;&gt;don&#39;t-care&lt;/a&gt;&quot;Minimizzazione del circuito non deve necessariamente portare a risultati ottimali, hanno dimostrato che &lt;a href=&quot;http://en.wikipedia.org/wiki/ALGOL&quot; title=&quot;ALGOL&quot;&gt;ALGOL linguaggio di programmazione&lt;/a&gt; è context-free (così da legare &lt;a href=&quot;http://en.wikipedia.org/wiki/Formal_language&quot; title=&quot;Linguaggio formale&quot;&gt;teoria dei linguaggi formali&lt;/a&gt; al problema della &lt;a href=&quot;http://en.wikipedia.org/wiki/Compiler&quot; title=&quot;Compiler&quot;&gt;compilatore&lt;/a&gt; scrittura), e inventato &lt;a href=&quot;http://en.wikipedia.org/wiki/Abstract_family_of_languages&quot; title=&quot;Abstract famiglia delle lingue&quot;&gt;AFL Teoria&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1958&lt;br /&gt;
1961&lt;br /&gt;
1967&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Kurt_G%C3%B6del&quot; title=&quot;Kurt Gödel&quot;&gt;Kurt Gödel&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Dimostrato che &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Peano&quot; title=&quot;Peano&quot;&gt;Peano&lt;/a&gt; aritmetica assiomatizzata non poteva essere sia &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Logically_consistent&quot; title=&quot;Logicamente coerente&quot;&gt;logicamente coerente&lt;/a&gt; e completa in &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/First-order_predicate_calculus&quot; title=&quot;Primo ordine calcolo dei predicati&quot;&gt;primo ordine di calcolo dei predicati&lt;/a&gt;. Chiesa, Kleene, Turing e sviluppato le basi della teoria di calcolo basato sulla &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Corollaries&quot; title=&quot;Corollari&quot;&gt;corollari&lt;/a&gt; al lavoro di Gödel.&lt;/td&gt; &lt;td&gt;1931&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Lois_Haibt&quot; title=&quot;Lois Haibt&quot;&gt;Lois Haibt&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Era un membro del team persona che ha inventato dieci &lt;a href=&quot;http://en.wikipedia.org/wiki/Fortran&quot; title=&quot;Fortran&quot;&gt;Fortran&lt;/a&gt; e tra le prime donne a svolgere un ruolo cruciale nello sviluppo della scienza informatica.&lt;/td&gt; &lt;td&gt;1954&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Tony_Hoare&quot; title=&quot;Tony Hoare&quot;&gt;C.A.R. Hoare&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Ha sviluppato il linguaggio formale &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Communicating_Sequential_Processes&quot; title=&quot;Comunicare processi sequenziali&quot;&gt;Comunicare processi sequenziali&lt;/a&gt; (CSP) e &lt;a href=&quot;http://en.wikipedia.org/wiki/Quicksort&quot; title=&quot;Quicksort&quot;&gt;Quicksort&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1960&lt;br /&gt;
1978&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Grace_Hopper&quot; title=&quot;Grace Hopper&quot;&gt;Grace Hopper&lt;/a&gt;&lt;/td&gt; &lt;td&gt;lavori avviati sulla necessità di linguaggi di programmazione ad alto livello, che ha definito &lt;i&gt;programmazione automatica&lt;/i&gt;, E ha scritto l&#39;A-O &lt;a href=&quot;http://en.wikipedia.org/wiki/Compiler&quot; title=&quot;Compiler&quot;&gt;compilatore&lt;/a&gt;, Che condiziona fortemente la &lt;a href=&quot;http://en.wikipedia.org/wiki/COBOL&quot; title=&quot;COBOL&quot;&gt;COBOL&lt;/a&gt; lingua.&lt;/td&gt; &lt;td&gt;1952&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Cuthbert_Hurd&quot; title=&quot;Cuthbert Hurd&quot;&gt;Cuthbert Hurd&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Ha aiutato la International Business Machines Corporation sviluppare il suo primo computer general-purpose, l&#39; &lt;a href=&quot;http://en.wikipedia.org/wiki/IBM_701&quot; title=&quot;IBM 701&quot;&gt;IBM 701&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1952&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Kenneth_E._Iverson&quot; title=&quot;Kenneth E. Iverson&quot;&gt;Kenneth E. Iverson&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Aiutato nella istituisce il primo corso di laurea in informatica (a &lt;a href=&quot;http://en.wikipedia.org/wiki/Harvard_University&quot; title=&quot;Università di Harvard&quot;&gt;Harvard&lt;/a&gt;) E ha insegnato quel corso; inventato il &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/APL_programming_language&quot; title=&quot;APL linguaggio di programmazione&quot;&gt;APL linguaggio di programmazione&lt;/a&gt; e contributo al calcolo interattivo.&lt;/td&gt; &lt;td&gt;1954; 1962&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Jacek_Karpinski&quot; title=&quot;Jacek Karpinski&quot;&gt;Jacek Karpinski&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Sviluppato il primo analizzatore differenziale che usate di  transistor, e sviluppato una delle prima macchina algoritmi di  apprendimento per il carattere e il riconoscimento delle immagini. È  stato anche l&#39;inventore di uno dei primi minicomputer, il &lt;a href=&quot;http://en.wikipedia.org/wiki/K-202&quot; title=&quot;K-202&quot;&gt;K-202&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1973&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Alan_Kay&quot; title=&quot;Alan Kay&quot;&gt;Alan Kay&lt;/a&gt;&lt;/td&gt; &lt;td&gt;molte delle idee alla base dei linguaggi di programmazione  object-oriented Introdotti, ha guidato il team che ha sviluppato  Smalltalk, e ha dato contributi fondamentali per il personal computing.&lt;/td&gt; &lt;td&gt;1970~&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Stephen_Cole_Kleene&quot; title=&quot;Stephen Cole Kleene&quot;&gt;Stephen Cole Kleene&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Lanciato il lavoro con &lt;a href=&quot;http://en.wikipedia.org/wiki/Alonzo_Church&quot; title=&quot;Alonzo Church&quot;&gt;Alonzo Church&lt;/a&gt; sul &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Lambda_Calculus&quot; title=&quot;Lambda Calculus&quot;&gt;Lambda Calculus&lt;/a&gt; che per primo ha gettato le basi della teoria della computazione.&lt;/td&gt; &lt;td&gt;1936&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Donald_Knuth&quot; title=&quot;Donald Knuth&quot;&gt;Donald Knuth&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Ha scritto &lt;i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming&quot; title=&quot;The Art of Computer Programming&quot;&gt;The Art of Computer Programming&lt;/a&gt;&lt;/i&gt; e ha creato &lt;a href=&quot;http://en.wikipedia.org/wiki/TeX&quot; title=&quot;TeX&quot;&gt;TeX&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1968&lt;br /&gt;
1989&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Leslie_Lamport&quot; title=&quot;Leslie Lamport&quot;&gt;Leslie Lamport&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Formulato algoritmi per risolvere molti problemi fondamentali nei sistemi distribuiti (ad esempio il &lt;a href=&quot;http://en.wikipedia.org/wiki/Lamport%27s_bakery_algorithm&quot; title=&quot;panificio di Lamport algoritmo&quot;&gt;panificio algoritmo&lt;/a&gt;).&lt;br /&gt;
Sviluppato il concetto di un &lt;a href=&quot;http://en.wikipedia.org/wiki/Lamport_timestamps&quot; title=&quot;Lamport timestamp&quot;&gt;clock logico&lt;/a&gt;, Che permette la sincronizzazione tra entità distribuite in base agli eventi attraverso il quale comunicare.&lt;/td&gt; &lt;td&gt;1974&lt;br /&gt;
1978&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Sergei_Alekseyevich_Lebedev&quot; title=&quot;Sergei Lebedev Alekseyevich&quot;&gt;Sergei Lebedev Alekseyevich&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Indipendentemente progettato il primo computer elettronico in Unione Sovietica, &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/MESM&quot; title=&quot;MESM&quot;&gt;MESM&lt;/a&gt;, A Kiev, Ucraina.&lt;/td&gt; &lt;td&gt;1951&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Gottfried_Leibniz&quot; title=&quot;Gottfried Leibniz&quot;&gt;Gottfried Leibniz&lt;/a&gt;&lt;/td&gt; &lt;td&gt;progressi della logica simbolica, come la &lt;a href=&quot;http://en.wikipedia.org/wiki/Calculus_ratiocinator&quot; title=&quot;Calcolo ratiocinator&quot;&gt;Calcolo ratiocinator&lt;/a&gt;, Che sono stati pesantemente influenti sulla &lt;a href=&quot;http://en.wikipedia.org/wiki/Gottlob_Frege&quot; title=&quot;Gottlob Frege&quot;&gt;Gottlob Frege&lt;/a&gt;. sviluppi Made in &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/First-order_predicate_calculus&quot; title=&quot;Primo ordine calcolo dei predicati&quot;&gt;primo ordine di calcolo dei predicati&lt;/a&gt; che sono stati cruciali per i fondamenti teorici dell&#39;informatica.&lt;/td&gt; &lt;td&gt;1670~&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ramon_Llull&quot; title=&quot;Ramon Llull&quot;&gt;Ramon Llull&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Progettato più macchine simboliche rappresentazioni, e pioniere  nozioni di rappresentazione simbolica e la manipolazione di produrre  conoscenza, sia dei quali sono stati influenze principali su &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Leibniz&quot; title=&quot;Leibniz&quot;&gt;Leibniz&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1300~&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/J._C._R._Licklider&quot; title=&quot;J. C. R. Licklider&quot;&gt;J. C. R. Licklider&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Ha iniziato l&#39;indagine dell&#39;interazione uomo-computer, portando a molti progressi nelle interfacce del computer così come in &lt;a href=&quot;http://en.wikipedia.org/wiki/Cybernetics&quot; title=&quot;Cibernetica&quot;&gt;cibernetica&lt;/a&gt; e &lt;a href=&quot;http://en.wikipedia.org/wiki/Artificial_intelligence&quot; title=&quot;Intelligenza artificiale&quot;&gt;intelligenza artificiale&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1960&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ada_Lovelace&quot; title=&quot;Ada Lovelace&quot;&gt;Ada Lovelace&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Ha iniziato lo studio del calcolo scientifico, analizzando il lavoro di Babbage nel suo &lt;i&gt;Disegno della macchina analitica&lt;/i&gt;, Ed è stata la omonimo per la &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Ada_programming_language&quot; title=&quot;Ada linguaggio di programmazione&quot;&gt;Ada linguaggio di programmazione&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1843&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/John_Mauchly&quot; title=&quot;John Mauchly&quot;&gt;John Mauchly&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Con &lt;a href=&quot;http://en.wikipedia.org/wiki/J._Presper_Eckert&quot; title=&quot;J. Presper Eckert&quot;&gt;J. Presper Eckert&lt;/a&gt;, Progettato e costruito la &lt;a href=&quot;http://en.wikipedia.org/wiki/ENIAC&quot; title=&quot;ENIAC&quot;&gt;ENIAC&lt;/a&gt;, Il moderno, di prima (tutte elettronico, Turing-completo) computer, e il &lt;a href=&quot;http://en.wikipedia.org/wiki/UNIVAC_I&quot; title=&quot;UNIVAC I&quot;&gt;UNIVAC I&lt;/a&gt;, Il primo computer disponibile in commercio.&lt;/td&gt; &lt;td&gt;1943&lt;br /&gt;
1951&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/John_McCarthy_%28computer_scientist%29&quot; title=&quot;John McCarthy (informatico)&quot;&gt;John McCarthy&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Inventato &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/LISP&quot; title=&quot;LISP&quot;&gt;LISP&lt;/a&gt;, Un &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Functional_programming_language&quot; title=&quot;linguaggio di programmazione funzionale&quot;&gt;linguaggio di programmazione funzionale&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1955&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Marvin_Minsky&quot; title=&quot;Marvin Minsky&quot;&gt;Marvin Minsky&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Co-fondatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/MIT_Computer_Science_and_Artificial_Intelligence_Laboratory&quot; title=&quot;MIT Informatica e Laboratorio di Intelligenza Artificiale&quot;&gt;Artificial Intelligence Lab&lt;/a&gt; a &lt;a href=&quot;http://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technology&quot; title=&quot;Massachusetts Institute of Technology&quot;&gt;Massachusetts Institute of Technology&lt;/a&gt; , Autore di numerosi testi su AI e la filosofia.&lt;/td&gt; &lt;td&gt;1963&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Max_Newman&quot; title=&quot;Max Newman&quot;&gt;Max Newman&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Istigato la produzione del &lt;a href=&quot;http://en.wikipedia.org/wiki/Colossus_computer&quot; title=&quot;Colosso computer&quot;&gt;Colosso computer&lt;/a&gt; a &lt;a href=&quot;http://en.wikipedia.org/wiki/Bletchley_Park&quot; title=&quot;Bletchley Park&quot;&gt;Bletchley Park&lt;/a&gt;. Dopo la guerra fondò la &lt;a href=&quot;http://en.wikipedia.org/wiki/Computing_Machine_Laboratory&quot; title=&quot;Macchina Laboratorio di Informatica&quot;&gt;Macchina Laboratorio di Informatica&lt;/a&gt; presso il &lt;a href=&quot;http://en.wikipedia.org/wiki/University_of_Manchester&quot; title=&quot;Università di Manchester&quot;&gt;Università di Manchester&lt;/a&gt; dove il primo al mondo &lt;a href=&quot;http://en.wikipedia.org/wiki/Stored-program_computer&quot; title=&quot;A programma memorizzato computer&quot;&gt;A programma memorizzato computer&lt;/a&gt;, Il &lt;a href=&quot;http://en.wikipedia.org/wiki/Manchester_Small-Scale_Experimental_Machine&quot; title=&quot;Manchester Machine Small-Scale Experimental&quot;&gt;Manchester Machine Small-Scale Experimental&lt;/a&gt; è stato inventato.&lt;/td&gt; &lt;td&gt;1943&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/John_von_Neumann&quot; title=&quot;John von Neumann&quot;&gt;John von Neumann&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Ha ideato il &lt;a href=&quot;http://en.wikipedia.org/wiki/Von_Neumann_architecture&quot; title=&quot;Architettura di Von Neumann&quot;&gt;architettura di von Neumann&lt;/a&gt; su cui i computer più moderni sono basati.&lt;/td&gt; &lt;td&gt;1945&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Kristen_Nygaard&quot; title=&quot;Kristen Nygaard&quot;&gt;Kristen Nygaard&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Con &lt;a href=&quot;http://en.wikipedia.org/wiki/Ole-Johan_Dahl&quot; title=&quot;Ole-Johan Dahl&quot;&gt;Ole-Johan Dahl&lt;/a&gt;, Ha inventato il proto-oggetto linguaggio orientato &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/SIMULA&quot; title=&quot;SIMULA&quot;&gt;SIMULA&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1962&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Emil_Leon_Post&quot; title=&quot;Emil Leon Post&quot;&gt;Emil L. Post&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Sviluppato il &lt;a href=&quot;http://en.wikipedia.org/wiki/Post%E2%80%93Turing_machine&quot; title=&quot;Post-macchina di Turing&quot;&gt;Post macchina&lt;/a&gt; come un modello di calcolo, indipendentemente da Turing. Conosciuto anche per lo sviluppo &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Truth_tables&quot; title=&quot;Verità tabelle&quot;&gt;verità tabelle&lt;/a&gt;, Il &lt;a href=&quot;http://en.wikipedia.org/wiki/Post_correspondence_problem&quot; title=&quot;Post corrispondenza problema&quot;&gt;Post corrispondenza problema&lt;/a&gt; utilizzati nella teoria della ricorsione e dimostrare ciò che è noto come &lt;a href=&quot;http://en.wikipedia.org/wiki/Post%27s_theorem&quot; title=&quot;teorema di Post&quot;&gt;teorema di Post&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1936&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Gerard_Salton&quot; title=&quot;Gerard Salton&quot;&gt;Gerard Salton&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Un pioniere di automatica &lt;a href=&quot;http://en.wikipedia.org/wiki/Information_retrieval&quot; title=&quot;Information Retrieval&quot;&gt;Information Retrieval&lt;/a&gt;, Che ha proposto la &lt;a href=&quot;http://en.wikipedia.org/wiki/Vector_space_model&quot; title=&quot;Vector spazio modello&quot;&gt;vettore nello spazio modello&lt;/a&gt; e il &lt;a href=&quot;http://en.wikipedia.org/wiki/Inverted_index&quot; title=&quot;indice invertito&quot;&gt;invertita indice&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1975&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Dennis_Ritchie&quot; title=&quot;Dennis Ritchie&quot;&gt;Dennis Ritchie&lt;/a&gt; e &lt;a href=&quot;http://en.wikipedia.org/wiki/Ken_Thompson&quot; title=&quot;Ken Thompson&quot;&gt;Ken Thompson&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Ha aperto la strada &lt;a href=&quot;http://en.wikipedia.org/wiki/C_%28programming_language%29&quot; title=&quot;C (linguaggio di programmazione)&quot;&gt;C linguaggio di programmazione&lt;/a&gt; e il &lt;a href=&quot;http://en.wikipedia.org/wiki/Unix&quot; title=&quot;Unix&quot;&gt;UNIX&lt;/a&gt; computer il sistema operativo dei Bell Labs.&lt;/td&gt; &lt;td&gt;1967&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Claude_E._Shannon&quot; title=&quot;Claude E. Shannon&quot;&gt;Claude Shannon&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Fondata &lt;a href=&quot;http://en.wikipedia.org/wiki/Information_theory&quot; title=&quot;Teoria dell&#39;informazione&quot;&gt;teoria dell&#39;informazione&lt;/a&gt; e pratico progettazione di circuiti digitali.&lt;/td&gt; &lt;td&gt;1937&lt;br /&gt;
1948&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Herbert_Simon&quot; title=&quot;Herbert Simon&quot;&gt;Herbert Simon&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Uno scienziato politico ed economista che per primo &lt;a href=&quot;http://en.wikipedia.org/wiki/Artificial_intelligence&quot; title=&quot;Intelligenza artificiale&quot;&gt;intelligenza artificiale&lt;/a&gt;. Co-ideatore del &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Logic_Theory_Machine&quot; title=&quot;Logic Theory Machine&quot;&gt;Logic Theory Machine&lt;/a&gt; e il &lt;a href=&quot;http://en.wikipedia.org/wiki/General_Problem_Solver&quot; title=&quot;General Problem Solver&quot;&gt;General Problem Solver&lt;/a&gt; programmi.&lt;/td&gt; &lt;td&gt;1956&lt;br /&gt;
1957&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ivan_Sutherland&quot; title=&quot;Ivan Sutherland&quot;&gt;Ivan Sutherland&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Sketchpad&quot; title=&quot;Album per schizzi&quot;&gt;Album per schizzi&lt;/a&gt;, L&#39;antenato del moderno computer-aided redazione (CAD) programmi e uno dei primi esempi di &lt;a href=&quot;http://en.wikipedia.org/wiki/Object-oriented_programming&quot; title=&quot;programmazione orientata agli oggetti&quot;&gt;programmazione orientata agli oggetti&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1963&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/John_W._Tukey&quot; title=&quot;John W. Tukey&quot;&gt;John W. Tukey&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Con &lt;a href=&quot;http://en.wikipedia.org/wiki/James_Cooley&quot; title=&quot;James Cooley&quot;&gt;James Cooley&lt;/a&gt;, Ha creato il &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Cooley-Tukey_FFT_algorithm&quot; title=&quot;Cooley-Tukey algoritmo FFT&quot;&gt;Fast Fourier Transform&lt;/a&gt;.&lt;/td&gt; &lt;td&gt;1965&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Alan_Turing&quot; title=&quot;Alan Turing&quot;&gt;Alan Turing&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Dato un contributo alla scienza fondazione diversi computer, compreso il &lt;a href=&quot;http://en.wikipedia.org/wiki/Turing_machine&quot; title=&quot;Macchina di Turing&quot;&gt;Macchina di Turing&lt;/a&gt; computazionale del modello, e &lt;a href=&quot;http://en.wikipedia.org/wiki/Automatic_Computing_Engine&quot; title=&quot;Automatic Computing Engine&quot;&gt;ACE&lt;/a&gt; design.&lt;/td&gt; &lt;td&gt;1936&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Maurice_Wilkes&quot; title=&quot;Maurice Wilkes&quot;&gt;Maurice Wilkes&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Costruito il primo pratico &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Stored_program&quot; title=&quot;Stored programma&quot;&gt;programma registrato&lt;/a&gt; computer (&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/EDSAC&quot; title=&quot;EDSAC&quot;&gt;EDSAC&lt;/a&gt;) Da completare e per essere accreditato con le idee di diversi linguaggi di programmazione ad alto livello costrutti.&lt;/td&gt; &lt;td&gt;1949&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Niklaus_Wirth&quot; title=&quot;Niklaus Wirth&quot;&gt;Niklaus Wirth&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Progettato il &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Pascal_programming_language&quot; title=&quot;Pascal linguaggio di programmazione&quot;&gt;Pascal&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Modula-2&quot; title=&quot;Modula-2&quot;&gt;Modula-2&lt;/a&gt; e &lt;a href=&quot;http://en.wikipedia.org/wiki/Oberon&quot; title=&quot;Oberon&quot;&gt;Oberon&lt;/a&gt; linguaggi di programmazione.&lt;/td&gt; &lt;td&gt;1970&lt;br /&gt;
1978&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Konrad_Zuse&quot; title=&quot;Konrad Zuse&quot;&gt;Konrad Zuse&lt;/a&gt;&lt;/td&gt; &lt;td&gt;Costruì il primo computer funzionante nastro a programma memorizzato-controllato, il &lt;a href=&quot;http://en.wikipedia.org/wiki/Z3_%28computer%29&quot; title=&quot;Z3 (computer)&quot;&gt;Z3&lt;/a&gt;. La Z3 è stato dimostrato di essere alla completezza di Turing nel 1998.&lt;/td&gt; &lt;td&gt;1941&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/113659219847810577/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/02/pionieri-dellinformatica.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/113659219847810577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/113659219847810577'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/02/pionieri-dellinformatica.html' title='Pionieri dell&#39;informatica'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5072520483132159389.post-4689654901901224278</id><published>2011-02-09T11:12:00.000-08:00</published><updated>2011-03-02T00:28:59.980-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="grandi programmatori"/><category scheme="http://www.blogger.com/atom/ns#" term="lista"/><title type='text'>Lista dei più grandi programmatori</title><content type='html'>&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mw-headline&quot; id=&quot;A&quot;&gt;A&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Scott_Adams_%28game_designer%29&quot; title=&quot;Scott Adams (game designer)&quot;&gt;Scott Adams&lt;/a&gt; - Uno dei primi sviluppatori di &lt;a href=&quot;http://en.wikipedia.org/wiki/CP/M&quot; title=&quot;CP / M&quot;&gt;CP / M&lt;/a&gt; e &lt;a href=&quot;http://en.wikipedia.org/wiki/DOS&quot; title=&quot;DOS&quot;&gt;DOS&lt;/a&gt; Giochi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Leonard_Adleman&quot; title=&quot;Leonard Adleman&quot;&gt;Leonard Adleman&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/RSA&quot; title=&quot;RSA&quot;&gt;RSA&lt;/a&gt; algoritmo (il &lt;i&gt;A&lt;/i&gt; nel nome sta per Adleman), ha coniato il termine &lt;i&gt;computer virus&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Alfred_Aho&quot; title=&quot;Alfred Aho&quot;&gt;Alfred Aho&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/AWK&quot; title=&quot;AWK&quot;&gt;AWK&lt;/a&gt; (Il &lt;i&gt;A&lt;/i&gt; nel nome sta per Aho &quot;), e autore principale del famoso &lt;a href=&quot;http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools&quot; title=&quot;Compilatori: principi, tecniche e strumenti&quot;&gt;Dragon libro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/JJ_Allaire&quot; title=&quot;JJ Allaire&quot;&gt;JJ Allaire&lt;/a&gt; - Creatore di ColdFusion Application Server, &lt;a href=&quot;http://en.wikipedia.org/wiki/ColdFusion_Markup_Language&quot; title=&quot;ColdFusion Markup Language&quot;&gt;ColdFusion Markup Language&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Paul_Allen&quot; title=&quot;Paul Allen&quot;&gt;Paul Allen&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Altair_BASIC&quot; title=&quot;Altair BASIC&quot;&gt;Altair BASIC&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Applesoft_BASIC&quot; title=&quot;Applesoft BASIC&quot;&gt;Applesoft BASIC&lt;/a&gt;, Co-fondatore &lt;a href=&quot;http://en.wikipedia.org/wiki/Microsoft&quot; title=&quot;Microsoft&quot;&gt;Microsoft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Eric_Allman&quot; title=&quot;Eric Allman&quot;&gt;Eric Allman&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Sendmail&quot; title=&quot;Sendmail&quot;&gt;sendmail&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Syslog&quot; title=&quot;Syslog&quot;&gt;syslog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Marc_Andreessen&quot; title=&quot;Marc Andreessen&quot;&gt;Marc Andreessen&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Mosaic_%28web_browser%29&quot; title=&quot;Mosaic (web browser)&quot;&gt;Mosaico&lt;/a&gt;, Co-fondatore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Netscape_Communications_Corporation&quot; title=&quot;Netscape Communications Corporation&quot;&gt;Netscape&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bill_Atkinson&quot; title=&quot;Bill Atkinson&quot;&gt;Bill Atkinson&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/QuickDraw&quot; title=&quot;QuickDraw&quot;&gt;QuickDraw&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/HyperCard&quot; title=&quot;HyperCard&quot;&gt;HyperCard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt; &lt;span class=&quot;mw-headline&quot; id=&quot;B&quot;&gt;B&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/John_Backus&quot; title=&quot;John Backus&quot;&gt;John Backus&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/FORTRAN&quot; title=&quot;FORTRAN&quot;&gt;FORTRAN&lt;/a&gt;, &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Backus-Naur_form&quot; title=&quot;Backus-Naur form&quot;&gt;BNF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Richard_Bartle&quot; title=&quot;Richard Bartle&quot;&gt;Richard Bartle&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/MUD&quot; title=&quot;MUD&quot;&gt;MUD&lt;/a&gt;, Con &lt;a href=&quot;http://en.wikipedia.org/wiki/Roy_Trubshaw&quot; title=&quot;Roy Trubshaw&quot;&gt;Roy Trubshaw&lt;/a&gt;, Creatore del MUD&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Brian_Behlendorf&quot; title=&quot;Brian Behlendorf&quot;&gt;Brian Behlendorf&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Apache_HTTP_Server&quot; title=&quot;Apache HTTP Server&quot;&gt;Apache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Kent_Beck&quot; title=&quot;Kent Beck&quot;&gt;Kent Beck&lt;/a&gt; - Creato &lt;a href=&quot;http://en.wikipedia.org/wiki/Extreme_Programming&quot; title=&quot;Extreme Programming&quot;&gt;Extreme Programming&lt;/a&gt; e co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/JUnit&quot; title=&quot;JUnit&quot;&gt;JUnit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Donald_Becker&quot; title=&quot;Donald Becker&quot;&gt;Donald Becker&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Linux&quot; title=&quot;Linux&quot;&gt;Linux&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Ethernet&quot; title=&quot;Ethernet&quot;&gt;Ethernet&lt;/a&gt; conducenti, &lt;a href=&quot;http://en.wikipedia.org/wiki/Beowulf_%28computing%29&quot; title=&quot;La leggenda di Beowulf (informatica)&quot;&gt;La leggenda di Beowulf&lt;/a&gt; clustering&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Doug_Bell&quot; title=&quot;Doug Bell&quot;&gt;Doug Bell&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Dungeon_Master_%28video_game%29&quot; title=&quot;Dungeon Master (videogioco)&quot;&gt;Dungeon Master&lt;/a&gt; serie di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Computer_game&quot; title=&quot;Giochi per computer&quot;&gt;giochi per computer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Fabrice_Bellard&quot; title=&quot;Fabrice Bellard&quot;&gt;Fabrice Bellard&lt;/a&gt; - Creatore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/FFMPEG&quot; title=&quot;FFMPEG&quot;&gt;FFMPEG&lt;/a&gt; Open Library codec, &lt;a href=&quot;http://en.wikipedia.org/wiki/QEMU&quot; title=&quot;QEMU&quot;&gt;QEMU&lt;/a&gt; strumenti di virtualizzazione&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Tim_Berners-Lee&quot; title=&quot;Tim Berners-Lee&quot;&gt;Tim Berners-Lee&lt;/a&gt; - Inventore di &lt;a href=&quot;http://en.wikipedia.org/wiki/World_Wide_Web&quot; title=&quot;World Wide Web&quot;&gt;World Wide Web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Daniel_J._Bernstein&quot; title=&quot;Daniel J. Bernstein&quot;&gt;Daniel J. Bernstein&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Djbdns&quot; title=&quot;Djbdns&quot;&gt;djbdns&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Qmail&quot; title=&quot;Qmail&quot;&gt;qmail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Eric_Bina&quot; title=&quot;Eric Bina&quot;&gt;Eric Bina&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Mosaic_%28web_browser%29&quot; title=&quot;Mosaic (web browser)&quot;&gt;Mosaic browser web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Marc_Blank&quot; title=&quot;Marc Blank&quot;&gt;Marc Blank&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Zork&quot; title=&quot;Zork&quot;&gt;Zork&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Joshua_Bloch&quot; title=&quot;Joshua Bloch&quot;&gt;Joshua Bloch&lt;/a&gt; - Core designer linguaggio Java, il piombo &lt;a href=&quot;http://en.wikipedia.org/wiki/Java_collections_framework&quot; title=&quot;Java collezioni quadro&quot;&gt;Java collezioni quadro&lt;/a&gt; progetto&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bert_Bos&quot; title=&quot;Bert Bos&quot;&gt;Bert Bos&lt;/a&gt; - Autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Argo_%28web_browser%29&quot; title=&quot;Argo (web browser)&quot;&gt;Argo&lt;/a&gt; browser web, co-autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Cascading_Style_Sheets&quot; title=&quot;Fogli di stile CSS&quot;&gt;Fogli di stile CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/David_Bradley_%28engineer%29&quot; title=&quot;David Bradley (ingegnere)&quot;&gt;David Bradley&lt;/a&gt; - Codificatore sul &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/IBM_PC&quot; title=&quot;IBM PC&quot;&gt;IBM PC&lt;/a&gt; progetto Team che ha scritto il &lt;i&gt;Control-Alt-Canc&lt;/i&gt; tastiera gestore, incorporato in tutti i PC-compatibili &lt;a href=&quot;http://en.wikipedia.org/wiki/BIOS&quot; title=&quot;BIOS&quot;&gt;BIOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Andrew_Braybrook&quot; title=&quot;Andrew Braybrook&quot;&gt;Andrew Braybrook&lt;/a&gt; - Videogiochi &lt;i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Paradroid&quot; title=&quot;Paradroid&quot;&gt;Paradroid&lt;/a&gt;&lt;/i&gt; e &lt;i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Uridium&quot; title=&quot;Uridium&quot;&gt;Uridium&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Lawrence_M._Breed&quot; title=&quot;Lawrence M. Razza&quot;&gt;Larry Razza&lt;/a&gt; - Co-sviluppatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/APL_%28programming_language%29&quot; title=&quot;APL (linguaggio di programmazione)&quot;&gt;APL \ 360&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Jack_E._Bresenham&quot; title=&quot;Jack E. Bresenham&quot;&gt;Jack E. Bresenham&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm&quot; title=&quot;linea algoritmo di Bresenham&quot;&gt;linea algoritmo di Bresenham&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Dan_Bricklin&quot; title=&quot;Dan Bricklin&quot;&gt;Dan Bricklin&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/VisiCalc&quot; title=&quot;VisiCalc&quot;&gt;VisiCalc&lt;/a&gt;, La prima personale &lt;a href=&quot;http://en.wikipedia.org/wiki/Spreadsheet&quot; title=&quot;Foglio elettronico&quot;&gt;foglio elettronico&lt;/a&gt; programma&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Walter_Bright&quot; title=&quot;Walter Bright&quot;&gt;Walter Bright&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Digital_Mars&quot; title=&quot;Digital Mars&quot;&gt;Digital Mars&lt;/a&gt;, Primo compilatore C + +, autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/D_%28programming_language%29&quot; title=&quot;D (linguaggio di programmazione)&quot;&gt;D (linguaggio di programmazione)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Richard_Brodie_%28programmer%29&quot; title=&quot;Richard Brodie (programmatore)&quot;&gt;Richard Brodie&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Microsoft_Office_Word&quot; title=&quot;Microsoft Office Word&quot;&gt;Microsoft Word&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Grady_Booch&quot; title=&quot;Grady Booch&quot;&gt;Grady Booch&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Unified_Modeling_Language&quot; title=&quot;Unified Modeling Language&quot;&gt;Unified Modeling Language&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Andries_Brouwer&quot; title=&quot;Andries Brouwer&quot;&gt;Andries Brouwer&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Hack_%28Unix_video_game%29&quot; title=&quot;Hack (videogioco Unix)&quot;&gt;Hack&lt;/a&gt;, Ex manutentore &lt;a href=&quot;http://en.wikipedia.org/wiki/Man_page&quot; title=&quot;Man pagina&quot;&gt;uomo cercapersone&lt;/a&gt; &lt;span class=&quot;plainlinksneverexpand&quot;&gt;&lt;code&gt;&lt;a class=&quot;external text&quot; href=&quot;http://linux.die.net/man/1/man&quot; rel=&quot;nofollow&quot;&gt;man (1)&lt;/a&gt;&lt;/code&gt;&lt;/span&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Linux_kernel&quot; title=&quot;Linux kernel&quot;&gt;Linux kernel&lt;/a&gt; hacker&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Danielle_Bunten_Berry&quot; title=&quot;Danielle Berry Bunten&quot;&gt;Danielle Berry Bunten&lt;/a&gt; (Dani Bunten) - &lt;a href=&quot;http://en.wikipedia.org/wiki/M.U.L.E.&quot; title=&quot;M.U.L.E.&quot;&gt;M.U.L.E.&lt;/a&gt;, Gioco multiplayer video&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Dries_Buytaert&quot; title=&quot;Dries Buytaert&quot;&gt;Dries Buytaert&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Drupal&quot; title=&quot;Drupal&quot;&gt;Drupal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt; &lt;span class=&quot;mw-headline&quot; id=&quot;C&quot;&gt;C&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Steve_Capps&quot; title=&quot;Steve Capps&quot;&gt;Steve Capps&lt;/a&gt; - Co-creatore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Apple_Macintosh&quot; title=&quot;Apple Macintosh&quot;&gt;Macintosh&lt;/a&gt; e &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Apple_Newton&quot; title=&quot;Apple Newton&quot;&gt;Newton&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/John_D._Carmack&quot; title=&quot;John D. Carmack&quot;&gt;John D. Carmack&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/First_person_shooter&quot; title=&quot;Sparatutto in prima persona&quot;&gt;sparatutto in prima persona&lt;/a&gt; &lt;i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Doom_%28video_game%29&quot; title=&quot;Doom (videogioco)&quot;&gt;Destino&lt;/a&gt;&lt;/i&gt;, &lt;i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Quake_%28video_game%29&quot; title=&quot;Quake (videogioco)&quot;&gt;Tremito&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Vinton_Cerf&quot; title=&quot;Vinton Cerf&quot;&gt;Vinton Cerf&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/TCP/IP&quot; title=&quot;TCP / IP&quot;&gt;TCP / IP&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Network_Control_Program&quot; title=&quot;Network Control Program&quot;&gt;NCP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ward_Christensen&quot; title=&quot;Ward Christensen&quot;&gt;Ward Christensen&lt;/a&gt; - Ha scritto la prima BBS (Bulletin Board System) CBBS sistema&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bram_Cohen&quot; title=&quot;Bram Cohen&quot;&gt;Bram Cohen&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/BitTorrent_%28protocol%29&quot; title=&quot;BitTorrent (protocollo)&quot;&gt;BitTorrent&lt;/a&gt; protocollo di progettazione e attuazione&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Alain_Colmerauer&quot; title=&quot;Alain Colmerauer&quot;&gt;Alain Colmerauer&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Prolog&quot; title=&quot;Prolog&quot;&gt;Prolog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Alan_Cooper&quot; title=&quot;Alan Cooper&quot;&gt;Alan Cooper&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Visual_Basic&quot; title=&quot;Visual Basic&quot;&gt;Visual Basic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Alan_Cox&quot; title=&quot;Alan Cox&quot;&gt;Alan Cox&lt;/a&gt; - Co-sviluppatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Linux&quot; title=&quot;Linux&quot;&gt;Linux&lt;/a&gt; &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Kernel_%28computers%29&quot; title=&quot;Kernel (computer)&quot;&gt;kernel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Brad_Cox&quot; title=&quot;Brad Cox&quot;&gt;Brad Cox&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Objective-C&quot; title=&quot;Objective-C&quot;&gt;Objective-C&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Mike_Cowlishaw&quot; title=&quot;Mike Cowlishaw&quot;&gt;Mike Cowlishaw&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/REXX&quot; title=&quot;REXX&quot;&gt;REXX e NetRexx&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Oxford_English_Dictionary&quot; title=&quot;Dizionario Inglese di Oxford&quot;&gt;Lexx editor&lt;/a&gt;, Elaborazione di immagini, &lt;a href=&quot;http://en.wikipedia.org/wiki/Decimal&quot; title=&quot;Decimale&quot;&gt;decimale&lt;/a&gt; aritmetica dei pacchetti&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Mark_Crispin&quot; title=&quot;Mark Crispin&quot;&gt;Mark Crispin&lt;/a&gt; - Creatore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/IMAP&quot; title=&quot;IMAP&quot;&gt;IMAP&lt;/a&gt;, Autore di UW-IMAP, una delle implementazioni di riferimento di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/IMAP4&quot; title=&quot;IMAP4&quot;&gt;IMAP4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Pamela_Crossley&quot; title=&quot;Pamela Crossley&quot;&gt;Pamela Crossley&lt;/a&gt; - Creatore di SIMPLE per la gestione accademica di pagine web&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ward_Cunningham&quot; title=&quot;Ward Cunningham&quot;&gt;Ward Cunningham&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Wiki&quot; title=&quot;Wiki&quot;&gt;Wiki&lt;/a&gt; concetto&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/William_Crowther&quot; title=&quot;William Crowther&quot;&gt;William Crowther&lt;/a&gt; - Avventura Colossal Cave&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Dave_Cutler&quot; title=&quot;Dave Cutler&quot;&gt;Dave Cutler&lt;/a&gt; - Architetto di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Virtual_Memory_System&quot; title=&quot;Virtual Memory System&quot;&gt;VMS&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Windows_NT&quot; title=&quot;Windows NT&quot;&gt;Windows NT&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt; &lt;span class=&quot;mw-headline&quot; id=&quot;D&quot;&gt;D&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ole-Johan_Dahl&quot; title=&quot;Ole-Johan Dahl&quot;&gt;Ole-Johan Dahl&lt;/a&gt; - Co-creatore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/SIMULA&quot; title=&quot;SIMULA&quot;&gt;SIMULA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/James_Duncan_Davidson&quot; title=&quot;James Duncan Davidson&quot;&gt;James Duncan Davidson&lt;/a&gt; - Creatore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Jakarta_Tomcat&quot; title=&quot;Jakarta Tomcat&quot;&gt;Micio&lt;/a&gt;, Ora parte di &lt;a href=&quot;http://en.wikipedia.org/wiki/Jakarta_Project&quot; title=&quot;Jakarta Project&quot;&gt;Jakarta Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/L._Peter_Deutsch&quot; title=&quot;L. Peter Deutsch&quot;&gt;L. Peter Deutsch&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Ghostscript&quot; title=&quot;Ghostscript&quot;&gt;Ghostscript&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Assembly_language#Assembler&quot; title=&quot;Linguaggio assembly&quot;&gt;Assembler&lt;/a&gt; per &lt;a href=&quot;http://en.wikipedia.org/wiki/PDP-1&quot; title=&quot;PDP-1&quot;&gt;PDP-1&lt;/a&gt;, &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/XDS-940&quot; title=&quot;XDS-940&quot;&gt;XDS-940&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Time-sharing&quot; title=&quot;Time-sharing&quot;&gt;timesharing&lt;/a&gt; sistema, &lt;a href=&quot;http://en.wikipedia.org/wiki/QED_%28text_editor%29&quot; title=&quot;QED (editor di testo)&quot;&gt;QED&lt;/a&gt; originale co-autore&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Edsger_Dijkstra&quot; title=&quot;Edsger Dijkstra&quot;&gt;Edsger Dijkstra&lt;/a&gt; - Contributi a &lt;a href=&quot;http://en.wikipedia.org/wiki/ALGOL&quot; title=&quot;ALGOL&quot;&gt;ALGOL&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm&quot; title=&quot;algoritmo di Dijkstra&quot;&gt;algoritmo di Dijkstra&lt;/a&gt;, &lt;i&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/GOTO&quot; title=&quot;GOTO&quot;&gt;Goto Considered Harmful&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Matt_Dillon_%28computer_scientist%29&quot; title=&quot;Matt Dillon (informatico)&quot;&gt;Matt Dillon&lt;/a&gt; - Programmatore di vari software tra cui DICE e &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/DragonflyBSD&quot; title=&quot;DragonflyBSD&quot;&gt;DragonflyBSD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Martin_Dougiamas&quot; title=&quot;Martin Dougiamas&quot;&gt;Martin Dougiamas&lt;/a&gt; - Ideatore e sviluppatore di piombo &lt;a href=&quot;http://en.wikipedia.org/wiki/Moodle&quot; title=&quot;Moodle&quot;&gt;Moodle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Adam_Dunkels&quot; title=&quot;Adam Dunkels&quot;&gt;Adam Dunkels&lt;/a&gt; - Autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Contiki&quot; title=&quot;Contiki&quot;&gt;Contiki&lt;/a&gt; sistema operativo, il &lt;a href=&quot;http://en.wikipedia.org/wiki/LwIP&quot; title=&quot;LwIP&quot;&gt;lwIP&lt;/a&gt; e &lt;a href=&quot;http://en.wikipedia.org/wiki/UIP&quot; title=&quot;UIP&quot;&gt;LinuxIT&lt;/a&gt; embedded stack TCP / IP, inventore del &lt;a href=&quot;http://en.wikipedia.org/wiki/Protothreads&quot; title=&quot;Protothreads&quot;&gt;protothreads&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;mw-headline&quot; id=&quot;E&quot;&gt;E&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Les_Earnest&quot; title=&quot;Les Earnest&quot;&gt;Les Earnest&lt;/a&gt; - Autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Finger_protocol&quot; title=&quot;Finger protocollo&quot;&gt;dito&lt;/a&gt; programma&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Brendan_Eich&quot; title=&quot;Brendan Eich&quot;&gt;Brendan Eich&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/JavaScript&quot; title=&quot;JavaScript&quot;&gt;JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Larry_Ellison&quot; title=&quot;Larry Ellison&quot;&gt;Larry Ellison&lt;/a&gt; - Co-creatore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Oracle_database&quot; title=&quot;Oracle database&quot;&gt;Oracle database&lt;/a&gt;, Co-fondatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Oracle_Corporation&quot; title=&quot;Oracle Corporation&quot;&gt;Oracle Corporation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Marc_Ewing&quot; title=&quot;Marc Ewing&quot;&gt;Marc Ewing&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Red_Hat_Linux&quot; title=&quot;Red Hat Linux&quot;&gt;Red Hat Linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;mw-headline&quot; id=&quot;F&quot;&gt;F&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Dan_Farmer&quot; title=&quot;Dan Farmer&quot;&gt;Dan Farmer&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/COPS_%28TV_series%29&quot; title=&quot;COPS (serie TV)&quot;&gt;COPS&lt;/a&gt; e &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/SATAN&quot; title=&quot;SATANA&quot;&gt;SATANA&lt;/a&gt; Security Scanner&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Stuart_Feldman&quot; title=&quot;Stuart Feldman&quot;&gt;Stuart Feldman&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Make_%28software%29&quot; title=&quot;Marca (software)&quot;&gt;fare&lt;/a&gt;, Autore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Fortran_77&quot; title=&quot;Fortran 77&quot;&gt;Fortran 77&lt;/a&gt; compilatore, parte del gruppo originale che ha creato &lt;a href=&quot;http://en.wikipedia.org/wiki/Unix&quot; title=&quot;Unix&quot;&gt;Unix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/David_Filo&quot; title=&quot;David Filo&quot;&gt;David Filo&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Yahoo%21&quot; title=&quot;Inizio&quot;&gt;Inizio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Brad_Fitzpatrick&quot; title=&quot;Brad Fitzpatrick&quot;&gt;Brad Fitzpatrick&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Memcached&quot; title=&quot;Memcached&quot;&gt;memcached&lt;/a&gt;, &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Livejournal&quot; title=&quot;Livejournal&quot;&gt;Livejournal&lt;/a&gt; e &lt;a href=&quot;http://en.wikipedia.org/wiki/OpenID&quot; title=&quot;OpenID&quot;&gt;OpenID&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Andrew_Fluegelman&quot; title=&quot;Andrew Fluegelman&quot;&gt;Andrew Fluegelman&lt;/a&gt; - Autore &lt;a href=&quot;http://en.wikipedia.org/wiki/PC-Talk&quot; title=&quot;PC-Talk&quot;&gt;PC-Talk&lt;/a&gt; software di comunicazione, è considerato un co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Shareware&quot; title=&quot;Shareware&quot;&gt;shareware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Brian_Fox_%28computer_programmer%29&quot; title=&quot;Brian Fox (programmatore informatico)&quot;&gt;Brian Fox&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Bash_%28Unix_shell%29&quot; title=&quot;Bash (shell Unix)&quot;&gt;Bash&lt;/a&gt;, &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Readline&quot; title=&quot;Readline&quot;&gt;Readline&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/GNU&quot; title=&quot;GNU&quot;&gt;GNU&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Finger_protocol&quot; title=&quot;Finger protocollo&quot;&gt;Dito&lt;/a&gt;, &lt;a class=&quot;new&quot; href=&quot;http://en.wikipedia.org/w/index.php?title=Meta-HTML&amp;amp;action=edit&amp;amp;redlink=1&quot; title=&quot;Meta-HTML (pagina non esiste)&quot;&gt;Meta-HTML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Jim_Fruchterman&quot; title=&quot;Jim Fruchterman&quot;&gt;Jim Fruchterman&lt;/a&gt; - Fondatore di Arkenstone (ora parte della &lt;a href=&quot;http://en.wikipedia.org/wiki/Freedom_Scientific&quot; title=&quot;Freedom Scientific&quot;&gt;Freedom Scientific&lt;/a&gt;) E &lt;a href=&quot;http://en.wikipedia.org/wiki/Benetech&quot; title=&quot;Benetech&quot;&gt;Benetech&lt;/a&gt;, Scanner creato per &lt;a href=&quot;http://en.wikipedia.org/wiki/Blindness&quot; title=&quot;Cecità&quot;&gt;cieco&lt;/a&gt; persone&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt; &lt;span class=&quot;mw-headline&quot; id=&quot;G&quot;&gt;G&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Elon_Gasper&quot; title=&quot;Elon Gasper&quot;&gt;Elon Gasper&lt;/a&gt; - Co-fondatore &lt;a href=&quot;http://en.wikipedia.org/wiki/Bright_Star_Technology&quot; title=&quot;Bright Star Technology&quot;&gt;Bright Star Technology&lt;/a&gt;, Brevettato realistici movimenti facciali per il parlato in-game. &lt;a class=&quot;new&quot; href=&quot;http://en.wikipedia.org/w/index.php?title=HyperAnimator&amp;amp;action=edit&amp;amp;redlink=1&quot; title=&quot;HyperAnimator (pagina non esiste)&quot;&gt;HyperAnimator&lt;/a&gt;, &lt;a class=&quot;new&quot; href=&quot;http://en.wikipedia.org/w/index.php?title=Alphabet_Blocks&amp;amp;action=edit&amp;amp;redlink=1&quot; title=&quot;Alphabet Blocks (pagina non esiste)&quot;&gt;Alphabet Blocks&lt;/a&gt;, Ecc&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bill_Gates&quot; title=&quot;Bill Gates&quot;&gt;Bill Gates&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Altair_BASIC&quot; title=&quot;Altair BASIC&quot;&gt;Altair BASIC&lt;/a&gt;, Co-fondatore &lt;a href=&quot;http://en.wikipedia.org/wiki/Microsoft&quot; title=&quot;Microsoft&quot;&gt;Microsoft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Steve_Gibson&quot; title=&quot;Steve Gibson&quot;&gt;Steve Gibson&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/SpinRite&quot; title=&quot;SpinRite&quot;&gt;SpinRite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/John_Gilmore_%28activist%29&quot; title=&quot;John Gilmore (attivista)&quot;&gt;John Gilmore&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/GDB&quot; title=&quot;GDB&quot;&gt;GDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Adele_Goldberg_%28computer_scientist%29&quot; title=&quot;Adele Goldberg (informatico)&quot;&gt;Adele Goldberg&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Smalltalk&quot; title=&quot;Smalltalk&quot;&gt;Smalltalk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ryan_C._Gordon&quot; title=&quot;Ryan C. Gordon&quot;&gt;Ryan C. Gordon&lt;/a&gt; (Pseudonimo Icculus) - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Loki_Games&quot; title=&quot;Loki Games&quot;&gt;Lokigames&lt;/a&gt;, &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Ioquake3&quot; title=&quot;Ioquake3&quot;&gt;ioquake3&lt;/a&gt;, &lt;a class=&quot;new&quot; href=&quot;http://en.wikipedia.org/w/index.php?title=MojoSetup&amp;amp;action=edit&amp;amp;redlink=1&quot; title=&quot;MojoSetup (pagina non esiste)&quot;&gt;MojoSetup&lt;/a&gt;, Ecc&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/James_Gosling&quot; title=&quot;James Gosling&quot;&gt;James Gosling&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Java_%28programming_language%29&quot; title=&quot;Java (linguaggio di programmazione)&quot;&gt;Java&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Gosling_Emacs&quot; title=&quot;Gosling Emacs&quot;&gt;Gosling Emacs&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/NeWS&quot; title=&quot;NeWS&quot;&gt;NeWS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bill_Gosper&quot; title=&quot;Bill Gosper&quot;&gt;Bill Gosper&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Macsyma&quot; title=&quot;Macsyma&quot;&gt;Macsyma&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Lisp_machine&quot; title=&quot;Lisp macchina&quot;&gt;Lisp macchina&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Hashlife&quot; title=&quot;Hashlife&quot;&gt;hashlife&lt;/a&gt;, Ha contribuito &lt;a href=&quot;http://en.wikipedia.org/wiki/Donald_Knuth&quot; title=&quot;Donald Knuth&quot;&gt;Donald Knuth&lt;/a&gt; su di Vol.2 &lt;a href=&quot;http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming&quot; title=&quot;The Art of Computer Programming&quot;&gt;The Art of Computer Programming&lt;/a&gt; (Algoritmi semi-numerica)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Andrew_Gower&quot; title=&quot;Andrew Gower&quot;&gt;Andrew Gower&lt;/a&gt; - &lt;i&gt;RuneScape Classic&lt;/i&gt;, &lt;i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/RuneScape&quot; title=&quot;RuneScape&quot;&gt;RuneScape&lt;/a&gt;&lt;/i&gt;, Co-fondatore &lt;a href=&quot;http://en.wikipedia.org/wiki/Jagex&quot; title=&quot;Jagex&quot;&gt;Jagex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Paul_Gower&quot; title=&quot;Paul Gower&quot;&gt;Paul Gower&lt;/a&gt; - &lt;i&gt;RuneScape Classic&lt;/i&gt;, &lt;i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/RuneScape&quot; title=&quot;RuneScape&quot;&gt;RuneScape&lt;/a&gt;&lt;/i&gt;, Co-fondatore &lt;a href=&quot;http://en.wikipedia.org/wiki/Jagex&quot; title=&quot;Jagex&quot;&gt;Jagex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Paul_Graham_%28computer_programmer%29&quot; title=&quot;Paul Graham (programmatore informatico)&quot;&gt;Paul Graham&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Yahoo%21_Store&quot; title=&quot;Inizio Store&quot;&gt;Inizio Store&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/On_Lisp&quot; title=&quot;Il Lisp&quot;&gt;Il Lisp&lt;/a&gt;, ANSI &lt;a href=&quot;http://en.wikipedia.org/wiki/Common_Lisp&quot; title=&quot;Common Lisp&quot;&gt;Common Lisp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/John_Graham-Cumming&quot; title=&quot;John Graham-Cumming&quot;&gt;John Graham-Cumming&lt;/a&gt; - Autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/POPFile&quot; title=&quot;POPFile&quot;&gt;POPFile&lt;/a&gt;, Un &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Bayesian_filter&quot; title=&quot;Filtro bayesiano&quot;&gt;Filtro bayesiano&lt;/a&gt;A base di classificatore e-mail&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ralph_Griswold&quot; title=&quot;Ralph Griswold&quot;&gt;Ralph Griswold&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/SNOBOL&quot; title=&quot;SNOBOL&quot;&gt;SNOBOL&lt;/a&gt;, Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Icon_%28programming_language%29&quot; title=&quot;Icon (linguaggio di programmazione)&quot;&gt;Icon (linguaggio di programmazione)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Richard_Greenblatt_%28programmer%29&quot; title=&quot;Richard Greenblatt (programmatore)&quot;&gt;Richard Greenblatt&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Lisp_machine&quot; title=&quot;Lisp macchina&quot;&gt;Lisp macchina&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Incompatible_Timesharing_System&quot; title=&quot;Incompatibile sistema timesharing&quot;&gt;Incompatibile sistema timesharing&lt;/a&gt;, &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/MacHack_%28chess%29&quot; title=&quot;MacHack (scacchi)&quot;&gt;MacHack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Scott_Guthrie&quot; title=&quot;Scott Guthrie&quot;&gt;Scott Guthrie&lt;/a&gt;, (Pseudonimo ScottGu) - ASP.NET Creator&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Andi_Gutmans&quot; title=&quot;Andi Gutmans&quot;&gt;Andi Gutmans&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/PHP&quot; title=&quot;PHP&quot;&gt;PHP&lt;/a&gt; linguaggio di programmazione&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt; &lt;span class=&quot;mw-headline&quot; id=&quot;H&quot;&gt;H&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Jim_Hall_%28programmer%29&quot; title=&quot;Jim Hall (programmatore)&quot;&gt;Jim Hall&lt;/a&gt; - Ha avviato l&#39; &lt;a href=&quot;http://en.wikipedia.org/wiki/FreeDOS&quot; title=&quot;FreeDOS&quot;&gt;FreeDOS&lt;/a&gt; progetto&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/David_Heinemeier_Hansson&quot; title=&quot;David Heinemeier Hansson&quot;&gt;David Heinemeier Hansson&lt;/a&gt; - Ha creato la &lt;a href=&quot;http://en.wikipedia.org/wiki/Ruby_on_Rails&quot; title=&quot;Ruby on Rails&quot;&gt;Ruby on Rails&lt;/a&gt; quadro di riferimento per lo sviluppo di applicazioni web.&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/David_Albert_Huffman&quot; title=&quot;Albert David Huffman&quot;&gt;Albert David Huffman&lt;/a&gt; - Ha creato la &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Huffman_Code&quot; title=&quot;Codice di Huffman&quot;&gt;Codice di Huffman&lt;/a&gt; Algoritmo di compressione.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Rebecca_Heineman&quot; title=&quot;Rebecca Heineman&quot;&gt;Rebecca Heineman&lt;/a&gt; - Autore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Bard%27s_Tale_III&quot; title=&quot;Bard&#39;s Tale III&quot;&gt;Bard&#39;s Tale III&lt;/a&gt;: Thief of Fate e &lt;i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Dragon_Wars&quot; title=&quot;Dragon Wars&quot;&gt;Dragon Wars&lt;/a&gt;&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Anders_Hejlsberg&quot; title=&quot;Anders Hejlsberg&quot;&gt;Anders Hejlsberg&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Turbo_Pascal&quot; title=&quot;Turbo Pascal&quot;&gt;Turbo Pascal&lt;/a&gt;, &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Borland_Delphi&quot; title=&quot;Borland Delphi&quot;&gt;Borland Delphi&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/C_Sharp_%28programming_language%29&quot; title=&quot;C Sharp (linguaggio di programmazione)&quot;&gt;C #&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ted_Henter&quot; title=&quot;Ted Henter&quot;&gt;Ted Henter&lt;/a&gt; - Fondatore di Henter-Joyce (ora parte di &lt;a href=&quot;http://en.wikipedia.org/wiki/Freedom_Scientific&quot; title=&quot;Freedom Scientific&quot;&gt;Freedom Scientific&lt;/a&gt;) Creatore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Job_Access_With_Speech&quot; title=&quot;Access lavoro con Speech&quot;&gt;Fauci&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Screen_reader&quot; title=&quot;Screen reader&quot;&gt;screen reader&lt;/a&gt; software per non vedenti&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Andy_Hertzfeld&quot; title=&quot;Andy Hertzfeld&quot;&gt;Andy Hertzfeld&lt;/a&gt; - Co-creatore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Apple_Macintosh&quot; title=&quot;Apple Macintosh&quot;&gt;Macintosh&lt;/a&gt;, Co-fondatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/General_Magic&quot; title=&quot;General Magic&quot;&gt;General Magic&lt;/a&gt;, Co-fondatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Eazel&quot; title=&quot;Eazel&quot;&gt;Eazel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Rich_Hickey&quot; title=&quot;Rich Hickey&quot;&gt;Rich Hickey&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Clojure&quot; title=&quot;Clojure&quot;&gt;Clojure&lt;/a&gt; lingua&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/D._Richard_Hipp&quot; title=&quot;D. Richard Hipp&quot;&gt;D. Richard Hipp&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/SQLite&quot; title=&quot;SQLite&quot;&gt;SQLite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/C._A._R._Hoare&quot; title=&quot;C. A. R. Hoare&quot;&gt;C. A. R. Hoare&lt;/a&gt; - Prima implementazione di &lt;a href=&quot;http://en.wikipedia.org/wiki/Quicksort&quot; title=&quot;Quicksort&quot;&gt;Quicksort&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/ALGOL_60&quot; title=&quot;ALGOL 60&quot;&gt;ALGOL 60&lt;/a&gt; compilatore, &lt;a href=&quot;http://en.wikipedia.org/wiki/Communicating_sequential_processes&quot; title=&quot;Comunicare processi sequenziali&quot;&gt;Comunicare processi sequenziali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/James_Holmes_%28programmer%29&quot; title=&quot;James Holmes (programmatore)&quot;&gt;James Holmes&lt;/a&gt; - Committer su &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Struts&quot; title=&quot;Struts&quot;&gt;Struts&lt;/a&gt; progetto, creare di Struts Console&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Grace_Hopper&quot; title=&quot;Grace Hopper&quot;&gt;Grace Hopper&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Harvard_Mark_I&quot; title=&quot;Harvard Mark I&quot;&gt;Harvard Mark I&lt;/a&gt; computer, &lt;a href=&quot;http://en.wikipedia.org/wiki/FLOW-MATIC&quot; title=&quot;FLOW-MATIC&quot;&gt;FLOW-MATIC&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/COBOL&quot; title=&quot;COBOL&quot;&gt;COBOL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Dave_Hyatt&quot; title=&quot;Dave Hyatt&quot;&gt;Dave Hyatt&lt;/a&gt; - Co-autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Mozilla_Firefox&quot; title=&quot;Mozilla Firefox&quot;&gt;Mozilla Firefox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt; &lt;span class=&quot;mw-headline&quot; id=&quot;I&quot;&gt;I&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Miguel_de_Icaza&quot; title=&quot;Miguel de Icaza&quot;&gt;Miguel de Icaza&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/GNOME&quot; title=&quot;GNOME&quot;&gt;GNOME&lt;/a&gt; project leader, iniziatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Mono_%28software%29&quot; title=&quot;Mono (software)&quot;&gt;Mono&lt;/a&gt; progetto&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Roberto_Ierusalimschy&quot; title=&quot;Roberto Ierusalimschy&quot;&gt;Roberto Ierusalimschy&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Lua_%28programming_language%29&quot; title=&quot;Lua (linguaggio di programmazione)&quot;&gt;Lua&lt;/a&gt; famoso architetto&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Dan_Ingalls&quot; title=&quot;Dan Ingalls&quot;&gt;Dan Ingalls&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Smalltalk&quot; title=&quot;Smalltalk&quot;&gt;Smalltalk&lt;/a&gt; e &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Bitblt&quot; title=&quot;BitBlt&quot;&gt;BitBlt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Geir_Ivars%C3%B8y&quot; title=&quot;Geir Ivarsøy&quot;&gt;Geir Ivarsøy&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Opera_%28web_browser%29&quot; title=&quot;Opera (browser web)&quot;&gt;Opera&lt;/a&gt; web browser&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Kenneth_E._Iverson&quot; title=&quot;Kenneth E. Iverson&quot;&gt;Ken Iverson&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/APL_%28programming_language%29&quot; title=&quot;APL (linguaggio di programmazione)&quot;&gt;APL&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/J_%28programming_language%29&quot; title=&quot;J (linguaggio di programmazione)&quot;&gt;J&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Toru_Iwatani&quot; title=&quot;Toru Iwatani&quot;&gt;Toru Iwatani&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Pac-Man&quot; title=&quot;Pac-Man&quot;&gt;Pac-Man&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;mw-headline&quot; id=&quot;J&quot;&gt;J&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bo_Jangeborg&quot; title=&quot;Bo Jangeborg&quot;&gt;Bo Jangeborg&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Sinclair_ZX_Spectrum&quot; title=&quot;Sinclair ZX Spectrum&quot;&gt;Sinclair ZX Spectrum&lt;/a&gt; Giochi&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Paul_Jardetzky&quot; title=&quot;Paul Jardetzky&quot;&gt;Paul Jardetzky&lt;/a&gt; - Autore del programma server per la &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Trojan_room_coffee_pot&quot; title=&quot;Trojan camera caffettiera&quot;&gt;prima webcam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Lynne_Jolitz&quot; title=&quot;Lynne Jolitz&quot;&gt;Lynne Jolitz&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/386BSD&quot; title=&quot;386BSD&quot;&gt;386BSD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/William_Jolitz&quot; title=&quot;William Jolitz&quot;&gt;William Jolitz&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/386BSD&quot; title=&quot;386BSD&quot;&gt;386BSD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Rod Johnson - creatore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Spring_framework&quot; title=&quot;Spring Framework&quot;&gt;Spring Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Stephen_C._Johnson&quot; title=&quot;Stephen C. Johnson&quot;&gt;Stephen C. Johnson&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Yacc&quot; title=&quot;Yacc&quot;&gt;yacc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bill_Joy&quot; title=&quot;Bill Joy&quot;&gt;Bill Joy&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Berkeley_Software_Distribution&quot; title=&quot;Berkeley Software Distribution&quot;&gt;BSD&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/C_shell&quot; title=&quot;C shell&quot;&gt;csh&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Vi&quot; title=&quot;Vi&quot;&gt;VI&lt;/a&gt;, Co-fondatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Sun_Microsystems&quot; title=&quot;Sun Microsystems&quot;&gt;Sun Microsystems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Robert_K._Jung&quot; title=&quot;Robert K. Jung&quot;&gt;Robert K. Jung&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/ARJ&quot; title=&quot;ARJ&quot;&gt;ARJ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;mw-headline&quot; id=&quot;K&quot;&gt;K&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Mitch_Kapor&quot; title=&quot;Mitch Kapor&quot;&gt;Mitch Kapor&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Lotus_1-2-3&quot; title=&quot;Lotus 1-2-3&quot;&gt;Lotus 1-2-3&lt;/a&gt;, Fondata &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Lotus_Development_Corporation&quot; title=&quot;Lotus Development Corporation&quot;&gt;Lotus Development Corporation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Phil_Katz&quot; title=&quot;Phil Katz&quot;&gt;Phil Katz&lt;/a&gt; - Creatore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/ZIP_file_format&quot; title=&quot;File in formato ZIP&quot;&gt;File in formato ZIP&lt;/a&gt;, Autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/PKZIP&quot; title=&quot;PKZIP&quot;&gt;PKZIP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Alan_Kay&quot; title=&quot;Alan Kay&quot;&gt;Alan Kay&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Smalltalk&quot; title=&quot;Smalltalk&quot;&gt;Smalltalk&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Dynabook&quot; title=&quot;Dynabook&quot;&gt;Dynabook&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Object-oriented_programming&quot; title=&quot;programmazione orientata agli oggetti&quot;&gt;programmazione orientata agli oggetti&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Squeak&quot; title=&quot;Squittio&quot;&gt;Squittio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Mel_Kaye&quot; title=&quot;Mel Kaye&quot;&gt;Mel Kaye&lt;/a&gt; - Un &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Real_programmer&quot; title=&quot;Vero Programmatore&quot;&gt;Vero Programmatore&lt;/a&gt;&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-0&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/List_of_programmers#cite_note-0&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/John_George_Kemeny&quot; title=&quot;John George Kemeny&quot;&gt;John Kemeny&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/BASIC&quot; title=&quot;BASIC&quot;&gt;BASIC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Stan_Kelly-Bootle&quot; title=&quot;Stan Kelly-Bootle&quot;&gt;Stan Kelly-Bootle&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Manchester_Mark_1&quot; title=&quot;Manchester Mark 1&quot;&gt;Manchester Mark 1&lt;/a&gt;, &lt;i&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/The_Devil%27s_DP_Dictionary&quot; title=&quot;DP Il dizionario del diavolo&quot;&gt;DP Il dizionario del diavolo&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Brian_Kernighan&quot; title=&quot;Brian Kernighan&quot;&gt;Brian Kernighan&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/AWK&quot; title=&quot;AWK&quot;&gt;AWK&lt;/a&gt; (Il &lt;i&gt;K&lt;/i&gt; nel nome sta per Kernighan), autore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Ditroff&quot; title=&quot;Ditroff&quot;&gt;ditroff&lt;/a&gt; strumento di formattazione del testo&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Gary_Kildall&quot; title=&quot;Gary Kildall&quot;&gt;Gary Kildall&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/CP/M&quot; title=&quot;CP / M&quot;&gt;CP / M&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Tom_Knight_%28scientist%29&quot; title=&quot;Tom Knight (scienziato)&quot;&gt;Tom Knight&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Incompatible_Timesharing_System&quot; title=&quot;Incompatibile sistema timesharing&quot;&gt;Incompatibile sistema timesharing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Jim_Knopf&quot; title=&quot;Jim Knopf&quot;&gt;Jim Knopf&lt;/a&gt; - Aka Jim Bottone, autore &lt;a href=&quot;http://en.wikipedia.org/wiki/PC-File&quot; title=&quot;PC-File&quot;&gt;PC-File&lt;/a&gt; flatfile database; considerato un co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Shareware&quot; title=&quot;Shareware&quot;&gt;shareware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Donald_E._Knuth&quot; title=&quot;Donald E. Knuth&quot;&gt;Donald E. Knuth&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/TeX&quot; title=&quot;TeX&quot;&gt;TeX&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/CWEB&quot; title=&quot;CWEB&quot;&gt;CWEB&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Metafont&quot; title=&quot;Metafont&quot;&gt;Metafont&lt;/a&gt;, &lt;i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming&quot; title=&quot;The Art of Computer Programming&quot;&gt;The Art of Computer Programming&lt;/a&gt;&lt;/i&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Concrete_Mathematics&quot; title=&quot;Concrete Mathematics&quot;&gt;Concrete Mathematics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;mw-headline&quot; id=&quot;L&quot;&gt;L&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Tom_Lane_%28Open_Source_Software_Developer%29&quot; title=&quot;Tom Lane (Open Source Software Developer)&quot;&gt;Tom Lane&lt;/a&gt; - Autore principale di &lt;a href=&quot;http://en.wikipedia.org/wiki/Libjpeg&quot; title=&quot;Libjpeg&quot;&gt;libjpeg&lt;/a&gt;, Sviluppatore principale di &lt;a href=&quot;http://en.wikipedia.org/wiki/PostgreSQL&quot; title=&quot;PostgreSQL&quot;&gt;PostgreSQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Leslie_Lamport&quot; title=&quot;Leslie Lamport&quot;&gt;Leslie Lamport&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/LaTeX&quot; title=&quot;LaTeX&quot;&gt;LaTeX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Butler_Lampson&quot; title=&quot;Butler Lampson&quot;&gt;Butler Lampson&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/QED_%28text_editor%29&quot; title=&quot;QED (editor di testo)&quot;&gt;QED&lt;/a&gt; originale co-autore&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Sam_Lantinga&quot; title=&quot;Sam Lantinga&quot;&gt;Sam Lantinga&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Simple_DirectMedia_Layer&quot; title=&quot;Simple DirectMedia Layer&quot;&gt;SDL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Richard_H._Lathwell&quot; title=&quot;Richard H. Lathwell&quot;&gt;Dick Lathwell&lt;/a&gt; - Co-sviluppatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/APL_%28programming_language%29&quot; title=&quot;APL (linguaggio di programmazione)&quot;&gt;APL \ 360&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Chris_Lattner&quot; title=&quot;Chris Lattner&quot;&gt;Chris Lattner&lt;/a&gt; - Autore principale di &lt;a href=&quot;http://en.wikipedia.org/wiki/Low_Level_Virtual_Machine&quot; title=&quot;Low Level Virtual Machine&quot;&gt;Low Level Virtual Machine&lt;/a&gt; progetto&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Samuel_J_Leffler&quot; title=&quot;Samuel J Leffler&quot;&gt;Samuel J Leffler&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Berkeley_Software_Distribution&quot; title=&quot;Berkeley Software Distribution&quot;&gt;BSD&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/HylaFAX&quot; title=&quot;HylaFAX&quot;&gt;FlexFAX&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Libtiff&quot; title=&quot;Libtiff&quot;&gt;libtiff&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Comparison_of_open_source_wireless_drivers#FreeBSD&quot; title=&quot;Confronto di open source driver wireless&quot;&gt;I driver di periferica FreeBSD Wireless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Rasmus_Lerdorf&quot; title=&quot;Rasmus Lerdorf&quot;&gt;Rasmus Lerdorf&lt;/a&gt; - Creatore originale di &lt;a href=&quot;http://en.wikipedia.org/wiki/PHP&quot; title=&quot;PHP&quot;&gt;PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Michael_Lesk&quot; title=&quot;Michael Lesk&quot;&gt;Michael Lesk&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Lex_programming_tool&quot; title=&quot;Lex strumento di programmazione&quot;&gt;Lex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Gordon_Letwin&quot; title=&quot;Gordon Letwin&quot;&gt;Gordon Letwin&lt;/a&gt; - Architetto &lt;a href=&quot;http://en.wikipedia.org/wiki/OS/2&quot; title=&quot;OS / 2&quot;&gt;OS / 2&lt;/a&gt;, Autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/High_Performance_File_System&quot; title=&quot;High Performance File System&quot;&gt;HPFS&lt;/a&gt; file di sistema&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/H%C3%A5kon_Wium_Lie&quot; title=&quot;Håkon Wium Lie&quot;&gt;Håkon Wium Lie&lt;/a&gt; - Co-autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Cascading_Style_Sheets&quot; title=&quot;Fogli di stile CSS&quot;&gt;Fogli di stile CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Robert_Love&quot; title=&quot;Robert Love&quot;&gt;Robert Love&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Linux_kernel&quot; title=&quot;Linux kernel&quot;&gt;Linux kernel&lt;/a&gt; sviluppatore&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ada_Lovelace&quot; title=&quot;Ada Lovelace&quot;&gt;Ada Lovelace&lt;/a&gt; - Prima programmatore (di &lt;a href=&quot;http://en.wikipedia.org/wiki/Charles_Babbage&quot; title=&quot;Charles Babbage&quot;&gt;Charles Babbages&lt;/a&gt;&#39; &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Analytical_Engine&quot; title=&quot;Analytical Engine&quot;&gt;Analytical Engine&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Al_Lowe&quot; title=&quot;Al Lowe&quot;&gt;Al Lowe&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Leisure_Suit_Larry&quot; title=&quot;Leisure Suit Larry&quot;&gt;Leisure Suit Larry&lt;/a&gt; serie&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;mw-headline&quot; id=&quot;M&quot;&gt;M&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Raphael_Manfredi&quot; title=&quot;Raphael Manfredi&quot;&gt;Raphael Manfredi&lt;/a&gt; - Contributi a &lt;a href=&quot;http://en.wikipedia.org/wiki/Perl&quot; title=&quot;Perl&quot;&gt;Perl&lt;/a&gt;, Architetto software e manutentore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Gtk-gnutella&quot; title=&quot;Gtk-gnutella&quot;&gt;gtk-gnutella&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Khaled_Mardam-Bey&quot; title=&quot;Khaled Mardam-Bey&quot;&gt;Khaled Mardam-Bey&lt;/a&gt; - Creatore di mIRC (Internet Relay Chat client)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Yukihiro_Matsumoto&quot; title=&quot;Yukihiro Matsumoto&quot;&gt;Yukihiro Matsumoto&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&quot; title=&quot;Ruby (linguaggio di programmazione)&quot;&gt;Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/John_McCarthy_%28computer_scientist%29&quot; title=&quot;John McCarthy (informatico)&quot;&gt;John McCarthy&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Lisp_%28programming_language%29&quot; title=&quot;Lisp (linguaggio di programmazione)&quot;&gt;Lisp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Craig_McClanahan&quot; title=&quot;Craig McClanahan&quot;&gt;Craig McClanahan&lt;/a&gt; - Autore originale di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Jakarta_Struts&quot; title=&quot;Jakarta Struts&quot;&gt;Jakarta Struts&lt;/a&gt;, Architetto di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Tomcat_Catalina&quot; title=&quot;Tomcat Catalina&quot;&gt;Tomcat Catalina&lt;/a&gt; servlet container&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Daniel_D._McCracken&quot; title=&quot;Daniel D. McCracken&quot;&gt;Daniel D. McCracken&lt;/a&gt; - Professore &lt;a href=&quot;http://en.wikipedia.org/wiki/City_College_of_New_York&quot; title=&quot;City College di New York&quot;&gt;City College&lt;/a&gt; e autore di &lt;i&gt;Guida alla &lt;a href=&quot;http://en.wikipedia.org/wiki/ALGOL&quot; title=&quot;ALGOL&quot;&gt;Algol&lt;/a&gt; Programmazione&lt;/i&gt;, &lt;i&gt;Guida alla &lt;a href=&quot;http://en.wikipedia.org/wiki/COBOL&quot; title=&quot;COBOL&quot;&gt;Cobol&lt;/a&gt; Programmazione&lt;/i&gt;, &lt;i&gt;Guida alla &lt;a href=&quot;http://en.wikipedia.org/wiki/Fortran&quot; title=&quot;Fortran&quot;&gt;Fortran&lt;/a&gt; Programmazione&lt;/i&gt; (1957)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Douglas_McIlroy&quot; title=&quot;Douglas McIlroy&quot;&gt;Douglas McIlroy&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Pipes_and_filters&quot; title=&quot;Tubi e filtri&quot;&gt;tubi e filtri&lt;/a&gt;, Concetto di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Software_componentry&quot; title=&quot;Software componentistica&quot;&gt;software componentistica&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Unix&quot; title=&quot;Unix&quot;&gt;Unix&lt;/a&gt; strumenti (incantesimo, diff, ordinare, unire, grafico, parlare, tr, etc)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Shawn_McKenzie&quot; title=&quot;Shawn McKenzie&quot;&gt;Shawn McKenzie&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/AutoTheme_HTML_Theme_System&quot; title=&quot;AutoTheme tema di sistema HTML&quot;&gt;AutoTheme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Marshall_Kirk_McKusick&quot; title=&quot;Marshall Kirk McKusick&quot;&gt;Marshall Kirk McKusick&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Berkeley_Software_Distribution&quot; title=&quot;Berkeley Software Distribution&quot;&gt;BSD&lt;/a&gt;, Il lavoro di &lt;a href=&quot;http://en.wikipedia.org/wiki/Unix_File_System&quot; title=&quot;Unix File System&quot;&gt;FFS&lt;/a&gt;, Implementatori di &lt;a href=&quot;http://en.wikipedia.org/wiki/Soft_updates&quot; title=&quot;Soft aggiornamenti&quot;&gt;aggiornamenti soft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bertrand_Meyer&quot; title=&quot;Bertrand Meyer&quot;&gt;Bertrand Meyer&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29&quot; title=&quot;Eiffel (linguaggio di programmazione)&quot;&gt;Eiffel&lt;/a&gt;, &lt;i&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Object_oriented_design&quot; title=&quot;Oggetto di design oriented&quot;&gt;Object-Oriented Software Construction&lt;/a&gt;&lt;/i&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Design_by_contract&quot; title=&quot;Design by Contract&quot;&gt;Design by Contract&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bob_Miner&quot; title=&quot;Bob Miner&quot;&gt;Bob Miner&lt;/a&gt; - Co-creatore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Oracle_database&quot; title=&quot;Oracle database&quot;&gt;Oracle database&lt;/a&gt;, Co-fondatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Oracle_Corporation&quot; title=&quot;Oracle Corporation&quot;&gt;Oracle Corporation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Jeff_Minter&quot; title=&quot;Jeff Minter&quot;&gt;Jeff Minter&lt;/a&gt; - Psychedelic, e spesso &lt;a href=&quot;http://en.wikipedia.org/wiki/Llama&quot; title=&quot;Lama&quot;&gt;lama&lt;/a&gt;Connessi &lt;a href=&quot;http://en.wikipedia.org/wiki/Video_game&quot; title=&quot;Video game&quot;&gt;video giochi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Lou_Montulli&quot; title=&quot;Lou Montulli&quot;&gt;Lou Montulli&lt;/a&gt; - Creatore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Lynx_%28browser%29&quot; title=&quot;Lynx (browser)&quot;&gt;Lince&lt;/a&gt; browser, &lt;a href=&quot;http://en.wikipedia.org/wiki/HTTP_cookie&quot; title=&quot;HTTP cookie&quot;&gt;cookies&lt;/a&gt;,  Il tag blink, spingere e tirare client server, proxy HTTP, HTTP su SSL,  integrazione con il browser con GIF animate, membro fondatore del  gruppo di lavoro su HTML &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/W3C&quot; title=&quot;W3C&quot;&gt;W3C&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bram_Moolenaar&quot; title=&quot;Bram Moolenaar&quot;&gt;Bram Moolenaar&lt;/a&gt; - Autore di editor di testo &lt;a href=&quot;http://en.wikipedia.org/wiki/Vim_%28text_editor%29&quot; title=&quot;Vim (editor di testo)&quot;&gt;Vim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/David_Moon&quot; title=&quot;David Moon&quot;&gt;David Moon&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Maclisp&quot; title=&quot;MACLISP&quot;&gt;MACLISP&lt;/a&gt;, &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/ZetaLisp&quot; title=&quot;ZetaLisp&quot;&gt;ZetaLisp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Charles_H._Moore&quot; title=&quot;Charles H. Moore&quot;&gt;Charles H. Moore&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Forth_%28programming_language%29&quot; title=&quot;Forth (linguaggio di programmazione)&quot;&gt;Via&lt;/a&gt; lingua&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Roger_Moore_%28computer_scientist%29&quot; title=&quot;Roger Moore (informatico)&quot;&gt;Roger Moore&lt;/a&gt; - Co-sviluppatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/APL_%28programming_language%29&quot; title=&quot;APL (linguaggio di programmazione)&quot;&gt;APL \ 360&lt;/a&gt;, Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/IPSANET&quot; title=&quot;IPSANET&quot;&gt;IPSANET&lt;/a&gt;, Co-fondatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/I._P._Sharp_Associates&quot; title=&quot;Associates I. P. Sharp&quot;&gt;I.P. Sharp Associates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Mike_Muuss&quot; title=&quot;Mike Muuss&quot;&gt;Mike Muuss&lt;/a&gt; - Autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Ping&quot; title=&quot;Ping&quot;&gt;ping&lt;/a&gt;, Strumento di rete per rilevare host&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt; &lt;span class=&quot;mw-headline&quot; id=&quot;N&quot;&gt;N&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Patrick_Naughton&quot; title=&quot;Patrick Naughton&quot;&gt;Patrick Naughton&lt;/a&gt; - Inizio &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Java_%28Sun%29&quot; title=&quot;Java (Sun)&quot;&gt;Java&lt;/a&gt; progettista, &lt;a class=&quot;new&quot; href=&quot;http://en.wikipedia.org/w/index.php?title=Xlock&amp;amp;action=edit&amp;amp;redlink=1&quot; title=&quot;Xlock (pagina non esiste)&quot;&gt;xlock&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/HotJava&quot; title=&quot;HotJava&quot;&gt;HotJava&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Peter_Naur&quot; title=&quot;Peter Naur&quot;&gt;Peter Naur&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Backus-Naur_form&quot; title=&quot;Backus-Naur form&quot;&gt;Backus-Naur form&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/ALGOL_60&quot; title=&quot;ALGOL 60&quot;&gt;ALGOL 60&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Col_Needham&quot; title=&quot;Col Needham&quot;&gt;Col Needham&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Internet_Movie_Database&quot; title=&quot;Internet Movie Database&quot;&gt;Internet Movie Database&lt;/a&gt; (IMDb)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Graham_Nelson&quot; title=&quot;Graham Nelson&quot;&gt;Graham Nelson&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Inform&quot; title=&quot;Informare&quot;&gt;Informare&lt;/a&gt; sistema di authoring per &lt;a href=&quot;http://en.wikipedia.org/wiki/Interactive_fiction&quot; title=&quot;Interactive fiction&quot;&gt;Interactive fiction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Peter_Norton&quot; title=&quot;Peter Norton&quot;&gt;Peter Norton&lt;/a&gt; - Programmatore del famoso programma di file manager, &lt;a href=&quot;http://en.wikipedia.org/wiki/Norton_Commander&quot; title=&quot;Norton Commander&quot;&gt;Norton Commander&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Kristen_Nygaard&quot; title=&quot;Kristen Nygaard&quot;&gt;Kristen Nygaard&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/SIMULA&quot; title=&quot;SIMULA&quot;&gt;SIMULA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt; &lt;span class=&quot;mw-headline&quot; id=&quot;O&quot;&gt;O&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ed_Oates&quot; title=&quot;Ed Oates&quot;&gt;Ed Oates&lt;/a&gt; - Co-creatore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Oracle_database&quot; title=&quot;Oracle database&quot;&gt;Oracle database&lt;/a&gt;, Co-fondatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Oracle_Corporation&quot; title=&quot;Oracle Corporation&quot;&gt;Oracle Corporation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Steve_O%27Donnell&quot; title=&quot;Steve O&#39;Donnell&quot;&gt;Steve O&#39;Donnell&lt;/a&gt; - Fondatore di GOAL Systems, sviluppatore leader di &lt;a href=&quot;http://en.wikipedia.org/wiki/WDU_%28software%29&quot; title=&quot;WDU (software)&quot;&gt;WDU&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Westi_%28software%29&quot; title=&quot;Westi (software)&quot;&gt;Westi&lt;/a&gt;, Creater indipendenti &lt;a href=&quot;http://en.wikipedia.org/wiki/DOS&quot; title=&quot;DOS&quot;&gt;DOS&lt;/a&gt; programmi di utilità, sviluppatore di &lt;a class=&quot;new&quot; href=&quot;http://en.wikipedia.org/w/index.php?title=Prompt_%28software%29&amp;amp;action=edit&amp;amp;redlink=1&quot; title=&quot;Prompt (software) (pagina non esiste)&quot;&gt;Prompt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Jarkko_Oikarinen&quot; title=&quot;Jarkko Oikarinen&quot;&gt;Jarkko Oikarinen&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Internet_Relay_Chat&quot; title=&quot;Internet Relay Chat&quot;&gt;Internet Relay Chat&lt;/a&gt; (IRC)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Oliver_Twins&quot; title=&quot;Oliver Twins&quot;&gt;Andrea e Filippo Oliver&lt;/a&gt;, Il &lt;a href=&quot;http://en.wikipedia.org/wiki/Oliver_Twins&quot; title=&quot;Oliver Twins&quot;&gt;Oliver Twins&lt;/a&gt; - Molti &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Sinclair_ZX_Spectrum&quot; title=&quot;Sinclair ZX Spectrum&quot;&gt;Sinclair ZX Spectrum&lt;/a&gt; giochi tra cui &lt;a href=&quot;http://en.wikipedia.org/wiki/Dizzy&quot; title=&quot;Vertiginoso&quot;&gt;Vertiginoso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/John_Ousterhout&quot; title=&quot;John Ousterhout&quot;&gt;John Ousterhout&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Tcl&quot; title=&quot;Tcl&quot;&gt;Tcl&lt;/a&gt;/&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Tk_%28computing%29&quot; title=&quot;Tk (informatica)&quot;&gt;Tk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Mark_Overmars&quot; title=&quot;Mark Overmars&quot;&gt;Mark Overmars&lt;/a&gt; - Professore, ben noto per la creazione di &lt;a href=&quot;http://en.wikipedia.org/wiki/Game_Maker&quot; title=&quot;Game Maker&quot;&gt;Game Maker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Onel_de_Guzman&quot; title=&quot;Onel de Guzman&quot;&gt;Onel de Guzman&lt;/a&gt; - Un programmatore filippino, la cui crea il virus ILOVEYOU il 4 maggio 2000.&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;mw-headline&quot; id=&quot;P&quot;&gt;P&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Alexey_Pajitnov&quot; title=&quot;Alexey Pajitnov&quot;&gt;Alexey Pajitnov&lt;/a&gt; - Creatore di gioco &lt;a href=&quot;http://en.wikipedia.org/wiki/Tetris&quot; title=&quot;Tetris&quot;&gt;Tetris&lt;/a&gt; su &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Electronica_60&quot; title=&quot;Electronica 60&quot;&gt;Electronica 60&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Seymour_Papert&quot; title=&quot;Seymour Papert&quot;&gt;Seymour Papert&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Logo_%28programming_language%29&quot; title=&quot;Logo (linguaggio di programmazione)&quot;&gt;Logo (linguaggio di programmazione)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Tim_Paterson&quot; title=&quot;Tim Paterson&quot;&gt;Tim Paterson&lt;/a&gt; - Autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/86-DOS&quot; title=&quot;86-DOS&quot;&gt;86-DOS&lt;/a&gt; (QDOS)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Jeffrey_Peterson&quot; title=&quot;Jeffrey Peterson&quot;&gt;Jeffrey Peterson&lt;/a&gt; - Chiave &lt;a href=&quot;http://en.wikipedia.org/wiki/Free_and_open_source_software&quot; title=&quot;Libero e Open Source Software&quot;&gt;sorgente del software libero e open&lt;/a&gt; architetto, creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Quepasa&quot; title=&quot;Quepasa&quot;&gt;Quepasa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Charles_Petzold&quot; title=&quot;Charles Petzold&quot;&gt;Charles Petzold&lt;/a&gt; - Autore di molti &lt;a href=&quot;http://en.wikipedia.org/wiki/Microsoft_Windows&quot; title=&quot;Microsoft Windows&quot;&gt;Microsoft Windows&lt;/a&gt; programmazione libri&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Rob_Pike&quot; title=&quot;Rob Pike&quot;&gt;Rob Pike&lt;/a&gt; - Ha scritto prima bitmap sistema a finestre per Unix, co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/UTF-8&quot; title=&quot;UTF-8&quot;&gt;UTF-8&lt;/a&gt; la codifica dei caratteri, autore di editor di testo &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Sam_%28program%29&quot; title=&quot;Sam (programma)&quot;&gt;sam&lt;/a&gt; e ambiente di programmazione &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Acme_%28Plan_9%29&quot; title=&quot;Acme (Plan 9)&quot;&gt;acme&lt;/a&gt;, Principale autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs&quot; title=&quot;Plan 9 dei Bell Labs&quot;&gt;Plan 9&lt;/a&gt; e &lt;a href=&quot;http://en.wikipedia.org/wiki/Inferno_%28operating_system%29&quot; title=&quot;Inferno (sistema operativo)&quot;&gt;Inferno&lt;/a&gt; sistemi operativi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Kent_Pitman&quot; title=&quot;Kent Pitman&quot;&gt;Kent Pitman&lt;/a&gt; - Collaboratore tecnico al ANSI &lt;a href=&quot;http://en.wikipedia.org/wiki/Common_Lisp&quot; title=&quot;Common Lisp&quot;&gt;Common Lisp&lt;/a&gt; standard&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Larry_Page&quot; title=&quot;Larry Page&quot;&gt;Larry Page&lt;/a&gt; - Co-fondatore di Google, Inc&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt; &lt;span class=&quot;mw-headline&quot; id=&quot;Q&quot;&gt;Q&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt; &lt;span class=&quot;mw-headline&quot; id=&quot;R&quot;&gt;R&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Theo_de_Raadt&quot; title=&quot;Theo de Raadt&quot;&gt;Theo de Raadt&lt;/a&gt; - Socio fondatore della &lt;a href=&quot;http://en.wikipedia.org/wiki/NetBSD&quot; title=&quot;NetBSD&quot;&gt;NetBSD&lt;/a&gt;, Fondatore della &lt;a href=&quot;http://en.wikipedia.org/wiki/OpenBSD&quot; title=&quot;OpenBSD&quot;&gt;OpenBSD&lt;/a&gt; e &lt;a href=&quot;http://en.wikipedia.org/wiki/OpenSSH&quot; title=&quot;OpenSSH&quot;&gt;OpenSSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Jef_Raskin&quot; title=&quot;Jef Raskin&quot;&gt;Jef Raskin&lt;/a&gt; - Ha avviato l&#39; &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Apple_Macintosh&quot; title=&quot;Apple Macintosh&quot;&gt;Macintosh&lt;/a&gt; progetto in &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Apple_Computer&quot; title=&quot;Apple Computer&quot;&gt;Apple Computer&lt;/a&gt;, Intese &lt;a href=&quot;http://en.wikipedia.org/wiki/Canon_Cat&quot; title=&quot;Canon Cat&quot;&gt;Canon Cat&lt;/a&gt; computer, sviluppato &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/The_Humane_Environment&quot; title=&quot;L&#39;ambiente umano&quot;&gt;L&#39;ambiente umano&lt;/a&gt; programma&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Eric_S._Raymond&quot; title=&quot;Eric S. Raymond&quot;&gt;Eric Raymond&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Open_Source_movement&quot; title=&quot;Movimento Open Source&quot;&gt;Movimento Open Source&lt;/a&gt;, Autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Fetchmail&quot; title=&quot;Fetchmail&quot;&gt;fetchmail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Hans_Reiser&quot; title=&quot;Hans Reiser&quot;&gt;Hans Reiser&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/ReiserFS&quot; title=&quot;ReiserFS&quot;&gt;ReiserFS&lt;/a&gt; file di sistema&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/John_Resig&quot; title=&quot;John Resig&quot;&gt;John Resig&lt;/a&gt; - Creatore e sviluppatore principale di &lt;a href=&quot;http://en.wikipedia.org/wiki/JQuery&quot; title=&quot;JQuery&quot;&gt;jQuery&lt;/a&gt; Libreria JavaScript&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Craig_Reynolds_%28computer_graphics%29&quot; title=&quot;Craig Reynolds (computer grafica)&quot;&gt;Craig Reynolds&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Boids&quot; title=&quot;Boids&quot;&gt;boids&lt;/a&gt; computer grafica di simulazione&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Dennis_Ritchie&quot; title=&quot;Dennis Ritchie&quot;&gt;Dennis Ritchie&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/C_%28programming_language%29&quot; title=&quot;C (linguaggio di programmazione)&quot;&gt;C&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Unix&quot; title=&quot;Unix&quot;&gt;Unix&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs&quot; title=&quot;Plan 9 dei Bell Labs&quot;&gt;Plan 9 dei Bell Labs&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Inferno_%28operating_system%29&quot; title=&quot;Inferno (sistema operativo)&quot;&gt;Inferno&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ron_Rivest&quot; title=&quot;Ron Rivest&quot;&gt;Ron Rivest&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/RSA&quot; title=&quot;RSA&quot;&gt;RSA&lt;/a&gt; algoritmo (il &lt;i&gt;R&lt;/i&gt; nel nome è l&#39;acronimo di Rivest)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/John_Romero&quot; title=&quot;John Romero&quot;&gt;John Romero&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/First_person_shooter&quot; title=&quot;Sparatutto in prima persona&quot;&gt;sparatutto in prima persona&lt;/a&gt; &lt;i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Doom_%28video_game%29&quot; title=&quot;Doom (videogioco)&quot;&gt;Destino&lt;/a&gt;&lt;/i&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Quake_%28video_game%29&quot; title=&quot;Quake (videogioco)&quot;&gt;Tremito&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Blake_Ross&quot; title=&quot;Blake Ross&quot;&gt;Blake Ross&lt;/a&gt; - Co-autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Mozilla_Firefox&quot; title=&quot;Mozilla Firefox&quot;&gt;Mozilla Firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Guido_van_Rossum&quot; title=&quot;Guido van Rossum&quot;&gt;Guido van Rossum&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Python_%28programming_language%29&quot; title=&quot;Python (linguaggio di programmazione)&quot;&gt;Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Jeff_Rulifson&quot; title=&quot;Jeff Rulifson&quot;&gt;Jeff Rulifson&lt;/a&gt; - Programmatore di piombo sul &lt;a href=&quot;http://en.wikipedia.org/wiki/NLS_%28computer_system%29&quot; title=&quot;NLS (sistema informatico)&quot;&gt;NLS&lt;/a&gt; progetto&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Rusty_Russell&quot; title=&quot;Rusty Russell&quot;&gt;Rusty Russell&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Iptables&quot; title=&quot;Iptables&quot;&gt;iptables&lt;/a&gt; per &lt;a href=&quot;http://en.wikipedia.org/wiki/Linux&quot; title=&quot;Linux&quot;&gt;linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Steve_Russell&quot; title=&quot;Steve Russell&quot;&gt;Steve Russell&lt;/a&gt; - Primo &lt;a href=&quot;http://en.wikipedia.org/wiki/Lisp_%28programming_language%29&quot; title=&quot;Lisp (linguaggio di programmazione)&quot;&gt;Lisp&lt;/a&gt; interprete; originale &lt;a href=&quot;http://en.wikipedia.org/wiki/Spacewar%21&quot; title=&quot;Spacewar!&quot;&gt;Spacewar!&lt;/a&gt; gioco per computer grafica.&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt; &lt;span class=&quot;mw-headline&quot; id=&quot;S&quot;&gt;S&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bob_Sabiston&quot; title=&quot;Bob Sabiston&quot;&gt;Bob Sabiston&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Rotoshop&quot; title=&quot;Rotoshop&quot;&gt;Rotoshop&lt;/a&gt;, Interpolando &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Rotoscope&quot; title=&quot;Rotoscope&quot;&gt;rotoscope&lt;/a&gt; Software di animazione&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Muni_Sakya&quot; title=&quot;Sakya Muni&quot;&gt;Sakya Muni&lt;/a&gt; - Software nepalese&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Carl_Sassenrath&quot; title=&quot;Carl Sassenrath&quot;&gt;Carl Sassenrath&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Amiga&quot; title=&quot;Amiga&quot;&gt;Amiga&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/REBOL&quot; title=&quot;REBOL&quot;&gt;REBOL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Chris_Sawyer&quot; title=&quot;Chris Sawyer&quot;&gt;Chris Sawyer&lt;/a&gt; - Sviluppo di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Roller_Coaster_Tycoon&quot; title=&quot;Roller Coaster Tycoon&quot;&gt;Roller Coaster Tycoon&lt;/a&gt; e il &lt;a href=&quot;http://en.wikipedia.org/wiki/Transport_Tycoon&quot; title=&quot;Transport Tycoon&quot;&gt;Transport Tycoon&lt;/a&gt; serie&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bill_Schelter&quot; title=&quot;Bill Schelter&quot;&gt;Bill Schelter&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/GNU_Maxima&quot; title=&quot;GNU Maxima&quot;&gt;GNU Maxima&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/GNU_Common_Lisp&quot; title=&quot;GNU Common Lisp&quot;&gt;GNU Common Lisp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Randal_L._Schwartz&quot; title=&quot;Randal L. Schwartz&quot;&gt;Randal L. Schwartz&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Just_another_Perl_hacker&quot; title=&quot;Solo un altro hacker Perl&quot;&gt;Solo un altro hacker Perl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Adi_Shamir&quot; title=&quot;Adi Shamir&quot;&gt;Adi Shamir&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/RSA&quot; title=&quot;RSA&quot;&gt;RSA&lt;/a&gt; algoritmo (il &lt;i&gt;S&lt;/i&gt; nel nome sta per Shamir)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Mike_Shaver&quot; title=&quot;Mike Shaver&quot;&gt;Mike Shaver&lt;/a&gt; - Socio fondatore della &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Mozilla_Organization&quot; title=&quot;Mozilla Organization&quot;&gt;Mozilla Organization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Cliff_Shaw&quot; title=&quot;Cliff Shaw&quot;&gt;Cliff Shaw&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Information_Processing_Language&quot; title=&quot;Informazioni Language Processing&quot;&gt;IPL&lt;/a&gt;, La lingua AI primo&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Zed_Shaw&quot; title=&quot;Zed Shaw&quot;&gt;Zed Shaw&lt;/a&gt; - Ha scritto la &lt;a href=&quot;http://en.wikipedia.org/wiki/Mongrel_%28web_server%29&quot; title=&quot;Bastardo (web server)&quot;&gt;Mongrel Web Server&lt;/a&gt;, Per le applicazioni web Ruby.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Emily_Short&quot; title=&quot;Emily Short&quot;&gt;Emily Short&lt;/a&gt; - Prolifico scrittore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Interactive_fiction&quot; title=&quot;Interactive fiction&quot;&gt;Interactive fiction&lt;/a&gt; e co-sviluppatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Inform&quot; title=&quot;Informare&quot;&gt;Informare&lt;/a&gt; versione 7&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Jacek_Sieka&quot; title=&quot;Jacek Sieka&quot;&gt;Jacek Sieka&lt;/a&gt; - Sviluppo di &lt;a href=&quot;http://en.wikipedia.org/wiki/DC%2B%2B&quot; title=&quot;DC + +&quot;&gt;DC + +&lt;/a&gt; un &lt;a href=&quot;http://en.wikipedia.org/wiki/Open_source&quot; title=&quot;Open source&quot;&gt;open-source&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Peer-to-peer&quot; title=&quot;Peer-to-peer&quot;&gt;peer-to-peer&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/File_sharing&quot; title=&quot;La condivisione di file&quot;&gt;file-sharing&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Client_%28computing%29&quot; title=&quot;Client (informatica)&quot;&gt;client&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ken_Silverman&quot; title=&quot;Ken Silverman&quot;&gt;Ken Silverman&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Duke_Nukem_3D&quot; title=&quot;Duke Nukem 3D&quot;&gt;Duke Nukem 3D&lt;/a&gt;&#39;S motore grafico&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Charles_Simonyi&quot; title=&quot;Charles Simonyi&quot;&gt;Charles Simonyi&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Hungarian_notation&quot; title=&quot;notazione ungherese&quot;&gt;notazione ungherese&lt;/a&gt;, &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Microsoft_Office_Word&quot; title=&quot;Microsoft Office Word&quot;&gt;Microsoft Word&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Colin_Simpson_%28electronics_professor%29&quot; title=&quot;Colin Simpson (professore di elettronica)&quot;&gt;Colin Simpson&lt;/a&gt; - Sviluppatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/CircuitLogix&quot; title=&quot;CircuitLogix&quot;&gt;CircuitLogix&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Simulation_software&quot; title=&quot;Software di simulazione&quot;&gt;Software di simulazione&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Rich_Skrenta&quot; title=&quot;Rich Skrenta&quot;&gt;Rich Skrenta&lt;/a&gt; - Co-fondatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Open_Directory_Project&quot; title=&quot;Open Directory Project&quot;&gt;Open Directory Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Matthew_Smith_%28games_programmer%29&quot; title=&quot;Matthew Smith (programmatore di giochi)&quot;&gt;Matthew Smith&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Sinclair_ZX_Spectrum&quot; title=&quot;Sinclair ZX Spectrum&quot;&gt;Sinclair ZX Spectrum&lt;/a&gt; giochi, compresi &lt;a href=&quot;http://en.wikipedia.org/wiki/Manic_Miner&quot; title=&quot;Manic Miner&quot;&gt;Manic Miner&lt;/a&gt; e &lt;a href=&quot;http://en.wikipedia.org/wiki/Jet_Set_Willy&quot; title=&quot;Jet Set Willy&quot;&gt;Jet Set Willy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Henry_Spencer&quot; title=&quot;Henry Spencer&quot;&gt;Henry Spencer&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/C_News&quot; title=&quot;C News&quot;&gt;C News&lt;/a&gt;, &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Regex&quot; title=&quot;Regex&quot;&gt;Regex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Quentin_Stafford-Fraser&quot; title=&quot;Quentin Stafford-Fraser&quot;&gt;Quentin Stafford-Fraser&lt;/a&gt; - Autore di originali &lt;a href=&quot;http://en.wikipedia.org/wiki/Virtual_Network_Computing&quot; title=&quot;Virtual Network Computing&quot;&gt;VNC&lt;/a&gt; spettatore, prima di Windows server VNC, il programma client per la &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Trojan_room_coffee_pot&quot; title=&quot;Trojan camera caffettiera&quot;&gt;prima webcam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Richard_Stallman&quot; title=&quot;Richard Stallman&quot;&gt;Richard Stallman&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Emacs&quot; title=&quot;Emacs&quot;&gt;Emacs&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/GNU_Compiler_Collection&quot; title=&quot;GNU Compiler Collection&quot;&gt;GCC&lt;/a&gt;, &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/GDB&quot; title=&quot;GDB&quot;&gt;GDB&lt;/a&gt;, Fondatore e pioniere di &lt;a href=&quot;http://en.wikipedia.org/wiki/GNU&quot; title=&quot;GNU&quot;&gt;GNU&lt;/a&gt; Progetto, indipendente dal terminale I / O su Pioneer &lt;a href=&quot;http://en.wikipedia.org/wiki/Incompatible_Timesharing_System&quot; title=&quot;Incompatibile sistema timesharing&quot;&gt;ITS&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Lisp_machine&quot; title=&quot;Lisp macchina&quot;&gt;Lisp macchina&lt;/a&gt; manuale (&lt;a class=&quot;new&quot; href=&quot;http://en.wikipedia.org/w/index.php?title=Chineual&amp;amp;action=edit&amp;amp;redlink=1&quot; title=&quot;Chineual (pagina non esiste)&quot;&gt;chineual&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Guy_Steele&quot; title=&quot;Guy Steele&quot;&gt;Guy Steele&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Common_Lisp&quot; title=&quot;Common Lisp&quot;&gt;Common Lisp&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Scheme_%28programming_language%29&quot; title=&quot;Scheme (linguaggio di programmazione)&quot;&gt;Regime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Alexander_Stepanov&quot; title=&quot;Alexander Stepanov&quot;&gt;Alexander Stepanov&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Standard_Template_Library&quot; title=&quot;Standard Template Library&quot;&gt;Standard Template Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bjarne_Stroustrup&quot; title=&quot;Bjarne Stroustrup&quot;&gt;Bjarne Stroustrup&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/C%2B%2B&quot; title=&quot;C + +&quot;&gt;C + +&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Zeev_Suraski&quot; title=&quot;Zeev Suraski&quot;&gt;Zeev Suraski&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/PHP&quot; title=&quot;PHP&quot;&gt;PHP&lt;/a&gt; lingua&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Gerald_Jay_Sussman&quot; title=&quot;Gerald Jay Sussman&quot;&gt;Gerald Jay Sussman&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Scheme_%28programming_language%29&quot; title=&quot;Scheme (linguaggio di programmazione)&quot;&gt;Regime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Tim_Sweeney_%28game_developer%29&quot; title=&quot;Tim Sweeney (sviluppatore del gioco)&quot;&gt;Tim Sweeney&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Unreal&quot; title=&quot;Irreale&quot;&gt;L&#39;Unreal Engine&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/UnrealScript&quot; title=&quot;UnrealScript&quot;&gt;UnrealScript&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/ZZT&quot; title=&quot;ZZT&quot;&gt;ZZT&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;mw-headline&quot; id=&quot;T&quot;&gt;T&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Andrew_S._Tanenbaum&quot; title=&quot;Andrew S. Tanenbaum&quot;&gt;Andrew Tanenbaum&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Minix&quot; title=&quot;Minix&quot;&gt;Minix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Audrey_Tang&quot; title=&quot;Audrey Tang&quot;&gt;Audrey &quot;Autrijus&quot; Tang&lt;/a&gt; - Designer di &lt;a href=&quot;http://en.wikipedia.org/wiki/Pugs&quot; title=&quot;Carlini&quot;&gt;Carlini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Simon_Tatham&quot; title=&quot;Simon Tatham&quot;&gt;Simon Tatham&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/NASM_%28computer_program%29&quot; title=&quot;NASM (programma per computer)&quot;&gt;NASM&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/PuTTY&quot; title=&quot;PuTTY&quot;&gt;PuTTY&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Larry_Tesler&quot; title=&quot;Larry Tesler&quot;&gt;Larry Tesler&lt;/a&gt; - L&#39; &lt;a class=&quot;new&quot; href=&quot;http://en.wikipedia.org/w/index.php?title=PUB_%28software%29&amp;amp;action=edit&amp;amp;redlink=1&quot; title=&quot;PUB (software) (pagina non esiste)&quot;&gt;PUB&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Markup_language&quot; title=&quot;Markup Language&quot;&gt;linguaggio di markup&lt;/a&gt;, Il &lt;a href=&quot;http://en.wikipedia.org/wiki/Smalltalk&quot; title=&quot;Smalltalk&quot;&gt;Smalltalk&lt;/a&gt; Il codice del browser, &lt;a href=&quot;http://en.wikipedia.org/wiki/Debugger&quot; title=&quot;Debugger&quot;&gt;debugger&lt;/a&gt; e oggetto di ispezione, e (con &lt;a class=&quot;new&quot; href=&quot;http://en.wikipedia.org/w/index.php?title=Tim_Mott&amp;amp;action=edit&amp;amp;redlink=1&quot; title=&quot;Tim Mott (pagina non esiste)&quot;&gt;Tim Mott&lt;/a&gt;) Il &lt;a href=&quot;http://en.wikipedia.org/wiki/Gypsy_%28software%29&quot; title=&quot;Gypsy (software)&quot;&gt;Zingaro&lt;/a&gt; word processor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Jon_Stephenson_von_Tetzchner&quot; title=&quot;Jon Stephenson von Tetzchner&quot;&gt;Jon Stephenson von Tetzchner&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Opera_%28web_browser%29&quot; title=&quot;Opera (browser web)&quot;&gt;Opera&lt;/a&gt; web browser&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Avie_Tevanian&quot; title=&quot;Avie Tevanian&quot;&gt;Avie Tevanian&lt;/a&gt; - Autore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Mach_kernel&quot; title=&quot;Mach kernel&quot;&gt;Mach kernel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Ken_Thompson_%28computer_programmer%29&quot; title=&quot;Ken Thompson (programmatore informatico)&quot;&gt;Ken Thompson&lt;/a&gt; - Disegnatore principale e autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Unix&quot; title=&quot;Unix&quot;&gt;Unix&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs&quot; title=&quot;Plan 9 dei Bell Labs&quot;&gt;Plan 9&lt;/a&gt; e &lt;a href=&quot;http://en.wikipedia.org/wiki/Inferno_%28operating_system%29&quot; title=&quot;Inferno (sistema operativo)&quot;&gt;Inferno&lt;/a&gt; sistemi operativi, &lt;a href=&quot;http://en.wikipedia.org/wiki/B_%28programming_language%29&quot; title=&quot;B (linguaggio di programmazione)&quot;&gt;B&lt;/a&gt; e lingue Bon (precursori di &lt;a href=&quot;http://en.wikipedia.org/wiki/C_%28programming_language%29&quot; title=&quot;C (linguaggio di programmazione)&quot;&gt;C&lt;/a&gt;), Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/UTF-8&quot; title=&quot;UTF-8&quot;&gt;UTF-8&lt;/a&gt; la codifica dei caratteri, ha introdotto &lt;a href=&quot;http://en.wikipedia.org/wiki/Regular_expression&quot; title=&quot;Espressione regolare&quot;&gt;espressioni regolari&lt;/a&gt; in &lt;a href=&quot;http://en.wikipedia.org/wiki/QED_%28text_editor%29&quot; title=&quot;QED (editor di testo)&quot;&gt;QED&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Tiemann&quot; title=&quot;Michael Tiemann&quot;&gt;Michael Tiemann&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/G%2B%2B&quot; title=&quot;G + +&quot;&gt;G + +&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/GNU_Compiler_Collection&quot; title=&quot;GNU Compiler Collection&quot;&gt;GCC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Linus_Torvalds&quot; title=&quot;Linus Torvalds&quot;&gt;Linus Torvalds&lt;/a&gt; - Autore originale e attuale responsabile della &lt;a href=&quot;http://en.wikipedia.org/wiki/Linux&quot; title=&quot;Linux&quot;&gt;Linux&lt;/a&gt; kernel e creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Git_%28software%29&quot; title=&quot;Git (software)&quot;&gt;Git&lt;/a&gt;, Un codice sorgente del sistema di gestione&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Leonard_H._Tower_Jr.&quot; title=&quot;Leonard H. Tower Jr.&quot;&gt;Leonard H. Tower Jr.&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/GNU_Compiler_Collection&quot; title=&quot;GNU Compiler Collection&quot;&gt;GCC&lt;/a&gt; E GNU &lt;a href=&quot;http://en.wikipedia.org/wiki/Diff&quot; title=&quot;Diff&quot;&gt;diff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Toy&quot; title=&quot;Michael Toy&quot;&gt;Michael Toy&lt;/a&gt; - Co-sviluppatore del gioco per computer &lt;a href=&quot;http://en.wikipedia.org/wiki/Rogue_%28computer_game%29&quot; title=&quot;Rogue (videogioco)&quot;&gt;Furfante&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Andrew_Tridgell&quot; title=&quot;Andrew Tridgell&quot;&gt;Andrew Tridgell&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Samba_software&quot; title=&quot;Samba software&quot;&gt;Samba&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Rsync&quot; title=&quot;Rsync&quot;&gt;Rsync&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Roy_Trubshaw&quot; title=&quot;Roy Trubshaw&quot;&gt;Roy Trubshaw&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/MUD&quot; title=&quot;MUD&quot;&gt;MUD&lt;/a&gt; - Insieme con &lt;a href=&quot;http://en.wikipedia.org/wiki/Richard_Bartle&quot; title=&quot;Richard Bartle&quot;&gt;Richard Bartle&lt;/a&gt;, Creatore del MUD&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bob_Truel&quot; title=&quot;Bob Truel&quot;&gt;Bob Truel&lt;/a&gt; - Co-fondatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Open_Directory_Project&quot; title=&quot;Open Directory Project&quot;&gt;Open Directory Project&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;mw-headline&quot; id=&quot;U&quot;&gt;U&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt; &lt;span class=&quot;mw-headline&quot; id=&quot;V&quot;&gt;V&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Wietse_Venema&quot; title=&quot;Wietse Venema&quot;&gt;Wietse Venema&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Postfix_%28software%29&quot; title=&quot;Postfix (software)&quot;&gt;Postfix&lt;/a&gt;, &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/SATAN&quot; title=&quot;SATANA&quot;&gt;SATANA&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/TCP_Wrapper&quot; title=&quot;TCP Wrapper&quot;&gt;TCP Wrapper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Paul_Vixie&quot; title=&quot;Paul Vixie&quot;&gt;Paul Vixie&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/BIND&quot; title=&quot;BIND&quot;&gt;BIND&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Cron&quot; title=&quot;Cron&quot;&gt;Cron&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Patrick_Volkerding&quot; title=&quot;Patrick Volkerding&quot;&gt;Patrick Volkerding&lt;/a&gt; - Original autore e l&#39;attuale responsabile della &lt;a href=&quot;http://en.wikipedia.org/wiki/Slackware&quot; title=&quot;Slackware&quot;&gt;Slackware&lt;/a&gt; Distribuzione Linux&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;mw-headline&quot; id=&quot;W&quot;&gt;W&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Larry_Wall&quot; title=&quot;Larry Wall&quot;&gt;Larry Wall&lt;/a&gt; - Warp (1980 spazio gioco-guerra), &lt;a href=&quot;http://en.wikipedia.org/wiki/Rn_%28newsreader%29&quot; title=&quot;Rn (newsreader)&quot;&gt;rn&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Patch_%28Unix%29&quot; title=&quot;Patch (Unix)&quot;&gt;patch&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Perl&quot; title=&quot;Perl&quot;&gt;Perl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bob_Wallace&quot; title=&quot;Bob Wallace&quot;&gt;Bob Wallace&lt;/a&gt; - Autore &lt;a href=&quot;http://en.wikipedia.org/wiki/PC-Write&quot; title=&quot;PC-Write&quot;&gt;PC-Write&lt;/a&gt; word processor, è considerato un co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Shareware&quot; title=&quot;Shareware&quot;&gt;shareware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/John_Walker_%28programmer%29&quot; title=&quot;John Walker (programmatore)&quot;&gt;John Walker&lt;/a&gt; - Co-fondatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Autodesk&quot; title=&quot;Autodesk&quot;&gt;Autodesk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/John_Warnock&quot; title=&quot;John Warnock&quot;&gt;John Warnock&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/PostScript&quot; title=&quot;PostScript&quot;&gt;PostScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Pei-Yuan_Wei&quot; title=&quot;Pei-Yuan Wei&quot;&gt;Pei-Yuan Wei&lt;/a&gt; - Autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/ViolaWWW&quot; title=&quot;ViolaWWW&quot;&gt;Viola&lt;/a&gt;, Uno dei primi browser grafici&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Peter_J._Weinberger&quot; title=&quot;Peter J. Weinberger&quot;&gt;Peter J. Weinberger&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/AWK&quot; title=&quot;AWK&quot;&gt;AWK&lt;/a&gt; (Il &lt;i&gt;W&lt;/i&gt; nel nome sta per Weinberger)&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Andrew_Welch&quot; title=&quot;Andrew Welch&quot;&gt;Andrew Welch&lt;/a&gt; - Autore di &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Maelstrom_%28computer_game%29&quot; title=&quot;Maelstrom (videogioco)&quot;&gt;Gorgo&lt;/a&gt;, &lt;a class=&quot;new&quot; href=&quot;http://en.wikipedia.org/w/index.php?title=Snapz_Pro&amp;amp;action=edit&amp;amp;redlink=1&quot; title=&quot;Snapz Pro (pagina non esiste)&quot;&gt;Snapz Pro&lt;/a&gt;; Fondatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Ambrosia_Software&quot; title=&quot;Ambrosia Software&quot;&gt;Ambrosia Software&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/David_Wheeler_%28computer_scientist%29&quot; title=&quot;David Wheeler (informatico)&quot;&gt;David Wheeler&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Subroutine&quot; title=&quot;Sottoprogramma&quot;&gt;sottoprogramma&lt;/a&gt;; Progettista di &lt;a href=&quot;http://en.wikipedia.org/wiki/WAKE_%28cipher%29&quot; title=&quot;Wake (cifrario)&quot;&gt;WAKE&lt;/a&gt;, Co-progettista di &lt;a href=&quot;http://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm&quot; title=&quot;Tiny Encryption Algorithm&quot;&gt;Tiny Encryption Algorithm&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/XTEA&quot; title=&quot;XTEA&quot;&gt;XTEA&lt;/a&gt;, &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Burrows-Wheeler_transform&quot; title=&quot;Burrows-Wheeler trasformi&quot;&gt;Burrows-Wheeler trasformi&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Arthur_Whitney_%28computer_scientist%29&quot; title=&quot;Arthur Whitney (informatico)&quot;&gt;Arthur Whitney&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/A%2B_%28programming_language%29&quot; title=&quot;A + (linguaggio di programmazione)&quot;&gt;A +&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/K_%28programming_language%29&quot; title=&quot;K (linguaggio di programmazione)&quot;&gt;K&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bruce_Wilcox&quot; title=&quot;Bruce Wilcox&quot;&gt;Bruce Wilcox&lt;/a&gt; - Creatore di Computer Go, programmato NEMESIS Go Master.&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Evan_Williams_%28blogger%29&quot; title=&quot;Evan Williams (blogger)&quot;&gt;Evan Williams&lt;/a&gt; Ideatore e co-fondatore di Twitter&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Roberta_Williams&quot; title=&quot;Roberta Williams&quot;&gt;Roberta&lt;/a&gt; e &lt;a href=&quot;http://en.wikipedia.org/wiki/Ken_Williams_%28gaming%29&quot; title=&quot;Ken Williams (gioco)&quot;&gt;Ken Williams&lt;/a&gt; -- &lt;a href=&quot;http://en.wikipedia.org/wiki/Sierra_Entertainment&quot; title=&quot;Sierra Entertainment&quot;&gt;Sierra Entertainment&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/King%27s_Quest&quot; title=&quot;King&#39;s Quest&quot;&gt;King&#39;s Quest&lt;/a&gt;, Gioco di avventura grafica&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Sophie_Wilson&quot; title=&quot;Sophie Wilson&quot;&gt;Sophie Wilson&lt;/a&gt; - Designer di set di istruzioni per &lt;a href=&quot;http://en.wikipedia.org/wiki/ARM_architecture&quot; title=&quot;Architettura ARM&quot;&gt;Acorn RISC Machine&lt;/a&gt;, Autore di &lt;a href=&quot;http://en.wikipedia.org/wiki/BBC_BASIC&quot; title=&quot;BBC BASIC&quot;&gt;BBC BASIC&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Dave_Winer&quot; title=&quot;Dave Winer&quot;&gt;Dave Winer&lt;/a&gt; - Sviluppato &lt;a href=&quot;http://en.wikipedia.org/wiki/XML-RPC&quot; title=&quot;XML-RPC&quot;&gt;XML-RPC&lt;/a&gt;, Frontier linguaggio di scripting&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Niklaus_Wirth&quot; title=&quot;Niklaus Wirth&quot;&gt;Niklaus Wirth&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Pascal_%28programming_language%29&quot; title=&quot;Pascal (linguaggio di programmazione)&quot;&gt;Pascal&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Modula-2&quot; title=&quot;Modula-2&quot;&gt;Modula-2&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Oberon_%28programming_language%29&quot; title=&quot;Oberon (linguaggio di programmazione)&quot;&gt;Oberon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Stephen_Wolfram&quot; title=&quot;Stephen Wolfram&quot;&gt;Stephen Wolfram&lt;/a&gt; - Creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Mathematica&quot; title=&quot;Mathematica&quot;&gt;Mathematica&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Don_Woods&quot; title=&quot;Don Bosco&quot;&gt;Don Bosco&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/INTERCAL&quot; title=&quot;INTERCAL&quot;&gt;INTERCAL&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Colossal_Cave_Adventure&quot; title=&quot;Colossal Cave Adventure&quot;&gt;Colossal Cave Adventure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Steve_Wozniak&quot; title=&quot;Steve Wozniak&quot;&gt;Steve Wozniak&lt;/a&gt; - &lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Breakout_%28arcade_game%29&quot; title=&quot;Breakout (gioco arcade)&quot;&gt;Breakout&lt;/a&gt;, Apple &lt;a href=&quot;http://en.wikipedia.org/wiki/Integer_BASIC&quot; title=&quot;Integer BASIC&quot;&gt;Integer BASIC&lt;/a&gt;, Co-fondatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Apple_Inc.&quot; title=&quot;Apple Inc.&quot;&gt;Apple Inc.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Will_Wright_%28game_designer%29&quot; title=&quot;Will Wright (autore di giochi)&quot;&gt;Will Wright&lt;/a&gt; - Ha creato la serie Sim City e co-fondatore di Maxis&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;mw-headline&quot; id=&quot;X&quot;&gt;X&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;mw-headline&quot; id=&quot;Y&quot;&gt;Y&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Jerry_Yang_%28entrepreneur%29&quot; title=&quot;Jerry Yang (imprenditore)&quot;&gt;Jerry Yang&lt;/a&gt; - Co-creatore di &lt;a href=&quot;http://en.wikipedia.org/wiki/Yahoo%21&quot; title=&quot;Inizio&quot;&gt;Inizio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Victor_Yngve&quot; title=&quot;Victor Yngve&quot;&gt;Victor Yngve&lt;/a&gt; - Autore della prima lingua l&#39;elaborazione delle stringhe, &lt;a href=&quot;http://en.wikipedia.org/wiki/COMIT&quot; title=&quot;COMIT&quot;&gt;COMIT&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;editsection&quot;&gt;&amp;nbsp;&lt;/span&gt; &lt;span class=&quot;mw-headline&quot; id=&quot;Z&quot;&gt;Z&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Jamie_Zawinski&quot; title=&quot;Jamie Zawinski&quot;&gt;Jamie Zawinski&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/XEmacs&quot; title=&quot;XEmacs&quot;&gt;Lucid Emacs&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Netscape_Navigator&quot; title=&quot;Netscape Navigator&quot;&gt;Netscape&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Mozilla&quot; title=&quot;Mozilla&quot;&gt;Mozilla&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/XScreenSaver&quot; title=&quot;XScreenSaver&quot;&gt;XScreenSaver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;mw-redirect&quot; href=&quot;http://en.wikipedia.org/wiki/Philip_Zimmermann&quot; title=&quot;Philip Zimmermann&quot;&gt;Philip Zimmermann&lt;/a&gt; - Creatore di software di crittografia &lt;a href=&quot;http://en.wikipedia.org/wiki/Pretty_Good_Privacy&quot; title=&quot;Pretty Good Privacy&quot;&gt;PGP&lt;/a&gt;, Il &lt;a href=&quot;http://en.wikipedia.org/wiki/ZRTP&quot; title=&quot;ZRTP&quot;&gt;ZRTP&lt;/a&gt; protocollo, e &lt;a href=&quot;http://en.wikipedia.org/wiki/Zfone&quot; title=&quot;Zfone&quot;&gt;Zfone&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://logistoris.blogspot.com/feeds/4689654901901224278/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://logistoris.blogspot.com/2011/02/lista-dei-piu-grandi-programmatori.html#comment-form' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/4689654901901224278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5072520483132159389/posts/default/4689654901901224278'/><link rel='alternate' type='text/html' href='http://logistoris.blogspot.com/2011/02/lista-dei-piu-grandi-programmatori.html' title='Lista dei più grandi programmatori'/><author><name>logistoris</name><uri>http://www.blogger.com/profile/17659286855494489627</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>