<?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</title>
	<atom:link href="http://www.good2know.it/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>La Successione di Fibonacci &#8211; Video</title>
		<link>http://www.good2know.it/curiosita/la-successione-di-fibonacci-video/ </link>
		<comments>http://www.good2know.it/curiosita/la-successione-di-fibonacci-video/ #comments</comments>
		<pubDate>Sun, 29 Jan 2012 15:20:08 +0000</pubDate>
		<dc:creator>Filippo Matteo Riggio</dc:creator>
				<category><![CDATA[Curiosità]]></category>
		<category><![CDATA[fibonacci]]></category>
		<category><![CDATA[successione]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://www.good2know.it/?p=1557</guid>
		<description><![CDATA[Ultimamente mi sono appassionato a giochi matematici ed enigmi.
Mentre programmo una rubrica su enigmi e giochi matematici da pubblicare qui su Good2know, vi propongo questo video che ho trovato girovagando sul web sulla successione di Fibonacci.
Buona visione!

]]></description>
			<content:encoded><![CDATA[<p>Ultimamente mi sono appassionato a giochi matematici ed enigmi.<br />
Mentre programmo una rubrica su enigmi e giochi matematici da pubblicare qui su Good2know, vi propongo questo video che ho trovato girovagando sul web sulla <strong>successione di Fibonacci</strong>.<br />
Buona visione!<br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/P0tLbl5LrJ8" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.good2know.it/curiosita/la-successione-di-fibonacci-video/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ecografia con l&#8217;iPhone</title>
		<link>http://www.good2know.it/nuove-tecnologie/ecografia-con-liphone/ </link>
		<comments>http://www.good2know.it/nuove-tecnologie/ecografia-con-liphone/ #comments</comments>
		<pubDate>Tue, 15 Nov 2011 12:43:26 +0000</pubDate>
		<dc:creator>Filippo Matteo Riggio</dc:creator>
				<category><![CDATA[Nuove tecnologie]]></category>
		<category><![CDATA[ecografia]]></category>
		<category><![CDATA[gadget]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.good2know.it/?p=1553</guid>
		<description><![CDATA[
Se è vero il motto &#8220;C&#8217;è un&#8217;applicazione per tutto&#8221; anche il numero di gadget per smartphone sta raggiungendo questa definizione.
E&#8217; il caso di un piccolo strumento per medici che permette di fare ecografie mediante uno smartphone: l&#8217;iPhone.
Il sito dove poter acquistare questa piccola meraviglia dell&#8217;umano ingegno è http://www.mobisante.com/product-overview.
I video che potrete effettuare con l&#8217;ecografo saranno [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.good2know.it/wp-content/uploads/2011/11/ecografia-iphone.jpg"><img class="alignnone size-full wp-image-1554" title="ecografia-iphone" src="http://www.good2know.it/wp-content/uploads/2011/11/ecografia-iphone.jpg" alt="" width="200" height="200" /></a></p>
<p>Se è vero il motto &#8220;<strong>C&#8217;è un&#8217;applicazione per tutto</strong>&#8221; anche il numero di gadget per smartphone sta raggiungendo questa definizione.</p>
<p><span id="more-1553"></span>E&#8217; il caso di un piccolo strumento per medici che <strong>permette di fare ecografie mediante uno smartphone</strong>: l&#8217;iPhone.</p>
<p>Il sito dove poter acquistare questa piccola meraviglia dell&#8217;umano ingegno è <a href="http://www.mobisante.com/product-overview/" target="_blank">http://www.mobisante.com/product-overview</a>.</p>
<p>I <strong>video</strong> che potrete effettuare con l&#8217;ecografo saranno poi <strong>condivisibili</strong> e consultabili da altri medici per ulteriori pareri sanitari.</p>
<p>Di seguito un video di un&#8217;ecografia effettuata con il dispositivo.<br />
<iframe width="560" height="320" src="http://www.youtube.com/embed/SKvx7VVI6IM?feature=player_embedded" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.good2know.it/nuove-tecnologie/ecografia-con-liphone/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>GoPano micro &#8211; lente per iPhone 4 per registrare video a 360 gradi</title>
		<link>http://www.good2know.it/tecnologia/gopano-micro-lente-per-iphone-4-per-registrare-video-a-360-gradi/ </link>
		<comments>http://www.good2know.it/tecnologia/gopano-micro-lente-per-iphone-4-per-registrare-video-a-360-gradi/ #comments</comments>
		<pubDate>Fri, 08 Apr 2011 07:25:47 +0000</pubDate>
		<dc:creator>Filippo Matteo Riggio</dc:creator>
				<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[special gadgets]]></category>
		<category><![CDATA[video 360 gradi]]></category>

		<guid isPermaLink="false">http://www.good2know.it/?p=1497</guid>
		<description><![CDATA[
Salve a tutti cari lettori, oggi vi vorrei presentare questo gadget per iPhone 4 che permette di registrare video a 360 gradi.

Di seguito potete vedere un video d&#8217;esempio.

Potete trovare tutto il progetto su KickStarter.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.good2know.it/wp-content/uploads/2011/04/special_gadgets.jpg"></a><a href="http://www.good2know.it/wp-content/uploads/2011/04/gopano-micro.jpg"><img class="alignnone size-full wp-image-1498" title="gopano-micro" src="http://www.good2know.it/wp-content/uploads/2011/04/gopano-micro.jpg" alt="" width="450" height="300" /></a></p>
<p>Salve a tutti cari lettori, oggi vi vorrei presentare questo gadget per iPhone 4 che permette di registrare video a 360 gradi.<br />
<span id="more-1497"></span><br />
Di seguito potete vedere un video d&#8217;esempio.</p>
<p><iframe title="YouTube video player" width="460" height="289" src="http://www.youtube.com/embed/9o8AAOtOiPQ" frameborder="0" allowfullscreen></iframe></p>
<p>Potete trovare tutto il progetto su <a title="GoPano micro" href="http://www.kickstarter.com/projects/1106196796/the-gopano-micro-a-lens-for-capturing-360-video-on">KickStarter</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.good2know.it/tecnologia/gopano-micro-lente-per-iphone-4-per-registrare-video-a-360-gradi/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sistema di video-conferenza con Kinect progettato dal MIT</title>
		<link>http://www.good2know.it/hacking/sistema-di-video-conferenza-con-kinect-progettato-dal-mit/ </link>
		<comments>http://www.good2know.it/hacking/sistema-di-video-conferenza-con-kinect-progettato-dal-mit/ #comments</comments>
		<pubDate>Mon, 04 Apr 2011 13:43:04 +0000</pubDate>
		<dc:creator>Filippo Matteo Riggio</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[kinect]]></category>
		<category><![CDATA[mit]]></category>
		<category><![CDATA[sistemi]]></category>
		<category><![CDATA[video-conferenza]]></category>

		<guid isPermaLink="false">http://www.good2know.it/?p=1490</guid>
		<description><![CDATA[
Salve a tutti cari lettori di good2know.
Navigando ho trovato un nuovo progetto in fase di sviluppo da parte del  MIT di Boston su un sistema di videoconferenze che sfrutta la grande  capacità di Kinect di percepire la profondità.

Il sistema implementa alcune funzionalità quali:
- lo sfocamento di tutti gli elementi esterni alla persona/e che [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.good2know.it/wp-content/uploads/2010/12/hacker1.jpg"><img class="alignnone size-full wp-image-1434" title="hacker1" src="http://www.good2know.it/wp-content/uploads/2010/12/hacker1.jpg" alt="" width="200" height="200" /></a></p>
<p>Salve a tutti cari lettori di good2know.</p>
<p>Navigando ho trovato un nuovo progetto in fase di sviluppo da parte del  MIT di Boston su un sistema di videoconferenze che sfrutta la grande  capacità di Kinect di percepire la profondità.</p>
<p><span id="more-1490"></span></p>
<p>Il sistema implementa alcune funzionalità quali:</p>
<p>- lo sfocamento di tutti gli elementi esterni alla persona/e che stanno parlando,</p>
<p>- il congelamento di un frame che viene usato mentre noi siamo off-camera,</p>
<p>- la &#8220;privacy-zone&#8221; cioè l&#8217;oscuramento di parti dell&#8217;ambiente che non vogliamo far vedere,</p>
<p>-  un sistema di realtà aumentata che permette di mantenere la relazione  fisica tra gli oggetti e che da remoto permette l&#8217;interazione attraverso  semplici click del mouse.</p>
<p><iframe src="http://player.vimeo.com/video/21864331" width="500" height="375" frameborder="0"></iframe>
<p><a href="http://vimeo.com/21864331">Kinected Conference</a> from <a href="http://vimeo.com/user2366809">Lining (Lizzie) Yao</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>Se avete un Kinect e volete provare a &#8220;smanettare&#8221; anche voi, esiste già un progetto open che vi permetterà di farlo: <a title="OpenKinect.org" href="http://openkinect.org">OpenKinect.org</a></p>
<p>Fonte: <a href="http://www.techeblog.com/index.php/tech-gadget/mit-develops-kinect-based-video-conferencing-system">TechEBlog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.good2know.it/hacking/sistema-di-video-conferenza-con-kinect-progettato-dal-mit/ /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>
	</channel>
</rss>

