<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Good2Know &#187; Programmazione</title>
	<atom:link href="http://www.good2know.it/category/programmazione/feed" rel="self" type="application/rss+xml" />
	<link>http://www.good2know.it</link>
	<description>Webmaster's blog</description>
	<lastBuildDate>Sun, 29 Jan 2012 15:21:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Text shadow animation, testo in 3D con CSS3</title>
		<link>http://www.good2know.it/programmazione/text-shadow-animation-testo-in-3d-con-css3/ </link>
		<comments>http://www.good2know.it/programmazione/text-shadow-animation-testo-in-3d-con-css3/ #comments</comments>
		<pubDate>Sun, 13 Nov 2011 20:33:20 +0000</pubDate>
		<dc:creator>Filippo Matteo Riggio</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[text shadow]]></category>
		<category><![CDATA[transition]]></category>

		<guid isPermaLink="false">http://www.good2know.it/?p=1544</guid>
		<description><![CDATA[
Girovagando per il web ho trovato un effetto con i nuovi css3 molto carino., fatto utilizzando i tag introdotti nella terza versione di CSS.
Attraverso questi nuovi standard si possono applicare effetti molto carini al testo.

Seguendo questo link potrete vedere una demo.
Per prima cosa l&#8217;HTML: la suddivisione del testo del link in span serve per la [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.good2know.it/wp-content/uploads/2011/11/css3text-shadow-animation.jpg"><img class="size-full wp-image-1545 alignnone" title="css3text-shadow-animation" src="http://www.good2know.it/wp-content/uploads/2011/11/css3text-shadow-animation.jpg" alt="" width="200" height="200" /></a></p>
<p>Girovagando per il web ho trovato un effetto con i nuovi css3 molto carino., fatto utilizzando i tag introdotti nella terza versione di CSS.</p>
<p>Attraverso questi nuovi standard si possono applicare effetti molto carini al testo.</p>
<p><span id="more-1544"></span></p>
<p>Seguendo questo link potrete vedere una <a title="Text shadow animation" href="http://www.good2know.it/examples/css3-text-shadow-animation/index.html" target="_blank">demo</a>.</p>
<p>Per prima cosa l&#8217;HTML: la suddivisione del testo del link in span serve per la stilizzazione attraverso i CSS.</p>
<pre class="brush: php;">
&lt;div id=&quot;animationWrapper&quot;&gt;
   &lt;a href=&quot;/&quot;&gt;
      &lt;span&gt;Good2know&lt;/span&gt;
      &lt;span&gt;F. Matteo&lt;/span&gt;
      &lt;span&gt;Riggio&lt;/span&gt;
      &lt;span&gt;Webmaster's Blog&lt;/span&gt;
   &lt;/a&gt;
&lt;/div&gt;
</pre>
<p>Ora la parte del codice CSS:<strong> molto interessante l&#8217;utilizzo della sintassi per l&#8217;animazione applicata sul link e sugli span</strong>.</p>
<pre class="brush: css;">
/* wrapper dell'animazione */
#animationWrapper  {
  width:530px;
  font-family: Arial,sans-serif;
  background: #222;
  padding:40px;
}

/* link che include gli span */
#animationWrapper a {
  font-weight: 800;
  text-transform: uppercase;
  font-size: 42px;
  line-height: 0.9em;
  margin-bottom: 10px;
  display: block;
  position: relative;
  color: #E58;
  text-decoration: none
}

/* animazioni css 3 */
#animationWrapper a, #animationWrapper span {
  -webkit-transition: all 0.12s ease-out;
  -moz-transition: all 0.12s ease-out;
  -o-transition: all 0.12s ease-out;
  -ms-transition: all 0.12s ease-out;
  transition: all 0.12s ease-out;
}

#animationWrapper span {
  display: block;
  color: #555;
  text-shadow: 1px 1px black, 2px 2px black, 3px 3px black, 4px 4px black, 5px 5px black, 6px 6px black, 7px 7px black, 8px 8px black;
}

/* dimensioni speciali per il primo span */
#animationWrapper .span1 {
  font-size: 76px;
  line-height: 0.8em;
}

#animationWrapper a:hover {
    color: #fff ;
    top: -3px;
    left: -3px;
}

/* gli span diventano bianchi sull'hover */
#animationWrapper a:hover span {
  color:#fff;
}

/* colori differenti per gli span */
#animationWrapper a:hover .span1 {
    text-shadow: 1px 1px #58E, 2px 2px #58E, 3px 3px #58E, 4px 4px #58E, 5px 5px #58E, 6px 6px #58E, 7px 7px #58E, 8px 8px #58E, 9px 9px #58E, 10px 10px #58E, 11px 11px #58E;
}

#animationWrapper a:hover .span2 {
    text-shadow: 1px 1px #F90, 2px 2px #F90, 3px 3px #F90, 4px 4px #F90, 5px 5px #F90, 6px 6px #F90, 7px 7px #F90, 8px 8px #F90, 9px 9px #F90, 10px 10px #F90, 11px 11px #F90;
}

#animationWrapper a:hover .span3 {
    text-shadow: 1px 1px #3C7, 2px 2px #3C7, 3px 3px #3C7, 4px 4px #3C7, 5px 5px #3C7, 6px 6px #3C7, 7px 7px #3C7, 8px 8px #3C7, 9px 9px #3C7, 10px 10px #3C7, 11px 11px #3C7;
}

#animationWrapper a:hover .span4 {
    text-shadow: 1px 1px #E58, 2px 2px #E58, 3px 3px #E58, 4px 4px #E58, 5px 5px #E58, 6px 6px #E58, 7px 7px #E58, 8px 8px #E58, 9px 9px #E58, 10px 10px #E58, 11px 11px #E58;
}
</pre>
<p>Potrete utilizzare questo effetto per header o banner ad effetto senza andare ad utilizzare javascript o flash.<br />
In un prossimo articolo descriverò più in profondità quelle che sono le varie transizioni possibili con CSS 3.<br />
Alla prossima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.good2know.it/programmazione/text-shadow-animation-testo-in-3d-con-css3/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E dopo robots.txt è il momento di humans.txt</title>
		<link>http://www.good2know.it/programmazione/e-dopo-robots-txt-e-il-momento-di-humans-txt/ </link>
		<comments>http://www.good2know.it/programmazione/e-dopo-robots-txt-e-il-momento-di-humans-txt/ #comments</comments>
		<pubDate>Fri, 11 Nov 2011 12:57:56 +0000</pubDate>
		<dc:creator>Filippo Matteo Riggio</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[humans.txt]]></category>
		<category><![CDATA[robots.txt]]></category>
		<category><![CDATA[team di sviluppo]]></category>

		<guid isPermaLink="false">http://www.good2know.it/?p=1536</guid>
		<description><![CDATA[
Il file robots.txt penso che lo conosciamo tutti, è un file txt per aiutare i crawler dei motori di ricerca nell&#8217;indicizzazione.
Bene, dopo i robot nei siti internet conteranno anche gli umani, è questa l&#8217;idea di fondo di humanstxt.org, un movimento online che cerca di far utilizzare questo txt per descrivere chi sta dietro ad un [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.good2know.it/wp-content/uploads/2011/11/humanstxt-robotstxt.jpg"><img class="size-full wp-image-1542 alignnone" title="humanstxt-robotstxt" src="http://www.good2know.it/wp-content/uploads/2011/11/humanstxt-robotstxt.jpg" alt="" width="200" height="200" /></a></p>
<p>Il file robots.txt penso che lo conosciamo tutti, è un file txt per aiutare i crawler dei motori di ricerca nell&#8217;indicizzazione.</p>
<p>Bene, dopo i robot nei siti internet conteranno anche gli umani, è questa l&#8217;idea di fondo di <a href="http://humanstxt.org" target="_blank">humanstxt.org</a>, un movimento online che cerca di far utilizzare questo txt per<strong> descrivere chi sta dietro ad un sito web</strong>: developer, designer, seo, copywriter, ecc.<br />
<span id="more-1536"></span>Esiste già anche una sintassi a riguardo:</p>
<blockquote><p><strong>/* TEAM */<br />
Your title: Your name.<br />
Site: email, link to a contact form, etc.<br />
Twitter: your Twitter username.<br />
Location: City, Country.</strong></p>
<p><strong>/* THANKS */<br />
Name: name or url</strong></p>
<p><strong>/* SITE */<br />
Last update: YYYY/MM/DD<br />
Standards: HTML5, CSS3,..<br />
Components: Modernizr, jQuery, etc.<br />
Software: Software used for the development </strong></p></blockquote>
<p>Chi lo utilizza già? Tra i grandi <a href="http://www.google.com/humans.txt" target="_blank">google.com</a> e <a href="http://www.flickr.com/humans.txt">flickr.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.good2know.it/programmazione/e-dopo-robots-txt-e-il-momento-di-humans-txt/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend_Acl e Zend_Auth &#8211; Sistema di autenticazione e autorizzazione con Zend Framework</title>
		<link>http://www.good2know.it/programmazione/zend_acl-e-zend_auth-sistema-di-autenticazione-e-autorizzazione-con-zend-framework/ </link>
		<comments>http://www.good2know.it/programmazione/zend_acl-e-zend_auth-sistema-di-autenticazione-e-autorizzazione-con-zend-framework/ #comments</comments>
		<pubDate>Mon, 11 Jul 2011 12:00:35 +0000</pubDate>
		<dc:creator>Filippo Matteo Riggio</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[zend_acl]]></category>
		<category><![CDATA[zend_auth]]></category>
		<category><![CDATA[zend_framework]]></category>

		<guid isPermaLink="false">http://www.good2know.it/?p=1510</guid>
		<description><![CDATA[
Zend_Acl è una delle tante classi di Zend molto utili.
Consiste  in una serie di funzionalità che permettono un controllo molto facile  di CHI può fare COSA aumentando il livello di protezione del sistema e diminuendo le possibilità di errore da parte dello sviluppatore.

Un esempio:
L&#8217;amministratore del sistema potrà fare tutto.
Un utente normale potrà accedere [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.good2know.it/wp-content/uploads/2010/12/ZendFramework-logo-2.png"><img class="alignleft size-thumbnail wp-image-1449" title="ZendFramework-logo-2" src="http://www.good2know.it/wp-content/uploads/2010/12/ZendFramework-logo-2-150x150.png" alt="" width="150" height="150" /></a></p>
<p><strong>Zend_Acl</strong> è una delle tante classi di <a title="Zend Framework" href="http://framework.zend.com/" target="_blank">Zend</a> molto utili.</p>
<p>Consiste  in una serie di funzionalità che permettono un <strong>controllo molto facile  di CHI può fare COSA</strong> aumentando il livello di protezione del sistema e diminuendo le possibilità di errore da parte dello sviluppatore.<br />
<span id="more-1510"></span><br />
Un esempio:<br />
L&#8217;amministratore del sistema potrà fare tutto.<br />
Un utente normale potrà accedere solo ad alcune pagine(o risorse).</p>
<p><strong>Risorse e ruoli.</strong><br />
Queste sono le due entità fondamentali quando si parla di controllo degli accessi.</p>
<p><strong>Le risorse</strong><br />
Una serie di oggetti che si possono controllare, nel caso di pattern MVC, possono essere controller, action, percorsi, ecc.</p>
<p><strong>I ruoli</strong><br />
Sono gli attori attivi del sistema che devono accedere alle risorse, ad esempio amministratori, utenti normali, moderatori, ecc.</p>
<p>Quindi andremo a crea un plugin di Zend che effettuerà i controlli.</p>
<p>I metodi da inserire nel plugin sono 2 :</p>
<ul>
<li><strong>__construct()</strong> : in cui andremo a specificare risorse, ruoli e permessi</li>
<li><strong>preDispatch()</strong> : l&#8217;operazione preliminare alla chiamata di una action in cui effettuare il controllo</li>
</ul>
<p>Operazioni da implementare nel <strong>__construct()</strong></p>
<ol>
<li>Creazione dell&#8217; istanza di Zend_Acl</li>
<li>Creazione della risorsa</li>
<li>Creazione del ruolo</li>
<li>Aggiunta della risorsa all&#8217; Access Control List</li>
<li>Aggiunta del ruolo all&#8217; Access Control List</li>
<li>Definizione dei permessi su una risorsa da parte di un ruolo</li>
</ol>
<p>Quindi di seguito il codice:</p>
<pre class="brush: php;">
public function __construct() {
   // Creiamo l'istanza
   $acl = new Zend_Acl();

   // Creiamo la risorsa
   $resource1 = new Zend_Acl_Resource('nomeController1');
   $resource2 = new Zend_Acl_Resource('nomeController2');

   // Creiamo il ruolo
   $role = new new Zend_Acl_Role('nomeRuolo');

   // Associamo la risorsa all' ACL
   $acl-&gt;add($resource1);
   $acl-&gt;add($resource2);

   // Associamo il ruolo all' ACL
   $acl-&gt;addRole($role);

   // Andiamo a specificare i vari permessi
   // ad es: permettiamo al ruolo di accedere alla risorsa 1 e gli neghiamo la 2
   $acl-&gt;allow('nomeRuolo', 'nomeController1');
   $acl-&gt;deny('nomeRuolo', 'nomeController2');
}
</pre>
<p>Operazioni da implementare del <strong>preDispatch():</strong></p>
<ol>
<li>Controllo dell&#8217;autenticazione dell&#8217;utente</li>
<li>Controllo sui permessi della richiesta effettuata dall&#8217;utente</li>
</ol>
<p>Quindi di seguito il codice:</p>
<pre class="brush: php;">
// nel preDispatch() ho la richiesta fatta
public function preDispatch(Zend_Controller_Request_Abstract $request) {
   // controllo se l'utente è autenticato altrimenti lo credo un qualsiasi ospite
   if ($this-&gt;auth-&gt;hasIdentity()) {
      $role = $this-&gt;auth-&gt;getIdentity()-&gt;tipo_utente;
   } else {
      $role = 'ospite';
   }

   // controllo se il ruolo è contemplato nell'ACL
   if (!$this-&gt;acl-&gt;hasRole($role)) {
      $role = 'ospite';
   }

   // prendo il nome del controller come risorsa alla quale l'utente vuole accedere
   $resource = $request-&gt;controller;

   // prendo il nome dell'azione come privilegio alla quale l'utente vuole accedere
   $privilege = $request-&gt;action;

   // controllo se la risorsa è contemplata dall'ACL
   if (!$this-&gt;acl-&gt;has($resource)) {
      $resource = null;
   }

   // controllo se il ruolo non ha accesso alla risorsa e lo reindirizzo alla pagina per gli ospiti
   if (!$this-&gt;acl-&gt;isAllowed($role, $resource, $privilege)) {
      $request-&gt;setControllerName($this-&gt;_authController['controller']);
      $request-&gt;setActionName($this-&gt;_authController['action']);
   }
}
</pre>
<p>Questo è <strong>il plugin da andare ad aggiungere all&#8217;applicazione</strong>.<br />
Per <strong>aggiungerlo</strong> andate <strong>nel file di bootstrap</strong> dell&#8217;applicazione (index.php o bootstrap.php) e aggiungete il plugin così:</p>
<pre class="brush: php;">
// istanzio la Zend_Auth
$auth = Zend_Auth::getInstance();
$auth-&gt;setStorage(new Zend_Auth_Storage_Session());

// istanzio il Zend_Controller_Front
$controller = Zend_Controller_Front::getInstance();
$controller-&gt;registerPlugin(new CustomControllerAclManager($auth));
</pre>
<p>Abbiamo quasi finito, bisogna <strong>aggiungere la fase di checking dell&#8217;identità nel preDispatch()</strong> dei vari controller:</p>
<pre class="brush: php;">
class CustomControllerAction extends Zend_Controller_Action {

   public function preDispatch() {
      $auth = Zend_Auth::getInstance();
      if ($auth-&gt;hasIdentity()) {
         $this-&gt;view-&gt;authenticated = true;
         $this-&gt;view-&gt;identity = $auth-&gt;getIdentity();
      } else {
         $this-&gt;view-&gt;authenticated = false;
      }
   }

}
</pre>
<p>Bene, con questo il sistema di accessi è terminato.<br />
Possiamo far <strong>ereditare il controller ad altri controller figli</strong> così che non dobbiamo specificare il checking nel preDispatch() di tutti.</p>
<p>Per dubbi o chiarimenti commentate qui sotto!<br />
Alla prossima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.good2know.it/programmazione/zend_acl-e-zend_auth-sistema-di-autenticazione-e-autorizzazione-con-zend-framework/ /feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Zend_Auth &#8211; Gestire le autenticazioni semplicemente</title>
		<link>http://www.good2know.it/programmazione/zend_auth-gestire-le-autenticazioni-semplicemente/ </link>
		<comments>http://www.good2know.it/programmazione/zend_auth-gestire-le-autenticazioni-semplicemente/ #comments</comments>
		<pubDate>Wed, 11 May 2011 12:05:55 +0000</pubDate>
		<dc:creator>Filippo Matteo Riggio</dc:creator>
				<category><![CDATA[Programmazione]]></category>

		<guid isPermaLink="false">http://www.good2know.it/?p=1512</guid>
		<description><![CDATA[
Zend_Auth è una classe di Zend Framework che permette la gestione dell&#8217;autenticazione su un sito in maniera molto semplice.
Consiste in una serie di adapter per gli scenari d&#8217;uso più comuni.

Da notare bene che esso gestisce solo l&#8217;autenticazione e non l&#8217;autorizzazione, che sono due cose ben diverse.
Per quanto concerne l&#8217;autorizzazione scriverò prossimamente un articolo su Zend_Acl.
Adapter
I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.good2know.it/wp-content/uploads/2010/12/ZendFramework-logo-2.png"><img class="alignleft size-thumbnail wp-image-1449" title="ZendFramework-logo-2" src="http://www.good2know.it/wp-content/uploads/2010/12/ZendFramework-logo-2-150x150.png" alt="" width="150" height="150" /></a><br />
Zend_Auth è una classe di Zend Framework che permette la gestione dell&#8217;autenticazione su un sito in maniera molto semplice.</p>
<p>Consiste in una serie di adapter per gli scenari d&#8217;uso più comuni.</p>
<p><span id="more-1512"></span></p>
<p>Da notare bene che esso gestisce solo l&#8217;autenticazione e non l&#8217;autorizzazione, che sono due cose ben diverse.</p>
<p>Per quanto concerne l&#8217;autorizzazione scriverò prossimamente un articolo su Zend_Acl.</p>
<p><strong>Adapter</strong><br />
I sistemi di autenticazione sono svariati, LDAP, OpenId, Digest, ecc.<br />
Proprio per questo Zend mette a disposizione svariati tipi di adapter, che andranno ad interfacciarsi con Zend_Auth.<br />
I vari adapter sono:</p>
<ul>
<li>Zend_Auth_Adapter_DbTable per i database RDBMS (MySql, Postgresql, ecc.)</li>
<li>Zend_Auth_Adapter_LDAP per l&#8217;autenticazione tramite LDAP (sistema di utenti di Windows)</li>
<li>Zend_Auth_Adapter_Digest per l&#8217;autenticazione senza trasmissione di password (Digest)</li>
<li>Zend_Auth_Adapter_Http per l&#8217;autenticazione Digest, Basic e RFC-2617 (poco usata)</li>
<li>Zend_Auth_Adapter_OpenId per l&#8217;autenticazione tramite OpenId</li>
</ul>
<p><strong>Esempio</strong><br />
In genere l&#8217;autenticazione viene fatta utilizzando una username ed una password salvata su un database,<br />
proprio per questo nel mio esempio utilizzerò un adapter per la connessione ad un database RDBMS.</p>
<p>Il setup è abbastanza semplice:</p>
<pre class="brush: php;">
$adapter = new Zend_Auth_Adapter_DbTable($adapterDb,
                                                             'nome_tabella_utenti',
                                                             'colonna_identificativo',
                                                             'colonna_credenziale',
                                                             'controllo_sulla_credenziale');
</pre>
<p>Successivamente basterà passare all&#8217;adapter, identificativo e credenziale(username e password da un form) ed effettuare il controllo tramite la funzione authenticate di zend_auth.</p>
<pre class="brush: php;">
&lt;?php
class AccountController extends ZendControllerAction {

   public function loginAction() {

      // se un utente è già autenticato lo rimando alla homepage
      $auth = Zend_Auth::getInstance();

      if ($auth-&gt;hasIdentity()){
         $this-&gt;_redirect('/index/');
      }

       // controllo se è stata inviata la richiesta dal form di login
      if ($this-&gt;getRequest()-&gt;isPost()) {

         // prendo i dati di login
         $username = $request-&gt;getPost('username');
         $password = $request-&gt;getPost('password');

         // faccio il setup dell'adapter di zend_auth per i database
         $adapter = new Zend_Auth_Adapter_DbTable($this-&gt;db,
                                                                      'nome_tabella',
                                                                      'username',
                                                                      'password',
                                                                      'md5(?)');

         $adapter-&gt;setIdentity($username);
         $adapter-&gt;setCredential($password);

         // provo ad autenticare l'utente
         $result = $auth-&gt;authenticate($adapter);

         // se è valido salvo nello storage di zend_auth (una variabile di sessione)
         // l'identità dell'utente e faccio il redirect alla home
         if ($result-&gt;isValid()) {

            // l'adapter restituisce un array associativo con i dati dell'utente
            $user = $adapter-&gt;getResultRowObject();

            // Scrivo nello storage l'utente autenticato
            $auth-&gt;getStorage()-&gt;write($user['id_utente']);

            // send user to page they originally request
            $this-&gt;_redirect('/index');
         }

         // autenticazione fallita, rimando al login, magari con un messaggio d'errore
         $this-&gt;_redirect('/login');

      }
   }
}
?&gt;
</pre>
<p>L&#8217;esempio, ovviamente, è incompleto, mancano eventuali controlli e messaggi d&#8217;errore, ma ci dà una piccola panoramica della semplicità d&#8217;autenticazione di Zend.<br />
Manca anche la parte di View dell&#8217;azione, ma penso che chiunque sappia ormai fare una form di login, no? <img src='http://www.good2know.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Nel prossimo articolo parleremo di Zend_Acl, che combinato con Zend_Auth permette di controllare facilmente tutta la parte di autenticazione e autorizzaione di un sito/progetto.</p>
<p>Alla prossima!<br />
 <img src='http://www.good2know.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.good2know.it/programmazione/zend_auth-gestire-le-autenticazioni-semplicemente/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aumentare le prestazioni di PHP con Facebook HipHop</title>
		<link>http://www.good2know.it/programmazione/aumentare-le-prestazioni-di-php-con-facebook-hiphop/ </link>
		<comments>http://www.good2know.it/programmazione/aumentare-le-prestazioni-di-php-con-facebook-hiphop/ #comments</comments>
		<pubDate>Mon, 02 May 2011 11:34:24 +0000</pubDate>
		<dc:creator>Filippo Matteo Riggio</dc:creator>
				<category><![CDATA[Nuove tecnologie]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.good2know.it/?p=1505</guid>
		<description><![CDATA[
I carissimi programmatori di Facebook hanno rilasciato un piccolo progetto che ottimizza notevolmente le prestazioni, in fase di esecuzione, di codice php: Facebook HipHop.
Come funziona?
Questa applicazione trasforma codice PHP in codice compilato in C++ con il sacrificio di qualche funzione php, tipo eval().
Per chi non lo sapesse, la differenza tra un linguaggio intepretato ed uno [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.good2know.it/wp-content/uploads/2011/05/facebook-hiphop.jpg"><img class="alignnone size-full wp-image-1507" title="facebook-hiphop" src="http://www.good2know.it/wp-content/uploads/2011/05/facebook-hiphop.jpg" alt="" width="200" height="200" /></a></p>
<p>I carissimi programmatori di Facebook hanno rilasciato un piccolo progetto che ottimizza notevolmente le prestazioni, in fase di esecuzione, di codice php: <a href="https://github.com/facebook/hiphop-php/wiki/">Facebook HipHop</a>.</p>
<p><span id="more-1505"></span>Come funziona?</p>
<p>Questa applicazione <strong>trasforma codice PHP in codice compilato in C++</strong> con il sacrificio di qualche funzione php, tipo <strong>eval()</strong>.</p>
<p>Per chi non lo sapesse, la differenza tra un linguaggio intepretato ed uno compilato è appunto nella fase di interpretazione del codice, cosa che in C++ non avviene una volta compilato il codice.</p>
<p>Il miglioramento delle prestazioni è notevole: si guadagna il 50% di risparmio di CPU; in questo modo i server di FB valgono il doppio rispetto ad un normale server linux-php (anche in termini di denaro <img src='http://www.good2know.it/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).</p>
<p>Di seguito trovate la <a href="https://www.facebook.com/notes/facebook-engineering/hiphop-for-php-more-optimizations-for-efficient-servers/">pagina facebook del progetto</a> e il <a href="https://github.com/facebook/hiphop-php/wiki/">progetto su GitHub</a> con licenza Open Source.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.good2know.it/programmazione/aumentare-le-prestazioni-di-php-con-facebook-hiphop/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Animazione raggi rotanti in css3 e javascript</title>
		<link>http://www.good2know.it/programmazione/animazione-raggi-rotanti-in-css3-e-javascript/ </link>
		<comments>http://www.good2know.it/programmazione/animazione-raggi-rotanti-in-css3-e-javascript/ #comments</comments>
		<pubDate>Mon, 04 Apr 2011 11:51:02 +0000</pubDate>
		<dc:creator>Filippo Matteo Riggio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[animazione]]></category>
		<category><![CDATA[raggi rotanti]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.good2know.it/?p=1462</guid>
		<description><![CDATA[
Propongo di seguito un interessante effetto in javascript e css3 che permette di creare un effetto di rotazione a qualsiasi contenuto.
La proprietà che utilizzeremo è transform: rotate(90deg) .
Di seguito una demo.
Ricordiamoci che non tutti i browser permettono l&#8217;utilizzo delle proprietà transform CSS3.
Quindi controlliamo che browser ha il client e impostiamo le proprietà di conseguenza.
Per farlo [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.good2know.it/wp-content/uploads/2010/10/html-css-javascript.gif"><img class="alignnone size-full wp-image-1432" title="html-css-javascript" src="http://www.good2know.it/wp-content/uploads/2010/10/html-css-javascript.gif" alt="Tips and tricks for html, css and javascript" width="200" height="200" /></a></p>
<p>Propongo di seguito un interessante effetto in <strong>javascript e css3</strong> che permette di creare un effetto di rotazione a qualsiasi contenuto.</p>
<p>La proprietà che utilizzeremo è <strong>transform: rotate(90deg)</strong> .</p>
<p>Di seguito una <a href="http://www.good2know.it/examples/raggi-rotanti/">demo</a>.</p>
<p><span id="more-1462"></span>Ricordiamoci che non tutti i browser permettono l&#8217;utilizzo delle proprietà transform CSS3.</p>
<p>Quindi controlliamo che browser ha il client e impostiamo le proprietà di conseguenza.</p>
<p>Per farlo utilizziamo una <strong>funzione di jQuery che ci permette di sapere quale sia il browser in uso</strong>.</p>
<pre class="brush: jscript;">&lt;br&gt;var cssPrefix = &quot;&quot;;&lt;br&gt;if ($.browser.mozilla){&lt;br&gt; cssPrefix = &quot;moz&quot;;&lt;br&gt; } else if ($.browser.safari){&lt;br&gt; cssPrefix = &quot;webkit&quot;;&lt;br&gt; } else if ($.browser.opera){&lt;br&gt; cssPrefix = &quot;o&quot;;&lt;br&gt; } else if ($.browser.msie){&lt;br&gt; cssPrefix = &quot;ms&quot;;&lt;br&gt; }&lt;br&gt;</pre>
<p>Successivamente impostiamo un intervallo di tempo a 20 millisecondi che chiama una funzione che fa cambiare la posizione, rispetto l&#8217;originale, del nostro elemento.</p>
<pre class="brush: jscript;">&lt;br&gt;window.setInterval(function(){&lt;br&gt;   if(cssPrefix) {&lt;br&gt;      d += speed * dir;&lt;br&gt;   }&lt;br&gt;   rotate(cssPrefix, d);&lt;br&gt;}, 20);&lt;br&gt;&lt;br&gt;function rotate(cssPrefix,d){&lt;br&gt;   d += speed * dir;&lt;br&gt;   $('#rays').css('-'+cssPrefix+'-transform','rotate('+d+'deg)');&lt;br&gt;}&lt;br&gt;</pre>
<p>Ricordo che purtroppo questo scriptino non funzione su Internet Explorer in quanto non supporta la <strong>proprietà css transform</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.good2know.it/programmazione/animazione-raggi-rotanti-in-css3-e-javascript/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Css3 Background multipli</title>
		<link>http://www.good2know.it/programmazione/css3-background-multipli/ </link>
		<comments>http://www.good2know.it/programmazione/css3-background-multipli/ #comments</comments>
		<pubDate>Fri, 01 Apr 2011 10:00:01 +0000</pubDate>
		<dc:creator>Filippo Matteo Riggio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[background]]></category>
		<category><![CDATA[css tricks]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[multipli]]></category>

		<guid isPermaLink="false">http://www.good2know.it/?p=1472</guid>
		<description><![CDATA[
Salve a tutti i lettori di good2know.
Oggi volevo proporvi una delle nuove proprietà css3 per creare box(div) con sfondi multipli senza dover dichiarare milioni di classi.
Qui potete vedere una demo.
La sintassi è molto semplice.

.box {
   width: 400px;
   background:   url(images/bg-top.png) top no-repeat,
          [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.good2know.it/wp-content/uploads/2010/10/html-css-javascript.gif"><img class="alignnone size-full wp-image-1432" title="html-css-javascript" src="http://www.good2know.it/wp-content/uploads/2010/10/html-css-javascript.gif" alt="Tips and tricks for html, css and javascript" width="200" height="200" /></a></p>
<p>Salve a tutti i lettori di <strong>good2know</strong>.</p>
<p>Oggi volevo proporvi una delle nuove proprietà css3 per creare box(div) con sfondi multipli senza dover dichiarare milioni di classi.</p>
<p>Qui potete vedere una <a title="Multiple background example" href="http://www.good2know.it/examples/multiple-background/" target="_blank">demo</a>.</p>
<p><span id="more-1472"></span>La sintassi è molto semplice.</p>
<pre class="brush: css;">
.box {
   width: 400px;
   background:   url(images/bg-top.png) top no-repeat,
                 url(images/bg-bottom.png) bottom no-repeat,
                 url(images/bg-repeated.png) repeat-y;
}
</pre>
<p>Ovviamente questa specifica funziona perfettamente per quasi tutti i browser, eccetto che per Internet Explorer(e quale se no? <img src='http://www.good2know.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
<p>In aiuto però ci viene Jason Johnston con il suo <a title="Css3 PIE - Progressive Internet Explorer" href="http://css3pie.com/" target="_blank">Css3PIE</a> (Css3 -  Progressive Internet Explorer), una libreria javascript che ci viene in aiuto per applicare gli stili css3 anche per Internet Explorer.</p>
<p><em><strong>Come si usa Css3PIE ?</strong></em></p>
<p>Scaricate la libreria e scompattatela in una cartella che volete (io in genere la tengo nella cartella js dei javascript).</p>
<p>In alcuni casi dovrete aggiungere al file <strong>.htaccess</strong> la riga:</p>
<blockquote>
<pre><code>AddType text/x-component .htc</code></pre>
</blockquote>
<p>Questo perchè Internet Explorer non restituisce il content-type corretto per il file <strong>.htc</strong> che useremo.</p>
<p>Ora nella proprieta del css andrete ad aggiungere la proprietà <strong>behavior</strong> e -pie-background, quindi il css diventerà così:</p>
<pre class="brush: css;">
&lt;pre&gt;width: 400px;
background:   url(images/bg-top.png) top no-repeat,
              url(images/bg-bottom.png) bottom no-repeat,
              url(images/bg-repeated.png) repeat-y;
&lt;pre&gt;-pie-background:   url(images/bg-top.png) top no-repeat,
              url(images/bg-bottom.png) bottom no-repeat,
              url(images/bg-repeated.png) repeat-y;&lt;/pre&gt;
&lt;/pre&gt;
behavior: url(path/to/PIE.htc);
</pre>
<p>Ora il box avrà gli sfondi ripetuti anche su Internet Explorer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.good2know.it/programmazione/css3-background-multipli/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework &#8211; Guida all&#8217;installazione</title>
		<link>http://www.good2know.it/programmazione/zend-framework-guida-all-installazione/ </link>
		<comments>http://www.good2know.it/programmazione/zend-framework-guida-all-installazione/ #comments</comments>
		<pubDate>Tue, 21 Dec 2010 12:48:46 +0000</pubDate>
		<dc:creator>Filippo Matteo Riggio</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.good2know.it/?p=1448</guid>
		<description><![CDATA[Cari lettori di Good2know, da ormai qualche mese mi sono imbattutto nel dover utilizzare Zend Framework.
Per chi non lo sapesse si tratta di un framework (una struttura di supporto software per aiutare lo sviluppatore) tra i migliori in php.
Secondo il mio modesto parere si tratta del migliore, da notare che i due fondatori di Zend [...]]]></description>
			<content:encoded><![CDATA[<p>Cari lettori di Good2know, da ormai qualche mese mi sono imbattutto nel dover utilizzare <a href="http://framework.zend.com">Zend Framework</a>.</p>
<p>Per chi non lo sapesse si tratta di un <strong>framework</strong> (una struttura di supporto software per aiutare lo sviluppatore) <strong>tra i migliori in php</strong>.</p>
<p><span id="more-1448"></span>Secondo il mio modesto parere si tratta del migliore, da notare che <strong>i due fondatori di Zend Technologies</strong>(<a href="http://en.wikipedia.org/wiki/Zeev_Suraski" target="_blank">Zeev Suraski</a> e <a href="http://en.wikipedia.org/wiki/Andi_Gutmans" target="_blank">And Gutmans</a> dal cui nome Zend) <strong>hanno riscritto il motore di php2 portandolo alla versione 3 e successive</strong> diventando di fatto il motore principale di PHP.</p>
<p>Il framework è orientato verso un <strong>pattern di programmazione MVC, cioè Model-View-Controller</strong>, orientato agli oggetti.</p>
<p><em><strong>Model</strong></em></p>
<p>Il modello si occuperà di <strong>connessione al database</strong> con relative query e funzioni per il <strong>recupero dei dati</strong>.</p>
<p>Esempio:</p>
<p>Il file  di modello <strong>News.php</strong> avrà i metodi :</p>
<ul>
<li>getAllNews() per restituire tutte le news</li>
<li>getNewsById() per restituire una news specifica</li>
<li>insertNews() e updateNews per l&#8217;inserimento e la modifica di una news</li>
<li>deleteNews() per la cancellazione di una news</li>
</ul>
<p><em><strong>View</strong></em></p>
<p>La view(o anche template) si occuperà della <strong>formattazione e della visualizzazione dei dati recuperati</strong>.</p>
<p>Esempio del file della view <strong>view.phtml</strong></p>
<pre class="brush: php;">

&lt;?php

echo $this-&gt;newsTitle;

echo $this-&gt;newsText;

?&gt;
</pre>
<p><em><strong>Controller</strong></em></p>
<p>Il controller presenterà le <strong>chiamate ai metodi del modello per il recupero dei dati e le chiamate alla view</strong>, a cui passerà i dati recuperati, per la visualizzazione.</p>
<p><a href="http://www.good2know.it/wp-content/uploads/2010/12/mvc.png"><img class="alignnone size-medium wp-image-1453" title="mvc" src="http://www.good2know.it/wp-content/uploads/2010/12/mvc-300x209.png" alt="" width="300" height="209" /></a></p>
<p><em><strong>Passo 1 : Installare la piattaforma WAMP(Windows, Apache, MySql, Php)<br />
</strong></em></p>
<p>Per far girare Zend Framework dobbiamo avere un server che faccia girare PHP, di gran lunga è <strong>preferibile utilizzare Linux e Apache</strong> come sistema operativo e web server piuttosto di un Windows con IIS, ma purtroppo a volte non si ha un pc con Linux, in questo caso utilizzate una configurazione <strong>WAMP(Windows,Apache,MySql,Php)</strong>.</p>
<p>Dovremo installare quindi <strong>Apache, Php 5, e MySql</strong>.</p>
<p>Consiglio mio è quello di <strong>installare i componenti separatamente</strong> piuttosto di utilizzare alcuni programmi già pronti che forniscono le funzionalità tutte insieme, tipo <a href="http://www.easyphp.org/" target="_blank">EasyPHP</a> . La differenza sta nella libertà di personalizzazione dei file di configurazione.</p>
<p>Di seguito i link alle risorse necessarie:</p>
<p>- <a title="Download Apache WebServer" href="http://httpd.apache.org/download.cgi" target="_blank">Apache</a></p>
<p>- <a title="Download php per windows" href="http://windows.php.net/download/" target="_blank">Php 5<br />
</a></p>
<p>- <a title="Download MySql" href="http://dev.mysql.com/downloads/" target="_blank">MySql</a></p>
<p>Installate nell&#8217; ordine in cui trovate i link per non avere problemi.</p>
<p>Ora andate nella <strong>cartella conf,  dentro la cartella di installazione di Apache</strong>.</p>
<p><em><strong>Passo 2 &#8211; Far trovare ad Apache il motore di Php e caricare il modulo per il rewrite degli URL<br />
</strong></em></p>
<p>Ricordo che il webserver Apache ha come parametro di base della Document Root la cartella www all&#8217;interno della cartella d&#8217;installazione del programma.</p>
<p><strong>Aprite il file httpd.conf</strong> con il blocco note e sotto tutte le righe &#8220;Load Module&#8221; aggiungete questo:</p>
<blockquote><p><strong>LoadModule php5_module &#8220;CartellaDiPhp\php5apache2_2.dll&#8221;<br />
AddType application/x-httpd-php .php<br />
PHPIniDir &#8220;CartellaDiPhp&#8221;</strong></p></blockquote>
<p>Ora dobbiamo far caricare ad Apache il modulo per il rewrite degli URL di indirizzo (dopo si spiegherà il perchè) e quello per l&#8217;utilizzo dei virtual host.</p>
<p>Dobbiamo scommentare(cancellare il cancelletto), dalla lista dei moduli del file di configurazione(vedi sopra) queste righe :</p>
<p>- <strong>LoadModule rewrite_module modules/mod_rewrite.so</strong></p>
<p>- <strong>LoadModule vhost_alias_module modules/mod_vhost_alias.so</strong></p>
<p><strong>Passo 3 : Impostare le variabili d&#8217;ambiente di Windows</strong></p>
<p><strong>Per alcuni sistemi operativi</strong> (ad esempio il nuovo Windows 7) dobbiamo <strong>modificare le variabili d&#8217;ambiente</strong> di Windows.</p>
<p>Apriamo il Pannello di Controllo, poi Sistema e clicchiamo sulla scheda Avanzate, modifichiamo <strong>il valore della variabile Path</strong> aggiungendo un punto e virgola in fondo e <strong>indicando il percorso assoluto della cartella dove si trova php</strong>.</p>
<p><a href="http://www.good2know.it/wp-content/uploads/2010/12/immagine-variabili-ambiente.jpg"><img class="alignnone size-full wp-image-1454" title="immagine-variabili-ambiente" src="http://www.good2know.it/wp-content/uploads/2010/12/immagine-variabili-ambiente.jpg" alt="" width="528" height="397" /></a></p>
<p>Esempio :</p>
<blockquote><p>…altriValoriDelPath…;C:\ProgramFiles\php)</p></blockquote>
<p>Aggiungete ora una <strong>nuova variabile d&#8217;ambiente</strong>, chiamandola <strong>PHPRC </strong>(sta per PHP runtime config) e specificando sempre la <strong>cartella dove si trova php</strong>.</p>
<p><em><strong>Passo 4 : Modificare il file php.ini</strong></em></p>
<p>Per far aiutarci nello sviluppo con Zend Framework dobbiamo <strong>modificare alcuni valori del file php.ini</strong> presente nella cartella di installazione di php.</p>
<p>Impostate:</p>
<ul>
<li><strong>display_error: on</strong></li>
<li><strong>display_startup_errors : on</strong></li>
<li><strong>log_errors: on</strong></li>
<li><strong>extension: dll (per alcuni database, tipo postgres dobbiamo poter utilizzare alcune librerie dll)</strong></li>
</ul>
<p>Per ultima cosa dobbiamo <strong>includere l&#8217;estensione per l&#8217;adattatore di php al nostro db</strong>.</p>
<p>Quindi cercate nell&#8217;elenco delle estensioni le righe con :</p>
<blockquote><p><strong>;extension=php_pdo.dll</strong></p>
<p><strong>;extension=php_pdo_mysql.dll</strong></p>
<p><strong>;extension=php_mysql.dll</strong></p></blockquote>
<p>e <strong>cancellate il punto e virgola</strong> precedente per scommentarle.</p>
<p>Nel caso abbiate altri tipi di database(postgresql, sqlite,ecc.) basterà scommentare le righe corrispondenti.</p>
<p><em><strong>Passo 5: Includere il file di VirtualHost di un progetto</strong></em></p>
<p>All&#8217;interno del vostro progetto <strong>create un file con estensione .conf</strong> (ad es: nomeprogetto-httpd.conf) con questa struttura:</p>
<blockquote><p><strong>&lt;VirtualHost *:80&gt;<br />
ServerName    nomeCheVolete<br />
DocumentRoot  &#8220;D:/Progetti/nomeProgetto/htdocs&#8221;<br />
DirectoryIndex index.html index.shtml index.php index.htm</strong></p>
<p><strong>&lt;Directory &#8220;D:/Progetti/nomeProgetto/htdocs&#8221;&gt;<br />
AllowOverride    All<br />
Options        All<br />
Order        allow,deny<br />
Allow        from all<br />
&lt;/Directory&gt;</strong></p>
<p><strong>php_value  include_path &#8220;D:/Progetti/nomeProgetto/include&#8221;<br />
php_value  register_globals       Off<br />
php_flag      magic_quotes_gpc       Off<br />
&lt;/VirtualHost&gt;</strong></p></blockquote>
<p>Questo file ora dovrà essere <strong>incluso all&#8217;interno del file di configurazione di Apache (httpd.conf)</strong>:</p>
<blockquote><p><strong>Include D:/Progetti/phpweb20/etc/phpweb20-httpd.conf</strong></p></blockquote>
<p><em><strong>Passo 7 : modificare la risoluzione degli host del sistema operativo</strong></em></p>
<p>Ora andate nella cartella C:/Windows/system32/drivers/etc ed aprite con il blocco note il file hosts.</p>
<p>Aggiungete la riga <strong>127.0.0.1   serverName</strong> , in questo modo<strong> il vostro pc reindirizzerà</strong>(risolverà) <strong>tutti gli url con radice serverName</strong> inviandoli <strong>all&#8217;indirizzo 127.0.0.1</strong> che è anche l&#8217;indirizzo di <strong>localhost</strong>, e quindi inviando la <strong>richiesta al server web</strong>.</p>
<p><em><strong>Passo 8 : La struttura di un progetto con Zend Framework e il file .htaccess<br />
</strong></em></p>
<p>Ricordate che vi ho fatto caricare il modulo per il rewrite degli URL, bene, ora dobbiamo<strong> inserire nella cartella pubblica del progetto il file .htaccess</strong>, che <strong>gestirà</strong> tutti gli url dell&#8217;applicazione inviando le richieste ai vari controller, così:</p>
<blockquote>
<pre>RewriteEngine on
RewriteBase /
RewriteRule !\.(js|ico|txt|gif|jpg|png|css)$ index.php</pre>
</blockquote>
<p>Ricordo che<strong> il pattern usato è sempre MVC</strong>, quindi la struttura gerarchica del nostro progetto deve essere simile a questa :</p>
<p><a href="http://www.good2know.it/wp-content/uploads/2010/12/struttura-progetto-mvc.jpg"><img class="alignnone size-full wp-image-1455" title="struttura-progetto-mvc" src="http://www.good2know.it/wp-content/uploads/2010/12/struttura-progetto-mvc.jpg" alt="" width="248" height="410" /></a></p>
<p><em><strong>Perchè il modulo rewrite?</strong></em></p>
<p>Utilizziamo il modulo per riscrivere gli URL perchè <strong>Zend Framework gestisce in automatico ogni azione di un applicazione mediante gli url</strong>.</p>
<p>Ad esempio l&#8217;url <strong>http://myapplication.com/news/new </strong>indica di eseguire l&#8217;azione <strong>new</strong> nel controller <strong>News</strong>.</p>
<p>Bene, abbiamo creato un nostro virtual host con il framework Zend installato.</p>
<p>Prossimamente inizieremo a guardare un controller di base e a vedere le potenzialità di Zend Framework.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.good2know.it/programmazione/zend-framework-guida-all-installazione/ /feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CSS3 text selection</title>
		<link>http://www.good2know.it/programmazione/css3-text-selection/ </link>
		<comments>http://www.good2know.it/programmazione/css3-text-selection/ #comments</comments>
		<pubDate>Tue, 14 Dec 2010 13:09:00 +0000</pubDate>
		<dc:creator>Filippo Matteo Riggio</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[text selection]]></category>

		<guid isPermaLink="false">http://www.good2know.it/?p=1442</guid>
		<description><![CDATA[
Oggi vi presento un piccolo trucchetto per personalizzare il colore del testo selezionato.
Iniziamo dai css:
/* webkit, opera, IE9 */
div.nomeDiv::selection { background:lightblue; }
/* mozilla firefox */
div.nomeDiv::-moz-selection { background:lightblue; }

Il primo tipo di selettore agirà per webkit opera e IE9 mentre il secondo solo per Firefox.
Ricordo che è codice CSS 3, quindi non tutti i browser(IE di [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.good2know.it/wp-content/uploads/2010/10/html-css-javascript.gif"><img class="alignnone size-full wp-image-1432" title="html-css-javascript" src="http://www.good2know.it/wp-content/uploads/2010/10/html-css-javascript.gif" alt="Tips and tricks for html, css and javascript" width="200" height="200" /></a></p>
<p>Oggi vi presento un piccolo trucchetto per personalizzare il colore del testo selezionato.</p>
<p><span id="more-1442"></span>Iniziamo dai css:</p>
<pre class="brush: css;">/* webkit, opera, IE9 */
div.nomeDiv::selection { background:lightblue; }
/* mozilla firefox */
div.nomeDiv::-moz-selection { background:lightblue; }
</pre>
<p>Il primo tipo di selettore agirà per webkit opera e IE9 mentre il secondo solo per Firefox.</p>
<p>Ricordo che è codice CSS 3, quindi non tutti i browser(IE di cacca!) lo supportano.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.good2know.it/programmazione/css3-text-selection/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Come personalizzare un input file di un form</title>
		<link>http://www.good2know.it/programmazione/come-personalizzare-un-input-file-di-un-form/ </link>
		<comments>http://www.good2know.it/programmazione/come-personalizzare-un-input-file-di-un-form/ #comments</comments>
		<pubDate>Tue, 10 Aug 2010 11:53:34 +0000</pubDate>
		<dc:creator>Filippo Matteo Riggio</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[input file]]></category>
		<category><![CDATA[personalizzare]]></category>

		<guid isPermaLink="false">http://www.good2know.it/?p=1396</guid>
		<description><![CDATA[
Cari lettori di good2know, oggi vi presento un nuovo articolo sulla personalizzazione degli input file di un form.
Il metodo è semplice, utilizza i fogli di stile CSS e le proprietà del DOM.
Per vedere un esempio cliccate sul link.
Il concetto è di mettere un input falso al di sopra dell&#8217;input file reale e fare in modo [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.good2know.it/wp-content/uploads/2010/08/html-css-javascript.gif"><img class="alignnone size-full wp-image-1429" title="html-css-javascript" src="http://www.good2know.it/wp-content/uploads/2010/08/html-css-javascript.gif" alt="" width="200" height="200" /></a></p>
<p>Cari lettori di good2know, oggi vi presento un nuovo articolo sulla personalizzazione degli input file di un form.</p>
<p>Il metodo è semplice, utilizza i fogli di stile CSS e le proprietà del DOM.</p>
<p>Per vedere un esempio cliccate sul <a href="http://www.good2know.it/examples/CustomInputFile/" target="_blank">link</a>.</p>
<p><span id="more-1396"></span>Il concetto è di mettere un input falso al di sopra dell&#8217;input file reale e fare in modo che quando viene cliccato l&#8217;input file falso o il bottone sfoglia si apra comunque la finestra di scelta del file.</p>
<p>Una volta selezionato il file, l&#8217;input file reale dovrà avere come &#8220;value&#8221; il reale percorso del file.</p>
<p>Di seguito il codice css :</p>
<pre class="brush: css;">
.input_file{
background: url(../img/bg_input_file.png) no-repeat;
border: none;
width: 202px;
height: 26px;
font-family:Arial, Helvetica, sans-serif;
font-size:12px;
margin:0 0 0 0;
padding:0 0 0 0px;
}
.input_file:focus{ background-color: transparent;}
input {
background: url(../img/bg_input_file.png) no-repeat;
border: none;
width: 202px;
height: 26px;
font-family:Arial, Helvetica, sans-serif;
font-size:12px;
margin:0 0 0 0;
padding:0 0 0 0px;
}
input:focus {	background-color: transparent;}
div.fileinputs {
position: relative;
height: 26px;
width: 202px;
}
input.file {
width: 274px;
margin: 0;
}
input.file.hidden {
position: relative;
text-align: right;
-moz-opacity:0 ;
filter:alpha(opacity: 0);
opacity: 0;
z-index: 2;
}
div.fakefile {
position: absolute;
top: 0px;
left: 0px;
width: 274px;
height:26px;
padding: 0;
margin: 0;
z-index: 1;
}
div.fakefile input {
position:relative;
bottom:8px;
margin:0 0 0px 0;
padding:5px 0 0px 10px;
}
</pre>
<p>Di seguito la funzione js che dovrà essere richiamata nel tag body.</p>
<pre class="brush: jscript;">
var W3CDOM = (document.createElement &amp;amp;&amp;amp; document.getElementsByTagName);
function init() {
	if (!W3CDOM) return;
	var fakeFileUpload = document.createElement('div');
	fakeFileUpload.className = 'fakefile';
	fakeFileUpload.appendChild(document.createElement('input'));
	var image = document.createElement('img');
	image.src='img/btn_sfoglia2.png';
        fakeFileUpload.appendChild(image);
	var x = document.getElementsByTagName('input');
	for (var i=0;i&amp;lt;x.length;i++) {
		if (x[i].type != 'file') continue;
		if (x[i].getAttribute('noscript')) continue;
		if (x[i].parentNode.className != 'fileinputs') continue;
		x[i].className = 'file hidden';
		var clone = fakeFileUpload.cloneNode(true);
		x[i].parentNode.appendChild(clone);
		x[i].relatedElement = clone.getElementsByTagName('input')[0];
		if (x[i].value)
			x[i].onchange();
		x[i].onchange = x[i].onmouseout = function () {
			this.relatedElement.value = this.value;
		}
	}
}
</pre>
<div><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">Come ultimo appunto, ecco la parte del DOM con il codice HTML :</span></div>
<div><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">
<pre class="brush: php;">
&lt;body onLoad=&quot;init();&quot;&gt;
&lt;form action=&quot;&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;
&lt;div&gt;     &lt;input type=&quot;file&quot; name=&quot;link_file&quot; /&gt; &lt;/div&gt;
&lt;/form&gt;
&lt;/body&gt;
</pre>
<p></span></div>
<p><strong><em>Compatibilità</em></strong></p>
<p>Lo script qui sopra è compatibile con tutti i browser, bisogna solo personalizzare il css per Explorer.</p>
<p><strong><em>Download</em></strong></p>
<p>Di seguito il <a href="http://www.good2know.it/wp-content/uploads/2010/08/CustomInputFile.zip">link</a> per scaricare l&#8217;esempio di sopra.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.good2know.it/programmazione/come-personalizzare-un-input-file-di-un-form/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

