<?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>Tra il codice e la realtà &#187; Programmazione</title>
	<atom:link href="http://www.andreamurru.com/category/programmazione/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.andreamurru.com</link>
	<description>omnia munda mundis</description>
	<lastBuildDate>Mon, 06 Feb 2012 10:15:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Installare PHP 5.3 su Centos 5.5/5.6</title>
		<link>http://www.andreamurru.com/2011/08/20/installare-php-5-3-su-centos-5-55-6/</link>
		<comments>http://www.andreamurru.com/2011/08/20/installare-php-5-3-su-centos-5-55-6/#comments</comments>
		<pubDate>Sat, 20 Aug 2011 11:18:13 +0000</pubDate>
		<dc:creator>Andrea Murru</dc:creator>
				<category><![CDATA[Attualità]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[yum]]></category>

		<guid isPermaLink="false">http://www.andreamurru.com/?p=174</guid>
		<description><![CDATA[Non sono un fan di PHP, ma lo uso essenzialmente per utilizzare WordPress (per questo blog ed anche per quello di Caasa); non aggiorno quindi frequentemente la versione di PHP, anche perché sul server utilizzo Centos, che mette sì a disposizione yum come eccellente sistema di aggiornamento, ma non è certo il massimo relativamente alla [...]]]></description>
			<content:encoded><![CDATA[<p>Non sono un fan di PHP, ma lo uso essenzialmente per utilizzare WordPress (per questo blog ed anche per <a title="Il blog di Caasa" href="http://blog.caasa.it">quello di Caasa</a>); non aggiorno quindi frequentemente la versione di PHP, anche perché sul server utilizzo Centos, che mette sì a disposizione yum come <strong>eccellente</strong> sistema di aggiornamento, ma non è certo il massimo relativamente alla frequenza con cui mette a disposizioni gli aggiornamenti.</p>
<p>Per farla breve, fino a stamattina avevo installato ed in uso PH 5.1, ma ho scoperto che l&#8217;ultimo aggiornamento di wordpress (3.2.1), richiede almeno PHP 5.2. <em>Ovviamente</em> (?) Centos (attraverso i suoi repositories ufficiali) non mette a disposizione che la versione 5.1 e non avevo assolutamente intenzione di &#8220;tentare&#8221; procedure complesse e &#8220;rischiose&#8221; (a che fine, in effetti ? <img src='http://www.andreamurru.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) . Beh però una ricerca su google potevo pure tentarmela &#8230; bene ho trovato qualcuno che ha reso le cose davvero semplici e funzionali: ha creato un repository per yum installabile con un rpm e poi la versione di PHP più aggiornata che si sostituisce a meraviglia a quella &#8220;originale&#8221; &#8230; se siete nella mia stessa situazione (Centos 5.5/5.6 e volete installare/aggiornare WordPress alla versione 3.2.1), date un&#8217;occhiata <a title="how to install php 5.3 on centos 5.5" href="http://www.webtatic.com/packages/php53/">qui</a>.</p>
<p>E non dimenticate di riavviare apache !</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreamurru.com/2011/08/20/installare-php-5-3-su-centos-5-55-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Caasa online!</title>
		<link>http://www.andreamurru.com/2010/10/12/caasa-online/</link>
		<comments>http://www.andreamurru.com/2010/10/12/caasa-online/#comments</comments>
		<pubDate>Tue, 12 Oct 2010 08:55:57 +0000</pubDate>
		<dc:creator>Andrea Murru</dc:creator>
				<category><![CDATA[Attualità]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[caasa]]></category>
		<category><![CDATA[mercato immobiliare]]></category>

		<guid isPermaLink="false">http://www.andreamurru.com/?p=143</guid>
		<description><![CDATA[E&#8217; online la prima versione alfa di Caasa. Si tratta di un motore di ricerca per annunci immobiliari basato su bot. La parte &#8220;visibile&#8221; è costituita da 2 portali: http://www.caasa.it è il motore di ricerca degli immobili, mentre http://www.mercato.immobiliare.info fornisce informazioni, news e quotazioni immobiliari ad un dettaglio che arriva ai singoli quartieri per ogni [...]]]></description>
			<content:encoded><![CDATA[<p>E&#8217; online la prima versione <strong><span style="text-decoration: underline;">alfa</span></strong> di Caasa. Si tratta di un motore di ricerca per annunci immobiliari basato su bot. La parte &#8220;visibile&#8221; è costituita da 2 portali: <em>http://www.caasa.it</em> è <a href="http://www.caasa.it">il motore di ricerca degli immobili</a>, mentre <em>http://www.mercato.immobiliare.info</em> fornisce <a href="http://www.mercato-immobiliare.info">informazioni, news e quotazioni immobiliari</a> ad un dettaglio che arriva ai singoli quartieri per ogni tipologia d&#8217;immobile.</p>
<p>Certo, al momento è online una versione alfa e alcune caratteristiche sono implementate parzialmente o addirittura assenti, ma la ricchezza di contenuti, l’eccellente dettaglio nella classificazione geografica, la categorizzazione intelligente delle tipologie e l’interfaccia utente estremamente funzionale, dovrebbero rendere <strong>Caasa</strong> il posto migliore dove effettuare la ricerca di un immobile. <strong>Caasa </strong>permette l’utilizzo di chiavi di ricerca multiple sia per le tipologie che per la localizzazione ed utilizza un algoritmo proprietario per l’ordinamento dei risultati in modo che risultino sempre estremamente pertinenti.</p>
<p>Dal punto di vista tecnico Caasa è un progetto complesso e molto interessante: sarò lieto di condividere scelte architetturali, tecnologiche e di design con chi fosse interessato. Appena avrò un briciolo di tempo posterò su questo blog degli articoli sugli aspetti più interessanti o magari renderò disponibile qualche libreria particolare che mi è capitato di sviluppare per risolvere esigenze specifiche ( dall&#8217;esame del file robots.txt alla cache asincrona ).</p>
<p style="text-align: center;"><strong><span style="color: #ff0000;">Call for testing!</span></strong></p>
<p>Nel frattempo sarei grato a chi volesse effettuare qualche test. Sul <a href="http://blog.caasa.it">blog di caasa</a> c&#8217;è <a href="http://blog.caasa.it/2010/10/online/">una mini FAQ</a> per il testing della versione alfa: è il posto giusto da dove iniziare. Grazie in anticipo per i commenti o le segnalazioni di bachi.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreamurru.com/2010/10/12/caasa-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spider e valutazione dell&#8217;autorizzazione all&#8217;accesso in robots.txt 1/3</title>
		<link>http://www.andreamurru.com/2010/07/15/spider-e-valutazione-dell-autorizzazione-all-accesso-in-robots-txt-1-3/</link>
		<comments>http://www.andreamurru.com/2010/07/15/spider-e-valutazione-dell-autorizzazione-all-accesso-in-robots-txt-1-3/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 15:26:52 +0000</pubDate>
		<dc:creator>Andrea Murru</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Robots.txt]]></category>
		<category><![CDATA[Spider]]></category>

		<guid isPermaLink="false">http://www.andreamurru.com/?p=123</guid>
		<description><![CDATA[Nella realizzazione di uno spider, uno degli aspetti che devono essere garantiti, è il rispetto della volontà del proprietario di un sito, riguardo all&#8217;uso dei dati contenuti in esso. Per quanto esistano degli standard più completi e complessi ( in particolare l&#8217;ACAP ), il metodo più utilizzato per la restrizione dell&#8217;accesso ad un sito, è [...]]]></description>
			<content:encoded><![CDATA[<p>Nella realizzazione di uno spider, uno degli aspetti che devono essere garantiti, è il rispetto della volontà del proprietario di un sito, riguardo all&#8217;uso dei dati contenuti in esso.</p>
<p>Per quanto esistano degli standard più completi e complessi ( in particolare l&#8217;<a title="Automated Content Access Protocol" href="http://the-acap.org/">ACAP</a> ), il metodo più utilizzato per la restrizione dell&#8217;accesso ad un sito, è sicuramente l&#8217;utilizzo di un file di nome <a title="robots.txt" href="http://it.wikipedia.org/wiki/Robots.txt">robots.txt</a> nella home del sito.</p>
<p>Il protocollo utilizzato è estremamente limitato e consente solamente di impedire (completamente) a tutti o ad uno User-Agent particolare l&#8217;accesso ad una o più risorse o cartelle del sito. Non è possibile limitare l&#8217;<em>utilizzo</em> delle informazioni ( ad esempio l&#8217;elaborazione automatica, la possibilità di visualizzare i dati senza linkare direttamente la pagina da cui sono tratti, la memorizzazione, l&#8217;aggiornamento etc ). Non è possibile consentire esplicitamente l&#8217;accesso ( ma solo proibirlo ). Non è possibile imporre delle restrizioni rispetto ad altre caratteristiche dello User-Agent come tecnologie supportate ( Javascript ad esempio ) o provenienza geografica, IP, organizzazione, etc. Non è possibile neppure utilizzare uno stesso files per domini o sotto-domini differenti.</p>
<p>Inoltre non esiste uno standard di riferimento e ci sono alcune estensioni ( come Request-rate e Visit-time o l&#8217;utilizzo di wildcard per la selezione dello User-Agent o delle risorse ) che sono supportate solo da alcuni bot, ma non da altri.</p>
<p>Anche dalla versione &#8220;base&#8221; è però possibile stabilire molte informazioni ed è quindi doveroso tentare di assecondare almeno quelle.</p>
<p>La mia è una considerazione di buon senso più che un vincolo legale o morale: non è detto che rispettare i vincoli espressi di robots.txt garantisca completamente da questioni legali, né al contrario non rispettarle sia di sicuro contro la volontà del &#8220;proprietario&#8221; del sito (che magari ha solo impostato più o meno inconsciamente delle restrizioni più forti di quello che voleva o magari, se interpellato, potrebbe sicuramente concedere l&#8217;accesso). Particolare a riguardo è il caso di <strong>Pete Warden</strong> che è stato costretto a <a title="Blog di Pete Warden" href="http://petewarden.typepad.com/searchbrowser/2010/03/facebook-data-destruction.html">cancellare il db degli utenti che aveva raccolto da facebook</a>, tramite uno spider che rispettava robots.txt.</p>
<p>In sostanza mi sembra ragionevole pensare (entro certi limiti) che i dati presenti su un sito siano in qualche modo del proprietario del sito, anche se non esprime chiaramente le proprie intenzioni tramite un determinato strumento (robots.txt ad esempio) o le esprime in modo non accurato.</p>
<p>Questioni da legali, comunque&#8230; veniamo al codice: come realizzare un&#8217;analizzatore di robots.txt in JAVA ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreamurru.com/2010/07/15/spider-e-valutazione-dell-autorizzazione-all-accesso-in-robots-txt-1-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ottimo non è buono</title>
		<link>http://www.andreamurru.com/2010/05/18/ottimo-non-e-buono/</link>
		<comments>http://www.andreamurru.com/2010/05/18/ottimo-non-e-buono/#comments</comments>
		<pubDate>Tue, 18 May 2010 14:56:52 +0000</pubDate>
		<dc:creator>Andrea Murru</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[crash]]></category>
		<category><![CDATA[monitoraggio]]></category>

		<guid isPermaLink="false">http://www.andreamurru.com/?p=125</guid>
		<description><![CDATA[Nell&#8217;uso comune del termine, con &#8216;ottimo&#8217; s&#8217;intende principalmente &#8216;molto buono&#8216;. In informatica (e in matematica) con soluzione ottima s&#8217;intende &#8216;la migliore possibile&#8217; e ovviamente non è affatto detto che sia &#8216;buona&#8217;. La differenza principale tra i due termini è (a mio parare) soprattutto il fatto che ottimo è necessariamente contestuale. E&#8217; quindi (spesso) concretamente definibile: ad [...]]]></description>
			<content:encoded><![CDATA[<p>Nell&#8217;uso comune del termine, con &#8216;<strong>ottimo&#8217;</strong> <a title="definizione di 'ottimo'" href="http://dizionari.corriere.it/dizionario_italiano/O/ottimo.shtml">s&#8217;intende</a> principalmente &#8216;<strong>molto buono</strong>&#8216;.</p>
<p>In informatica (e in matematica) con soluzione ottima s&#8217;intende &#8216;<strong>la migliore possibile&#8217;</strong> e ovviamente non è affatto detto che sia &#8216;<strong>buona&#8217;</strong>.</p>
<p>La differenza principale tra i due termini è (a mio parare) soprattutto il fatto che ottimo è necessariamente contestuale. E&#8217; quindi (spesso) concretamente definibile: ad esempio l&#8217;algoritmo che utilizza meno RAM o è il più veloce a produrre i risultati, etc, etc. Ha però anche implicitamente più gradi di libertà, nel senso che il contesto nel quale va ricercato l&#8217;ottimo è spesso difficile da definire; anzi è spesso l&#8217;aspetto più difficile da definire.</p>
<p>Il fatto è che quasi sempre gli architetti del software non credono di avere certi gradi di libertà o, al contrario, assumono sbagliando di averli.</p>
<p>Io ad esempio ho sempre considerato concettualmente sbagliati i meccanismi di monitoraggio attivo del software (un software che al crash di un altro lo riavvia): non solo si rischia di non risolvere il vero problema (il crash), ma -peggio- si rischia di sviluppare un sistema di monitoraggio complesso che AGGIUNGE problemi alla piattaforma nel suo complesso.</p>
<p>Non per questo però non è detto che (in pratica, in un certo contesto operativo) sviluppare e mantenere un sistema di monitoraggio attivo non sia la soluzione ottima (magari pure non buona in assoluto). E&#8217; quello che <a title="7 Lessons Learned at Reddit" href="http://www.infoq.com/news/2010/05/7-Lessons-Reddit">hanno pensato</a> anche a reddit all&#8217;inizio della loro storia: in sostanza riavviare il server in modo automatico era senz&#8217;altro meglio che farlo &#8220;a mano&#8221;, svegliandosi ogni poche ore <img src='http://www.andreamurru.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Più seriamente l&#8217;aspetto focale è che un architetto software deve essere sempre ben conscio di dover ricercare dei massimi locali e che spesso, gli intervalli all&#8217;interno dei quali cercarli sono parte del problema e che quasi sempre sono tempo-varianti.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreamurru.com/2010/05/18/ottimo-non-e-buono/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yahoo Pipes &#8211; mashup made easy</title>
		<link>http://www.andreamurru.com/2009/09/04/yahoo-pipes-mashup-made-easy/</link>
		<comments>http://www.andreamurru.com/2009/09/04/yahoo-pipes-mashup-made-easy/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 19:38:44 +0000</pubDate>
		<dc:creator>Andrea Murru</dc:creator>
				<category><![CDATA[Attualità]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[yhaoo pipes]]></category>

		<guid isPermaLink="false">http://andreamurru.wordpress.com/?p=104</guid>
		<description><![CDATA[Oggi ho provato ad utilizzare Yahoo Pipes: davvero impressionante! Si tratta di un servizio che consente di aggregare, filtrare, generare feed partendo dalle più disparate fonti. E&#8217; ad esempio possibile recuperare i feed dei principali quotidiani e filtrare gli articoli in base al fatto che contengano o meno alcune parole (o più in generale un&#8217;espressione [...]]]></description>
			<content:encoded><![CDATA[<p>Oggi ho provato ad utilizzare <a title="Yahoo Pipes" href="http://pipes.yahoo.com/pipes/">Yahoo Pipes</a>: davvero impressionante!</p>
<p>Si tratta di un servizio che consente di aggregare, filtrare, generare feed partendo dalle più disparate fonti. E&#8217; ad esempio possibile recuperare i feed dei principali quotidiani e filtrare gli articoli in base al fatto che contengano o meno alcune parole (o più in generale un&#8217;espressione regolare). Potentissima poi la possibilità di utilizzare come fonte una ricerca di google news (o blog search), sfruttandone tutte le potenzialità per ottenere un&#8217;inesauribile fonte <strong>personalizzata</strong> di new di qualità. Putroppo non è possibile utilizzare (direttamente) i risultati di una ricerca sul web (con google), ma è possibile avere a disposizione quelli di yahoo.</p>
<p>Tecnicamente le sorgenti possibili comprendono oltre ad rss e atom, anche XML, JSON, HTML, CSV, consentendo davvero di accedere a qualsiasi fonte disponibile sul web. L&#8217;unico limite è che le fonti non devono avere un file robots.txt che ne impedisca l&#8217;accesso.</p>
<p>Alle sorgenti è poi possibile applicare un gran numero di &#8220;operatori&#8221; che consentono di filtrare, dividere, unire, contare, troncare, verificare l&#8217;univocità, ordinare, etc, etc. in modo da ottenere davvero qualsiasi risultato si desideri.</p>
<p>Ma l&#8217;aspetto davvero straordinario del servizio è l&#8217;eccezionale tool grafico di generazione:</p>
<div id="attachment_105" class="wp-caption aligncenter" style="width: 520px"><a href="http://blog.andreamurru.com/wp-content/uploads/2009/09/pipes.jpg"><img class="size-full wp-image-105" title="yahoo pipes" src="http://blog.andreamurru.com/wp-content/uploads/2009/09/pipes.jpg" alt="yahoo pipes edit" width="510" height="318" /></a><p class="wp-caption-text">yahoo pipes edit</p></div>
<p>E&#8217; un ambiente <strong>visuale </strong>estremamente <strong>semplice</strong> da utilizzare<strong> </strong>e allo stesso tempo <strong>potentissimo</strong>. Con qualche click è possibile selezionare le sorgenti, filtrarle unirle ed ottenere poi un feed che si può pubblicare con estrema semplicità.</p>
<p>Date un&#8217;occhiata al box qui a lato: trovate il feed che ho costruito per ottenere news simili ai contenuti di questo blog. In pochi minuti un risultato davvero eccellente!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreamurru.com/2009/09/04/yahoo-pipes-mashup-made-easy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La sottile differenza tra IP delivery e Cloaking</title>
		<link>http://www.andreamurru.com/2009/05/12/la-sottile-differenza-tra-ip-delivery-e-cloaking/</link>
		<comments>http://www.andreamurru.com/2009/05/12/la-sottile-differenza-tra-ip-delivery-e-cloaking/#comments</comments>
		<pubDate>Tue, 12 May 2009 22:01:32 +0000</pubDate>
		<dc:creator>Andrea Murru</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[cloaking]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[ip-delivery]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://andreamurru.wordpress.com/?p=100</guid>
		<description><![CDATA[Tra le linee guida di google più &#8220;profonde&#8221; c&#8217;è ovviamente il fatto di evitare il cloaking, ovvero di presentare a googlebot contenuti differenti rispetto a quelli presentati ad un normale utente. Ci sono però alcuni casi in cui presentare un contenuto differente sulla base dello user-agent, non è affatto un &#8220;imbroglio&#8221;, ma è anzi un [...]]]></description>
			<content:encoded><![CDATA[<p>Tra <a title="webmaster guidelines" href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;answer=35769" target="_blank">le linee guida</a> di google più &#8220;profonde&#8221; c&#8217;è ovviamente il fatto di evitare il cloaking, ovvero di presentare a googlebot contenuti differenti rispetto a quelli presentati ad un normale utente. Ci sono però alcuni casi in cui presentare un contenuto differente sulla base dello user-agent, non è affatto un &#8220;imbroglio&#8221;, ma è anzi un modo per fornire migliori informazioni o addirittura una necessità in qualche caso.</p>
<p>In particolare può essere necessario fornire contenuti differenti in base al browser utilizzato (ad esempio in mobilità o con una risoluzione molto bassa) o in assenza di plugin (come flash) o ancora in seguito ad informazioni ottenute automaticamente (tramite cookies) sull&#8217;utente.</p>
<p>Altro caso tipico in cui una generazione &#8220;specializzata&#8221; dei contenuti è utilizzata in modo lecito è legato alla lingua o alla localizzazione geografica dello user-agent. Si tratta di tecniche ormai diffusissime che possono essere estremamente utili e funzionali per gli utenti, anche capisco che possano mettere in difficoltà sistemi puramenti automatici di crawling.</p>
<p>Purtroppo però la posizione di google rispetto all&#8217;utilizzo di tali tecniche non è completamente chiaro e mette quindi in grosse difficoltà i webmaster che devono valutare (paradossalmente) se implementare funzionalità a vantaggio degli utenti con il rischio di essere penalizzati dai bot convinti che tali funzionalità siano implementate a loro vantaggio.</p>
<p>Tale problematica ha dato luogo a lunghi dibattiti tra gli addetti ai lavori, tra i quali va senz&#8217;altro letto questo <a title="White Hat Cloaking" href="http://www.seomoz.org/blog/white-hat-cloaking-it-exists-its-permitted-its-useful" target="_blank">post</a> su seomoz blog.</p>
<p>Fortunatamente c&#8217;è anche un <a href="http://googlewebmastercentral.blogspot.com/2008/06/how-google-defines-ip-delivery.html" target="_blank">post</a> sul blog ufficiale di google che fa una buona chiarezza sulla vicenda; lo spirito della &#8220;legge&#8221; di gogle è estremamente ragionevole:</p>
<blockquote><p>Googlebot should see the same content a typical user from the same IP address would see.</p></blockquote>
<p>Ovviamente non è chiarissimo cosa voglia dire &#8220;the same content&#8221;: identico al byte ? identico solo nei contenuti (ad esempio non nella pubblicità) ? uguale in una buona percentuale del sito ? Sinceramente non credo che sia possibile determinare in mo affidabile al 100% nessuna procedura completamente automatica, visto che mi vengono sempre in mente casi &#8220;leciti&#8221; estremamente difficili da estrapolare. Ma almeno lo spirito mi sembra estremamente condivisibile.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreamurru.com/2009/05/12/la-sottile-differenza-tra-ip-delivery-e-cloaking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alcuni modi comuni per rovinarsi la vita con l&#039;XML</title>
		<link>http://www.andreamurru.com/2009/03/12/alcuni-modi-comuni-per-rovinarsi-la-vita-con-lxml/</link>
		<comments>http://www.andreamurru.com/2009/03/12/alcuni-modi-comuni-per-rovinarsi-la-vita-con-lxml/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 17:05:11 +0000</pubDate>
		<dc:creator>Andrea Murru</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://andreamurru.wordpress.com/?p=96</guid>
		<description><![CDATA[In un ottimo articolo Kyle Brown, elenca tre &#8220;comuni&#8221; problemi che affliggono i Web Services basati su XML (SOAP o meno). Merita una lettura attenta perché non mette in evidenza  le meravigliose capacità di un qualche tool, libreria o linguaggio, ma collega a errori di principio nel design i disastri che si riesce a produrre anche [...]]]></description>
			<content:encoded><![CDATA[<p>In un ottimo <a href="http://www.ibm.com/developerworks/websphere/techjournal/0903_col_brown/0903_col_brown.html?ca=drs-">articolo</a> Kyle Brown, elenca tre &#8220;comuni&#8221; problemi che affliggono i Web Services basati su XML (SOAP o meno). Merita una lettura attenta perché non mette in evidenza  le meravigliose capacità di un qualche tool, libreria o linguaggio, ma collega a errori di principio nel design i disastri che si riesce a produrre anche in contesti abbastanza semplici e con strumenti tutto sommato ben conosciuti.</p>
<p>Il primo errore è davvero banale e non mette in evidenza nulla di &#8220;profondo&#8221;: gestire messaggi da parecchi megabyte, magari con dati binari (senza forse neppure accorgersene) è semplicemente una scelta da incapaci; non è certo un problema dell&#8217;XML.</p>
<p>Il secondo è invece molto più interessante, perché è davvero una forza che guida spesso il design: definire i servizi ad un livello esremamente basso (ad esempio a livello di ogni singola operazione SQL). Perché (come dice Brown) &#8220;[...]such low-level data services often fail.&#8221; ? A mio parere il discorso è molto generale: Un Web Service dovrebbe rappresentare un&#8217;interfaccia che maschera la complessità che si trova a monte, semplificandone l&#8217;utilizzo in base alle esigenze di chi si trova a valle. Purtroppo invece scrivere un XML o richiamare un servizio non è più facile che accedere direttamente ad un DB e scrivere l&#8217;SQL relativo, né maschera alcuna complessità o dettaglio implementativo se il contenuto informativo necessario a richiamarlo è in relazione biunivoca con l&#8217;SQL utilizzato. Introdurre un layer (o un&#8217;interfaccia per l&#8217;accesso di una qualche risorsa/servizio) <strong>deve</strong> essere motivato da concreti <strong>vantaggi</strong> nel <strong>contesto specifico</strong> e non è certo buono in astratto e in generale.</p>
<p>Il terzo problema è paradossale e viene fuori soprattutto con SOAP: siccome non è comodo né banale definire gli schema in modo completo e soprattutto non è facile <strong>modificarli</strong>, spesso alcuni servizi sono solo semi-definiti con una parte (spesso predominate) magari ancora in XML, ma non parte dello schema della richiesta. Questa situazione è spesso solo la spia del fatto che si è sbagliato nel definire le interfacce, che risultano <strong>complesse</strong> ed devono essere <strong>cambiate molto spesso</strong>, perché sono poste al livello sbagliato.</p>
<p>Ultima nota a livello generale: in programmazione qualcosa di inutile è quasi sempre <strong>dannoso</strong>, specie un&#8217;astrazione.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreamurru.com/2009/03/12/alcuni-modi-comuni-per-rovinarsi-la-vita-con-lxml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perdita di pacchetti ad alti bitrate</title>
		<link>http://www.andreamurru.com/2009/01/19/perdita-di-pacchetti-ad-alti-bitrate/</link>
		<comments>http://www.andreamurru.com/2009/01/19/perdita-di-pacchetti-ad-alti-bitrate/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 22:17:32 +0000</pubDate>
		<dc:creator>Andrea Murru</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[completion routine]]></category>
		<category><![CDATA[overlapped I/O]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[SO_RCVBUF]]></category>
		<category><![CDATA[windows embedded ce 6.0]]></category>
		<category><![CDATA[wireshark]]></category>

		<guid isPermaLink="false">http://andreamurru.wordpress.com/?p=71</guid>
		<description><![CDATA[In un progetto sul quale ho lavorato di recente, mi è capitato di avere a che fare con flussi (streaming multimediali) a bitrate relativamente alto, per l&#8217;hw in questione. Scrivo questo post perché siamo stati vittime di un nostro (banale) bug che ci è costato qualche giorno di test e qualche mal di testa: magari [...]]]></description>
			<content:encoded><![CDATA[<p>In un progetto sul quale ho lavorato di recente, mi è capitato di avere a che fare con flussi (streaming multimediali) a bitrate relativamente alto, per l&#8217;hw in questione. Scrivo questo post perché siamo stati vittime di un nostro (banale) bug che ci è costato qualche giorno di test e qualche mal di testa: magari qualcuno potrà evitarseli leggendo questo post&#8230; non si trova molta documentazione in giro.</p>
<p>Intanto qualche altro dettaglio sul sistema: un client che riceve flussi multimediali in UDP (fino a 10 mbs) su windows embedded ce 6.0, realizzato in c++ con il visual studio 2005, utilizzando direttamente winsock2. Un thread si occupa della ricezione utilizzando semplicemente una socket in modalità bloccante in un ciclo di lettura che ha anche il compito di effetture alcune operazioni sui dati (poco onerose in termini di CPU) e di copiarli in un buffer dal quale un thread consumatore le preleva. Viene utilizzata la funzione recv(), visto che la modalità bloccante non è affatto un problema (e quindi l&#8217; <span class="srcSentence">overlapped I/O è inutile) e le </span><span class="srcSentence">completion routine non sono ben supportate da windows embedded ce 6.0.</span></p>
<p><span class="srcSentence">Tutto sembra funzionare bene, fino a bitrare inferiori a 2 mbs, ma superando tale valore&#8230; si manifestano degli strani problemi. Dopo molta fatica (visto che ovviamente non era possibile andare in debug, ma neppure scrivere su file se non pochi kbytes e quidi il debug stesso non poteva che avvenire anch&#8217;esso via rete), sembrava inequivocabile che si trattasse di perdite di pacchetti dallo 0.3% al 3% circa. A ridurre la nostra lucità di analisi si metteva anche il fatto che ad avere problema era solo uno streamer che utilizzavamo per la prima volta, mentre quello che avevamo utilizzato fino ad allora funzionava alla grande (ora sappiamo che dipendeva solo dal bitrate).</span></p>
<p><span class="srcSentence">Il passo successivo (e molto poco divertente) è stato quello di usare wireshark per verificare se una tale perdita di pacchetti era in qualche modo imputabile alla nostra lettura&#8230; provate a cercare in un dump 1 paccheto perso, verificando che non ci siano buchi in un continuity counter a 4 bit e con il parser di wireshark bacato. Davvero poco divertente. Comunque le perdite non c&#8217;erano!</span></p>
<p><span class="srcSentence">Il problema è semplicemente legato al fatto che il sistema operativo allocca un buffer interno, settato di defaut a pochi kbytes, che può facilmente venire saturato se il thread che effettua la lettura non è sufficientemente veloce o se viene sospeso (anche solo per pochi ms).</span></p>
<p><span class="srcSentence">Fortunatamnte la soluzione esiste: basta settare un buffer di ricezione più grande. </span></p>
<blockquote><p><span class="srcSentence">unsigned bufferSize = 1024 * 1024;<br />
::setsockopt(s_, SOL_SOCKET, SO_RCVBUF, (const char FAR*)&amp;amp;bufferSize, sizeof(bufferSize));<br />
</span></p></blockquote>
<p><span class="srcSentence">con 1 mbyte di buffer, a 10 mbs, si possono gestire circa 800 ms di flusso: si tratta di un valore congruo che ci ha permesso di eliminare del tutto le perdite.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreamurru.com/2009/01/19/perdita-di-pacchetti-ad-alti-bitrate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eccesso di successo</title>
		<link>http://www.andreamurru.com/2008/11/21/eccesso-di-successo/</link>
		<comments>http://www.andreamurru.com/2008/11/21/eccesso-di-successo/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 11:19:39 +0000</pubDate>
		<dc:creator>Andrea Murru</dc:creator>
				<category><![CDATA[Attualità]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[affidabilità]]></category>
		<category><![CDATA[efficienza]]></category>
		<category><![CDATA[europeana]]></category>
		<category><![CDATA[scalabilità]]></category>

		<guid isPermaLink="false">http://andreamurru.wordpress.com/?p=56</guid>
		<description><![CDATA[E&#8217; stato lanciato nei giorni scorsi Europeana, quella che sarà la più grande libreria europea con ben due milioni di opere in 23 lingue, fra testi, spartiti, registrazioni audio, video e immagini: tutto pubblicato gratuitamente sul Web per la consultazione degli utenti. Peccato che il servizio sia già stato sospeso: The Europeana site is temporarily [...]]]></description>
			<content:encoded><![CDATA[<p>E&#8217; stato lanciato nei giorni scorsi <a title="La più grande libreria europea" href="http://www.europeana.eu/portal/" target="_blank">Europeana</a>, quella che sarà la più grande libreria europea con ben <strong>due milioni di opere</strong> in 23 lingue, fra testi, spartiti,  registrazioni audio, video e immagini: tutto pubblicato gratuitamente sul Web  per la consultazione degli utenti.</p>
<p>Peccato che il servizio sia già stato sospeso:</p>
<blockquote><p>The Europeana site is temporarily not accessible due to overwhelming interest  after its launch (10 million hits per hour).</p>
<p>We are doing our utmost to reopen Europeana in a more robust version as soon  as possible.</p></blockquote>
<p>La domanda che mi faccio è questa: non sviluppare il sistema perché sopportasse un simile carico è stato un errore completo ed inqualificabile o ha una sua ratio ?</p>
<p>Nel mondo reale, è infatti necessario fare delle scelte che limitino il consumo di alcune risorse (ad esempio il tempo) nella fase di realizzazione di un progetto, con delle conseguenze (non sempre completamente prevedibili) su alcune caratteristiche finali quali ad esempio l&#8217;efficienza, scalabilità e affidabilità.</p>
<p>In quasi tutti i progetti sui quali mi è capitato di lavorare, (valutando a posteriori la cosa) abbiamo dedicato troppe risorse all&#8217;efficienza (specie locale), meno (ma comunque troppa) alla scalabilità (visti i carichi effettivi che abbiamo dovuto sopportare) e troppa anche all&#8217;affidabilità, nel senso soprattutto che abbiamo utilizzato architetture eccessivamente complesse, senza reali vantaggi nel contesto operativo e anzi con qualche problematica dovuta proprio al sistema di monitoraggio. Ovviamente ogni considerazione è fortemente relativa al singolo progetto, ma mi sento di fare qualche considerazione in generale:</p>
<p><em>I più grandi vantaggi in termini di efficienza, scalabilità ed affidabilità si consegueno a livello di architettura di sistema e un&#8217;architettura semplice, pur anche con alcuni limiti bene noti, è il miglior investimento possibile sia in termini di risorse utilizzate che di effettivi risultati ottenibili.</em></p>
<p>Tornando al caso Europeana, credo che non siano giustificabili. Hanno commesso un grave errore di progettazione, visto che in un caso del genere la scalabilità non puo&#8217; non essere considerata un obbiettivo prioritario. Brutta figura.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreamurru.com/2008/11/21/eccesso-di-successo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>C plus plus vs C</title>
		<link>http://www.andreamurru.com/2008/10/12/c-plus-plus-vs-c/</link>
		<comments>http://www.andreamurru.com/2008/10/12/c-plus-plus-vs-c/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 15:31:16 +0000</pubDate>
		<dc:creator>Andrea Murru</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Carlo Pescio]]></category>
		<category><![CDATA[Linus Torvalds]]></category>
		<category><![CDATA[super-programmatore]]></category>

		<guid isPermaLink="false">http://andreamurru.wordpress.com/?p=42</guid>
		<description><![CDATA[Una poco velata critica al C++ da parte di Linus Torvalds, mi ha portato a fare qualche considerazione sul C++ e più in generale sulle motivazioni delle scelte (apparentemente solo di natura tecnica) dei programmatori. Devo premettere che sono di parte, visto che da molti anni utilizzo (con soddisfazione) principalmente il C++. D&#8217;altro canto ho [...]]]></description>
			<content:encoded><![CDATA[<p>Una poco velata <a title="C++ Sucks" href="http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918" target="_blank">critica</a> al C++ da parte di Linus Torvalds, mi ha portato a fare qualche considerazione sul C++ e più in generale sulle motivazioni delle scelte (apparentemente solo di natura tecnica) dei programmatori.</p>
<p>Devo premettere che sono di parte, visto che da molti anni utilizzo (con soddisfazione) principalmente il C++. D&#8217;altro canto ho comunque avuto a che fare nel corso degli anni con altri linguaggi, ambienti e procedure di sviluppo, in progetti molto diversi per numero di partecipanti, complessità e obbiettivi. Spero quindi di poter fare delle considerazioni non partigiane&#8230;. <img src='http://www.andreamurru.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Fondamentalmente io non concordo con Torvalds, ma paradossalmente concordo per certi versi con lui quando dice</p>
<blockquote>
<pre>I've come to the conclusion that any programmer that would prefer the project to be
in C++ over C is likely a programmer that I really <strong>*would*</strong> prefer to piss
off, so that he doesn't come and screw up any project I'm involved with.</pre>
</blockquote>
<p>Semplicemente io non vorrei assolutamente nessun programmatore nel mio team che preferisse un qualsiasi linguaggio (ma anche tool o sistema operativo), in modo INCONDIZIONATO, non relazionato agli obbiettivi del progetto.</p>
<p>Questo non vuol dire affatto che la scelta non debba dipendere ANCHE dalle proprie inclinazioni personali o quanto meno dal proprio patrimonio di conoscenze (stando attenti a non infilarsi nelle profezie auto-avveranti di Carlo Pescio). Vuol dire semplicemente e molto banalmente che la scelta di un linguaggio, un tool o una metodologia da utilizzare deve dipendere dagli obbiettivi di progetto e non da valori pure apparentemente validi in generale.</p>
<p>Più in generale si tratta di una forma di dis-allineamento tra i VALORI del progetto (spesso ad esempio i tempi di rilascio) e quelli ritenuti tali dagli sviluppatori (efficienza, scalabilità, ma anche documentazione, copertura dei test di unità etc). E&#8217; vero che spesso non è affatto facile capire quali siano i valori del progetto (anche per responsabilità del menagement) e che non è certo compito degli sviluppatori definirli, ma è sicuramente loro compito comprenderli e lavorare onestamente al fine di massimizzarli.</p>
<p>L&#8217;errore più comune è quello di scambiare strumenti con obbiettivi: un programma deve fare senza errori quello che gli utenti si aspettano, non avere la barra verde dei test unità sulla macchina degli sviluppatori. O aprossimarli con valori considerati sempre validi: ad esempio le prestazioni (cosa spesso non utile o magari da ricercare su piani molto diversi dell&#8217;ottimizzazione delle strutture base) o la flessibilità che viene intesa in termini estremamente tecnici (come magari la molto remota possibilità di utilizzare db server differenti), mentre ciò che sarebbe veramente utile è la flossibilità di reagire a cambiamenti delle spicifiche.</p>
<p>La cosa più interessante è che, paradossalmente, questi &#8220;errori di prospettiva&#8221; sono possibili SOLO a programmatori che abbiano un discreto grado di conoscenze e anche una certa dose di passione e che quindi potrebbero anche essere considerati dei buoni programmatori. Sicuramente però sarebbero dei pessimi team leader, quelli che Carlo Pescio chiama super-programmatori e che sono ottimi per portare a compimento il progetto che esiste nella loro mente (non quello che gli viene affidato).</p>
<p>In questo senso è più probabile che un super-programmatore usi il C++ piuttosto che il C ? Probabilmente sì, visto che è assolutamnete coerente con la sua psicologia utilizzare lo strumento più avanzato, innovativo e &#8220;potente&#8221; (qualsiasi cosa voglia dire). Ma a dire il vero (e per le stesse motivazioni) è più probabile che usi Java (o magari Ruby o Python) e che sia un patito di linux, dell&#8217;open source e soprattutto dell&#8217;extreme programming.</p>
<p>Nel merito delle caratteristiche tecniche del C++ rispetto al C o ad altri linguaggi invece è meglio che parli in un altro post&#8230; questo è già troppo lungo così <img src='http://www.andreamurru.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreamurru.com/2008/10/12/c-plus-plus-vs-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

