<?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>CookedApple</title>
	<atom:link href="http://cookedapple.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://cookedapple.net</link>
	<description>All our thoughts. Broadcasted.</description>
	<lastBuildDate>Tue, 24 Aug 2010 10:03:07 +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>Mi elido dai social network</title>
		<link>http://cookedapple.net/2010/08/24/mi-elido-dai-social-network/</link>
		<comments>http://cookedapple.net/2010/08/24/mi-elido-dai-social-network/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 09:58:56 +0000</pubDate>
		<dc:creator>Piero Bozzolo</dc:creator>
				<category><![CDATA[altro]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[socialnetworkwar]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://cookedapple.net/?p=333</guid>
		<description><![CDATA[Ho rinominato il mio account di facebook, ho eliminato tutti gli amici, tranne i colleghi, non prendetevela a male, ma ho quell&#8217;account solo ed esclusivamente per fare i test di lavor (ecco perchè ho tenuto i colleghi) Ho anche eliminato il mio account Twitter. Mi rimangono le foto su Flickr che manterrò, i miei link [...]]]></description>
			<content:encoded><![CDATA[<p>Ho rinominato il mio account di facebook, ho eliminato tutti gli amici, tranne i colleghi, non prendetevela a male, ma ho quell&#8217;account solo ed esclusivamente per fare i test di lavor (ecco perchè ho tenuto i colleghi)</p>
<p>Ho anche eliminato il mio account Twitter.</p>
<p>Mi rimangono le foto su Flickr che manterrò, i miei link Delicious,  i miei indispensabili su Anobii e la mia musica su Last.fm.</p>
<p>Non ho tempo per dedicarmi ai social network che portano via solo tempo.</p>
]]></content:encoded>
			<wfw:commentRss>http://cookedapple.net/2010/08/24/mi-elido-dai-social-network/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook API: un fallimento di grande successo</title>
		<link>http://cookedapple.net/2010/08/24/facebook-api-un-fallimento-di-grande-successo/</link>
		<comments>http://cookedapple.net/2010/08/24/facebook-api-un-fallimento-di-grande-successo/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 09:43:59 +0000</pubDate>
		<dc:creator>Piero Bozzolo</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[facebook]]></category>

		<guid isPermaLink="false">http://cookedapple.net/?p=329</guid>
		<description><![CDATA[Le nuove API (Application Programming Interface) annunciate durante la conferenza F8, che dovevano semplificare tanto la vita agli sviluppatori, sono arrivate già da un pò e anzichè semplificarla hanno incasintato ancora di più la vita al programmatore. Già perchè sebbene alcune idee siano molto buone (interfaccia REST, protocollo oAuth 2.0) la documentazione e gli esempi [...]]]></description>
			<content:encoded><![CDATA[<p>Le nuove API (Application Programming Interface) annunciate durante la conferenza F8, che dovevano semplificare tanto la vita agli sviluppatori, sono arrivate già da un pò e anzichè semplificarla hanno incasintato ancora di più la vita al programmatore. Già perchè sebbene alcune idee siano molto buone (interfaccia REST, protocollo oAuth 2.0) la documentazione e gli esempi sono completamente errati e sbagliati, privi di coerenza e nella fattispecie inutilizzabili. E&#8217; una vergogna che il sito con più iscrizioni al mondo si presenti così male dal punto di vista professionale. L&#8217;unico modo per imparare le nuove API è quello di cercare in giro per internet su blog o articoli vari e procedere a TASTONI!</p>
<p><strong>Probabilmente le nuove funzionalità sono state rilasciate in fretta e furia, senza controllare che ciò che rende una libreria o una API utilizzabile: la documentiazione. </strong></p>
<p>Facebook gioca con la pazienza e con la vita dei programmatori (si perchè ovviamente si deve perdere tempo per cercare di capire come funzionano queste API che definirle uscite dal sedere di una vacca è un gran complimento).</p>
<p>Cosa andrebbe fatto:</p>
<ol>
<li> Stilare una VERA guida che indichi cosa si può fare oggi e cosa è sconsigliato</li>
<li>Completare la documentazione</li>
<li>Scrivere esempi funzionanti</li>
<li>Infine riorganizzare la documentazione (com&#8217;erano le vecchie api andava benissimo!)</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://cookedapple.net/2010/08/24/facebook-api-un-fallimento-di-grande-successo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un iPost</title>
		<link>http://cookedapple.net/2010/08/15/un-ipost/</link>
		<comments>http://cookedapple.net/2010/08/15/un-ipost/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 09:39:07 +0000</pubDate>
		<dc:creator>Piero Bozzolo</dc:creator>
				<category><![CDATA[play]]></category>
		<category><![CDATA[iphobw]]></category>

		<guid isPermaLink="false">http://cookedapple.net/2010/08/15/un-ipost/</guid>
		<description><![CDATA[L&#8217;app per iPhone per scrivere su wordpress non sembra affatto male! Ottima interfaccia, facile utilizzo! Ecco il mio bumper&#8230; Giusto per provare l&#8217;upload di foto, peccato che non sembri esserci un editor wyswyg&#8230;]]></description>
			<content:encoded><![CDATA[<p>L&#8217;app per iPhone per scrivere su wordpress non sembra affatto male! Ottima interfaccia, facile utilizzo!<br />
Ecco il mio bumper&#8230; Giusto per provare l&#8217;upload di foto, peccato che non sembri esserci un editor wyswyg&#8230;</p>
<p><a href="http://cookedapple.net/wp-content/uploads/2010/08/p_2592_1936_D2FD27C3-E9E4-4D35-8B44-6751FFFF6AD2.jpeg"><img src="http://cookedapple.net/wp-content/uploads/2010/08/p_2592_1936_D2FD27C3-E9E4-4D35-8B44-6751FFFF6AD2.jpeg" alt="" class="alignnone size-full" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://cookedapple.net/2010/08/15/un-ipost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vergogna @3Italia</title>
		<link>http://cookedapple.net/2010/08/03/vergogna-3italia/</link>
		<comments>http://cookedapple.net/2010/08/03/vergogna-3italia/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 07:23:03 +0000</pubDate>
		<dc:creator>Piero Bozzolo</dc:creator>
				<category><![CDATA[altro]]></category>
		<category><![CDATA[3italia]]></category>
		<category><![CDATA[cellulari]]></category>
		<category><![CDATA[tariffe]]></category>
		<category><![CDATA[vergogna]]></category>

		<guid isPermaLink="false">http://cookedapple.net/?p=320</guid>
		<description><![CDATA[Vergogna 3Italia! Venerdì, il giorno di lancio dell&#8217;iPhone4, io e la mia fidanzata ci siamo recati presso il centro 3 di Gallarate e, stufi delle tariffe Vodafone, abbiamo acquistato due telefoni e due usim 3, una in abbonamento (Top400 a 29euro / mese) e una con una ricaricabile (ricarica obbligatoria 10 euro/mese). Abbiamo attivato anche [...]]]></description>
			<content:encoded><![CDATA[<p>Vergogna 3Italia!<br />
Venerdì, il giorno di lancio dell&#8217;iPhone4, io e la mia fidanzata ci siamo recati presso il centro 3 di Gallarate e, stufi delle tariffe Vodafone, abbiamo acquistato due telefoni e due usim 3, una in abbonamento (Top400 a 29euro / mese) e una con una ricaricabile (ricarica obbligatoria 10 euro/mese).</p>
<p>Abbiamo attivato anche la vantaggiosissima offerta 3 Insieme (600 mex al giorno, 10h al giorno, tutto a 5euro al mese).</p>
<p>Con lo stupore della mia fidanzata dopo neanche un giorno si è trovata la ricarica del cellulare prosciugata (le avanzavano 5 euro). Abbiamo fatto così altri 10euro di ricarica in buona fede. Dopo neanche due giorni la carica residua del telefono era neanche 60centesimi.</p>
<p>Che fine hanno fatto le grandi offerte della 3?<br />
Semplice 3 sul telefonino ricaricabile ha impostato di default la ricevuta di ritorno dei messaggi, quindi ogni messaggio inviato veniva a costare il doppio, e ogni messaggio inviato sotto offerta 3 insieme veniva a costare comunque 10 centesimi.</p>
<p>Altro fatto percui 3Italia si deve VERGOGNARE:<br />
Nell&#8217;opuscolo allegato alla USIM per iPhone intitolato &#8220;Scopri come attivare il tuo nuovo iPhone&#8221; c&#8217;è una pagina che potrebbe arrecare confusione ai meno attenti: &#8220;Per attivare il Roaming Dati sul tuo iPhone&#8221;.<br />
Il fatto che sia nell&#8217;opuscoltetto &#8220;Scopri come attivare il tuo nuovo iPhone&#8221; fa quasi intendere che sia una procedura necessaria per l&#8217;utilizzo di iPhone. In realtà non è cosi, serve solo a 3italia per rubare dal vostro contratto 60centesimi a megabyte in roaming!<br />
VERGOGNA!</p>
<p>In mattinata segnalerò questa condotta discutibile al garante delle tlc e vediamo come va a finire.</p>
<p>VERGOGNA!<br />
3 dovrebbe quantomeno avvisare di questi sporchi trucchi per raccattare soldi.<br />
P.</p>
]]></content:encoded>
			<wfw:commentRss>http://cookedapple.net/2010/08/03/vergogna-3italia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installare CUnit sotto SnowLeopard</title>
		<link>http://cookedapple.net/2010/07/22/installare-cunit-sotto-snowleopard/</link>
		<comments>http://cookedapple.net/2010/07/22/installare-cunit-sotto-snowleopard/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 15:24:56 +0000</pubDate>
		<dc:creator>Piero Bozzolo</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[cunit]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://cookedapple.net/?p=312</guid>
		<description><![CDATA[Il Test Driven Development è una tecnica di design del software che permette di scrivere del buon codice con un ampio tasso di coverage di test automatizzati. Esistono diverse librerie per fare questo, generalmente almeno una per linguaggio, basate tutte sul design di SUnit (originariamente xUnit), il framework di test scritto da Kent Beck (ideatore [...]]]></description>
			<content:encoded><![CDATA[<p>Il Test Driven Development è una tecnica di design del software che permette di scrivere del buon codice con un ampio tasso di coverage di test automatizzati. Esistono diverse librerie per fare questo, generalmente almeno una per linguaggio, basate tutte sul design di SUnit (originariamente xUnit), il framework di test scritto da Kent Beck (ideatore di Extreme Programming).</p>
<p>Non fa eccezione il linguaggio C che possiede diverse librerie di testing, tra cui Check e CUnit. Queste due sono caratterizzate dall&#8217;essere implementate in puro C e non in C++ come ad esempio googletest.</p>
<p>Installare CUnit sotto Mac è molto semplice anche se mi ha dato qualche problema dovuto alle numerose piattaforme su MacOs X ha girato nel corso degli anni (nato su PPC, PPC64, portato su i386 e ora x86_64, senza contare universal che racchiude le due famiglie).</p>
<p>Per prima cosa possiamo installare la libreria da <a href="http://www.macports.org/install.php">MacPort</a>:</p>
<ol>
<li>sudo port install cunit<br />
MacPort  scaricherà, compilerà e installerà CUnit e libncurses</li>
<li>Modificare il path di MacOS X<br />
Purtroppo l&#8217;installazione di port non mi ha aggiunto i path alle librerie e agli include installati tramite MacPort, quindi è necessario modificare il file /etc/paths e aggiungere le seguenti righe:</p>
<pre>/opt/local/
/opt/local/lib
/opt/local/include/</pre>
</li>
<li>Riavviare il Mac per rendere attive le modifiche al path</li>
<li>A questo punto possiamo provare a compilare il <a href="http://cunit.sourceforge.net/example.html">codice di esempio</a> presente sul sito di CUnit con l&#8217;accortezza di specificare l&#8217;architettura e l&#8217;inclusione delle librerie CUnit e Ncurses:
<pre>gcc <strong>-lcunit -lncurses</strong> -Wall example.c -o example <strong>-arch x86_64</strong></pre>
</li>
<li> Il codice di test ora risulta essere compilato e funzionante possiamo lanciarlo con
<pre>./example</pre>
</li>
</ol>
<p>Happy coding!</p>
]]></content:encoded>
			<wfw:commentRss>http://cookedapple.net/2010/07/22/installare-cunit-sotto-snowleopard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Come modificare il file host su un mac</title>
		<link>http://cookedapple.net/2010/07/08/come-modificare-il-file-host-su-un-mac/</link>
		<comments>http://cookedapple.net/2010/07/08/come-modificare-il-file-host-su-un-mac/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 08:34:02 +0000</pubDate>
		<dc:creator>Piero Bozzolo</dc:creator>
				<category><![CDATA[play]]></category>

		<guid isPermaLink="false">http://cookedapple.net/?p=309</guid>
		<description><![CDATA[Questo post lo dedico ai colleghi del piano superiore 1) Aprire il Finder (l&#8217;icona che rappresenta il disco del vostro Mac) 2) Andare in Applicazioni/Utility e aprire l&#8217;applicazione &#8220;Terminale&#8221; 3) digitare &#8220;sudo nano /etc/hosts&#8221; e premere invio 4) Vi verrà chiesta la vostra password, digitatela (ATTENZIONE: non saranno visualizzati i caratteri mentre digitate, nemmeno un [...]]]></description>
			<content:encoded><![CDATA[<p>Questo post lo dedico ai colleghi del piano superiore <img src='http://cookedapple.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>1) Aprire il Finder (l&#8217;icona che rappresenta il disco del vostro Mac)<br />
2) Andare in Applicazioni/Utility e aprire l&#8217;applicazione &#8220;Terminale&#8221;<br />
3) digitare &#8220;sudo nano /etc/hosts&#8221; e premere invio<br />
4) Vi verrà chiesta la vostra password, digitatela (ATTENZIONE: non saranno visualizzati i caratteri mentre digitate, nemmeno un asterisco o un segnaposto)<br />
5) Premete invio<br />
6) Con la freccetta verso il basso spostate il cursore alla fine del file di testo<br />
7) digitare l&#8217;indirizzo ip del server, premere TAB, e digitare l&#8217;host desiderato<br />
 <img src='http://cookedapple.net/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> premere CTRL+O e premere invio<br />
9) premere CTRL+X per uscire dall&#8217;editor<br />
10) chiudete pure il Terminale, ignorate gli eventuali messaggi</p>
]]></content:encoded>
			<wfw:commentRss>http://cookedapple.net/2010/07/08/come-modificare-il-file-host-su-un-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.htaccess cambiare il dominio mantenendo la querystring</title>
		<link>http://cookedapple.net/2010/06/09/htaccess-cambiare-il-dominio-mantenendo-la-querystring/</link>
		<comments>http://cookedapple.net/2010/06/09/htaccess-cambiare-il-dominio-mantenendo-la-querystring/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 10:34:06 +0000</pubDate>
		<dc:creator>Piero Bozzolo</dc:creator>
				<category><![CDATA[play]]></category>

		<guid isPermaLink="false">http://cookedapple.net/?p=301</guid>
		<description><![CDATA[Per poter ridirigere correttamente tutte le richieste inviate ad un dominio example.com ad un example2.it è possibile modificare l&#8217;htaccess del primo dominio scrivendo una regola di redirect che includa la querystring in questo modo: RewriteEngine on RewriteRule .* http://www.sito.com%{REQUEST_URI}?%{QUERY_STRING} [R=301,NE] Con questa semplice regola ogni url che punterà sul primo compresi i parametri sarà reindirizzata [...]]]></description>
			<content:encoded><![CDATA[<p>Per poter ridirigere correttamente tutte le richieste inviate ad un dominio example.com ad un example2.it è possibile modificare l&#8217;htaccess del primo dominio scrivendo una regola di redirect che includa la querystring in questo modo:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">on</span>
<span style="color: #00007f;">RewriteRule</span> .* http://www.sito.com%{REQUEST_URI}?%{QUERY_STRING} [R=<span style="color: #ff0000;">301</span>,NE]</pre></div></div>

<p>Con questa semplice regola ogni url che punterà sul primo compresi i parametri sarà reindirizzata sul secondo dominio mantenendo la querystring</p>
]]></content:encoded>
			<wfw:commentRss>http://cookedapple.net/2010/06/09/htaccess-cambiare-il-dominio-mantenendo-la-querystring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Accesso ad un modello in cascata in CakePhp</title>
		<link>http://cookedapple.net/2010/06/09/accesso-ad-un-modello-in-cascata-in-cakephp/</link>
		<comments>http://cookedapple.net/2010/06/09/accesso-ad-un-modello-in-cascata-in-cakephp/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 10:04:43 +0000</pubDate>
		<dc:creator>Piero Bozzolo</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[cakephp]]></category>

		<guid isPermaLink="false">http://cookedapple.net/?p=299</guid>
		<description><![CDATA[CakePhp si è ispirato molto a Ruby On Rails e se ne vedono alcuni tratti nella scrittura del codice del framework, purtroppo a Cake manca l&#8217;eleganza e la compattezza di Ruby. Facendo un esempio è esattamente quello che succede con i prodotti Apple, cos&#8217;ha un pc di diverso da un Mac? Nulla fanno le stesse [...]]]></description>
			<content:encoded><![CDATA[<p>CakePhp si è ispirato molto a Ruby On Rails e se ne vedono alcuni tratti nella scrittura del codice del framework, purtroppo a Cake manca l&#8217;eleganza e la compattezza di Ruby.</p>
<p>Facendo un esempio è esattamente quello che succede con i prodotti Apple, cos&#8217;ha un pc di diverso da un Mac?<br />
Nulla fanno le stesse cose, ma un Mac è decisamente più elegante, un iPhone è più cool e usabile di un Nokia e via dicendo.</p>
<p>Ad esempio immaginiamo questi tre modelli:<br />
Modello1(campi vari, modello2_id) &#8212;&#8211;belongsTo&#8212;-&gt; Modello2(campi vari, modello3_id) &#8212;&#8212;belongsTo&#8212;&#8211;&gt;Modello3(campi_vari)</p>
<p>nel primo modello dovrei dichiarare la seguente relazione:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$belongsTo</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'Model2'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'Model3'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">'foreignKey'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
			<span style="color: #0000ff;">'conditions'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Model2.model3_id = Model3.id'</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>che in effetti è molto più lungo del corrispettivo ruby:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">     belongsTo <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:Model2</span></pre></div></div>

<p>difatto la relazione con il Model3 sarebbe gestita dalla relazione specificata nel Model2, cosa non funzionante con CakePhp</p>
]]></content:encoded>
			<wfw:commentRss>http://cookedapple.net/2010/06/09/accesso-ad-un-modello-in-cascata-in-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DRY up your code e Anti-If&#8230; please!</title>
		<link>http://cookedapple.net/2010/05/29/dry-up-your-code-e-anti-if-please/</link>
		<comments>http://cookedapple.net/2010/05/29/dry-up-your-code-e-anti-if-please/#comments</comments>
		<pubDate>Sat, 29 May 2010 09:14:36 +0000</pubDate>
		<dc:creator>Piero Bozzolo</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[anti-if]]></category>
		<category><![CDATA[dry]]></category>
		<category><![CDATA[good practices]]></category>

		<guid isPermaLink="false">http://cookedapple.net/?p=283</guid>
		<description><![CDATA[Ieri un&#8217;amica mi ha chiesto di spostare il suo sito da un provider ad un altro. Ecco alcuni spunti di riflessione che ho trovato spulciando il codice sorgente: DRY up your code (Don&#8217;t Repeat Yourself) Nel codice erano presenti 4 punti dove modificare i parametri di accesso al database, non era molto più semplice mettere [...]]]></description>
			<content:encoded><![CDATA[<p>Ieri un&#8217;amica mi ha chiesto di spostare il suo sito da un provider ad un altro.</p>
<p>Ecco alcuni spunti di riflessione che ho trovato spulciando il codice sorgente:</p>
<ol>
<li>DRY up your code (Don&#8217;t Repeat Yourself)<br />
Nel codice erano presenti 4 punti dove modificare i parametri di accesso al database, non era molto più semplice mettere tutto in un file di configurazione separato?</li>
<li>Ancora:  DRY up your code (Don&#8217;t Repeat Yourself) e Anti-If (e qui siamo ai livelli di CodingHorror)<br />
Il codice che impostava la home page nel caso non ci fossero richieste specifiche era una interminabile catena di if.</li>
</ol>
<p>Ecco qui un bel esempio da non seguire:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$pid</span><span style="color: #339933;">=</span><span style="color: #000088;">$HTTP_GET_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'pid'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$pid</span> <span style="color: #339933;">==</span>  <span style="color: #0000ff;">'0'</span> <span style="color: #339933;">||</span>
   <span style="color: #000088;">$pid</span> <span style="color: #339933;">==</span>  <span style="color: #0000ff;">'1'</span> <span style="color: #339933;">||</span>
   <span style="color: #000088;">$pid</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'11'</span> <span style="color: #339933;">||</span>
   <span style="color: #000088;">$pid</span> <span style="color: #339933;">==</span>  <span style="color: #0000ff;">'2'</span> <span style="color: #339933;">||</span>
   <span style="color: #000088;">$pid</span> <span style="color: #339933;">==</span>  <span style="color: #0000ff;">'3'</span> <span style="color: #339933;">||</span>
   <span style="color: #000088;">$pid</span> <span style="color: #339933;">==</span>  <span style="color: #0000ff;">'4'</span> <span style="color: #339933;">||</span>
   <span style="color: #000088;">$pid</span> <span style="color: #339933;">==</span>  <span style="color: #0000ff;">'5'</span> <span style="color: #339933;">||</span>
  <span style="color: #339933;">.....</span>
<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$pid</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'0'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">Bene, proviamo a rifattorizzare un pò questo codice e renderlo in po più flessibile:</span></p>
<ol>
<li>Creiamo un array di &#8216;pagine&#8217;

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$authirizedPages</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'0'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'11'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'2'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'3'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'4'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'5'</span><span style="color: #339933;">,.......</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$pid</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'0'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$HTTP_GET_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'pid'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$authirizedPage</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$pid</span> <span style="color: #339933;">=</span><span style="color: #000088;">$HTTP_GET_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'pid'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>A questo punto il codice è già molto più flessibile rispetto a prima, basta modificare l&#8217;array di pagine autorizzate.</li>
<li>Il passo successivo è rendere indipendente il codice dalla base dati

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$authirizedPages</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_array</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'SELECT id FROM pages'</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$pid</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'0'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$HTTP_GET_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'pid'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$authirizedPage</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$pid</span> <span style="color: #339933;">=</span><span style="color: #000088;">$HTTP_GET_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'pid'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li>
Ora possiamo anche eliminare una variabile:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$pid</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'0'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$HTTP_GET_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'pid'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #990000;">mysql_fetch_array</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'SELECT id FROM pages'</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$pid</span> <span style="color: #339933;">=</span><span style="color: #000088;">$HTTP_GET_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'pid'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>A questo punto potremmo anche fermarci, il codice è molto più compatto e flessibile rispetto a prima e l&#8217;aggiunta di una pagina comporta semplicemente l&#8217;aggiunta di un record sul database e nessuna modifica al codice. Questa è e deve essere una buona norma! Codice indipendente e non ripetuto!</li>
</ol>
<p>Qualunque suggerimento ovviamente è ben accetto, solo in questo modo è possibile migliorarsi.</p>
<p>Ciao<br />
P</p>
]]></content:encoded>
			<wfw:commentRss>http://cookedapple.net/2010/05/29/dry-up-your-code-e-anti-if-please/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePhp, MacOs Snow Leopard, Apache e malditesta</title>
		<link>http://cookedapple.net/2010/05/29/cakephp-macos-snow-leopard-apache-e-malditesta/</link>
		<comments>http://cookedapple.net/2010/05/29/cakephp-macos-snow-leopard-apache-e-malditesta/#comments</comments>
		<pubDate>Sat, 29 May 2010 08:42:59 +0000</pubDate>
		<dc:creator>Piero Bozzolo</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[403 forbidden]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[apache.conf]]></category>
		<category><![CDATA[apache2]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[RewriteRule]]></category>

		<guid isPermaLink="false">http://cookedapple.net/?p=276</guid>
		<description><![CDATA[CakePhp, un mac e Snow Leopard mi hanno causato dei bei malditesta oggi. Il problema principale è che la catena di RewriteRule negli .htaccess non funzionava correttamente per via del fatto che mettevo la root di cakephp sotto la cartella Sites del mio utente, e nonostante abbia modificato /etc/apache2/httpd.conf e il file /etc/apache2/users/&#60;my_user&#62;.conf aggiungendo &#8216;AllowOverride All&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>CakePhp, un mac e Snow Leopard mi hanno causato dei bei malditesta oggi.</p>
<p>Il problema principale è che la catena di RewriteRule negli .htaccess non funzionava correttamente per via del fatto che mettevo la root di cakephp sotto la cartella Sites del mio utente, e nonostante abbia modificato /etc/apache2/httpd.conf e il file /etc/apache2/users/&lt;my_user&gt;.conf aggiungendo &#8216;AllowOverride All&#8217; i file statici nella cartella webroot (come le immagini e i css) non mi venivano serviti.</p>
<p>La mia soluzione con virtual host<br />
1) ho modificato  /etc/apache2/users/&lt;my_user&gt;.conf aggiungendo un virtual host con document root uguale alla root di Cake e impostando &#8216;AllowOverride All&#8217; sulla document root in questo modo:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;">&lt;<span style="color: #000000; font-weight:bold;">Directory</span> <span style="color: #7f007f;">&quot;/Users/&lt;my_user&gt;/Sites/&quot;</span>&gt;
    <span style="color: #00007f;">Options</span> <span style="color: #0000ff;">Indexes</span> MultiViews <span style="color: #0000ff;">FollowSymLinks</span>
    <span style="color: #00007f;">AllowOverride</span> <span style="color: #00007f;">All</span>
    <span style="color: #00007f;">Order</span> <span style="color: #00007f;">allow</span>,<span style="color: #00007f;">deny</span>
    <span style="color: #00007f;">Allow</span> <span style="color: #00007f;">from</span> <span style="color: #00007f;">all</span>
&lt;/<span style="color: #000000; font-weight:bold;">Directory</span>&gt;
&nbsp;
&lt;<span style="color: #000000; font-weight:bold;">VirtualHost</span> *&gt;
    <span style="color: #00007f;">DocumentRoot</span> /Users/&lt;my_user&gt;/Sites/MyNewSite
    <span style="color: #00007f;">ServerName</span> mynewsite.dev
    <span style="color: #00007f;">ServerAlias</span> www.mynewsite.dev
&lt;/<span style="color: #000000; font-weight:bold;">VirtualHost</span>&gt;
&nbsp;
&lt;<span style="color: #000000; font-weight:bold;">Directory</span> <span style="color: #7f007f;">&quot;/Users/piero/&lt;my_user&gt;/MyNewSite&quot;</span>&gt;
    <span style="color: #00007f;">Options</span> <span style="color: #0000ff;">Indexes</span> MultiViews <span style="color: #0000ff;">FollowSymLinks</span>
    <span style="color: #00007f;">AllowOverride</span> <span style="color: #00007f;">All</span>
    <span style="color: #00007f;">Order</span> <span style="color: #00007f;">allow</span>,<span style="color: #00007f;">deny</span>
    <span style="color: #00007f;">Allow</span> <span style="color: #00007f;">from</span> <span style="color: #00007f;">all</span>
&lt;/<span style="color: #000000; font-weight:bold;">Directory</span>&gt;</pre></div></div>

<p>2) Ho inserito una entry manuale nel file /etc/hosts</p>
<pre>
127.0.0.1	mynewsite.dev
</pre>
<p>Ora funziona tutto correttamente compresi i vari RuleRewrite dei tre .htaccess di cakephp</p>
<p>Ciao<br />
P.</p>
]]></content:encoded>
			<wfw:commentRss>http://cookedapple.net/2010/05/29/cakephp-macos-snow-leopard-apache-e-malditesta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
