<?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>Marco Pracucci &#187; Programming</title>
	<atom:link href="http://blog.pracucci.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.pracucci.com</link>
	<description>Marco Pracucci - Technology news and blog</description>
	<lastBuildDate>Thu, 25 Feb 2010 12:39:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Zend Framework and Session Cookies across Subdomains</title>
		<link>http://blog.pracucci.com/2008/09/24/zend-framework-and-session-cookies-across-subdomains/</link>
		<comments>http://blog.pracucci.com/2008/09/24/zend-framework-and-session-cookies-across-subdomains/#comments</comments>
		<pubDate>Wed, 24 Sep 2008 17:00:06 +0000</pubDate>
		<dc:creator>Marco Pracucci</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[cookie]]></category>
		<category><![CDATA[session]]></category>
		<category><![CDATA[subdomain]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://blog.pracucci.com/2008/09/24/zend-framework-and-session-cookies-across-subdomains/</guid>
		<description><![CDATA[Session support in PHP consists of a way to preserve certain data    across subsequent accesses. Each visitor accessing the web site is assigned a unique id, the    session id. This session id is either stored in a cookie or propagated in the url. The best solution is to store [...]]]></description>
			<content:encoded><![CDATA[<p>Session support in PHP consists of a way to preserve certain data    across subsequent accesses. Each visitor accessing the web site is assigned a unique id, the    <strong>session id</strong>. This session id is either stored in a <strong>cookie</strong> or propagated in the url. The best solution is to store it in a cookie.</p>
<p>The cookie used to store the session id sets, by default, the cookie domain to the current domain. This means that if you are visiting www.domain.com, the session id will be stored in a cookie bounded to the domain www.domain.com. This behavior leads to a problem: if your site uses multiple subdomains, the session won&#8217;t be shared between the site&#8217;s subdomains.</p>
<p>To solve this problem you have to share the cookie between all subdomains, setting its domain it to &#8220;.domain.com&#8221;. The following code shows how to change the session cookie domain with <strong>Zend Framework</strong>:</p>
<pre class="prettyprint">
Zend_Session::start(array('cookie_domain' =&gt; '.domain.com'));</pre>
<h3>Browers compatibility</h3>
<p>The prefix dot in &#8220;.domain.com&#8221; is not always necessary, but it&#8217;s <strong>highly recommended</strong> to support all browsers.</p>
<h3>References</h3>
<ul>
<li><a href="http://www.jontodd.com/2006/08/10/php-session-cookie-multiple-domains/" title="PHP session cookie multiple domains" target="_blank">PHP session cookie multiple domains</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.pracucci.com/2008/09/24/zend-framework-and-session-cookies-across-subdomains/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Watermarks with PHP and IMagick</title>
		<link>http://blog.pracucci.com/2008/08/30/watermarks-with-php-and-imagick/</link>
		<comments>http://blog.pracucci.com/2008/08/30/watermarks-with-php-and-imagick/#comments</comments>
		<pubDate>Sat, 30 Aug 2008 16:52:10 +0000</pubDate>
		<dc:creator>Marco Pracucci</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[imagemagick]]></category>
		<category><![CDATA[imagick]]></category>
		<category><![CDATA[watermark]]></category>

		<guid isPermaLink="false">http://blog.pracucci.com/2008/08/30/automatic-selection-of-the-best-image-corner-where-apply-a-watermark-with-php-and-imagick/</guid>
		<description><![CDATA[There are a lot of web sites, online communities and social networks that apply a watermark over photos uploaded from users. This watermark, usually a logo or a text with the service name, should be applied in a region of the image where there are no important things, because no one likes to see a [...]]]></description>
			<content:encoded><![CDATA[<p>There are a lot of web sites, online communities and social networks that apply a <strong>watermark over photos uploaded from users</strong>. This watermark, usually a logo or a text with the service name, should be applied in a region of the image where there are no important things, because no one likes to see a text over his face.</p>
<p>This simple feature requires an algorithm to automatically select the best corner where apply the watermark.</p>
<h3>The algorithm</h3>
<p>The watermark should be placed in the corner with the lowest number of graphic details, in order to be as less invasive as possible. To select the best corner, the proposed algorithm <strong>counts the number of different colours inside each corner</strong> and applies the watermark to the <strong>corner with the lowest number of different colours</strong>.</p>
<p>This algorithm is very simple but effective, and can be described with the following steps:</p>
<ol>
<li>For each candidate image region (corners) calculate the number of different colours</li>
<li>Select the image region with the lowest number of different colours</li>
<li>Apply the watermark to the selected region</li>
</ol>
<h3>The code</h3>
<p>Here is the code the <strong>PHP</strong> code of a function that selects the best corner of an image and then apply the watermark.</p>
<pre class="prettyprint">
/**
 * Draw a watermark over an image (the watermark position is
 * selected automatically) and returns true. If the watermark
 * is bigger than the image, this method returns false.
 *
 * @param IMagick $image
 * @param IMagick $watermark
 * @param int $padding
 * @return bool
 */
private function drawWatermark($image, $watermark, $padding = 0)
{
	// Check if the watermark is bigger than the image
	$image_width 		= $image-&gt;getImageWidth();
	$image_height 		= $image-&gt;getImageHeight();
	$watermark_width 	= $watermark-&gt;getImageWidth();
	$watermark_height 	= $watermark-&gt;getImageHeight();

	if ($image_width &lt; $watermark_width + $padding || $image_height &lt; $watermark_height + $padding) {
		return false;
	}

	// Calculate each position
	$positions = array();
	$positions[] = array(0 + $padding, 0 + $padding);
	$positions[] = array($image_width - $watermark_width - $padding, 0 + $padding);
	$positions[] = array($image_width - $watermark_width - $padding, $image_height - $watermark_height - $padding);
	$positions[] = array(0 + $padding, $image_height - $watermark_height - $padding);

	// Initialization
	$min 		= null;
	$min_colors = 0;

	// Calculate the number of colors inside each region
	// and retrieve the minimum
	foreach($positions as $position)
	{
		$colors = $image-&gt;getImageRegion(
			$watermark_width,
			$watermark_height,
			$position[0],
			$position[1])-&gt;getImageColors();

		if ($min === null || $colors &lt;= $min_colors)
		{
			$min 		= $position;
			$min_colors = $colors;
		}
	}

	// Draw the watermark
	$image-&gt;compositeImage(
		$watermark,
		Imagick::COMPOSITE_OVER,
		$min[0],
		$min[1]);

	return true;
}</pre>
<p><span id="more-104"></span></p>
<h3>Testing the algorithm</h3>
<p>I have taken three photos from <a href="http://www.tonight.eu" title="Tonight - European nightlife social network" target="_blank">www.tonight.eu</a> and tried to apply the watermark, using the proposed algorithm. For each photo there are two images:</p>
<ol>
<li>the first one shows the number of different colours in each candidate region</li>
<li>the second one shows the photo after the watermark has been applied.</li>
</ol>
<p>The results are quite good.</p>
<p><a href="http://milano.tonight.eu/locale/old_fashion_cafe" title="Milano tonight - Old fashion cafe" target="_blank"><img src="http://blog.pracucci.com/wp-content/uploads/2008/08/1a.jpg" alt="1a.jpg" /></a></p>
<p><a href="http://milano.tonight.eu/locale/old_fashion_cafe" title="Milano tonight - Old fashion cafe" target="_blank"><img src="http://blog.pracucci.com/wp-content/uploads/2008/08/1b.jpg" alt="1b.jpg" /></a></p>
<p><a href="http://milano.tonight.eu/locale/nottingham_forest" title="Milano tonight - Nottingham forest" target="_blank"><img src="http://blog.pracucci.com/wp-content/uploads/2008/08/2a.jpg" alt="2a.jpg" /></a></p>
<p><a href="http://milano.tonight.eu/locale/nottingham_forest" title="Milano tonight - Nottingham forest" target="_blank"><img src="http://blog.pracucci.com/wp-content/uploads/2008/08/2b.jpg" alt="2b.jpg" /></a></p>
<p><a href="http://milano.tonight.eu/locale/plastic" title="Milano tonight - Plastic" target="_blank"><img src="http://blog.pracucci.com/wp-content/uploads/2008/08/3a.jpg" alt="3a.jpg" /></a></p>
<p><a href="http://milano.tonight.eu/locale/plastic" title="Milano tonight - Plastic" target="_blank"><img src="http://blog.pracucci.com/wp-content/uploads/2008/08/3b.jpg" alt="3b.jpg" /></a></p>
<h3>Feedback</h3>
<p>Please, give me a feedback and leave a comment to this post.</p>
<h3>References</h3>
<ul>
<li><a href="http://www.php.net/manual/en/book.imagick.php" target="_blank" title="IMagick">IMagick </a></li>
<li><a href="http://www.tonight.eu" title="Tonight - European nightlife social network" target="_blank">Tonight.eu</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.pracucci.com/2008/08/30/watermarks-with-php-and-imagick/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programming languages context-switch</title>
		<link>http://blog.pracucci.com/2008/04/16/programming-languages-context-switch/</link>
		<comments>http://blog.pracucci.com/2008/04/16/programming-languages-context-switch/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 17:10:58 +0000</pubDate>
		<dc:creator>Marco Pracucci</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.pracucci.com/2008/04/16/programming-languages-context-switch/</guid>
		<description><![CDATA[Lavorando a mobitouch cube, mi capita spesso di passare da un linguaggio di programmazione ad un altro. E così scrivo codice Java in PHP, C in Java, Java in Javascript&#8230; con il risultato che non ci capisco più niente!
Maybe, I just need an holiday&#8230;

]]></description>
			<content:encoded><![CDATA[<p>Lavorando a <a href="http://blog.pracucci.com/2008/02/23/mobitouch-cube-proximity-marketing-30/" title="Mobitouch cube - Proximity marketing 3.0">mobitouch cube</a>, mi capita spesso di passare da un linguaggio di programmazione ad un altro. E così scrivo codice <strong>Java in PHP</strong>, <strong>C in Java</strong>, <strong>Java in Javascript</strong>&#8230; con il risultato che non ci capisco più niente!</p>
<p>Maybe, I just need an holiday&#8230;</p>
<p style="text-align: center"><img src="http://blog.pracucci.com/wp-content/uploads/2008/04/programming_languages.jpg" alt="Programming languages caricatures" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pracucci.com/2008/04/16/programming-languages-context-switch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Archive_Tar 1.3.2 &#8211; Gzip/bzip2 bug fix</title>
		<link>http://blog.pracucci.com/2008/03/25/archive_tar-132-gzipbzip2-bug-fix/</link>
		<comments>http://blog.pracucci.com/2008/03/25/archive_tar-132-gzipbzip2-bug-fix/#comments</comments>
		<pubDate>Tue, 25 Mar 2008 15:57:08 +0000</pubDate>
		<dc:creator>Marco Pracucci</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[archive_tar]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[fix]]></category>

		<guid isPermaLink="false">http://blog.pracucci.com/2008/03/25/archive_tar-132-gzipbzip2-bug-fix/</guid>
		<description><![CDATA[Ho trovato un bug nella classe Archive_Tar che si verifica quando si prova ad aggiungere ad un archivio compresso (gzip o bzip2) un file che, al suo interno, contiene il blocco utilizzato per delimitare la fine dell&#8217;archivio tar stesso (null padding di 1024 byte).
Questa patch, applicata alla versione 1.3.2 di Archive_Tar, dovrebbe risolvere il problema.
Riferimenti

PHP [...]]]></description>
			<content:encoded><![CDATA[<p>Ho trovato un bug nella classe <strong>Archive_Tar</strong> che si verifica quando si prova ad aggiungere ad un archivio compresso (gzip o bzip2) un file che, al suo interno, contiene il blocco utilizzato per delimitare la fine dell&#8217;archivio tar stesso (null padding di 1024 byte).</p>
<p>Questa <a href="http://download.pracucci.com/php/archive_tar-1.3.2-end_block_fix.diff">patch</a>, applicata alla versione 1.3.2 di Archive_Tar, dovrebbe risolvere il problema.</p>
<h3>Riferimenti</h3>
<ul>
<li><a href="http://pear.php.net/package/Archive_Tar">PHP &#8211; Archive_Tar</a></li>
<li><a href="http://download.pracucci.com/php/archive_tar-1.3.2-end_block_fix.diff">Patch</a></li>
<li><a href="http://en.wikipedia.org/wiki/Tar_(file_format)" title="Tar file format">Formato tar</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.pracucci.com/2008/03/25/archive_tar-132-gzipbzip2-bug-fix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mamma, fix my bug</title>
		<link>http://blog.pracucci.com/2008/02/04/mamma-fix-my-bug/</link>
		<comments>http://blog.pracucci.com/2008/02/04/mamma-fix-my-bug/#comments</comments>
		<pubDate>Sun, 03 Feb 2008 23:37:37 +0000</pubDate>
		<dc:creator>Marco Pracucci</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[fix my bug]]></category>

		<guid isPermaLink="false">http://blog.pracucci.com/2008/02/04/mamma-fix-my-bug/</guid>
		<description><![CDATA[L&#8217;utopia di un programmatore è quella di credere che un giorno riuscirà a scrivere codice perfetto, senza la presenza di un singolo bug. Ma questo non sarà mai possibile, almeno non su questo pianeta, e voi lo sapete bene. E sembra che non sia nemmeno una questione economica, altrimenti non mi spiego com&#8217;è possibile che [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;<strong>utopia</strong> di un programmatore è quella di credere che un giorno riuscirà a scrivere codice perfetto, senza la presenza di un singolo bug. Ma questo non sarà mai possibile, almeno non su questo pianeta, e voi lo sapete bene. E sembra che non sia nemmeno una questione economica, altrimenti non mi spiego com&#8217;è possibile che Microsoft sia riuscita a partorire alcuni dei suoi prodotti (vedi <a href="http://blog.pracucci.com/2008/01/04/downgrade-licenza-da-windows-vista-a-windows-xp/" title="Windows Vista - downgrade">Windows Vista</a>).</p>
<p>Nonostante questa consapevolezza, ogni volta che viene trovato un mio bug su un software in produzione (o, come in questo caso, in beta) è come se il mio orgoglio venisse ferito. Ritengo di scrivere del buon codice, sono abbastanza metodico nei miei test, eppure c&#8217;è sempre un errore (più o meno banale) del quale non mi accorgo prima di rilasciare una versione.</p>
<p>Ma non ho scritto questo post per annoiarvi con i miei sensi di colpa, quindi veniamo al dunque!</p>
<h3>Fix my bug</h3>
<p><img src="http://blog.pracucci.com/wp-content/uploads/2008/02/fix-my-bug.jpg" alt="Fix my bug" align="right" hspace="10" /></p>
<p>Sabato pomeriggio.</p>
<p>Sono lontano un&#8217;ora e mezza di auto da casa, non ho il portattile con me e ricevo una chiamata da Bask, il mio capo: &#8220;Ho installato <strong><a href="http://www.youpeople.it" title="YouPeople - SMS gratis">youPeople</a></strong> al &lt;locale&gt; di &lt;città&gt;, ma non riesco ad inviare messaggi dal mio Sony Ericsson&#8221;.</p>
<p>Lasciamo da parte il mio sconforto. Ho un problema che devo risolvere, ma non ho il portattile e nemmeno tanta voglia di farmi 3 ore di auto per &#8220;passare&#8221; da casa a lavorarci. Ho bisogno di una soluzione.</p>
<p>Ho la possibilità di accedere ad Internet da dove mi trovo, ma non posso accedere al server in ufficio perchè (in realtà, non so bene perchè) chi ha configurato il firewall non ha lasciato l&#8217;accesso SSH dall&#8217;esterno. Fortunatamente ho l&#8217;accesso HTTPS a Trac, il software di gestione dei progetti che usiamo, il quale ha una vista (in lettura) sul repository subversion.</p>
<p>Dopo aver downlodato alcuni sorgenti e trovato il bug, resta il problema di come correggerlo. Avrei bisogno di collegarmi alla VPN aziendale, ma non ho le chiavi di accesso con me. Chiamo un collega, ma nemmeno lui ha il portattile al seguito, quindi rimane una sola soluzione: <strong>chiamare la mamma</strong>!</p>
<p>Avete capito bene. La <em>brillante</em> idea che ho avuto è stata quella di chiamare mia mamma a casa, farle accendere il mio computer, aprire l&#8217;IDE, correggere il bug (per fortuna, ha dovuto modificare una singola linea di codice) e committare nel repository.</p>
<p>Tempo impiegato: 40 minuti. Non male.</p>
<p>Fortunatamente, diversi mesi fa ho creato uno script cron che ad ogni ora crea una build del nostro progetto, a partire dal repository subversion. In questo modo, nel server di sviluppo (utilizzato anche per la beta) il progetto viene aggiornato ogni ora. Questo significa che è bastato committare la modifica ed attendere lo scoccare dell&#8217;ora successiva affinchè venisse aggiornato il nostro beta-server.</p>
<h3>The end</h3>
<p>P.S. Sono fiero del logo in stile &#8220;Pimp My Ride&#8221; che sono riuscito a creare in pochi minuti. Nonostante io non sia un grafico e non abbia nessuna intenzione di diventarlo.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pracucci.com/2008/02/04/mamma-fix-my-bug/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ShellExec &#8211; Java System.exec() on PocketPC</title>
		<link>http://blog.pracucci.com/2007/11/27/shellexec-java-systemexec-on-pocketpc/</link>
		<comments>http://blog.pracucci.com/2007/11/27/shellexec-java-systemexec-on-pocketpc/#comments</comments>
		<pubDate>Tue, 27 Nov 2007 22:59:17 +0000</pubDate>
		<dc:creator>Marco Pracucci</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[J2ME]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[cldc]]></category>
		<category><![CDATA[exec]]></category>
		<category><![CDATA[shellexec]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://blog.pracucci.com/2007/11/27/shellexec-java-systemexec-on-pocketpc/</guid>
		<description><![CDATA[Più di due anni fa, mentre lavoravo su Blues per l&#8217;Università di Bologna, ho avuto l&#8217;esigenza di eseguire una serie di comandi shell, da un&#8217;applicazione Java (J2ME/CDC) per palmari HP iPaq (IBM J9 VM). Questa funzionalità, prevista dalle API Java, in realtà non era implementata sulla maggior parte delle virtual machine CDC/PersonalProfile, a causa del [...]]]></description>
			<content:encoded><![CDATA[<p align="justify"><img src="http://blog.pracucci.com/wp-content/uploads/2007/12/java_logo.jpg" alt="Java" align="right" hspace="19" />Più di due anni fa, mentre lavoravo su <strong><a href="http://blog.pracucci.com/projects/blues-bluetooth-context-aware-system/" title="Blues - Bluetooth Context-Aware System">Blues</a></strong> per l&#8217;Università di Bologna, ho avuto l&#8217;esigenza di eseguire una serie di comandi shell, da un&#8217;applicazione Java (<strong>J2ME/CDC</strong>) per palmari HP iPaq (IBM J9 VM). Questa funzionalità, prevista dalle API Java, in realtà non era implementata sulla maggior parte delle <em>virtual machine</em> CDC/<strong>PersonalProfile</strong>, a causa del fatto che non era possibile rispettare pienamente le specifiche.</p>
<p style="text-align: center"><a href="http://blog.pracucci.com/projects/shellexec/" title="ShellExec - Java System.exec() in PocketPC"><img src="http://blog.pracucci.com/wp-content/uploads/2007/12/shellexec.png" alt="ShellExec" border="0" /></a></p>
<p>Dopo essermi documentato in rete, ho deciso di sviluppare una piccola libreria nativa, da interfacciare attraverso JNI alla mia applicazione Java, per implementare una versione <em>ridotta</em> della <strong><em>System.exec()</em></strong> e sopperire così alle carenze della JVM che stavo utilizzando. La libreria, chiamata <strong>ShellExec</strong>, la rilasciai pubblicamente con licenza GPL (<a href="http://download.pracucci.com/java/shellexec/" title="Download ShellExec">repository</a>).</p>
<p>A distanza di più di due anni, continuo a ricevere mail che mi chiedono informazioni e/o aiuti sull&#8217;utilizzo di questa libreria, segnale del fatto che la libreria continua a svolgere abbastanza degnamente il suo <em>sporco lavoro</em>. L&#8217;ultima mail è arrivata oggi:</p>
<blockquote><p><em>Oh, and by the way ShellExec works on my device like a champion.  I&#8217;m using a Symbol (Motorola) MC70 running Windows Mobile 5.0, using the IBM J9 VM, version 2.3 (CDC 1.0/PP 1.0) </em></p></blockquote>
<p>Maggiori informazioni:</p>
<ul>
<li><a href="http://blog.pracucci.com/projects/shellexec/" title="ShellExec">http://blog.pracucci.com/projects/shellexec/</a></li>
<li><a href="http://download.pracucci.com/java/shellexec/" title="Download ShellExec">http://download.pracucci.com/java/shellexec/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.pracucci.com/2007/11/27/shellexec-java-systemexec-on-pocketpc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blues &#8211; Bluetooth Context-Aware System</title>
		<link>http://blog.pracucci.com/2007/03/26/blues-bluetooth-context-aware-system/</link>
		<comments>http://blog.pracucci.com/2007/03/26/blues-bluetooth-context-aware-system/#comments</comments>
		<pubDate>Mon, 26 Mar 2007 22:44:30 +0000</pubDate>
		<dc:creator>Marco Pracucci</dc:creator>
				<category><![CDATA[Bluetooth]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[J2ME]]></category>
		<category><![CDATA[J2SE]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[blues]]></category>
		<category><![CDATA[context-aware]]></category>
		<category><![CDATA[museum]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[ubiquitous]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://blog.pracucci.com/2007/03/26/blues-bluetooth-context-aware-system/</guid>
		<description><![CDATA[ Blues è un&#8217;infrastruttura che permette di fornire servizi context-aware a dispositivi mobili, quali cellulari, smartphone e palmari, utilizzando la tecnologia Bluetooth. Il sistema è stato progettato e sviluppato da Marco Pracucci, in collaborazione con il Dr. Stefano Cacciaguerra ed il Prof. Giorgio Casadei, e finanziato dal Sistema Museale d&#8217;Ateneo dell&#8217;Università di Bologna e da [...]]]></description>
			<content:encoded><![CDATA[<p> Blues è un&#8217;infrastruttura che permette di fornire <strong>servizi context-aware a dispositivi mobili</strong>, quali cellulari, smartphone e palmari, utilizzando la tecnologia <strong>Bluetooth</strong>. Il sistema è stato progettato e sviluppato da Marco Pracucci, in collaborazione con il Dr. Stefano Cacciaguerra ed il Prof. Giorgio Casadei, e finanziato dal Sistema Museale d&#8217;Ateneo dell&#8217;Università di Bologna e da Ser.In.Ar. (Cesena).</p>
<h3>Obiettivo</h3>
<p>L&#8217;obiettivo di Blues è quello di fornire una piattaforma che faciliti la realizzazione di servizi context-aware, ai quali un utente puo&#8217; accedere utilizzando un telefono cellulare o un palmare dotati di tecnologia Bluetooth.<br />
<span id="more-9"></span></p>
<h3>Architettura del sistema</h3>
<p>L&#8217;architettura di Blues è distribuita su due livelli ed è costituita da un insieme di <strong>stazioni base</strong>, coordinate e gestite da un <strong>server centralizzato</strong>. Le stazioni base agiscono come access point Bluetooth: forniscono la connettività Bluetooth ai dispositivi mobili presenti nell&#8217;area e permetto a quest&#8217;ultimi di accedere ai servizi disponibili in ciascun&#8217;area. Il server centralizzato coordina e gestisce le stazioni base, ed in particolare permette di localizzare gli utenti all&#8217;interno del sistema, configurare ed aggiornare i servizi, monitorare lo stato di tutto il sistema.</p>
<p style="text-align: center"><img src="http://blog.pracucci.com/wp-content/uploads/2007/12/blues_architecture.png" alt="Blues - Architecture" /></p>
<p>L&#8217;area totale di copertura del sistema viene divisa in piccole celle (in uno scenario <em>indoor</em> paragonabile alla dimensione di una stanza), all&#8217;interno di ciascuna delle quali viene installata una stazione base. Lo scopo di ciascuna stazione base è quello di fornire connettività Bluetooth ai dispositivi mobili presenti all&#8217;interno della cella stessa. In questo modo è possibile coprire una vasta area, riducendo le principali limitazioni introdotte dalla tecnologia Bluetooth, quali il corto raggio d&#8217;azione (circa 20m).</p>
<h3>Servizi context-aware</h3>
<p>Un servizio context-aware si basa sull&#8217;analisi del <strong>contesto</strong> nel quale si trova l&#8217;utente, definito da un insieme di parametri:</p>
<ul>
<li><strong>Profilo utente</strong>: scheda utente con i suoi dati personali, interessi e preferenze</li>
<li><strong>Locazione spaziale</strong>: coordinate spaziali dell&#8217;utente all&#8217;interno dell&#8217;area di copertura del sistema (in quest&#8217;ottica un servizio context-aware può essere considerato come un&#8217;estensione del <em>location based</em>)</li>
<li><strong>Dispositivo mobile</strong>: caratteristiche del dispositivo/terminale mobile utilizzato dall&#8217;utente per accedere al sistema</li>
<li><strong>Data/orario</strong>: intervallo temporale nel quale l&#8217;utente accede al sistema</li>
</ul>
<p>In quest&#8217;ottica, è possibile realizzare servizi che modificano il proprio comportamento, le informazioni che forniscono e la loro interfaccia, in base al contesto nel quale si trova ciascun utente.</p>
<h3>Caso di studio / Esempi di servizi</h3>
<p>Blues può essere utilizzato all&#8217;interno di un <strong>museo</strong> come <strong>servizio di informazione e guida elettronica per i visitatori</strong>. In particolare, è interessante notare che attraverso questo sistema risulta possibile aumentare il contenuto informativo del museo, personalizzando la visita al suo interno. I visitatori del museo, ad esempio, possono appartenere a differenti profili in base all&#8217;età e ai loro studi: scuole medie inferiori, superiori ed università. Le informazioni del profilo di ciascun utente vengono utilizzate per fornire loro contenuti e servizi personalizzati, durante la visita all&#8217;interno delle varie stanze tematiche (in figura).</p>
<p style="text-align: center"><img src="http://blog.pracucci.com/wp-content/uploads/2007/12/blues_museum.png" alt="Blues - Museum map" /></p>
<p>In questo caso di studio sono stati realizzati due servizi: il primo è un servizio di <strong>e-learning</strong> che permette di valutare le conoscenze e le competenze acquisite durante la visita del museo, mentre il secondo fornisce una serie di <strong>contenuti multimediali aggiuntivi</strong> (audio, video ed ipertesti) dipendenti dal contesto di ciascun visitatore.</p>
<p>Il <strong>servizio di e-learning</strong> permette di valutare le competenze e le conoscenze dei visitatori, attraverso un questionario elettronico proposto loro durante la visita all&#8217;interno del Museo. Nell&#8217;ottica contex-aware, la difficoltà delle domande è dipendente dalle conoscenze del visitatore e la loro tipologia varia in base alla stanza del museo nella quale egli si trova. Il risultato dell&#8217;intero questionario, infine, viene calcolato dal sistema al termine della visita e può essere consegnato al visitatore stesso.</p>
<p>Il <strong>servizio contenuti multimediali</strong> fornisce ad un visitatore, in relazione al suo profilo ed alla stanza nella quale si trova, una lista di contenti multimediali ai quali può accedere attraverso una semplice interfaccia grafica. Questa interfaccia permette di visualizzare (o di ascoltare) un insieme di risorse, come ipertesti, audio e video sul proprio dispositivo mobile oppure di proiettarli sul maxi-schermo della stanza ove si trova.</p>
<h3>Screenshot</h3>
<p><img src="http://blog.pracucci.com/wp-content/uploads/2007/12/blues_login.jpg" alt="Blues - Login" hspace="10" vspace="10" /><img src="http://blog.pracucci.com/wp-content/uploads/2007/12/blues_services.jpg" alt="Blues - Services" hspace="10" vspace="10" /><img src="http://blog.pracucci.com/wp-content/uploads/2007/12/blues_extra_contents.jpg" alt="Blues - Extra contents service" hspace="10" vspace="10" /><img src="http://blog.pracucci.com/wp-content/uploads/2007/12/blues_extra_contents_2.jpg" alt="Blues - Extra contents service" hspace="10" vspace="10" /><img src="http://blog.pracucci.com/wp-content/uploads/2007/12/blues_extra_contents_3.jpg" alt="Blues - Extra contents service" hspace="10" vspace="10" /><img src="http://blog.pracucci.com/wp-content/uploads/2007/12/blues_extra_contents_4.jpg" alt="Blues - Extra contents service" hspace="10" vspace="10" /><img src="http://blog.pracucci.com/wp-content/uploads/2007/12/blues_e_learning.jpg" alt="Blues - E-learning service" hspace="10" vspace="10" /><img src="http://blog.pracucci.com/wp-content/uploads/2007/12/blues_e_learning_2.jpg" alt="Blues - E-learning service" hspace="10" vspace="10" /></p>
<h3>Video</h3>
<p align="center">[youtube JQNWEylcgZ4]</p>
<h3>Maggiori informazioni</h3>
<p>Pubblicazioni scientifiche:</p>
<ul>
<li><a href="http://download.pracucci.com/papers/Blues%20-%20un%20sistema%20context-aware%20bluetooth%20che%20fornisce%20servizi%20a%20dispositivi%20mobili.pdf" target="_self">Blues &#8211; un sistema context-aware bluetooth che fornisce servizi a dispositivi mobili</a> (PDF &#8211; italiano)</li>
</ul>
<p>Presentazioni:</p>
<ul>
<li><a href="http://download.pracucci.com/slides/Blues%20-%20AICA%202006.pdf" target="_self">Blues &#8211; AICA 2006</a> (PDF &#8211; italiano)</li>
<li><a href="http://download.pracucci.com/slides/Blues%20-%20Introduzione.pdf" target="_self">Introduzione a Blues</a> (PDF &#8211; italiano)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.pracucci.com/2007/03/26/blues-bluetooth-context-aware-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ezXML &#8211; Indentazione di un documento XML</title>
		<link>http://blog.pracucci.com/2006/11/22/ezxml-indentazione-di-un-documento-xml/</link>
		<comments>http://blog.pracucci.com/2006/11/22/ezxml-indentazione-di-un-documento-xml/#comments</comments>
		<pubDate>Wed, 22 Nov 2006 21:38:31 +0000</pubDate>
		<dc:creator>Marco Pracucci</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[ezxml]]></category>
		<category><![CDATA[indent]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://blog.pracucci.com/2006/11/22/ezxml-indentazione-di-un-documento-xml/</guid>
		<description><![CDATA[ezXML è una libreria opensource, sviluppata in C, per il parsing di documenti XML. La sua semplicità di utilizzo, le buone performance e le sue ridotte dimensioni (compilata in meno di 20K) la rendono particolarmente adatta nello sviluppo di applicazioni per dispositivi embedded (utilizzo questa libreria su un dispositivo basato su processore ARM).
Una delle funzionalità [...]]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://ezxml.sourceforge.net/" title="ezXML homepage" target="_blank">ezXML</a></strong> è una libreria opensource, sviluppata in C, per il <strong>parsing di documenti XML</strong>. La sua semplicità di utilizzo, le buone performance e le sue <em>ridotte dimensioni</em> (compilata in meno di 20K) la rendono particolarmente adatta nello sviluppo di applicazioni per dispositivi embedded (utilizzo questa libreria su un dispositivo basato su processore ARM).</p>
<p>Una delle funzionalità mancanti nella versione corrente è il supporto per l&#8217;indentazione, durante la scrittura di un documento XML. Dopo aver contattato l&#8217;autore della libreria (Aaron Voisine) ed avergli suggerito l&#8217;introduzione di questa funzionalità, ha rilasciato una patch che aggiunge la funzione <em>ezxml_pretty()</em>,<em> </em>inclusa nella prossima versione della libreria. Nel frattempo potete scaricarla da:</p>
<ul>
<li><a href="http://download.pracucci.com/c/xml/ezxml-pretty-function.c" title="ezXML - Indent function">http://download.pracucci.com/c/xml/ezxml-pretty-function.c</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.pracucci.com/2006/11/22/ezxml-indentazione-di-un-documento-xml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
