<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>PHPBlog.it</title>
	
	<link>http://phpblog.it</link>
	<description>Solo un altro blog targato WordPress</description>
	<lastBuildDate>Mon, 30 Jan 2012 10:36:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/phpblog/posts" /><feedburner:info uri="phpblog/posts" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>PHP Goes Mobile</title>
		<link>http://feedproxy.google.com/~r/phpblog/posts/~3/kI6wn4KY_L0/</link>
		<comments>http://phpblog.it/2012/01/30/php-goes-mobile/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 10:34:15 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[eventi]]></category>
		<category><![CDATA[milano]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://phpblog.it/?p=514</guid>
		<description><![CDATA[Segnalo questo evento "PHP Goes Mobile - Mobile Architectures on Open Platforms" che si terrà a Milano venerdì 3 febbraio. L'evento è gratuito.]]></description>
			<content:encoded><![CDATA[<p>Segnalo questo evento &#8220;<strong><a title="PHP Goes Mobile" href="http://mobilephp.grusp.org/">PHP Goes Mobile &#8211; Mobile Architectures on Open Platforms</a></strong>&#8221; che si terrà a Milano <strong>venerdì 3 febbraio</strong>. L&#8217;evento è gratuito e prevede in mattinata la presentazione di case study di soluzioni implementate, descritte sia dal lato di business che tecnico, cercando di inquadrare le soluzioni mobile anche dal punto di vista progettuale (quanto costano, quante persone servono) e raccontando come si governano questi progetti. Durante il pomeriggio invece ci sarà un BarCamp, una non-conferenza collaborativa, dove chiunque può “salire in cattedra”, proporre un argomento e parlarne agli altri, naturalmente deve essere interessante e relativo al PHP ed al mondo mobile. Una buona occasione quindi per condividere esperienza accumulata o idee da sviluppare oltre che farsi conoscere.</p>
<p>Ci vediamo lì!</p>
<img src="http://feeds.feedburner.com/~r/phpblog/posts/~4/kI6wn4KY_L0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2012/01/30/php-goes-mobile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpblog.it/2012/01/30/php-goes-mobile/</feedburner:origLink></item>
		<item>
		<title>La codifica che non ti aspetti</title>
		<link>http://feedproxy.google.com/~r/phpblog/posts/~3/yn2TgHghLVU/</link>
		<comments>http://phpblog.it/2011/11/15/la-codifica-che-non-ti-aspetti/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 17:24:58 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[lesson learned]]></category>

		<guid isPermaLink="false">http://phpblog.it/?p=507</guid>
		<description><![CDATA[In passato, a dir la verità nemmeno troppo remoto, succedeva che i database delle applicazioni venivano creati con encoding SQL_ASCII e popolati con contenuti in formato ISO-8859-1. Tutto bene finchè non capita di dover migrare quei contenuti su un nuovo database...]]></description>
			<content:encoded><![CDATA[<p>In passato, a dir la verità nemmeno troppo remoto, succedeva che i database delle applicazioni venivano creati con encoding SQL_ASCII e popolati con contenuti in formato ISO-8859-1. Tutto bene finchè non capita di dover migrare quei contenuti su un nuovo database, magari cambiando anche RDBMS passando da PostgreSQL a MySQL. Ovviamente il nuovo database ha encoding UTF-8. Succede che alcune cose vengono magicamente perse per strada: sì parliamo di accenti e cose varie.</p>
<p>La soluzione più semplice che ho trovato è la seguente:</p>
<p>1. Eseguire il dump del database codificato con SQL_ASCII</p>
<pre style="padding-left: 30px;">pg_dump database &gt; database.sql</pre>
<p>2. Conversione a UTF-8</p>
<pre style="padding-left: 30px;">iconv -f ISO8859-1 -t UTF-8 database.sql &gt; database.utf8.sql</pre>
<p>3. Importazione dei dati sul nuovo database (creato con encoding UTF-8)</p>
<pre style="padding-left: 30px;">psql database_utf8 &lt; database.utf8.sql</pre>
<p>Da qui poi è tutta discesa dato che utilizzando gli strumenti più conosciuti esportare i dati verso MySQL non ha riservato sorprese.</p>
<img src="http://feeds.feedburner.com/~r/phpblog/posts/~4/yn2TgHghLVU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2011/11/15/la-codifica-che-non-ti-aspetti/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://phpblog.it/2011/11/15/la-codifica-che-non-ti-aspetti/</feedburner:origLink></item>
		<item>
		<title>Italian Agile Day 2011</title>
		<link>http://feedproxy.google.com/~r/phpblog/posts/~3/PnU5vPLacW8/</link>
		<comments>http://phpblog.it/2011/10/21/italian-agile-day-2011/#comments</comments>
		<pubDate>Fri, 21 Oct 2011 15:55:26 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[eventi]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agile day]]></category>

		<guid isPermaLink="false">http://phpblog.it/?p=500</guid>
		<description><![CDATA[Sabato 19 Novembre 2011 si terrà a Roma l’ottavo Italian Agile Day. E' una conferenza gratuita dedicata al Lean Development ed alle metodologie Agili per lo sviluppo e la gestione dei progetti software.]]></description>
			<content:encoded><![CDATA[<p><strong>Sabato 19 Novembre 2011</strong> si terrà a <strong>Roma</strong> l’ottavo <a title="Italian Agile Day" href="http://www.agileday.it" target="_blank"><strong>Italian Agile Day</strong></a>. Si tratta di una conferenza gratuita di un giorno dedicata al Lean Development ed alle metodologie Agili per lo sviluppo e la gestione dei progetti software rivolta agli sviluppatori, project leaders, IT managers, tester, architetti e coach che hanno esperienze da condividere o che iniziano solo ora ad interessarsi a queste tematiche. La giornata ha come obiettivo la conoscenza pratica, le esperienze sul campo e un attivo coinvolgimento di tutti i partecipanti. L’accesso è libero previa registrazione, i posti sono limitati. L’evento, per la quinta volta consecutiva, si auto-finanzierà.</p>
<p>L’evento è organizzato dall’Italian Agile Movement che festeggia 9 anni di attività e si terrà sabato 19 Novembre 2011 a Roma. Maggiori informazioni sulla sede <a href="http://www.agileday.it/front/2011/la-sede/">nella pagina ad essa dedicata</a>.</p>
<p>Dato che i 600 posti a disposizione stanno andando a ruba, vi consiglio di <a title="Registrazione Agile Day" href="http://www.agileday.it/front/registrazione/" target="_blank">registrarvi (e fare una donazione)</a> per assicurarvi di partecipare ad un evento di sicuro interesse!</p>
<img src="http://feeds.feedburner.com/~r/phpblog/posts/~4/PnU5vPLacW8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2011/10/21/italian-agile-day-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpblog.it/2011/10/21/italian-agile-day-2011/</feedburner:origLink></item>
		<item>
		<title>phpConference 2011 – Giorno 3</title>
		<link>http://feedproxy.google.com/~r/phpblog/posts/~3/5Wu-ZGmiGNw/</link>
		<comments>http://phpblog.it/2011/10/12/phpconference-2011-giorno-3/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 17:30:59 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[eventi]]></category>
		<category><![CDATA[phpconference]]></category>

		<guid isPermaLink="false">http://phpblog.it/?p=461</guid>
		<description><![CDATA[Breve resoconto della terza giornata di talk alla phpConference 2011 di Mainz.]]></description>
			<content:encoded><![CDATA[<p>Breve resoconto della terza giornata di talk alla <a href="http://phpconference.com/" target="_blank"><strong>phpConference 2011 di Mainz</strong></a></p>
<p><strong>Doctrine and NoSQL</strong> &#8211; Benjamin Eberlei<br />
Interessante presentazione dell&#8217;ODM di Doctrine2 per sfruttare quanto offerto nell&#8217;area NoSQL da CouchDB e da MongoDB. Il focus era sulla semplicità di mappare gli oggetti sui database non relazionali a differenza di quelli relazionali dovuta al fatto che vengono a mancare molti vincoli che fino ad oggi ci hanno complicato la vita non poco. Alcuni esempi molto chiari hanno supportato il tutto nel migliore dei modi. Ovviamente in alcuni casi questi due prodotti NoSQL non sono ancora raccomandabili: si pensi a contesti in cui le transazioni sono necessarie o casi in cui &#8216;lintegrità referenziale non può essere demandata all&#8217;applicazione.</p>
<p><strong>This Way or the other Way?</strong> &#8211; Stefan Priebsch<br />
Experiment Driven Development, ovvero prendere decisioni basate su dati empirici ricavati da test piuttosto che basandosi su ipotesi che spesso si rivelano errate. E&#8217; questo il succo del discorso del talk di Priebsch che presenta una semplice demo in cui i concetti di Factory e Dependency Injection sono alla base della soluzione adottata per poter sostituire intere classi in base a particolari dati che ci permettono di decidere a quali utenti od in quali situazione presentare un risultato (pensate ad una nuova pagina del profilo) piuttosto che un altro. Un semplice log può collezionare i risultati di una votazione (star rating 1-5 per esempio) da parte degli utenti per valutare con dati alla mano se la modifica introdotta ha riscosso successo oppure no.</p>
<p><strong>One Click Deployment with Jenkins</strong> &#8211; Thorsten Rinne<br />
Presentazione del flusso di lavoro e del processo di deploy di una delle più grandi realtà tedesche nel campo dello sviluppo di applicazioni PHP basato su Jenkins ma non solo.</p>
<p><strong>Doctrine 2: Next Generation ORM</strong> &#8211; Benjamin Eberlei<br />
Introduzione completa all&#8217;ORM di Doctrine2 analizzando quali sono i problemi degli ORM e del loro utilizzo e quali le soluzioni adottate da Doctrine2 (N+1 problem, non-object results).</p>
<p>Ringrazio <a title="HTML.it" href="http://www.html.it/" target="_blank">HTML.it</a> che con il suo contributo ha reso possibile la mia partecipazione all’evento più importante dell’anno in ambito PHP.</p>
<img src="http://feeds.feedburner.com/~r/phpblog/posts/~4/5Wu-ZGmiGNw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2011/10/12/phpconference-2011-giorno-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpblog.it/2011/10/12/phpconference-2011-giorno-3/</feedburner:origLink></item>
		<item>
		<title>phpConference 2011 – Giorno 2</title>
		<link>http://feedproxy.google.com/~r/phpblog/posts/~3/Juqh4TYFPKo/</link>
		<comments>http://phpblog.it/2011/10/12/phpconference-2011-giorno-2/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 13:16:29 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[eventi]]></category>
		<category><![CDATA[phpconference]]></category>

		<guid isPermaLink="false">http://phpblog.it/?p=459</guid>
		<description><![CDATA[Breve resoconto della seconda giornata di talk alla phpConference 2011 di Mainz.]]></description>
			<content:encoded><![CDATA[<p>Breve resoconto della seconda giornata di talk alla <a href="http://phpconference.com/" target="_blank"><strong>phpConference 2011 di Mainz</strong></a>.</p>
<p><strong>Large-Scale Data Processing with Hadoop and PHP</strong> &#8211; David Zuelke<br />
Processare enormi quantità di dati non è mai stato così facile: Hadoop e Map/Reduce in nostro soccorso! La maggior parte degli sviluppatori difficilmente si troverà di fronte a problemi del genere: avere svariate centinaia di GB di log o simili da cui estrapolare alcuni dati non capita di sicuro tutti i giorni. Ma per quelli che invece il problema l&#8217;hanno incontrato questo talk ha presentato una soluzione percorribile, raccomandata ed adottata da molti grandi player del settore.</p>
<p><strong>Profiling PHP Applications</strong> &#8211; Derick Rethans<br />
Dall&#8217;autore di Xdebug arriva un talk sul profiling delle applicazioni PHP con un monito iniziale verso tutte le microttimizzazioni che si possono trovare in rete quando si cercano informazioni riguardo al profiling: print vs echo, &#8220;&#8221; vs &#8221; e così via. Tutte cose che non apportano benefici significativi alle performance delle nostre applicazioni. Per poter migliorare un&#8217;applicazione però è necessario capirne il funzionamento (potrebbe essere stata sviluppata da altri) ed individuare quelle porzioni di codice che più di altre consumano tempo e risorse. Come? Attraverso alcuni strumenti come Xdebug, XHprof, Inclued, KCacheGrind&#8230;</p>
<p><strong>How the Web Evolves with Hypermedia</strong> &#8211; David Zuelke<br />
Di gran lunga il miglior intervento di tutta la conferenza ed i feedback su join.in lo testimoniano. Keynote sull&#8217;evoluzione del web grazie all&#8217;utilizzo dell&#8217;hypermedia: REST, HATEOAS e Uniform interface al centro dell&#8217;argomentazione. Assolutamente da vedere, attendiamo il video.</p>
<p><strong>Designing HTTP Interfaces and RESTful Web Services</strong> &#8211; David Zuelke<br />
Si fa presto a dire di avere un&#8217;api REST, molti lo fanno senza nemmeno sapere effettivamente quali siano i requisiti indispensabili per poter dire che un&#8217;api è RESTful o meno. Regole e best practice da ricordare e rispettare durante lo sviluppo per partire con il piede giusto.</p>
<p><strong>Symfony2 by Code</strong> &#8211; Lukas Smith<br />
Effettivamente solo codice senza slide. Più che altro un workshop condensato in session attraverso il quale Lukas ha introdotto i concetti principali alla base di Symfony2 seguendo quello che è il flusso dell&#8217;applicazione dall&#8217;arrivo della richiesta al front controller al rendering della pagina. Alcuni accenni a bundle utili che possono risparmiare un sacco di codice per affrontare problemi comuni.</p>
<p><strong>Scalable high-performance Architectures</strong> &#8211; Stefan Priebsch<br />
Presentazione diversa dal solito in cui si parla di scalabilità di architetture ad alte prestazioni nel campo della ristorazione: caso specifico un fast food. Singolare quanto i processi ed i possibili colli di bottiglia possano essere mappati su una tipica infrastruttura IT a cui siamo tanto abituati. Diversi approcci per portare alla luce pro e contro di soluzioni diverse.</p>
<p>Ringrazio <a title="HTML.it" href="http://www.html.it/" target="_blank">HTML.it</a> che con il suo contributo ha reso possibile la mia partecipazione all’evento più importante dell’anno in ambito PHP.</p>
<img src="http://feeds.feedburner.com/~r/phpblog/posts/~4/Juqh4TYFPKo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2011/10/12/phpconference-2011-giorno-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpblog.it/2011/10/12/phpconference-2011-giorno-2/</feedburner:origLink></item>
		<item>
		<title>phpConference 2011 – Giorno 1</title>
		<link>http://feedproxy.google.com/~r/phpblog/posts/~3/xuja7lUHMEU/</link>
		<comments>http://phpblog.it/2011/10/10/phpconference-2011-giorno-1/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 19:46:55 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[eventi]]></category>
		<category><![CDATA[phpconference]]></category>

		<guid isPermaLink="false">http://phpblog.it/?p=448</guid>
		<description><![CDATA[Breve resoconto della prima giornata di talk alla phpConference 2011 di Mainz. Da oggi solo session da 60 minuti.]]></description>
			<content:encoded><![CDATA[<p>Breve resoconto della prima giornata di talk alla <a href="http://phpconference.com" target="_blank"><strong>phpConference 2011 di Mainz</strong></a>.</p>
<p><strong>Kanban Pizza Game &#8211; Ralf Kruse</strong><br />
Talk introduttivo all&#8217;utilizzo di Kanban attraverso un gioco con i presenti per estrarre la teoria direttamente dalla pratica.</p>
<p>A due gruppi di 5 persone è stato chiesto di creare delle fette di pizza (con carta, post-it, pennarelli e forbici) nel minore tempo possibile, con il minor scarto possibile e con strumenti limitati (solo 2 forbici per gruppo, un solo pennarello&#8230;per spingere il gruppo verso la creazione di un processo piuttosto che farli lavorare separatamente).</p>
<p>Dopo una prima manche sono stati tracciati i risultati ed è stato chiesto ai gruppi di rispettare la richiesta di riduzione al minimo dello scarto introducendo dei limiti sui &#8220;pezzi&#8221; che ogni stazione del processo poteva elaborare contemporaneamente. E&#8217; stata data la possibilità di ottimizzare il processo in base alle idee dei partecipanti per aumentare la produttività del gruppo.</p>
<p>Seconda manche con risultati nettamente migliori rispetto alla prima dati dalla migliore organizzazione raggiunta e dalla possibilità di ciascuno di focalizzare il proprio lavoro sul compito assegnato.<br />
Terza manche a cui è stata aggiunta una particolare richiesta preparare la rucola per farcire la pizza dopo la cottura. I risultati sono ancora migliorati nonostante la nuova richiesta. Segno di raffinamento ulteriore del processo.</p>
<p>E&#8217; davvero giunto il momento di testare l&#8217;utilizzo del Kanban.<br />
Date un&#8217;occhiata a questo pdf molto esauriente <a href="http://www.crisp.se/kanban/kanban-example.pdf">Kanban kick-start example</a></p>
<p><strong>10 Years of PHPUnit: What works, what doesn&#8217;t &#8211; Sebastian Bergmann</strong><br />
Panoramica dalla nascita dei primi strumenti di QA per PHP allo stato dell&#8217;arte attuale tracciando l&#8217;evoluzione degli stessi analizzando le cause di alcuni cambiamenti (vedi passaggio da Hudson a Jenkins). Ne è uscito che gli attuali strumenti sono nati da sviluppatori tedeschi (salvo PHP_CodeSniffer).</p>
<p>Infine presentate alcune novità riguardanti PHPUnit 3.6 che vedrà comparire cose come:</p>
<p>- notation per small, medium, large test<br />
- notation per dipendenze (versione di PHP, versione di PHPUnit per esempio)<br />
- notation per dipendenze</p>
<p><strong>Geolocation and Maps with PHP &#8211; Derick Rethans</strong><br />
Web, PHP e mappe: non c&#8217;è solo Google! Rethans presenta alcune alternative per rispondere a diverse necessità che tirano in ballo l&#8217;utilizzo di mappe e di servizi di geolocalizzazione. Ampio spazio dedicato al progetto OpenStreetMap che tra i punti di forza, oltre ad offrire una quantità davvero sbalorditiva di dati, ha quello di essere aggiornato dagli utenti che avranno sempre e comunque l&#8217;accesso ai dati che offrono.</p>
<p><strong>PHP Testing Tools &#8211; Sebastian Bergmann</strong><br />
Altra panoramica su strumenti dedicati al testing diversi da PHPUnit. Tra soluzioni poco comode o solo parzialmente documentate risalta sicuramente Behat per il behavior driven development che offre un nuovo modo di presentare il testing rendendolo accessibile (il suo output) anche ai non tecnici.</p>
<p>Tre suggerimenti utili per quanto riguarda gli strumenti di profiling/benchmarking sono:<br />
- gprof2dot.py che offre un migliore output per grafico rispetto a KCacheGrind (basandosi sul log di Xdebug)<br />
- XHProf WebUI per comparare due sessioni di lavoro con la stessa codebase e verificare cambiamenti di performance rispetto ad attività di fine tuning<br />
- Pylot per benchmarking con richieste parallele (ab è sequenziale)</p>
<p>Ringrazio <a title="HTML.it" href="http://www.html.it/" target="_blank">HTML.it</a> che con il suo contributo ha reso possibile la mia partecipazione all’evento più importante dell’anno in ambito PHP.</p>
<img src="http://feeds.feedburner.com/~r/phpblog/posts/~4/xuja7lUHMEU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2011/10/10/phpconference-2011-giorno-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpblog.it/2011/10/10/phpconference-2011-giorno-1/</feedburner:origLink></item>
		<item>
		<title>phpConference 2011 – Workshop</title>
		<link>http://feedproxy.google.com/~r/phpblog/posts/~3/a0k5uGVapiw/</link>
		<comments>http://phpblog.it/2011/10/09/phpconference-2011-workshop/#comments</comments>
		<pubDate>Sun, 09 Oct 2011 19:30:27 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[eventi]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[phpconference]]></category>

		<guid isPermaLink="false">http://phpblog.it/?p=444</guid>
		<description><![CDATA[Resoconto della prima giornata della phpConference 2011 a Mainz dedicata non a sessioni tradizionali ma a workshop.]]></description>
			<content:encoded><![CDATA[<p>Prima giornata della <a title="phpConference 2011" href="http://phpconference.com" target="_blank"><strong>phpConference 2011 a Mainz</strong></a> dedicata non a sessioni tradizionali ma a workshop. Si torna quindi alla formula già utilizzata fino al 2009, infatti nell&#8217;edizione 2010 si erano tenuti il giovedì a fine conferenza con probabilmente qualche presenza in meno. Presenza che è praticamente per la totalità di lingua tedesca: 2 workshop erano solamente in tedesco ed i due che ho seguito io potevano cambiare in base all&#8217;audience (immagino la felicità degli speaker quando alzavo la mano come &#8220;non german speaker&#8221;).</p>
<p>Primo workshop <strong>CouchDB for PHP Developers</strong> di <a href="http://phpconference.com/2011/ipc2011/speaker/#3329" target="_blank"><strong>Jan Lehnardt</strong></a> dove partendo da un&#8217;introduzione di base si è passati a vedere come interrogare il db, spingendosi infine ad analizzare i vantaggi offerti dalla replica messa a disposizione da CouchDB. Strumento sicuramente molto interessante che può sicuramente dare il massimo in situazioni in cui i dati possono essere distribuiti e sincronizzati tra di loro quando in presenza di connessione.</p>
<p>Secondo workshop <strong>HTML5 for Developers</strong> di <strong><a href="http://phpconference.com/2011/ipc2011/speaker/#898" target="_blank">Thorsten Rinne</a></strong> che ha fatto una carrellata molto esaustiva di quelle che sono le novità introdotte da HTML5 (particolare attenzione per WebForm, Web Storage e Websockets) ricorrendo a molte demo su diversi browser per testimoniare lo stato di avanzamento degli stessi nel supportare il nuovo standard. Attualmente Chrome è il browser più avanti rispetto agli altri. Anche qui sono usciti spunti molto interessanti da iniziare magari a proporre in parallelo alle soluzioni attuali: tag video e canvas su tutti.</p>
<img src="http://feeds.feedburner.com/~r/phpblog/posts/~4/a0k5uGVapiw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2011/10/09/phpconference-2011-workshop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpblog.it/2011/10/09/phpconference-2011-workshop/</feedburner:origLink></item>
		<item>
		<title>Testando DreamHost</title>
		<link>http://feedproxy.google.com/~r/phpblog/posts/~3/2CCTh-28h0U/</link>
		<comments>http://phpblog.it/2011/09/27/testando-dreamhost/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 17:30:16 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[phpblog]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[promo code]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://phpblog.it/?p=436</guid>
		<description><![CDATA[Negli ultimi tempi ho valutato e paragonato un po' di servizi di hosting su cui poter fare esperimenti e, perchè no, pubblicare qualche piccola applicazione sviluppata con Symfony2. Alla fine della fiera ho deciso di aderire alle due settimane di prova offerte da DreamHost per il suo servizio di shared hosting.]]></description>
			<content:encoded><![CDATA[<p>Negli ultimi tempi ho valutato e paragonato un po&#8217; di servizi di hosting su cui poter fare esperimenti e, perchè no, pubblicare qualche piccola applicazione sviluppata con <a title="Symfony2" href="http://symfony.com/" target="_blank">Symfony2</a>. Alla fine della fiera ho deciso di aderire alle due settimane di prova offerte da <a title="DreamHost" href="http://www.dreamhost.com/r.cgi?482870" target="_blank">DreamHost</a> per il suo servizio di <a title="DreamHost shared hosting" href="http://dreamhost.com/web-hosting/" target="_blank">shared hosting</a>. A parte essere <strong>illimitato sotto vari aspetti</strong> (banda, domini, database, utenti&#8230;) quello che mi ha spinto verso <a title="DreamHost" href="http://www.dreamhost.com/r.cgi?482870" target="_blank">DreamHost</a> è la presenza dell&#8217;accesso ad <strong>una shell completa</strong> che è molto utile per chi lavora con Symfony2. Inoltre oltre ad SVN è già presente <strong>Git</strong> che vi permetterà di recuperare le vostre applicazioni direttamente da GitHub.</p>
<p>Se vi interessa il servizio ho generato il promo code <strong>PHPBLOG50</strong> che potrete utilizzare per registrarvi risparmiando 50$ sulla registrazione annuale o 60$ su quella biennale.</p>
<img src="http://feeds.feedburner.com/~r/phpblog/posts/~4/2CCTh-28h0U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2011/09/27/testando-dreamhost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://phpblog.it/2011/09/27/testando-dreamhost/</feedburner:origLink></item>
		<item>
		<title>Gestione delle sessioni su sistemi bilanciati</title>
		<link>http://feedproxy.google.com/~r/phpblog/posts/~3/p6vNlDpHI2A/</link>
		<comments>http://phpblog.it/2011/07/08/gestione-delle-sessioni-su-sistemi-bilanciati/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 08:25:14 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[infrastruttura]]></category>
		<category><![CDATA[balancer]]></category>
		<category><![CDATA[memcached]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[sessioni]]></category>

		<guid isPermaLink="false">http://phpblog.it/?p=422</guid>
		<description><![CDATA[Una delle prime criticità che si incontrano quando ci si trova nella situazione di sviluppare/portare un&#8217;applicazione su un sistema bilanciato è rappresentato dalla gestione delle sessioni degli utenti. Di seguito parlerò di quelle che sono le soluzioni percorribili per gestire le sessioni su sistemi bilanciati con PHP. Le situazioni che portano a dover affrontare questo [...]]]></description>
			<content:encoded><![CDATA[<p>Una delle prime criticità che si incontrano quando ci si trova nella situazione di sviluppare/portare un&#8217;applicazione su un sistema bilanciato è rappresentato dalla gestione delle sessioni degli utenti. Di seguito parlerò di quelle che sono le soluzioni percorribili per gestire le sessioni su sistemi bilanciati con PHP.</p>
<p><span id="more-422"></span></p>
<p>Le situazioni che portano a dover affrontare questo problema sono essenzialmente due:</p>
<p>1) una certa applicazione inizia a generare più traffico di quello che l&#8217;infrastruttura attuale riesce a sostenere: è quindi necessario scalare orizzontalmente per distribuire le richieste e frazionare il rischio</p>
<p>2) stiamo lavorando ad un&#8217;applicazione che già a priori sappiamo genererà parecchio traffico da richiedere un sistema bilanciato anche per assicurarne la disponibilità</p>
<p>Nel primo caso l&#8217;applicazione andrà adattata, nel secondo sarà più semplice partire già seguendo la strada giusta.</p>
<p>Il problema da risolvere, per applicazioni e/o infrastrutture non progettate per lo scopo, è il seguente. In un sistema bilanciato richieste successive degli utenti vengono distribuite da un bilanciatore sui vari nodi componenti il cluster frontend (server web) dell&#8217;infrastruttura. Dato che <strong>PHP di default salva i dati della sessione sul disco della singola macchina che ha elaborato la richiesta</strong> (singolo server web) è facilmente intuibile che alla richiesta successiva, che presumibilmente verrà indirizzata ad un altro server web, i dati della sessione non saranno più disponibili per l&#8217;applicazione essendo così la causa potenziale di non pochi problemi.</p>
<p>Per ovviare al problema le strade percorribili sono diverse.</p>
<p><strong>NFS</strong>: soluzione sconsigliata, citata solo per completezza e ragioni storiche. Ricorrendo all&#8217;utilizzo in un network file system possiamo fare in modo che tutti i server web utilizzino questo spazio condiviso per leggere e scrivere in un unico punti i dati delle sessioni degli utenti. In questo modo senza alcuna modifica all&#8217;applicazione abbiamo centralizzato i dati permettendo a tutti i web server di vedere le sessioni create dagli altri. Purtroppo però i contro sono rappresentati da performance poco raccomandabili e problemi di data corruption che si possono incontrare specialmente quando le scritture iniziano ad essere elevate.</p>
<p><strong>COOKIE</strong>: ricorrere all&#8217;utilizzo di cookie criptati permette di far viaggiare i dati della sessione assieme alle richieste effettuate dall&#8217;utente. I dati sono salvati lato client, quindi non c&#8217;è bisogno di uno storage centralizzato. E&#8217; una soluzione facile da realizzare e che può incontrare solo problemi legati alla dimensione dei dati da memorizzare. Il prezzo da pagare è quello di un leggero incremento della banda utilizzata per lo scambio di queste informazioni aggiuntive.</p>
<p><strong>DATABASE</strong>: utilizzare un database permette di centralizzare le sessioni e renderle facilmente disponibili ai vari webserver oltre che facilitarne la persistenza. In contesti con traffico non eccessivo può essere una buona soluzione per l&#8217;utilizzo di uno strumento &#8220;semplice&#8221; come un database. All&#8217;aumentare del traffico però il rapporto tra letture e scritture inizia a creare qualche problema dato che non è possibile ottimizzare il servizio per  l&#8217;una o l&#8217;altra operazione, inoltre senza il passaggio ad un sistema master-slave o master-master con N slave (creando ulteriore complessità nell&#8217;architettura generale) il database rappresenta il single point of failure per questo tipo di approccio. Inoltre può trasformarsi in un collo di bottiglia non indifferente.</p>
<p><strong>MEMCACHED</strong>: utilizzare la memoria per leggere e scrivere dati permette di avere prestazioni che filesystem e database relazionali non possono nemmeno sognare. Memcached essendo poi clusterizzabile rappresenta una soluzione molto interessante specie in quei casi dove l&#8217;eventuale perdita dei dati (corruzione memoria) non è un evento tragico. Infatti avendo a che fare con la memoria i problemi possono derivare dalla corruzione della stessa, che porta alla perdita di tutti i dati presenti in quel momento perchè non vi è un sistema di persistenza. Inoltre la memoria è ciclica percui se la quantità di memoria allocata a Memcached non è correttamente proporzionata i dati più &#8220;vecchi&#8221; vengono eliminati per lasciare spazio a quelli &#8220;nuovi&#8221;.</p>
<p><strong>REDIS</strong> (CLUSTER): come visto per Memcached sappiamo che la memoria rappresenta uno strumento ottimale in termini di performance. Redis permette inoltre di evitare i problemi di persistenza perchè ad intervalli regolari salva i dati anche su disco. Dalla versione 2.4 (al momento in sviluppo) sarà disponibile anche la versione cluster che quindi permetterà di allestire infrastrutture al pari di quelle realizzate con Memcached.</p>
<p><strong>STICKY SU BALANCER HW</strong> (LAYER 7): una soluzione che non richiede modifiche all&#8217;applicazione ed all&#8217;infrastuttura è a disposizione nel caso in cui si utilizzi un balancer hardware che gestisce le sessioni in modo persistente. In questo modo l&#8217;utente verrebbe indirizzato durante la sua sessione di navigazione sempre verso lo stesso webserver. Il vantaggio è che l&#8217;applicazione non andrebbe modificata, le gestione delle sessioni è tutta a monte demandata al bilanciatore di carico. Il rovescio della medaglia? Il costo: balancer di questo tipo comportano spese ben superiori rispetto a balancer non persistenti che si possono realizzare anche con un semplice server predisposto per smistare il traffico.</p>
<p>Domande? Curiosità? I commenti sono aperti.</p>
<img src="http://feeds.feedburner.com/~r/phpblog/posts/~4/p6vNlDpHI2A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2011/07/08/gestione-delle-sessioni-su-sistemi-bilanciati/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://phpblog.it/2011/07/08/gestione-delle-sessioni-su-sistemi-bilanciati/</feedburner:origLink></item>
		<item>
		<title>Symfony e grandi numeri: si…può…fare!</title>
		<link>http://feedproxy.google.com/~r/phpblog/posts/~3/lKeYwzzQPLg/</link>
		<comments>http://phpblog.it/2011/05/16/symfony-e-grandi-numeri-si-puo-fare/#comments</comments>
		<pubDate>Mon, 16 May 2011 07:09:25 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[In evidenza]]></category>
		<category><![CDATA[phpday]]></category>
		<category><![CDATA[slide]]></category>
		<category><![CDATA[talk]]></category>

		<guid isPermaLink="false">http://phpblog.it/?p=406</guid>
		<description><![CDATA[Si è appena concluso il phpDay 2011 dove per la prima volta ho avuto la possibilità di partecipare come speaker oltre che far parte dello staff organizzativo. Il mio talk, intitolato "Symfony e grandi numeri: si...può...fare!", era basato sull'esperienza diretta che in azienda abbiamo accumulato negli ultimi anni sviluppando (per conto del cliente) il sito www.calciomercato.com.]]></description>
			<content:encoded><![CDATA[<p>Si è appena concluso il phpDay 2011 dove per la prima volta ho avuto la possibilità di <strong>partecipare come speaker</strong> oltre che far parte dello staff organizzativo. Il mio talk, intitolato &#8220;Symfony e grandi numeri: si&#8230;può&#8230;fare!&#8221;, era basato sull&#8217;esperienza diretta che in azienda abbiamo accumulato negli ultimi anni sviluppando (per conto del cliente) il sito <a title="Calciomercato.com" href="http://www.calciomercato.com" target="_blank">www.calciomercato.com</a>.</p>
<p>Di seguito l&#8217;abstract e le slide del talk:</p>
<p style="padding-left: 30px;">Le testimonianze dei grandi player di settore non mancano: Yahoo!,  Delicious, Dailymotion&#8230;tuttavia non sempre è possibile confrontarsi  con grandi sfide in termini di traffico, alta disponibilità e  scalabilità.</p>
<p style="padding-left: 30px;">La realizzazione di Calciomercato.com utilizzando symfony ci ha  permesso di toccare con mano le potenzialità offerte dal framework  potendo contare su numeri di una certa importanza: 3,3M visitatori unici  e oltre 36M pagine viste (agosto 2010). Load balancing, database in  replica, APC, memcached sono tutti strumenti indispensabili sia per il  funzionamento del sito oltre che per lo sviluppo di funzionalità  altrimenti non realizzabili.</p>
<p>&nbsp;</p>
<div style="width:595px" id="__ss_7962921"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/dlondero/symfony-e-grandi-numeri-si-pu-fare" title="Symfony e grandi numeri: si può fare!">Symfony e grandi numeri: si può fare!</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/7962921" width="595" height="497" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/dlondero">Daniel Londero</a> </div>
</p></div>
<img src="http://feeds.feedburner.com/~r/phpblog/posts/~4/lKeYwzzQPLg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2011/05/16/symfony-e-grandi-numeri-si-puo-fare/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://phpblog.it/2011/05/16/symfony-e-grandi-numeri-si-puo-fare/</feedburner:origLink></item>
	</channel>
</rss>

