<?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>Federico Feroldi's blog &#187; Programming</title>
	<atom:link href="http://www.pixzone.com/blog/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pixzone.com/blog</link>
	<description>by Federico Feroldi</description>
	<lastBuildDate>Sat, 13 Jun 2009 20:00:38 +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>Un concentrato di cervelli italiani</title>
		<link>http://www.pixzone.com/blog/348/un-concentrato-di-cervelli-italiani/</link>
		<comments>http://www.pixzone.com/blog/348/un-concentrato-di-cervelli-italiani/#comments</comments>
		<pubDate>Mon, 17 Dec 2007 09:15:51 +0000</pubDate>
		<dc:creator>Federico Feroldi</dc:creator>
				<category><![CDATA[Italiano]]></category>
		<category><![CDATA[Nimboo]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.pixzone.com/blog/348/un-concentrato-di-cervelli-italiani/</guid>
		<description><![CDATA[Diciamocelo, il panorama dei blog tecnici in Italia lasciava un po&#8217; a desiderare, nulla si avvicinava a siti come Ars Technica, Slashdot o Wired. Fino ad oggi. Da quel vulcano di Antonio Cangiano Ã¨ partito il progetto di creare un collettore di eccellenza per produrre articoli tecnici di altissima qualitÃ . Finalmente questo progetto Ã¨ giunto [...]]]></description>
			<content:encoded><![CDATA[<p>Diciamocelo, il panorama dei blog tecnici in Italia lasciava un po&#8217; a desiderare, nulla si avvicinava a siti come <a href="http://arstechnica.com/">Ars Technica</a>, <a href="http://www.slashdot.org/">Slashdot</a> o <a href="http://www.wired.com/">Wired</a>. Fino ad oggi.<br />
Da quel vulcano di <a href="http://antoniocangiano.com/">Antonio Cangiano</a> Ã¨ partito il progetto di creare un <a href="http://stacktrace.it/chi-siamo/">collettore di eccellenza</a> per produrre articoli tecnici di altissima qualitÃ .<br />
Finalmente questo progetto Ã¨ giunto alla luce, il suo nome Ã¨ <a href="http://stacktrace.it/">Stacktrace.it</a>, fateci un giro.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pixzone.com/blog/348/un-concentrato-di-cervelli-italiani/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hiring: Senior Frontend Developer for fast-paced Mobile Company at Mobango LTD</title>
		<link>http://www.pixzone.com/blog/344/hiring-senior-frontend-developer-for-fast-paced-mobile-company-at-mobango-ltd/</link>
		<comments>http://www.pixzone.com/blog/344/hiring-senior-frontend-developer-for-fast-paced-mobile-company-at-mobango-ltd/#comments</comments>
		<pubDate>Tue, 11 Dec 2007 11:31:46 +0000</pubDate>
		<dc:creator>Federico Feroldi</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.pixzone.com/blog/344/hiring-senior-frontend-developer-for-fast-paced-mobile-company-at-mobango-ltd/</guid>
		<description><![CDATA[Mobango Ltd., with offices in London Milan and Munich, offers a unique integrated online and mobile community service, enabling users to share and explore user generated mobile content. Mobango has reached 2 Million members and we are now in a stage of accelerated growth, funded by leading international venture capitalists If you like working with [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mobango.com">Mobango Ltd.</a>, with offices in London Milan and Munich, offers a unique integrated online and mobile community service, enabling users to share and explore user generated mobile content. Mobango has reached 2 Million members and we are now in a stage of accelerated growth, funded by leading international venture capitalists<br />
If you like working with the latest cutting edge internet and mobile languages and technology, being part of an ambitious and dynamic team, work in an international environment, do not miss this opportunity and send us your resume to <a href="mailto:jobs@mobango.com">jobs@mobango.com</a></p>
<p>We are currently undergoing rapid expansion and require a senior Frontend Developer to join our team.</p>
<p>Technical requirements:</p>
<p>- Deep knowledge of HTML/XHTML<br />
- Deep knowledge of CSS2/CSS3 and how they&#8217;re supported by browsers<br />
- Knowledge of Javascript<br />
- Exposure to Javascript frameworks (YUI, JQuery, Prototype)<br />
- Knowledge of Flash and ActionScript<br />
- Knowledge of mobile technologies (WML, XHTML-MP, CSS-MP) will be a big plus</p>
<p>The ideal candidate will be passionate about frontend development, enthusiastic about learning &#038; constant improvement and have a strong understanding of the Internet and emerging web technologies.</p>
<p>Working with our programming team, you will be developing &#038; modifying our online web and mobile site. You will need to familiarise yourself with the intricacies of our web and mobile site, along with being capable of implementing new web and mobile based interfaces.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pixzone.com/blog/344/hiring-senior-frontend-developer-for-fast-paced-mobile-company-at-mobango-ltd/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hiring: Junior PHP Developer for fast-paced Mobile Company at Mobango LTD</title>
		<link>http://www.pixzone.com/blog/343/hiring-junior-php-developer-for-fast-paced-mobile-company-at-mobango-ltd/</link>
		<comments>http://www.pixzone.com/blog/343/hiring-junior-php-developer-for-fast-paced-mobile-company-at-mobango-ltd/#comments</comments>
		<pubDate>Tue, 11 Dec 2007 11:28:24 +0000</pubDate>
		<dc:creator>Federico Feroldi</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Mobango]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.pixzone.com/blog/343/hiring-junior-php-developer-for-fast-paced-mobile-company-at-mobango-ltd/</guid>
		<description><![CDATA[Mobango Ltd., with offices in London Milan and Munich, offers a unique integrated online and mobile community service, enabling users to share and explore user generated mobile content. Mobango has reached 2 Million members and we are now in a stage of accelerated growth, funded by leading international venture capitalists If you like working with [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mobango.com">Mobango Ltd.</a>, with offices in London Milan and Munich, offers a unique integrated online and mobile community service, enabling users to share and explore user generated mobile content. Mobango has reached 2 Million members and we are now in a stage of accelerated growth, funded by leading international venture capitalists<br />
If you like working with the latest cutting edge internet and mobile languages and technology, being part of an ambitious and dynamic team, work in an international environment, do not miss this opportunity and send us your resume to <a href="mailto:jobs@mobango.com">jobs@mobango.com</a>.</p>
<p>We are currently undergoing rapid expansion and require a junior PHP Developer to join our team.</p>
<p>Technical requirements:</p>
<p>- PHP5 language (OO programming)<br />
- HTML knowledge<br />
- SQL knowledge<br />
- familiar with Subversion</p>
<p>The ideal candidate will be passionate about PHP development, enthusiastic about learning &#038; constant improvement and have a strong understanding of the Internet and emerging technologies.</p>
<p>Working with our programming team, you will be developing &#038; modifying our online software system. You will need to familiarise yourself with the intricacies of our custom-developed software, along with being capable of implementing new web and mobile based applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pixzone.com/blog/343/hiring-junior-php-developer-for-fast-paced-mobile-company-at-mobango-ltd/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Hiring: Senior PHP Developer for fast-paced Mobile Company at Mobango LTD</title>
		<link>http://www.pixzone.com/blog/342/hiring-senior-php-developer-for-fast-paced-mobile-company-at-mobango-ltd/</link>
		<comments>http://www.pixzone.com/blog/342/hiring-senior-php-developer-for-fast-paced-mobile-company-at-mobango-ltd/#comments</comments>
		<pubDate>Tue, 11 Dec 2007 11:25:29 +0000</pubDate>
		<dc:creator>Federico Feroldi</dc:creator>
				<category><![CDATA[Mobango]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.pixzone.com/blog/342/hiring-senior-php-developer-for-fast-paced-mobile-company-at-mobango-ltd/</guid>
		<description><![CDATA[Mobango Ltd., with offices in London Milan and Munich, offers a unique integrated online and mobile community service, enabling users to share and explore user generated mobile content. Mobango has reached 2 Million members. We are in a stage of accelerated growth, funded by a leading international venture capitalist. If you like working with the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mobango.com">Mobango Ltd.</a>, with offices in London Milan and Munich, offers a unique integrated online and mobile community service, enabling users to share and explore user generated mobile content. Mobango has reached 2 Million members. We are in a stage of accelerated growth, funded by a leading international venture capitalist. If you like working with the latest cutting edge internet and mobile languages and technology, being part of an ambitious and dynamic team, work in an international environment, do not miss this opportunity and send us your resume to <a href="mailto:jobs@mobango.com">jobs@mobango.com</a></p>
<p>We are currently undergoing rapid expansion and require a senior PHP Developer to join our team.</p>
<p>Technical requirements:</p>
<p>- PHP5 language (OO programming, SPL)<br />
- SQL knowledge<br />
- AJAX technologies knowledge (Javascript, XML, JSON)<br />
- familiar with TDD (PHPUnit)<br />
- familiar with PECL/PEAR packages<br />
- familiar with Subversion<br />
- exposure to MVC frameworks (Symfony, CakePHP, Zend) will be a big plus</p>
<p>The ideal candidate will be passionate about PHP development, enthusiastic about learning &#038; constant improvement and have a strong understanding of the Internet and emerging technologies.</p>
<p>Working with our programming team, you will be developing &#038; modifying our online software system. You will need to familiarise yourself with the intricacies of our custom-developed software, along with being capable of implementing new web and mobile based applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pixzone.com/blog/342/hiring-senior-php-developer-for-fast-paced-mobile-company-at-mobango-ltd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web 2.0 e la scena demo italiana degli anni 90</title>
		<link>http://www.pixzone.com/blog/335/il-web-20-e-la-scena-demo-italiana-degli-anni-90/</link>
		<comments>http://www.pixzone.com/blog/335/il-web-20-e-la-scena-demo-italiana-degli-anni-90/#comments</comments>
		<pubDate>Tue, 27 Nov 2007 20:44:06 +0000</pubDate>
		<dc:creator>Federico Feroldi</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Italiano]]></category>
		<category><![CDATA[Life facts]]></category>
		<category><![CDATA[Netwo]]></category>
		<category><![CDATA[Nimboo]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[pixzone]]></category>

		<guid isPermaLink="false">http://www.pixzone.com/blog/335/il-web-20-e-la-scena-demo-italiana-degli-anni-90/</guid>
		<description><![CDATA[Sul web 2.0 si Ã¨ detto di tutto e di piÃ¹, cose piÃ¹ o meno vere, opinioni, oggettivitÃ . In mezzo a tutto questo qualcosa Ã¨ evidente: il web 2.0 Ã¨ fatto di persone. Persone che fruiscono contenuti, persone che creano contenuti, persone che comunicano con altre persone e creano reti di interessi, condividono esperienze. E [...]]]></description>
			<content:encoded><![CDATA[<p>Sul web 2.0 si Ã¨ detto di tutto e di piÃ¹, cose piÃ¹ o meno vere, opinioni, oggettivitÃ . In mezzo a tutto questo qualcosa Ã¨ evidente: <strong>il web 2.0 Ã¨ fatto di persone</strong>.<br />
Persone che fruiscono contenuti, persone che creano contenuti, persone che comunicano con altre persone e <a href="http://nimboo.net/about/">creano reti di interessi</a>, condividono esperienze.<br />
E tutto ciÃ² accade anche a chi lavora in questo settore, a chi produce siti, contenuti, a chi si incontra nei <a href="http://it.wikipedia.org/wiki/BarCamp">barcamp</a>, nelle conferenze, oppure a <a href="http://netwo.it/about/">chi porta l&#8217;innovazione nelle aziende</a>.</p>
<p>C&#8217;Ã¨ un certo fervore nell&#8217;aria, &#8220;<em>quelli bravi</em>&#8221; si accorgono sempre piÃ¹ che qualcosa sta per cambiare, che si puÃ² innovare e divertirsi invece di rimanere nella gabbia di una grande azienda.<br />
E grazie a questo potente mezzo che Ã¨ la rete, stanno nascendo <a href="http://nimboo.net/about/">nuovi modi di lavorare assieme</a>, nuovi modi di collaborare, <a href="http://kudosbank.com/">nuove forme di scambio</a>.</p>
<p>L&#8217;aspetto che piÃ¹ mi piace di questo periodo di fervore Ã¨ la comunitÃ . In Italia si sta creando un network di elite interdisciplinare: <a href="http://www.therubymine.com/">programmatori</a>, esperti d&#8217;informazione, <a href="http://www.pandemia.info/">bloggers</a>, <a href="http://www.sketchin.ch/">designers</a>. Si comunica, ci si diverte, si lavora assieme e gli altri stanno a guardare, seguono.</p>
<p>Ed ecco il senso di questo post.<br />
L&#8217;ultima volta che mi sono sentito parte di qualcosa del genere Ã¨ stato negli anni &#8217;90, quando Internet era per pochi e si comunicava con <a href="http://it.wikipedia.org/wiki/FidoNet">Fidonet</a>, quando invece di Skype e degli instant messenger c&#8217;erano <a href="http://it.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> e la <a href="http://en.wikipedia.org/wiki/Netmail#Technical_structure">netmail</a>.</p>
<p>In quel periodo, principalmente in Europa, si diffuse il fenomeno della cosÃ¬ detta &#8220;<a href="http://it.wikipedia.org/wiki/Demoscene">scena demo</a>&#8220;, ovvero gruppi di appassionati di programmazione, grafica e musica che, sfruttando al massimo la loro creativitÃ  e le capacitÃ  dell&#8217;hardware di quei tempi, producevano software chiamati <a href="http://scene-it.untergrund.net/faq.php#1.01">demo</a> (in realtÃ  vere e proprie opere d&#8217;arte) che dimostravano le loro abilitÃ  e la loro bravura.</p>
<p>In Italia questo fenomeno fu seguito da qualche decina di giovani appassionati e con tanta voglia di dimostrare al mondo le proprie capacitÃ  e di competere con i <a href="http://www.assembly.org/">fratelli nordici</a>.<br />
A quel tempo comunicare non era facile come oggi, i cellulari erano una raritÃ  e collegarsi a Internet o Fidonet costava una cifra. CosÃ¬ ogni occasione era buona per incontrarsi di persona, scambiare idee e codice, iniziare collaborazioni o creare su due piedi qualcosa di nuovo.</p>
<p>Quello che ricordo con piÃ¹ nostalgia Ã¨ sicuramente l&#8217;unione che si era creata in questo gruppo di persone, si era tutti amici, indipendentemente dalla cittÃ  d&#8217;origine, quando ci si trovava (allo SMAU, a casa di qualcuno o semplicemente in giro) c&#8217;era sempre di che imparare e di che insegnare, non ci si annoiava mai e ci si divertiva sempre.</p>
<p>Ed Ã¨ proprio questo aspetto che mi fa sentire un po&#8217; come in una <em>nuova scena</em>, sperando che continui e prosperi e che non <a href="http://www.digitalwaters.net/flashback-bits/2005/12/20/la-scena-demo.html">muoia come la mitica scena demo degli anni &#8217;90</a>.</p>
<p>Per avere un idea di quello che Ã¨ stato, ho trovato questo clip su YouTube girato al <strong>The Trip 98</strong>, uno dei pochissimi party che si sono tenuti in Italia ed organizzato dal team di cui facevo parte (<a href="http://www.pouet.net/groups.php?which=609">DeathStar</a>). La mia bella facciona appare al 1&#8217;47&#8243;:</p>
<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/wHOijljFbAY&#038;rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/wHOijljFbAY&#038;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
<p><strong>Update</strong>: nei meandri del mio hard disk ho trovato il mio video report del Trip 1999 tenutosi al Palasport di Firenze dal 25 al 28 Marzo 1999:</p>
<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/ARDxFRe1lNk&#038;rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/ARDxFRe1lNk&#038;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pixzone.com/blog/335/il-web-20-e-la-scena-demo-italiana-degli-anni-90/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Android Challenge, ovunque tranne l&#8217;Italia</title>
		<link>http://www.pixzone.com/blog/332/google-android-challenge-ovunque-tranne-litalia/</link>
		<comments>http://www.pixzone.com/blog/332/google-android-challenge-ovunque-tranne-litalia/#comments</comments>
		<pubDate>Fri, 16 Nov 2007 21:11:09 +0000</pubDate>
		<dc:creator>Federico Feroldi</dc:creator>
				<category><![CDATA[Italiano]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.pixzone.com/blog/332/google-android-challenge-ovunque-tranne-litalia/</guid>
		<description><![CDATA[E poi uno si chiede come mai in Italia non si vedono molte startup nel mondo web nostrano. E certo, giÃ  Ã¨ difficile se non praticamente impossibile nel nostro paese trovare investitori disposti a rischiare capitale in questo settore. Se poi addirittura, quando questi capitali ci sono, pure lo stato si mette in mezzo con [...]]]></description>
			<content:encoded><![CDATA[<p>E poi uno si chiede come mai in Italia non si vedono molte startup nel mondo web nostrano. E certo, giÃ  Ã¨ difficile se non praticamente impossibile nel nostro paese trovare investitori disposti a rischiare capitale in questo settore. Se poi addirittura, quando questi capitali ci sono, pure lo stato si mette in mezzo con le sue leggi non-sense, allora diciamocelo, questo paese non andrÃ  molto avanti.</p>
<p>&Egrave; ormai di dominio pubblico la notizia che Google ha iniziato il suo assalto al mondo <em>mobile</em> attraverso il suo sistema operativo <a href="http://code.google.com/android/index.html">Android</a> basato su Linux. Inoltre, per creare ancora piÃ¹ eccitazione intorno alla sua nuova creazione, Google ha indetto una <a href="http://code.google.com/android/adc.html">competizione mondiale</a> con un monte premi di 10 milioni di dollari. Wow! Notiziona! Appena l&#8217;ho letto mi sono scaricato subito l&#8217;SDK aspettando il weekend per dargli un occhiata approfondita.</p>
<p>Purtroppo, leggo oggi sul blog di <a href="http://weblogs.java.net/blog/fabriziogiudici/archive/2007/11/google_android.html">Fabrizio Giudici</a> che <strong>l&#8217;Italia e il Quebec sono gli unici paesi al mondo esclusi da questa competizione a causa di leggi troppo restrittive</strong> inerenti la gestione dei concorsi a premio!!!</p>
<p>Quasi quasi scrivo all&#8217;<a href="mailto:indignatospeciale@mediaset.it">indignato speciale</a>! <img src='http://www.pixzone.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.pixzone.com/blog/332/google-android-challenge-ovunque-tranne-litalia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>8 regole per programmare con la testa</title>
		<link>http://www.pixzone.com/blog/308/8-regole-per-programmare-con-la-testa/</link>
		<comments>http://www.pixzone.com/blog/308/8-regole-per-programmare-con-la-testa/#comments</comments>
		<pubDate>Sat, 20 Oct 2007 20:29:11 +0000</pubDate>
		<dc:creator>Federico Feroldi</dc:creator>
				<category><![CDATA[Italiano]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.pixzone.com/blog/308/8-regole-per-programmare-con-la-testa/</guid>
		<description><![CDATA[8 regole per entrare nella zona mentale e programmare usando la testa.]]></description>
			<content:encoded><![CDATA[<p>Questo Ã¨ quello che un bravo programmatore fa istintivamente, secondo <a href="http://www.paulgraham.com/">Paul Graham</a>. Mi sono appena letto il suo ultimo articolo, o meglio <a href="http://www.paulgraham.com/head.html">la sua ultima perla di saggezza</a>. Senza ombra di dubbio Paul Ã¨ una delle persone con le <a href="http://www.paulgraham.com/articles.html">idee piÃ¹ innovative</a>, ed in un certo senso ribelli, nel campo dello sviluppo software e devo dire che c&#8217;Ã¨ sempre da imparare quando si legge uno dei suoi articoli.</p>
<p>In sostanza Paul non dice nulla di completamente nuovo. In realtÃ  porta alla luce qualcosa che ogni bravo programmatore sa giÃ  intuitivamente, ovvero che per risolvere un problema devi avere tutto il problema in testa.<br />
Il problema sarebbe il programma che deve fare quello che il programmatore vuole e la sua soluzione sarebbe la trascrizione del programma stesso in un linguaggio interpretabile dalla macchina.</p>
<p>Ma come si fa ad avere tutto un programma in testa? Come si fa a entrare &#8220;nella zona&#8221;?</p>
<p>Sono sempre stato convinto (ed altri colleghi e amici me lo confermano) che esista uno stato mentale (che alcuni chiamano <a href="http://en.wikipedia.org/wiki/Flow_(psychology)">la zona o il flusso</a>) in cui programmare diventa un atto puramente intuitivo, non si pensa al codice che si vuole scrivere come una serie di istruzioni ma si pensa a quello che si vuole ottenere e magicamente il codice fluisce dalla mente alla macchina attraverso le proprie mani e la tastiera.</p>
<p>Il problema sollevato da Paul Graham Ã¨ che per entrare in questo stato mentale e sfruttarlo al meglio sono necessarie una serie di condizioni:</p>
<ol>
<li>
<p><strong>Eliminare le distrazioni</strong></p>
<p>
La mente dev&#8217;essere focalizzata sul problema quindi ogni distrazione va eliminata. Spesso Ã¨ molto difficile isolarsi, soprattutto nei tipici luoghi di lavoro: sentire persone che parlano ad alta voce, telefonate (odio gli open space) o semplicemente essere interrotti con domande che ti costringono a distogliere l&#8217;attenzione da quello che stai facendo.<br />
In realtÃ  essere focalizzati sul problema non significa necessariamente starsene davanti al PC a programmare. Fortunatamente la nostra mente Ã¨ talmente sofisticata da riuscire a continuare a pensare a quell&#8217;algoritmo a cui stavamo pensando la mattina anche mentre ci mangiamo un panino al bar all&#8217;ora di pranzo.<br />
Il punto Ã¨ che vanno evitate quelle interruzioni che costringono a ragionare su qualcos&#8217;altro, creando cosÃ¬ un <a href="http://en.wikipedia.org/wiki/Context_switch">context switch</a> mentale che puÃ² richiedere ore per farci ritrovare la concentrazione persa.<br />
Infine, oltre alle distrazioni non programmate, Ã¨ bene anche evitare il piÃ¹ possibile le distrazioni programmate. Quale programmatore si mette a lavoro su un problema complesso quando sa che un&#8217;ora dopo deve andare in riunione? Meglio quindi fare le riunioni la mattina e rimanere concentrati per il resto della giornata.
</p>
</li>
<li>
<p><strong>Programmare ininterrottamente</strong></p>
<p>
Ovvero Ã¨ piÃ¹ produttiva una serie di <a href="http://www.catb.org/~esr/jargon/html/H/hacking-run.html">hacking run</a> seguita da un periodo di &#8220;ricarica delle batterie&#8221; piuttosto che seguire un orario di lavoro prestabilito.<br />
Questo deriva dal fatto che ci vuole un po&#8217; di tempo per entrare ed uscire dalla &#8220;zona&#8221;. Personalmente quando faccio una sessione di coding &#8220;spinta&#8221;, poi trovo molto difficile uscirne, anche se sono fisicamente stanchissimo il mio cervello continua ad elaborare (anche tramite le <a href="http://www.bwgen.com/theory.htm">brain waves</a> sarebbe possibile rendere piÃ¹ veloce questo passaggio).
</p>
</li>
<li>
<p><strong>Usare linguaggi sintetici</strong></p>
<p>
Lo spazio di attenzione nel nostro cervello Ã¨ limitato visto che sfortunatamente la mente umana non riesce ancora a fare un uso cosciente dell&#8217;enorme capacitÃ  d&#8217;immagazinamento a sua disposizione. Quindi un modo per &#8220;risparmiare spazio&#8221; Ã¨ quello di aumentare il livello di astrazione usando <a href="http://www.paulgraham.com/power.html">linguaggi piÃ¹ sintetici e potenti</a>.<br />
Prendiamo ad esempio un&#8217;applicazione web per gestire un blog. Pensa alla sua implementazione in C o in Java o in PHP o Ruby (on Rails). In quali di questi linguaggi riesci ad avere una visione dell&#8217;applicazione piÃ¹ chiara e completa?<br />
Inoltre Paul suggerisce che il processo di astrazione possa avvenire anche a livello applicativo, non soltanto tramite il linguaggio. Con un approccio <a href="http://www.catb.org/~esr/jargon/html/B/bottom-up-implementation.html">bottom-up</a>  ci si crea un insieme di macroblocchi (una sorta di <a href="http://en.wikipedia.org/wiki/Domain-specific_programming_language">domain specific language</a>) con i quali poi costruire l&#8217;applicazione (ed Ã¨ proprio questo il motivo per cui vengono usati i <a href="http://en.wikipedia.org/wiki/Software_framework">framework software</a>).
</p>
</li>
<li>
<p><strong>Riscrivere i programmi</strong></p>
<p>
Da buon <a href="http://www.catb.org/~esr/jargon/html/G/geek.html">geek</a> sono sempre stato un sostenitore della programmazione evolutiva, che non ha niente a che fare con gli algoritmi evolutivi ma descrive soltanto l&#8217;<a href="http://en.wikipedia.org/wiki/Iterative_and_incremental_development">approccio alla programmazione di tipo iterativo</a>. Questo tipo di coding comporta una riscrittura frequente del codice per aggiungere nuove funzionalitÃ , fare <a href="http://www.catb.org/~esr/jargon/html/F/fix.html">bug fixing</a> o semplice <a href="http://en.wikipedia.org/wiki/Refactoring">refactoring</a>.<br />
Riscrivere il codice piÃ¹ volte ha due vantaggi: il primo Ã¨ che la qualitÃ  del codice non puÃ² far altro che migliorare (anche se <a href="http://en.wikipedia.org/wiki/Shotgun_debugging">non Ã¨ sempre cosÃ¬</a>) ed il secondo Ã¨ permette di acquisire familiaritÃ  con il codice, chiarificandone la funzione nella nostra mente.
</p>
</li>
<li>
<p><strong>Scrivere codice leggibile</strong></p>
<p>
Un programmatore puÃ² avere vari stili di scrittura del codice a seconda del suo stato mentale e del motivo per cui lo sta scrivendo.<br />
Se sto scrivendo un prototipo per verificare che l&#8217;idea che ho avuto un&#8217;ora prima ha un qualche senso, cercherÃ² di risparmiare tempo scrivendo codice conciso ed immediato, lasciando eventualmente ad una sessione di refactoring successiva l&#8217;onere di rendere il programma piÃ¹ leggibile.<br />
Se invece sto scrivendo del codice che probabilmente dovrÃ  leggere qualcun&#8217;altro o dovrÃ² riprendere in mano tra un lasso di tempo indefinito, cercherÃ² di rendere chiaro quello che sto facendo magari con l&#8217;aiuto di qualche commento.<br />
Per inciso, molti pensano che per scrivere codice leggibile basti mettere dei commenti qua e lÃ . Niente di piÃ¹ sbagliato. Il codice deve essere leggibile perchÃ¨ il suo scopo deve essere chiaro a chi lo legge. L&#8217;algoritmo implementato deve essere evidente leggendo il codice dell&#8217;implementazione.
</p>
</li>
<li>
<p><strong>Lavorare soli o in piccoli gruppi</strong></p>
<p>
Dopo molti anni in una <a href="http://www.yahoo.com/">grande azienda</a> posso dire la mia sul fatto di lavorare in grossi team di sviluppo: Ã¨ un gran casino! Specialmente se i membri del team sono distribuiti su tre fusi orari diversi.<br />
Il problema di lavorare in team Ã¨ che si creano delle dipendenze, che dal punto di vista del programmatore sono come dei buchi neri nella sua visione dell&#8217;applicazione. Il suo orizzonte di conoscienza finisce dove finisce il suo codice e se ha bisogno di vedere piÃ¹ in lÃ  allora nascono i problemi e si rischia lo stallo.<br />
La soluzione Ã¨ quella di lavorare in piccoli gruppi suddividendo l&#8217;applicazione in parti disaccoppiate tra di loro. In questo modo si eliminano le dipendenze all&#8217;interno del gruppo massimizzandone l&#8217;<a href="http://en.wikipedia.org/wiki/Agile_software_development">agilitÃ </a>.
</p>
</li>
<li>
<p><strong>Evitare che piÃ¹ persone lavorino sullo stesso codice</strong></p>
<p>
Anche all&#8217;interno di un singolo gruppo possono nascere delle dipendenze. Evitare quindi che piÃ¹ programmatori lavorino sulla stessa funzionalitÃ . Ogni programmatore ha il proprio stile implementativo e cercare di capire il codice altrui non Ã¨ sempre un impresa facile, specialmente se il codice non Ã¨ per niente leggibile.<br />
Sarebbe come se due pittori cercassero di dipingere un ritratto sulla stessa tela, ognuno col proprio stile.
</p>
</li>
<li>
<p><strong>Iniziare dalle cose semplici</strong></p>
<p>
Il modo migliore per riuscire ad avere un programma complesso in testa Ã¨ quello di prenderne familiaritÃ  lentamente. Cercare di pensare subito all&#8217;applicazione in tutta la sua complessitÃ  sarebbe come pensare di scalare una montagna guardandone la cima, invece che pensare ad un lungo cammino Ã¨ meglio pensare a tanti piccoli cammini meno intimidatori.<br />
Allo stesso modo Ã¨ bene iniziare a pensare all&#8217;applicazione come un insieme di <a href="http://en.wikipedia.org/wiki/Black_box">black box</a> che &#8220;fanno qualcosa&#8221; senza pensare al &#8220;come&#8221;, per poi approfondirne la conoscenza aumentando il livello di dettaglio. Come allo stesso modo si costruisce una casa partendo dalle fondamenta e dalle impalcature, fino ad arrivare ai dettagli come il colore delle mattonelle o il tipo di maniglie per le porte.
</p>
</li>
</ol>
<p>Penso che sia molto difficile applicare tutte queste regole, almeno nel caso in cui si faccia il programmatore &#8220;per lavoro&#8221; e sicuramente nel caso in cui si faccia parte di una grossa azienda che probabilmente Ã¨ abituata a procedure standard che non si sposano molto con il concetto di <a href="http://en.wikipedia.org/wiki/Geek">geek</a> o di <a href="http://en.wikipedia.org/wiki/Hacker">hacker</a>.</p>
<p>Il target dell&#8217;articolo di Paul Graham Ã¨ sicuramente quello delle startup (visto che ne <a href="http://ycombinator.com/">finanzia molte</a>), dove si Ã¨ piÃ¹ liberi ed Ã¨ piÃ¹ facile seguire queste regole, ma sono sicuro che in futuro gli stessi concetti inizieranno ad essere applicati anche da chi lavora per aziende un po&#8217; piÃ¹ grandi visto che sarÃ  l&#8217;unico modo per mantenersi competitivi da un punto di vista tecnologico (<a href="http://www.paulgraham.com/webstartups.html">specialmente nel campo del world wide web</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pixzone.com/blog/308/8-regole-per-programmare-con-la-testa/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Scalable web architectures, part 1: small apps scales better</title>
		<link>http://www.pixzone.com/blog/258/scalable-web-architectures-part-1-small-apps-scales-better/</link>
		<comments>http://www.pixzone.com/blog/258/scalable-web-architectures-part-1-small-apps-scales-better/#comments</comments>
		<pubDate>Tue, 04 Sep 2007 15:19:50 +0000</pubDate>
		<dc:creator>Federico Feroldi</dc:creator>
				<category><![CDATA[Nimboo]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.pixzone.com/blog/258/scalable-web-architectures-part-1-small-apps-scales-better/</guid>
		<description><![CDATA[One of the most important characteristics of modern web application is scalability. With the advent of the web 2.0 era your web application can grow up very fast to millions of users and almost all the now famous websites that experienced this rapid growt shared the same problems: how to design a web application to serve from hundredths to hundredths millions of user requests.]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm1.static.flickr.com/48/105779625_1b0b0c1f8a_m.jpg" align="right" />One of the most important characteristics of modern web application is <strong>scalability</strong>. With the advent of the web 2.0 era your web application can grow up very fast to millions of users and almost all the now famous websites that experienced this rapid growt shared the same problems: <em>how to design a web application to serve from hundredths to hundredths millions of user requests</em>.</p>
<p>Some people would argue that some language is faster than others or some framework is better scalable than other but the real answer is that there&#8217;s no silver bullet for scalability.<br />
What you have to do instead is to follow some simple rules while you write the application from the ground (even if someone says that <em>performance is not an issue before performance is an issue</em>).</p>
<h3>Monolitic applications cannot scale</h3>
<p>This is far the most common issue in scaling. If you build a web application that is a big block of code, a huge monolitic tightly coupled mixture of code and HTML, you will loose the ability to optimize and separate what can run fast and what can be run more slowly.</p>
<p>Like a modern manufacturing system, your application must be built as separate and loosely coupled modules. By keeping each module small and independent you can optimize the usage of limited resources like CPU and memory and get the best performances.</p>
<p>By using standard RPC mechanisms (like SOAP or REST) or enterprise message busses (like ActiveMQ or XMPP servers) you can easily and transparently interconnect these modules while maintain the ability to optimize and scale each single module.</p>
<p>Some common features that can be separated from the main application are:</p>
<dl>
<dt>Administration panel</dt>
<dd>Many web applications need an administration panel needed to configure the application and manage user and data. Usually all this data is stored in a database that can be accessed and modified by a separate <strong>administration application</strong>.</dd>
<dt>Mail delivery</dt>
<dd>Many web applications handle the mail delivery in a synchronous way. This means that the HTTPD process has to wait for the SMTP server or the mail delivery program to complete. By keeping a shared mail queue (like a mysql db) you can minimize the queing time and manage or delay the actual delivery.</dd>
<dt>Batch data processing and statistics generation</dt>
<dd>This is a common source of load on backend databases in websites that show download/view counters of media items such as images or videos. A common approach is to update the &#8220;<em>views</em>&#8221; and &#8220;<em>downloads</em>&#8221; fields in the database on each user request. This puts the databased under a huge load that can bring it down to his knees during traffic peaks.<br />
A better approach is to move the views/downloads counters updates to an asynchronous process that updates the database once in a while. This process can analyze the web server log to find how many times an item was viewed or downloaded. Another option  involves the use of asyncronous messages queues or shared memory caches such as memcached.</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://www.pixzone.com/blog/258/scalable-web-architectures-part-1-small-apps-scales-better/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Move your bookmarks from Myweb to Delicious in 3 easy steps</title>
		<link>http://www.pixzone.com/blog/251/move-your-bookmarks-from-myweb-to-delicious-in-3-easy-steps/</link>
		<comments>http://www.pixzone.com/blog/251/move-your-bookmarks-from-myweb-to-delicious-in-3-easy-steps/#comments</comments>
		<pubDate>Mon, 27 Aug 2007 13:52:21 +0000</pubDate>
		<dc:creator>Federico Feroldi</dc:creator>
				<category><![CDATA[Nimboo]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://www.pixzone.com/blog/251/move-your-bookmarks-from-myweb-to-delicious-in-3-easy-steps/</guid>
		<description><![CDATA[How to migrate your Yahoo's Myweb bookmarks to your Delicious account in three easy steps.]]></description>
			<content:encoded><![CDATA[<p>When I discover <a href="http://www.delicious.com">delicious</a> it was too late for me since at the time I had too many bookmarks already tagged in Yahoo&#8217;s <a href="http://myweb.yahoo.com">Myweb</a>. But since then I&#8217;ve always wanted to move all my bookmarks to delicious but didn&#8217;t found how to do it, until now.</p>
<p>Some days ago I found this <a href="http://www.theurer.cc/blog/2006/08/29/python-myweb-to-delicious-exporter/">python script</a> that makes use of myweb and delicious web services to migrate the bookmarks.<br />
Unfortunately the script wasn&#8217;t very reliable, it was crashing quite often and, since I have <a href="http://del.icio.us/federico_f">more than 1500 bookmarks</a>, it was quite painful since every time I launched it, it was starting from scratch.</p>
<p>So I decided to build a new script (actually two)&#8230; in Ruby.</p>
<h2>Step 1 : prerequisites</h2>
<p>First of all you must <a href="http://www.google.it/search?q=install+ruby">install Ruby</a> and <a href="http://www.google.it/search?q=install+rubygems">rubygems</a> on your system.</p>
<p>Then you must install <a href="http://pablotron.org/software/rubilicious/">rubilicious</a> gem.</p>
<h2>Step 2 : export myweb bookmarks</h2>
<p>Here&#8217;s the first ruby script that you must run:</p>
<p><code lang="ruby"><br />
require 'net/http'<br />
require 'uri'<br />
require 'rexml/document'</p>
<p># YOU WANT TO MODIFY THIS<br />
yahoo_id = 'pix'</p>
<p>myweb_appid = 'YahooDemo'<br />
myweb_urlsearch = 'http://search.yahooapis.com/MyWebService/V1/urlSearch'</p>
<p>request_start_idx = 1<br />
request_max = 50</p>
<p>while(true)<br />
  url = myweb_urlsearch + '?' + {<br />
    :appid => myweb_appid,<br />
    :yahooid => yahoo_id,<br />
    :results => request_max,<br />
    :start => request_start_idx<br />
  }.to_a.collect {|kv| kv[0].to_s + '=' + kv[1].to_s}.join('&#038;')</p>
<p>  retries = 3<br />
  while(true)<br />
    $stderr.puts(" - Requesting URLs from [#{request_start_idx}] (#{retries} retries left) -> #{url}\n")</p>
<p>    http_resp = Net::HTTP.get_response(URI.parse(url))</p>
<p>    if(http_resp.code.to_i < 200 || http_resp.code.to_i > 299)<br />
      $stderr.puts(" ! request failed [#{http_resp.code}]\n")<br />
      retries -= 1<br />
      sleep(5) &#038;&#038; next if(retries > 0)<br />
      $stderr.puts(" ! too many retries, something is broken!\n")<br />
      exit<br />
    end<br />
    break # exit while loop<br />
  end</p>
<p>  xml_data = http_resp.body</p>
<p>  # extract event information<br />
  doc = REXML::Document.new(xml_data)</p>
<p>  tot_results = doc.root.attributes['totalResultsAvailable'].to_i<br />
  break unless tot_results > 0</p>
<p>  doc.elements.each('ResultSet/Result') do |r|<br />
    puts [<br />
      r.elements['Title'].text,<br />
      r.elements['Summary'].text,<br />
      r.elements['Url'].text,<br />
      r.elements['Tags'].collect() {|e| e.text.to_s}.join(','),<br />
    ].collect {|v| URI.escape(v.to_s) }.join('&#038;') + "\n"</p>
<p>    request_start_idx += 1<br />
  end</p>
<p>end<br />
</code></p>
<p>Copy this code and paste it to a file (like <em>myweb_export.rb</em>). You also want to set the <strong>yahoo_id</strong> variable with your myweb ID.</p>
<p>Then you can run the script:</p>
<p><code lang="bash"><br />
ruby myweb_export.rb > data.txt<br />
</code></p>
<h2> Step 3 : import bookmarks into delicious </h2>
<p>For the final step you&#8217;ll need the script below:</p>
<p><code lang="ruby"><br />
require 'rubilicious'<br />
require 'uri'</p>
<p>r = Rubilicious.new('USER', 'PASSWORD')</p>
<p>$stdin.each_line do |l|<br />
  title, description, url, keys = l.split('&#038;').collect { |i| URI.decode(i) }<br />
  keys = keys.split(',').collect { |k| k.strip.gsub(/\s+/, '-') }.join(' ')<br />
  puts title + "\n" + url + "\n" + keys + "\n---\n"<br />
  r.add(url, title, description, keys)<br />
  sleep(1)<br />
end<br />
</code></p>
<p>You want to set the proper values for <strong>USER</strong> and <strong>PASSWORD</strong> of your delicious account and copy the code to <em>deli_import.rb</em>.</p>
<p><code lang="bash"><br />
ruby deli_import.rb < data.txt<br />
</code></p>
<p>The script waits 1 second after each URL since this is required by the <a href="http://del.icio.us/help/api/">delicious API</a>.</p>
<p><em>Limitations: unfortunately since the Myweb web services only allow the search of public bookmarks, you'll not be able to migrate private bookmarks. You must do this by hand or wait that Yahoo will release a Myweb webservice that supports authentication.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pixzone.com/blog/251/move-your-bookmarks-from-myweb-to-delicious-in-3-easy-steps/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cheap technical books on sale</title>
		<link>http://www.pixzone.com/blog/237/cheap-technical-books-on-sale/</link>
		<comments>http://www.pixzone.com/blog/237/cheap-technical-books-on-sale/#comments</comments>
		<pubDate>Mon, 30 Jul 2007 10:29:42 +0000</pubDate>
		<dc:creator>Federico Feroldi</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.pixzone.com/blog/237/cheap-technical-books-on-sale/</guid>
		<description><![CDATA[I&#8217;m selling some of my technical book at very cheap prices, take a look and send me an email if you&#8217;re interested.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m selling some of my <a href="http://www.anobii.com/people/federicof/trade/">technical book at very cheap prices</a>, take a look and send me an <a href="mailto:pix@yahoo.it">email</a> if you&#8217;re interested.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pixzone.com/blog/237/cheap-technical-books-on-sale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.569 seconds -->
