<?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>Dev Blog</title>
	<atom:link href="http://www.methack.it/devblog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.methack.it/devblog</link>
	<description>Social network, applicazioni web e risorse open source!\nGuide allo sviluppo web, snippet di codice e download gratuiti!</description>
	<lastBuildDate>Wed, 28 Jul 2010 19:44:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Dopo i social network, la geolocalizzazione</title>
		<link>http://www.methack.it/devblog/news/dopo-i-social-network-la-geolocalizzazione-con-foursquare/</link>
		<comments>http://www.methack.it/devblog/news/dopo-i-social-network-la-geolocalizzazione-con-foursquare/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 19:43:38 +0000</pubDate>
		<dc:creator>hack</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Social network]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[foursquare]]></category>
		<category><![CDATA[geolocalizzazione]]></category>
		<category><![CDATA[web 3.0]]></category>

		<guid isPermaLink="false">http://www.methack.it/devblog/?p=1594</guid>
		<description><![CDATA[La geolocalizzazione potrebbe essere il passo successivo ai social network. Se il boom di Facebook &#038; co. ha coinvolto milioni di utenti in tutto il mondo, facendo storcere il naso a molti che lamentano un impoverirsi delle relazioni sociali reali, la diffusione dei servizi di geolocalizzazione potrebbe completare ed arricchire questa evoluzione del web. Si [...]]]></description>
			<content:encoded><![CDATA[<p>La geolocalizzazione potrebbe essere il passo successivo ai <a href="http://www.methack.it/devblog/categoria/web/social-network/">social network</a>. Se il boom di Facebook &#038; co. ha coinvolto milioni di utenti in tutto il mondo, facendo storcere il naso a molti che lamentano un impoverirsi delle relazioni sociali reali, la diffusione dei servizi di geolocalizzazione potrebbe completare ed arricchire questa evoluzione del web.</p>
<div align="center"><img src="http://www.methack.it/devblog/wp-content/uploads/2010/07/geolocalizzazione.jpg" alt="Social geolocalizzazione" title="Social geolocalizzazione" width="300" height="130" class="alignone size-full wp-image-1716" /></div>
<p>Si aggiunge al contatto virtuale, la fisicità dell’incontro.<br />
Come!? <a href="http://www.foursquare.com/" target="_blank"><strong>Foursquare</strong></a>, ad esempio, è il primo grande spazio online che offre un servizio di geolocalizzazione, un social network alternativo che si basa sul &#8220;dove siamo&#8221; e &#8220;cosa stiamo facendo&#8221;.</p>
<p>In questo modo tutti i nostri amici potranno localizzarci facilmente e decidere se raggiungerci fisicamente, ad esempio per bere un aperitivo al bar, o incontrarci nel posto di lavoro. Questo sistema facilita anche la condivisione di un vero e proprio resoconto sui locali e sui luoghi più interessanti.</p>
<p><span id="more-1594"></span><br />
Foursquare crea inoltre una classifica di punteggio, per ciascun profilo registrato, che tiene conto di alcuni parametri: visite, numero di posti aggiunti, etc&#8230; serve agli amici curiosi, che saranno felici di scoprire quanto e come siete attivi nella vita di tutti i giorni. Insomma, divertente, e utile.</p>
<p>Ci avviciniamo, dunque, ad un mondo in cui saremo tutti automaticamente geolocalizzati: episodi recenti parlano della nascita di alcuni plugin per Firefox in grado di geolocalizzare un utente tramite coordinate ben precise, ricavate da database aggiornati di satelliti e quant&#8217;altro.</p>
<p><strong>Individuare la posizione geografica di un utente su Internet</strong> è molto utile per offrire contenuti mirati ed interessanti. Questa tendenza è stata confermata dal recente annuncio che Foursquare, il social network basato sulla cyber-mappatura dei luoghi che ciascuno frequenta, ha raggiunto i 100 milioni di Checkin! E il fondatore Dennis Crowley avrebbe l&#8217;intenzione di gettarsi nel mondo del search, garantendo ai vari motori di ricerca dati anonimi e aggiornati per l&#8217;individuazione dei luoghi più trendy.</p>
<h2>Social network e Geolocalizzazione</h2>
<p>Non è un caso se il fenomeno della geolocalizzazione sta affondando le radici all&#8217;interno di spazi molto noti: gli sviluppatori di Twitter hanno lanciato, in occasione dei mondiali di calcio, Twitter Places: il servizio è disponibile in 65 paesi del mondo, grazie ad una partnership con TomTom e Localeze e permette l&#8217;integrazione anche di Foursquare e Gowalla.</p>
<h2>Geolocalizzazione mobile</h2>
<p><img alt="Geolocalizzazione mobile" src="http://www.methack.it/images/articles/nokia_n95.jpg" class="alignright" /> Non sono escluse dalla geolocalizzazione le principali piattaforme mobili: Nokia&#038;co. hanno già predisposto delle funzioni di geosearch e geotagging, che permettono all&#8217;utente di cercare contenuti inerenti una qualsiasi località.</p>
<p>E voi cosa ne pensate?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.methack.it/devblog/news/dopo-i-social-network-la-geolocalizzazione-con-foursquare/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>User experience: progettazione web e mobile</title>
		<link>http://www.methack.it/devblog/news/user-experience-progettazione-web-e-mobile/</link>
		<comments>http://www.methack.it/devblog/news/user-experience-progettazione-web-e-mobile/#comments</comments>
		<pubDate>Sat, 24 Jul 2010 18:33:07 +0000</pubDate>
		<dc:creator>hack</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[experience design]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://www.methack.it/devblog/?p=1596</guid>
		<description><![CDATA[Sabato 9 ottobre 2010, dalle 8:30 alle 18:30, è in programma la seconda edizione della conferenza UXconference dedicata all&#8217;experience design. Un evento unico che si svolge nel bacino italo-svizzero, precisamente a Lugano, per condividere le novità sulla user experience, assorbire strategie, aggiungere conoscenza ed entrare in contatto con i più importanti esperti del Content e [...]]]></description>
			<content:encoded><![CDATA[<p>Sabato 9 ottobre 2010, dalle 8:30 alle 18:30, è in programma la seconda edizione della conferenza <a href="http://www.uxcon.com/" target="_blank"><strong>UXconference</strong></a> dedicata all&#8217;experience design. Un evento unico che si svolge nel bacino italo-svizzero, precisamente a Lugano, per condividere le novità sulla user experience, assorbire strategie, aggiungere conoscenza ed entrare in contatto con i più importanti esperti del Content e Visual Design.</p>
<p><img src="http://www.methack.it/devblog/wp-content/uploads/2010/07/uxconference2010title.png" alt="User experience e progettazione web" title="User experience e progettazione web" width="193" height="39" class="alignleft size-full wp-image-1679" /> Professionisti del settore dell&#8217;industria e della ricerca faranno il punto della situazione sulla <strong>progettazione web e mobile user-oriented, in particolare quella rivolta al mondo del business</strong>. E&#8217; l&#8217;evento ideale per discutere sulle problematiche di sviluppo dei servizi in base alle necessità dell&#8217;utilizzatore finale.</p>
<p>UXconference rappresenta un&#8217;occasione per cercare collaborazioni, condividere esperienze e consigli e capire come sta cambiando il mercato e l&#8217;offerta di lavoro.</p>
<p><img src="http://www.methack.it/devblog/wp-content/uploads/2010/07/uxconference.png" alt="uxconference" title="uxconference" width="470" height="178" class="alignnone size-full wp-image-1685" /></p>
<p><span id="more-1596"></span></p>
<h2>I numeri della UXConference</h2>
<ul>
<li><strong>70+ partecipant</strong>i tra CEO, decision makers e ricercatori.</li>
<li><strong>12 speaker</strong> da Italia e Svizzera.</li>
<li><strong>10 media partner</strong> tra geek, imprenditori ed esperti a supporto dell’evento.</li>
<li><strong>100 posti a sedere</strong> disponibili.</li>
</ul>
<p><strong>Quota di partecipazione</strong>: 360 CHF (circa 250 €), 250 CHF (circa 170 €) con l’offerta early bird; 70 CHF (circa 50 €) il biglietto per studenti.</p>
<p>Il programma affronta le tematiche del design di siti web, portali e applicazioni iPhone e iPad in tutti gli aspetti di progettazione e strategia. Scopri i dettagli&#8230;</p>
<div align="center"><strong>Ulteriori informazioni sono presenti sul sito ufficiale: <a href="http://www.uxcon.com/" target="_blank"><strong>UXconference</strong></a>.</strong></div>
]]></content:encoded>
			<wfw:commentRss>http://www.methack.it/devblog/news/user-experience-progettazione-web-e-mobile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>6 caratteristiche della programmazione OOP</title>
		<link>http://www.methack.it/devblog/programmazione/6-caratteristiche-della-programmazione-oop/</link>
		<comments>http://www.methack.it/devblog/programmazione/6-caratteristiche-della-programmazione-oop/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 20:12:47 +0000</pubDate>
		<dc:creator>hack</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[ereditarietà]]></category>
		<category><![CDATA[oggetti]]></category>
		<category><![CDATA[oop]]></category>

		<guid isPermaLink="false">http://www.methack.it/devblog/?p=1580</guid>
		<description><![CDATA[Quali sono gli elementi basilari della programmazione ad oggetti (OOP), quali sono i punti di forza dei linguaggi object-oriented e quali vantaggi offrono all&#8217;interno di progetti professionali? Scopriamo alcuni interessanti dettagli, senza l&#8217;appoggio di uno specifico linguaggio di programmazione. L&#8217;articolo è suddiviso in 6 paragrafi che introducono le caratteristiche fondamentali: incapsulamento, ereditarietà, polimorfismo, etc. La [...]]]></description>
			<content:encoded><![CDATA[<p>Quali sono gli elementi basilari della programmazione ad oggetti (<a href="http://www.methack.it/devblog/tag/oop/">OOP</a>), quali sono i punti di forza dei linguaggi object-oriented e quali vantaggi offrono all&#8217;interno di progetti professionali?</p>
<div align="center"><img src="http://www.methack.it/devblog/wp-content/uploads/2010/07/oop.png" alt="Caratteristiche programmazione ad oggetti" title="Caratteristiche programmazione ad oggetti" width="277" height="84" class="alignnone size-full wp-image-1662" /></div>
<p>Scopriamo alcuni interessanti dettagli, senza l&#8217;appoggio di uno specifico linguaggio di programmazione. L&#8217;articolo è suddiviso in 6 paragrafi che introducono le caratteristiche fondamentali: incapsulamento, ereditarietà, polimorfismo, etc.</p>
<p>La programmazione ad oggetti parte dalla definizione delle classi, che raggruppano al loro interno dati e funzioni&#8230; un concetto molto simile alla realtà! Ogni classe può eseguire determinate operazioni, in base ai metodi disponibili. Il come svolge queste operazione non è importante e dipende dall&#8217;implementazione dei metodi.</p>
<p><span id="more-1580"></span><br />
Nella programmazione tradizionale, invece, è compito dello sviluppatore progettare un&#8217;architettura che permetta ai dati e alle funzioni di interagire secondo la logica richiesta. E&#8217; quindi meno esplicito il legame tra variabili e funzioni.</p>
<p>Per usare una classe è necessario istanziarla, creando un oggetto istanza con l&#8217;operatore <code>new</code>. A quel punto, attraverso l&#8217;oggetto creato, è possibile accedere a tutti i metodi della classe.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Creo oggetto della classe Persona</span>
<span style="color: #000088;">$pers</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Persona<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'pierino'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rossi'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'12'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Adesso posso richiamare i metodi che ho a disposizione</span>
<span style="color: #000088;">$pers</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setVisibile</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$pers</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getNominativo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$pers</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">MyPrivateFunc</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">/* ERRORE. Metodo privato */</span></pre></div></div>

<p>La classe di esempio che useremo in questo articolo è la seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Persona <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$nome</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$cognome</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$eta</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$visibile</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$nome</span><span style="color: #339933;">,</span> <span style="color: #000088;">$cognome</span><span style="color: #339933;">,</span> <span style="color: #000088;">$eta</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nome</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$nome</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cognome</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$cognome</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">eta</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$eta</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/* Imposta visibilità profilo */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setVisibile<span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">visibile</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>bool<span style="color: #009900;">&#41;</span><span style="color: #000088;">$v</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">/* true or false */</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getNominativo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">visibile</span><span style="color: #009900;">&#41;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #000088;">$nome</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$cognome</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">'nominativo nascosto...'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> MyPrivateFunc<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// codice...</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>Caratteristiche programmazione OOP</h2>
<h3>1. Incapsulamento e information hiding</h3>
<p>Uno dei grossi vantaggi è l&#8217;<strong>incapsulamento</strong>, cioè la proprietà degli oggetti di mantenere al loro interno sia gli attributi (le variabili) che i metodi (le funzioni), che descrivono rispettivamente lo stato e le azioni eseguibili sull&#8217;oggetto.</p>
<p>Ad esempio, creando un oggetto istanza della classe Persona, potremo accedere agli attributi &#8220;nome&#8221;, &#8220;cognome&#8221;, &#8220;eta&#8221; che descrivono lo stato dell&#8217;oggetto, e potremo usare il metodo &#8220;getNominativo()&#8221; per ottenere la stringa &#8220;nome cognome&#8221;.</p>
<p>E&#8217; possibile nascondere attributi e metodi, per renderli accessibili solo all&#8217;interno della classe, usando il modificatore &#8220;private&#8221;. Nell&#8217;esempio riportato, MyPrivateFunc() è un metodo privato e non può essere richiamato dall&#8217;esterno della classe. Questa caratteristica è detta <strong>information hiding</strong>.</p>
<p>Le proprietà che, al contrario, sono visibili vengono chiamate pubbliche e dichiarate con il modificatore &#8220;public&#8221; (vedi esempio).</p>
<h3>2. Ereditarietà</h3>
<p>Uno strumento molto efficace nella programmazione ad oggetti è l&#8217;<strong>ereditarietà</strong>, che consente di definire una nuova classe che mantiene le proprietà di una classe già esistente ma aggiunge nuovi attributi e metodi.</p>
<p>Ad esempio, potremmo definire la classe Studente come sottoclasse di Persona:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Studente <span style="color: #000000; font-weight: bold;">extends</span> Persona <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$matricola</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$classe</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$nome</span><span style="color: #339933;">,</span> <span style="color: #000088;">$cognome</span><span style="color: #339933;">,</span> <span style="color: #000088;">$eta</span><span style="color: #339933;">,</span> <span style="color: #000088;">$matricola</span><span style="color: #339933;">,</span> <span style="color: #000088;">$classe</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        parent<span style="color: #339933;">::</span>_construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$nome</span><span style="color: #339933;">,</span> <span style="color: #000088;">$cognome</span><span style="color: #339933;">,</span> <span style="color: #000088;">$eta</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">matricola</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$matricola</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">classe</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$classe</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>La nuova classe Studente è una sottoclasse di Persona: essa eredita tutti i metodi e gli attributi definiti come <em>public</em> e <em>protected</em> (non quelli <em>private</em>), quindi può eseguire le stesse operazioni. La classe Persona viene detta superclasse.</p>
<h3>3. Genericità</h3>
<p>E&#8217; possibile definire classi generiche che contengono riferimenti ad altre classi. In questo modo è possibile strutturare un&#8217;applicazione su più livelli ed avere sempre a disposizione proprietà e metodi di altre classi non direttamente collegate a quella che si sta utilizzando.</p>
<p>I framework sfruttano molto questo principio di funzionamento della programmazione OOP.</p>
<h3>4. Polimorfismo</h3>
<p>Il <strong>polimorfismo</strong> è la possibilità di richiamare un unico metodo che avrà un comportamento diverso in base al tipo di oggetto su cui viene applicato.</p>
<p>Questo è reso possibile grazie all&#8217;ereditarietà e all&#8217;overloading: possiamo definire un metodo con lo stesso nome su due classi. Richiamando il nome del metodo otterremo risultati diversi in base al tipo di oggetto su cui è stato richiamato.</p>
<h3>5. Riuso e manutenzione del codice</h3>
<p>L&#8217;orientamento agli oggetti permette una facile riusabilità delle classi definite, con una conseguente facilità di manutenzione del codice. Quando l&#8217;esecuzione del programma termina a causa di un errore, è semplice risalire all&#8217;oggetto e al metodo che hanno generato il problema.</p>
<h3>6. Gestione delle eccezioni e degli errori</h3>
<p>Nella programmazione ad oggetti è possibile gestire i casi anomali di funzionamento con il meccanismo delle eccezioni. Il codice non si interrompe, o meglio è il programmatore che decide quali operazioni eseguire in presenza di errori dell&#8217;applicazione.</p>
<p>La OOP è uno strumento molto potente e dinamico per sviluppare soluzioni professionali, soprattutto quando esiste un team di lavoro che segue la modifica e l&#8217;implementazione di una piattaforma software. Si tratta di cogliere le opportunità offerte dai linguaggi orientati agli oggetti e sviluppare soluzioni architetturali efficienti.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.methack.it/devblog/programmazione/6-caratteristiche-della-programmazione-oop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guadagnare online: cerchiamo collaboratori</title>
		<link>http://www.methack.it/devblog/news/guadagnare-online-cerchiamo-collaboratori/</link>
		<comments>http://www.methack.it/devblog/news/guadagnare-online-cerchiamo-collaboratori/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 11:41:59 +0000</pubDate>
		<dc:creator>hack</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[guadagnare]]></category>
		<category><![CDATA[methack]]></category>
		<category><![CDATA[online]]></category>

		<guid isPermaLink="false">http://www.methack.it/devblog/?p=1597</guid>
		<description><![CDATA[Il portale methack.it è cresciuto negli anni attraverso la creazione di 4 importanti blog tematici, che affrontano argomenti paralleli: LinuxBlog con approfondimenti sulle distribuzioni linux e il software open source, HackinBlog con approfondimenti sulla sicurezza informatica, Web2.0 con altrettanti articoli sui servizi di internet e video divertenti, ed infine DevBlog con guide su programmazione e [...]]]></description>
			<content:encoded><![CDATA[<p>Il portale methack.it è cresciuto negli anni attraverso la creazione di 4 importanti blog tematici, che affrontano argomenti paralleli: <a href="http://www.methack.it/linuxblog/">LinuxBlog</a> con approfondimenti sulle distribuzioni linux e il software open source, <a href="http://www.methack.it/hackinblog/">HackinBlog</a> con approfondimenti sulla sicurezza informatica, <a href="http://www.methack.it/web20/">Web2.0</a> con altrettanti articoli sui servizi di internet e video divertenti, ed infine <a href="http://www.methack.it/devblog/">DevBlog</a> con guide su programmazione e online business.</p>
<p><img src="http://www.methack.it/devblog/wp-content/uploads/2010/07/guadagnare.jpg" alt="guadagnare online" title="guadagnare online" width="230" height="192" class="alignleft size-full wp-image-1609" /> Il portale è sempre stato auto-gestito e per qualche tempo è rimasto non aggiornato a causa della mancanza di valide collaborazioni. Lo staff vuole arricchire nuovamente tutti i canali del network ed oggi <strong>cerca collaboratori da dedicare alla scrittura di articoli</strong> su:</p>
<p>Windows, Linux, Videogiochi, Software, Hardware, Sicurezza Informatica, Web2.0.</p>
<p>La partecipazione è assolutamente volontaria. I requisiti per collaborare sono:</p>
<p>* buona padronanza della lingua italiana e buono stile di scrittura;<br />
* conoscenza approfondita dell&#8217;argomento scelto;</p>
<p>Non ci sono limitazioni “contrattuali” e non è richiesta frequenza settimanale nel pubblicare nuovi articoli. Il testo di ciascun articolo dovrà essere originale e NON copiato palesemente da altre fonti. Lo staff avrà la possibilità di escludere il candidato in qualsiasi momento senza preavviso.</p>
<p><span id="more-1597"></span></p>
<h2>Come si guadagna</h2>
<p>Il candidato dovrà essere in possesso di un account Google Adsense. All&#8217;interno delle pagine articolo verranno inseriti due banner pubblicitari appartenenti all&#8217;account del candidato, per consentirgli di guadagnare sulla base delle visite ottenute.</p>
<p>Non ci sono limiti di guadagno e se un articolo suscita l&#8217;interesse di molte persone, si possono raggiungere interessanti cifre settimanali!!!</p>
<h2>Come si partecipa</h2>
<p>Se interessati ad uno o più degli argomenti riportati, inviare la propria candidatura all&#8217;indirizzo email <a href="mailto:info@methack.it">info@methack.it</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.methack.it/devblog/news/guadagnare-online-cerchiamo-collaboratori/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Opinioni in stile web 2.0: la tua voce sul web</title>
		<link>http://www.methack.it/devblog/servizi-online/opinioni-in-stile-web-2-0-gradimento-dei-siti-web/</link>
		<comments>http://www.methack.it/devblog/servizi-online/opinioni-in-stile-web-2-0-gradimento-dei-siti-web/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 09:27:33 +0000</pubDate>
		<dc:creator>hack</dc:creator>
				<category><![CDATA[Curiosità]]></category>
		<category><![CDATA[Servizi online]]></category>
		<category><![CDATA[reputation management]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://www.methack.it/devblog/?p=1561</guid>
		<description><![CDATA[In rete sono molto diffusi quei siti web che permettono ai consumatori di scrivere recensioni e valutare prodotti e servizi: il portale Ciao.it, ad esempio, combina opinioni e informazioni aggiornate di prezzo, per creare indici di gradimento nei confronti di venditori online. Sono in pratica delle comode guide allo shopping, semplici e gratuite, limitate a [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.methack.it/devblog/wp-content/uploads/2010/07/opinioni_web.jpg" alt="Opinioni sul web" title="Opinioni sul web" width="164" height="200" class="alignright size-full wp-image-1576" /> In rete sono molto diffusi quei siti web che permettono ai consumatori di scrivere recensioni e valutare prodotti e servizi: il portale <a rel="nofollow" href="http://www.ciao.it/" target="_blank">Ciao.it</a>, ad esempio, combina opinioni e informazioni aggiornate di prezzo, per creare indici di gradimento nei confronti di venditori online.</p>
<p>Sono in pratica delle comode guide allo shopping, semplici e gratuite, limitate a specifiche categorie di prodotto. Meno conosciuti sono invece quei servizi in grado di creare <strong>statistiche di gradimento di siti web, prodotti, servizi e molto altro</strong>, contrapponendo al prodotto ricercato una percentuale di &#8220;sucks&#8221; ed una, complementare, di &#8220;rocks&#8221;.</p>
<p><span id="more-1561"></span><br />
Il significato è molto semplice: gli utenti possono esprimere la propria opinione su qualsiasi cosa, indicando &#8220;sucks&#8221; (non mi piace) o &#8220;rocks&#8221; (mi piace). Opinioni in stile web 2.0 insomma&#8230; e le categorie sono infinite: politici, musicisti, abbigliamento, imprese, etc.</p>
<p>Stiamo parlando di <a href="http://amplicate.com/" target="_blank"><strong>Amplicate</strong></a>, il cui motto è: &#8220;Making Your Opinion Count&#8221;!</p>
<p>Basta accedere alla homepage e il concetto è subito chiaro: possiamo cercare un argomento, sul quale potremo contribuire con la nostra opinione, oppure possiamo scrivere nel riquadro:</p>
<p><img src="http://www.methack.it/devblog/wp-content/uploads/2010/07/amplicate.png" alt="opinioni sul web con amplicate" title="opinioni sul web con amplicate" width="470" height="135" class="alignnone size-full wp-image-1574" /></p>
<p>Che ne dite? Può essere utile?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.methack.it/devblog/servizi-online/opinioni-in-stile-web-2-0-gradimento-dei-siti-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL, eliminare duplicati dal database</title>
		<link>http://www.methack.it/devblog/programmazione/database/sql-eliminare-duplicati-dal-database/</link>
		<comments>http://www.methack.it/devblog/programmazione/database/sql-eliminare-duplicati-dal-database/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 19:47:00 +0000</pubDate>
		<dc:creator>hack</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[duplicati]]></category>
		<category><![CDATA[operatori aggregati]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.methack.it/devblog/?p=1543</guid>
		<description><![CDATA[Una web application che si rispetti dovrebbe sempre controllare i dati prima di registrarli su database, per evitare l&#8217;inserimento di records duplicati. La duplicazione è il problema principale dell&#8217;inefficienza di molti sistemi informatici, perchè rallenta l&#8217;esecuzione delle query e quindi dell&#8217;intera applicazione. Anche un database progettato in maniera ottimale può soffrire di questo problema. In [...]]]></description>
			<content:encoded><![CDATA[<p>Una web application che si rispetti dovrebbe sempre controllare i dati prima di registrarli su database, per evitare l&#8217;inserimento di records duplicati. La duplicazione è il problema principale dell&#8217;inefficienza di molti sistemi informatici, perchè rallenta l&#8217;esecuzione delle query e quindi dell&#8217;intera applicazione.</p>
<div align="center"><img src="http://www.methack.it/devblog/wp-content/uploads/2010/07/mysql_logo.png" alt="Logo mysql" title="Logo mysql" width="200" height="103" class="alignnone size-full wp-image-1558" /></div>
<p>Anche un database progettato in maniera ottimale può soffrire di questo problema. In SQL, eliminare i duplicati dal database non è difficile come sembra ed è una delle operazioni che tutti gli storage administrator dovrebbero saper fare.</p>
<p>Lo <a href="http://www.methack.it/devblog/programmazione/database/introduzione-ai-dbms/">scopo dei DBMS</a> è proprio quello di evitare la ridondanza e l&#8217;incoerenza delle informazioni. Scopriamo in questo articolo un metodo efficace per eliminare i record duplicati dalle tabelle.</p>
<p><span id="more-1543"></span><br />
Supponiamo di avere la seguente tabella `doppioni`, in cui la chiave primaria è rappresentata dal campo ID:<br />
<img src="http://www.methack.it/devblog/wp-content/uploads/2010/07/db1.png" alt="Record duplicati" title="Record duplicati" width="246" height="144" class="alignnone size-full wp-image-1550" /></p>
<p>In questo esempio c&#8217;è un solo duplicato (Paolo di Milano), ma proviamo ad immaginare un DB popolato da migliaia di record. La <strong>clausola DISTINCT</strong> ci permette di selezionare in modo univoco i campi di una tabella.</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #993333; font-weight: bold;">DISTINCT</span> nome<span style="color: #66cc66;">,</span>citta <span style="color: #993333; font-weight: bold;">FROM</span> <span style="color: #ff0000;">`doppioni`</span></pre></div></div>

<p>Nella query non ho inserito il campo ID, perchè essendo chiave primaria avrebbe annullato l&#8217;effetto del DISTINCT, restituendo tutti i record della tabella. Il mio obbiettivo era quello di scartare i doppioni. Ecco il risultato:<br />
<img src="http://www.methack.it/devblog/wp-content/uploads/2010/07/db2.png" alt="Eliminare i doppioni in SQL" title="Eliminare i doppioni in SQL" width="213" height="116" class="alignnone size-full wp-image-1555" /></p>
<p>Per <strong>eliminare i record duplicati dal nostro database</strong> si può utilizzare uno stratagemma semplice ma efficace: creare un indice con i due campi &#8220;nome&#8221; e &#8220;citta&#8221;! In questo modo la tabella viene ripopolata, con la condizione che non possono esistere due coppie &#8220;nome&#8221; e &#8220;citta&#8221; uguali.</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">IGNORE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> doppioni <span style="color: #993333; font-weight: bold;">ADD</span> <span style="color: #993333; font-weight: bold;">UNIQUE</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>nome<span style="color: #66cc66;">,</span> citta<span style="color: #66cc66;">&#41;</span> ;</pre></div></div>

<p>La clausola IGNORE indica al DBMS che non deve bloccarsi alla prima violazione della regola di duplicazione delle chiavi, ma deve continuare con l&#8217;inserimento dei restanti valori. Il risultato sarà una tabella identica a quella che abbiamo ottenuto con la selezione manuale attraverso il DISTINCT!</p>
<p>Forse avremo un&#8217;applicazione più performante e meno carica sul server!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.methack.it/devblog/programmazione/database/sql-eliminare-duplicati-dal-database/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>2 editor online per CSS e Javascript</title>
		<link>http://www.methack.it/devblog/servizi-online/2-editor-online-per-css-e-javascript/</link>
		<comments>http://www.methack.it/devblog/servizi-online/2-editor-online-per-css-e-javascript/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 19:27:34 +0000</pubDate>
		<dc:creator>hack</dc:creator>
				<category><![CDATA[Servizi online]]></category>
		<category><![CDATA[Webmaster]]></category>
		<category><![CDATA[editor]]></category>

		<guid isPermaLink="false">http://www.methack.it/devblog/?p=1520</guid>
		<description><![CDATA[A volte dobbiamo fare delle prove veloci di codice CSS o Javascript: due editor online ci semplificano il lavoro. Sto parlando di CssDesk e JSBin! Il primo, CssDesk, è un editor CSS online che supporta anche CSS3. Uno strumento facile e veloce, per sperimentare istruzioni e design pattern da applicare alle nostre applicazioni web. Sulla [...]]]></description>
			<content:encoded><![CDATA[<p>A volte dobbiamo fare delle prove veloci di codice CSS o Javascript: due editor online ci semplificano il lavoro. Sto parlando di CssDesk e JSBin!</p>
<p>Il primo, <a rel="nofollow" href="http://cssdesk.com/" target="_blank"><strong>CssDesk</strong></a>, è un editor CSS online che supporta anche <a href="http://www.methack.it/devblog/tag/css-3/">CSS3</a>. Uno strumento facile e veloce, per sperimentare istruzioni e design pattern da applicare alle nostre applicazioni web.</p>
<p>Sulla sinistra si inserisce il codice HTML e CSS, mentre sulla destra compare in tempo reale il risultato. E&#8217; possibile anche scaricare o condividere il codice creato.</p>
<p>CssDesk è un servizio interessante per fare pratica con le proprietà del linguaggio CSS, o del nuovo CSS3 del quale si è parlato in questo <a href="http://www.methack.it/devblog/programmazione/html-css/html-5-e-css-3-lista-dei-tag-selettori-etc/">articolo introduttivo</a>.</p>
<p><img src="http://www.methack.it/devblog/wp-content/uploads/2010/07/jsbin2.png" alt="editor online per css e javascript" title="editor online per css e javascript" width="470" height="78" class="alignnone size-full wp-image-1537" /><br />
<a rel="nofollow" href="http://jsbin.com/" target="_blank"><strong>JS Bin</strong></a> è un altro comodo editor online per il linguaggio javascript: questa web application è in grado di interpretare codice Html, Css e Javascript, e permette di strutturare documenti web 2.0.</p>
<p><span id="more-1520"></span><br />
Si possono includere e usare librerie come JQuery, Prototype, Mootols, etc. JSBin permette ovviamente di condividere e scaricare il risultato delle nostre prove.</p>
<p>Il funzionamento di JSBin è molto semplice e intuitivo: sul lato sinistro si inserisce il codice Javascript, sul lato destro si inserisce il codice HTML e CSS. Per vedere l’anteprima dei risultati si deve cliccare su <em>Preview</em>.</p>
<p>Questi servizi offrono funzionalità semplici ed accessibili per prove immediate di codice CSS e Javascript, con tutti i presupposti di compatibilità. Certamente, la realizzazione di progetti più complessi dovrebbe essere affidata ad altri software, ma potrebbe essere un buon punto di partenza!</p>
<p>Ecco nuovamente i <strong>link ai due editor CSS e Javascript online</strong>:<br />
<a rel="nofollow" href="http://jsbin.com/" target="_blank"><strong>JS Bin</strong></a> e <a rel="nofollow" href="http://cssdesk.com/" target="_blank"><strong>CssDesk</strong></a>!</p>
<p><img src="http://www.methack.it/devblog/wp-content/uploads/2010/07/jsbin.png" alt="JSBin" title="jsbin" width="470" height="256" class="alignnone size-full wp-image-1535" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.methack.it/devblog/servizi-online/2-editor-online-per-css-e-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Social network per professionisti e aziende</title>
		<link>http://www.methack.it/devblog/web/social-network/social-network-per-professionisti-e-aziende/</link>
		<comments>http://www.methack.it/devblog/web/social-network/social-network-per-professionisti-e-aziende/#comments</comments>
		<pubDate>Sun, 04 Jul 2010 10:25:55 +0000</pubDate>
		<dc:creator>hack</dc:creator>
				<category><![CDATA[Social network]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[professionisti]]></category>

		<guid isPermaLink="false">http://www.methack.it/devblog/?p=1501</guid>
		<description><![CDATA[Linkedin è un social network per professionisti e aziende, che possono comunicare attraverso Internet, individuare o proporre offerte di lavoro, scambiare informazioni e servizi. Linkedin riscuote grande successo anche in Italia, grazie alle reali opportunità di business che riesce a creare. Gli iscritti al social network, oltre a segnalare il proprio curriculum a partire dal [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.methack.it/devblog/wp-content/uploads/2010/07/linkedin1.jpg" alt="Linkedin, social network professionale" title="Linkedin, social network professionale" width="218" height="257" class="alignright size-full wp-image-1517" /> <a href="http://www.linkedin.com/" target="_blank"><strong>Linkedin</strong></a> è un social network per professionisti e aziende, che possono comunicare attraverso Internet, individuare o proporre offerte di lavoro, scambiare informazioni e servizi.</p>
<p>Linkedin riscuote grande successo anche in Italia, grazie alle reali opportunità di business che riesce a creare. Gli iscritti al <a href="http://www.methack.it/devblog/categoria/web/social-network/">social network</a>, oltre a segnalare il proprio curriculum a partire dal proprio percorso di studi, possono conettersi con colleghi e conoscenti, creare una rete professionale di contatti, iscriversi a gruppi e avviare discussioni.</p>
<p><span id="more-1501"></span></p>
<p>Ci sono 3 livelli di relazione tra i profili registrati: tutti i contatti diretti (1° livello), i contatti dei propri contatti diretti (2° livello), tutti i contatti di ogni contatto (3° livello). Sfruttando questo meccanismo di &#8220;parentela&#8221; siamo in grado di scambiare informazioni con persone che non sono direttamente collegate a noi, ma che potrebbero essere interessate alle nostre pubblicazioni.</p>
<p>Anche su Linkedin sono disponibili alcune applicazioni: <strong>SlideShare</strong>, ad esempio, permette di condividere le nostre slides, ma anche di vedere quelle degli altri e di inserire commenti. Un efficace strumento per team di lavoro che hanno bisogno di discutere su alcuni progetti.</p>
<p>C&#8217;è anche la possibilità di sfruttare un sistema di “recommendation” per avvalorare la professionalità dei propri colleghi o amici. Un interessante servizio utile a diffondere il profilo aziendale o privato, per ricercare posizioni di lavoro, condividere il proprio curriculum e pubblicizzare servizi e prodotti.</p>
<p>In pratica, Linkedin rappresenta un&#8217;importante vetrina che consente l&#8217;incontro di domanda ed offerta di lavoro, offrendo soluzioni di business e opportunità di incontri lavorativi online!</p>
<p><object width="470" height="289"><param name="movie" value="http://www.youtube.com/v/1iO5ze_l0sA&amp;hl=it_IT&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/1iO5ze_l0sA&amp;hl=it_IT&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="470" height="289"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.methack.it/devblog/web/social-network/social-network-per-professionisti-e-aziende/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaZone, il trailer di Java4ever</title>
		<link>http://www.methack.it/devblog/programmazione/java/javazone-il-trailer-di-java4ever/</link>
		<comments>http://www.methack.it/devblog/programmazione/java/javazone-il-trailer-di-java4ever/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 18:53:35 +0000</pubDate>
		<dc:creator>hack</dc:creator>
				<category><![CDATA[Curiosità]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[javazone]]></category>

		<guid isPermaLink="false">http://www.methack.it/devblog/?p=1491</guid>
		<description><![CDATA[Questo divertente filmato racconta la storia di una famiglia, educata ai principi della programmazione .NET, alle library e alle routine Microsoft&#8230; Ma il ragazzino cresce e scopre nuove frontiere&#8230; Java e l&#8217;open source! Il video dopo il salto&#8230;]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.methack.it/devblog/wp-content/uploads/2010/07/java-logo.jpg" alt="java logo" title="java logo" width="117" height="173" class="alignright size-full wp-image-1498" /> Questo divertente filmato racconta la storia di una famiglia, educata ai principi della programmazione .NET, alle library e alle routine Microsoft&#8230;</p>
<p>Ma il ragazzino cresce e scopre nuove frontiere&#8230; Java e l&#8217;open source!<br />
Il video dopo il salto&#8230;</p>
<p><span id="more-1491"></span></p>
<p><object width="470" height="289"><param name="movie" value="http://www.youtube.com/v/1HUMYWGnMVs&amp;hl=it_IT&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/1HUMYWGnMVs&amp;hl=it_IT&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="470" height="289"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.methack.it/devblog/programmazione/java/javazone-il-trailer-di-java4ever/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sicurezza in PHP: direttiva register_globals</title>
		<link>http://www.methack.it/devblog/programmazione/php/sicurezza-in-php-direttiva-register_globals/</link>
		<comments>http://www.methack.it/devblog/programmazione/php/sicurezza-in-php-direttiva-register_globals/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 19:40:13 +0000</pubDate>
		<dc:creator>hack</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sicurezza]]></category>
		<category><![CDATA[direttive]]></category>
		<category><![CDATA[register_globals]]></category>

		<guid isPermaLink="false">http://www.methack.it/devblog/?p=1475</guid>
		<description><![CDATA[Iniziamo una serie di articoli dedicati alla sicurezza delle applicazioni web in PHP. Questa volta parliamo della direttiva register_globals. La direttiva register_globals, se attivata, comporta la creazione automatica delle variabili provenienti da GET, POST, Cookie e Sessioni. Il programmatore non deve più crearle manualmente: è direttamente lo script PHP che crea e valorizza le variabili [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.methack.it/devblog/wp-content/uploads/2008/07/php.jpg" alt="sicurezza in php e register_globals" title="sicurezza in php e register_globals" width="140" height="107" class="alignright size-full wp-image-42" /> Iniziamo una serie di articoli dedicati alla sicurezza delle applicazioni web in PHP. Questa volta parliamo della direttiva <a href="http://it.php.net/manual/en/ini.core.PHP#ini.register-globals" target="_blank">register_globals</a>.</p>
<p>La direttiva register_globals, se attivata, comporta la creazione automatica delle variabili provenienti da GET, POST, Cookie e Sessioni. Il programmatore non deve più crearle manualmente: è direttamente lo script PHP che crea e valorizza le variabili con lo stesso nome utilizzato nelle query string.</p>
<p>Questo comporta una serie di problematiche di sicurezza, che se vengono trascurate possono elevare i rischi di cracking da parte di utenti malintenzionati.</p>
<p><span id="more-1475"></span><br />
Analizziamo un esempio pratico. Uno script PHP che visualizza il contenuto della pagina solo agli utenti autenticati (<em>scusate il gioco di parole</em>).</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Procedura di controllo dei dati inviati tramite form HTML</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;username&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;username&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> verificaDati<span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;username&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;username&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000088;">$userLogged</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$userLogged</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  stampa_contenuto<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
  form_login<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Con la direttiva register_globals = On possiamo facilmente bypassare il controllo dei dati di accesso (username e password) e visualizzare ugualmente il contenuto.</p>
<p>Richiamando la pagina in questo modo:<br />
<code>http://www.sito.com/script.php?userLogged=true</code></p>
<p>verrà automaticamente creata la variabile <code>$userLogged</code> e inizializzata a <em>true</em> (valore booleano). Il controllo risulterà valido e ci verrà mostrato il contenuto &#8220;protetto&#8221;.</p>
<p>Ovviamente l&#8217;attaccante deve conoscere i dettagli del vostro codice, cioè deve scoprire il nome della variabile usata per l&#8217;autenticazione prima di poterla sfruttare a suo vantaggio. In ogni caso è un rischio che non dovremmo correre!</p>
<h2>Soluzioni</h2>
<p>La direttiva register_globals deve essere impostata ad OFF!</p>
<p>Per farlo ci possiamo affidare al file .htaccess con l&#8217;istruzione:<br />
<code>php_flag register_globals Off</code></p>
<p>Oltre a questo, è fondamentale <strong>inizializzare tutte le variabili usate all&#8217;interno di uno script</strong>! L&#8217;exploit verrà annullato, perchè alla prima esecuzione del codice, se non viene superato il test di login, <code>$userLogged</code> assumerà il valore <code>false</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.methack.it/devblog/programmazione/php/sicurezza-in-php-direttiva-register_globals/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
