<?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>Rainbowbreeze &#187; Java</title>
	<atom:link href="http://www.rainbowbreeze.it/category/tech/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rainbowbreeze.it</link>
	<description>Alfredo Morresi personal website</description>
	<lastBuildDate>Tue, 07 Sep 2010 13:11:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Sun Java JDK 1.6 su Ubuntu/Kubuntu 10.4</title>
		<link>http://www.rainbowbreeze.it/sun-java-jdk-1-6-su-ubuntukubuntu-10-4/</link>
		<comments>http://www.rainbowbreeze.it/sun-java-jdk-1-6-su-ubuntukubuntu-10-4/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 22:14:38 +0000</pubDate>
		<dc:creator>rainbowbreeze</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Kubuntu]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.rainbowbreeze.it/?p=1114</guid>
		<description><![CDATA[Versione di Ubuntu che installi, problemi con il Java che trovi. Dopo la deprecazione nella 9.10 del Java 1.5, in Ubuntu / Kubuntu 10.4 i pacchetti java made-in-sun (anche se ora dovremmo dire made-in-oracle) non sono piu&#8217; presenti nei repository di default. Gli unici rimasti sono quelli OpenJDK (openjdk-6-jdk e openjdk-6-jre), che in genere vanno [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rainbowbreeze.it/wordpress/wp-content/uploads/2009/12/java_logosvg.png"><img class="alignleft size-full wp-image-1014" style="margin: 2px 4px;" title="Java 1.5 in Ubuntu 9.10" src="http://www.rainbowbreeze.it/wordpress/wp-content/uploads/2009/12/java_logosvg.png" alt="" width="107" height="200" /></a>Versione di Ubuntu che installi, problemi con il Java che trovi. Dopo la deprecazione nella 9.10 del Java 1.5, in Ubuntu / Kubuntu 10.4 i pacchetti java made-in-sun (anche se ora dovremmo dire made-in-oracle) non sono piu&#8217; presenti nei repository di default. Gli unici rimasti sono quelli <a href="http://openjdk.java.net/" target="_blank">OpenJDK</a> (<em>openjdk-6-jdk</em> e <em>openjdk-6-jre</em>), che in genere vanno bene, ma a volte hanno problemi di funzionamento con programmi un po&#8217; particolari ed hanno ancora performance lievemente inferiori rispetto alle implementazioni native.</p>
<p>Per poter accedere ai vecchi pacchetti Sun Java 6 (<em>sun-java6-jre</em>, <em>sun-java6-jdk</em> e tutti gli altri), occorre abilitare i <strong>repository Partner</strong> tra le sorgenti di installazione nel proprio package managar, come documentato in <a href="http://ubuntuforums.org/showthread.php?t=1472557" target="_blank">questo post</a>. Oppure, in alternativa, lanciare il comando:<br />
<em>sudo add-apt-repository &#8220;deb http://archive.canonical.com/ lucid partner&#8221;</em></p>
<p>Fatto questo, una semplice <strong>ricerca e installazione dei </strong>pacchetti <strong>sun-java6-jre</strong> oppure <strong>sun-java6-jdk</strong> e dipendenze varie dovrebbe bastare.<em><br />
sudo apt-get update</em><br />
<em>sudo apt-get install sun-java6-jdk</em></p>
<p>Occorre poi riconfigurare la jdk usata dal sistema. Ottenere prima una lista di quelle esistenti con il comando:<br />
<em>update-java-alternatives -l</em><br />
e poi impostare quella sun con<br />
<em>sudo update-java-alternatives -s java-6-sun</em></p>
<p>Altre informazioni molto esaurienti in <a href="http://sites.google.com/site/easylinuxtipsproject/java" target="_blank">questo post</a>, compresa l&#8217;installazione del java plugin per Firefox.<em><br />
</em></p>
<p><span id="more-1114"></span>Rimane sempre aperto l&#8217;annoso problema del settaggio della variabile <strong>$JAVA_HOME</strong>, necessita&#8217; mai ancora veramente risolta in questa distribuzione. Come elencato in altri post precedenti, le vie sono sostanzialmente due:</p>
<p>- Inserire queste righe in fondo al file <strong><cite>~/</cite>.barshrc</strong> presente nella propria home folder<br />
<em>export JAVA_HOME=/usr/lib/jvm/java-6-sun<br />
export PATH=$PATH:$JAVA_HOME/bin</em></p>
<p>- Inserire nel file <strong>/etc/environment</strong> quanto segue<br />
<em>JAVA_HOME=&#8221;/usr/lib/jvm/java-6-sun&#8221;</em></p>
<p>Io, per non sbagliare, le ho aggiunte tutte e due <img src='http://www.rainbowbreeze.it/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rainbowbreeze.it/sun-java-jdk-1-6-su-ubuntukubuntu-10-4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>android.view.WindowsManager$BadTokenException</title>
		<link>http://www.rainbowbreeze.it/android-view-windowsmanagerbadtokenexception/</link>
		<comments>http://www.rainbowbreeze.it/android-view-windowsmanagerbadtokenexception/#comments</comments>
		<pubDate>Fri, 01 Jan 2010 20:11:49 +0000</pubDate>
		<dc:creator>rainbowbreeze</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.rainbowbreeze.it/?p=1032</guid>
		<description><![CDATA[android.view.WindowsManager$BadTokenException: Unable to add window &#8212; token null is not for an application: questo errore mi e&#8217; capitato mentre, programmando per Android 1.6, stavo provando a creare dei custom dialog seguendo la documentazione ufficiale di Google. Per risolvere il problema, ahime&#8217;, bisogna sostituire nel codice mostrato questa chiamata Context mContext = getApplicationContext(); Dialog dialog = [...]]]></description>
			<content:encoded><![CDATA[<p><strong>android.view.WindowsManager$BadTokenException: Unable to add window &#8212; token null is not for an application</strong>: questo errore mi e&#8217; capitato mentre, programmando per Android 1.6, stavo provando a creare dei custom dialog seguendo la <a href="http://developer.android.com/guide/topics/ui/dialogs.html" target="_blank">documentazione ufficiale di Google</a>.</p>
<p>Per risolvere il problema, ahime&#8217;, bisogna sostituire nel codice mostrato questa chiamata</p>
<pre class="brush: java">
Context mContext = getApplicationContext();
Dialog dialog = new Dialog(mContext);
</pre>
<p>con questo</p>
<pre class="brush: java">
Dialog dialog = new Dialog(this);
</pre>
<p>stessa cosa per l&#8217;esempio successivo, che usa un <em>AlertDialog.Builder</em> per creare un dialog completamente personalizzato, anche nel titolo, dove occorre sostituire la chiamata</p>
<pre class="brush: java">
builder = new AlertDialog.Builder(mContext);
</pre>
<p>con</p>
<pre class="brush: java">
builder = new AlertDialog.Builder(this);
</pre>
<p>In pratica, usare il metodo <em>getApplicationContext()</em> non ritorna un oggetto <em>Context</em> che puo&#8217; essere usato per costruire i Dialog, quindi occorre passare direttamente tutta l&#8217;<em>Activity</em>.</p>
<p><span id="more-1032"></span>Come mai non basti il <em>Context</em> restituito dal metodo, come mai la documentazione di Google non sia stata aggiornata per un problema cosi&#8217; macroscopico, in quali altri punti si potrebbe nascondere un&#8217;insidia del genere, non e&#8217; dato a saperlo! Che la documentazione che ci sia in giro per Android sia ancora molto frammentaria e a volte imprecisa, dati i frequenti cambi di API e bug nella varie versioni, non e&#8217; invece un mistero per nessuno.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rainbowbreeze.it/android-view-windowsmanagerbadtokenexception/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AvatarGrabber: social network scraping, Java e Funambol</title>
		<link>http://www.rainbowbreeze.it/avatargrabber-social-network-scraping-java-e-funambol/</link>
		<comments>http://www.rainbowbreeze.it/avatargrabber-social-network-scraping-java-e-funambol/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 07:59:00 +0000</pubDate>
		<dc:creator>rainbowbreeze</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[AvatarGrabber]]></category>
		<category><![CDATA[CodeSniper]]></category>
		<category><![CDATA[Funambol]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[L&#8217;open source mi appassiona, il mondo mobile lo adoro, la programmazione e&#8217; il mio passatempo preferito: trovare un connubio tra questi elementi sembrerebbe quasi impossibile. Ma basta guardarsi bene intorno e qualcosa di fantastico invece lo si trova: Funambol. Un&#8217;entità tutta strana a partire dall&#8217;idea: capitali USA, centro ricerca e sviluppo in Italia, modello di [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="border: 0px solid #000000; margin: 2px 4px; width: 300px; height: 267px;" title="AvatarGrabber screenshot" src="/site-media/blog-images/2009-images/avatargrabber_screenshot.jpg" alt="AvatarGrabber screenshot" /><br />
L&#8217;open source mi appassiona, il mondo mobile lo adoro, la programmazione e&#8217; il mio passatempo preferito: trovare un connubio tra questi elementi sembrerebbe quasi impossibile. Ma basta guardarsi bene intorno e qualcosa di fantastico invece lo si trova: <a title="Funambol" href="http://www.funambol.org" target="_blank">Funambol</a>.</p>
<p>Un&#8217;entità tutta strana a partire dall&#8217;idea: capitali USA, centro ricerca e sviluppo in Italia, modello di business basato sull&#8217;open source applicato al mondo del mobile: il prodotto di punta, infatti, e&#8217; un server capace di offrire funzionalità di posta push e sincronia di email, calendario e contatti praticamente sulla maggior parte dei dispositivi esistenti: Windows Mobile, Symbian, iPhone, iPod, Android, Blackberry e chi piu&#8217; ne ha piu&#8217; ne metta. Il tutto rilasciato sotto <a title="GNU Affero General Public License" href="http://www.gnu.org/licenses/agpl.html" target="_blank">licenza AGPL 3</a>.</p>
<p>Ma le stranezze non finiscono qui: mi ha accolto un individuo con il ruolo istituzionale di &#8220;community manager&#8221;, una figura (ancora) sconosciuta ai piu&#8217;, hanno creato e supportano una <a title="Funambol Forge" href="http://forge.funambol.org/" target="_blank">community</a> di sviluppatori attorno al loro prodotto e sono promotori dei <a title="Funambol Code Sniper program" href="https://codesniper.forge.funambol.org/" target="_blank">Code Sniper</a>, ovvero moduli software la cui realizzazione viene affidata a volenterosi collaborati esterni, retribuiti per questo loro lavoro. E qui arrivo io.</p>
<p>Attirato da alcuni studi che avevo fatto per lo scraping dei dati dei profili utente sui social network, ho notato come uno dei loro Code Sniper cadesse proprio a pennello. E cosi&#8217; e&#8217; nato <a title="AvatarGrabber" href="https://avatargrabber.forge.funambol.org/" target="_blank">AvatarGrabber</a>, un programma che <strong>cerca e associa gli avatar ai contatti della propria rubrica</strong>, presa ovviamente da un server Funambol.</p>
<p><span id="more-140"></span></p>
<p>Punto di forza del programma, a mio avviso, risiede nel fatto che <strong>non occorre avere un account sui social network</strong><br />
supportati, ma la ricerca viene fatta in modo del tutto anonimo. Se un<br />
mio contatto e&#8217; su Facebook, su MySpace, su Hi5 e si e&#8217; registrato con il<br />
proprio nome e cognome, ci sono ottime probabilità che AvatarGrabber lo trovi e mi  mostri l&#8217;avatar del suo profilo, senza che io sia in questi social network o che lo abbia aggiunto come amico.</p>
<p>Nella realizzazione del programma, ho pensato di separare completamente la logica di scraping dal resto (client java per la sincronia con Funambol e logica del programma vera e propria). Cosi&#8217; e&#8217; nato il <strong>Matahari Framework</strong>, un framework Java che racchiude diverse funzionalita&#8217; di scraping su social network e che puo&#8217; essere utilizzato anche fuori da Funambol. Un grazie a Chiara che mi ha ispirato il <a title="Mata Hari on Wikipedia" href="http://en.wikipedia.org/wiki/Mata_Hari" target="_blank">nome</a>.</p>
<p>Tutto quello che ho fatto e&#8217; solo il primo passo verso una visione ben piu&#8217; ampia che ho di tutta la faccenda, una visione che contempla agenti di scraping piu&#8217; evoluti, tecnologie prese dal web semantico, integrazione con motori di ricerca e molto altro. Il tutto per un po&#8217; di sano &#8220;<strong>extend &#8216;nd pimp your address book</strong>&#8220;. Poi magari un giorno avro&#8217; il tempo di parlarne.</p>
<p>E&#8217; inoltre disponibile la <a title="AvatarGrabber presentation on FunCon08" href="http://www.slideshare.net/rainbowbreeze/funambol-code-sniper-avatargrabber-presentation" target="_blank">presentazione di AvatarGrabber</a> che ho fatto durante la FunCon2008 e il <a title=" Avatargrabber: automagically add avatars to your contacts" href="http://funambol.blip.tv/file/1605557/" target="_blank">video della sessione</a>. Perdonate il mio pessimo inglese: il mio turno e&#8217; arrivato proprio alla fine dell&#8217;evento e quel giorno mi ero svegliato alle 3 di mattina per affrontare il viaggio in treno fino a Milano, e Trenitalia ha ben pensato di piazzare la mia prenotazione su una carrozza senza riscaldamento fino a Bologna, ed eravamo alla fine di Novembre. Ero letteralmente a pezzi!</p>
<p>Update: grazie a <a title="Stefano Maffulli Home" href="http://maffulli.net" target="_blank">Stefano</a> per questo<a title="Pimp your addressbook with Avatargrabber" href="http://maffulli.net/2009/02/17/pimp-your-addressbook-with-avatargrabber/" target="_blank"> bel video su AvatarGrabber</a> !</p>
<p align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="src" value="about:blank" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="about:blank" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rainbowbreeze.it/avatargrabber-social-network-scraping-java-e-funambol/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Java: Image conversion to byte[] array</title>
		<link>http://www.rainbowbreeze.it/java-image-conversion-to-byte-array/</link>
		<comments>http://www.rainbowbreeze.it/java-image-conversion-to-byte-array/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 21:52:24 +0000</pubDate>
		<dc:creator>rainbowbreeze</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Convertire un byte array (byte[]) in un oggetto Image e&#8217; molto semplice: private Image convertToImage(byte[] source){ Image objImage = new Image(source); return objImage; } Il contrario invece, convertire un oggetto Image in un byte[] non e&#8217; proprio cosi&#8217; immediaito. Ecco lo snippet che uso, che carica direttamente da una URL un&#8217;immagine e la memorizza in [...]]]></description>
			<content:encoded><![CDATA[<p>Convertire un byte array (byte[]) in un oggetto Image e&#8217; molto semplice:</p>
<pre class="brush: java">
	private Image convertToImage(byte[] source){
	Image objImage = new Image(source);
	return objImage;
}
</pre>
<p>Il contrario invece, convertire un oggetto Image in un byte[] non e&#8217; proprio cosi&#8217; immediaito. Ecco lo snippet che uso, che carica direttamente da una URL un&#8217;immagine e la memorizza in un byte[]. comodo magari da usare successivamente all&#8217;interno degli elementi di una jList.</p>
<pre class="brush: java">
private byte[] loadImageFromURL(String strUrl){
	int intPos;
	String strFileExt;

	//guess file extension
	intPos = strUrl.lastIndexOf(".");
	if (intPos &gt;= 0){
		strFileExt = strUrl.substring(intPos + 1);
	}else{
		//assign default jpg extension
		strFileExt = "jpg";
	}

	try {
		//load the image from the Internet
		ImageIcon objImageIcon = new ImageIcon(new URL(strUrl));

		//wait the loading of the image
		MediaTracker objMediaTracker = new MediaTracker(lstContacts);
		objMediaTracker.addImage(objImageIcon.getImage(), 0);
		objMediaTracker.waitForID(0, 5000);

		//convert the image
		BufferedImage objBI = new BufferedImage(objImageIcon.getIconWidth(), objImageIcon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
		Graphics2D g2 = objBI.createGraphics();
		g2.drawImage(objImageIcon.getImage(), 0, 0, null);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		ImageIO.write(objBI, strFileExt, baos);

		return baos.toByteArray();

	} catch (MalformedURLException ex) {
		Logger.getLogger(MainForm.class.getName()).log(Level.SEVERE, null, ex);
		return null;
	} catch (IOException ex) {
		Logger.getLogger(MainForm.class.getName()).log(Level.SEVERE, null, ex);
		return null;
	} catch (InterruptedException ex) {
		Logger.getLogger(MainForm.class.getName()).log(Level.SEVERE, null, ex);
		return null;
	}
}
</pre>
<p><span id="more-124"></span></p>
<p>Altri esempi trovati comportano l&#8217;uso delle JAI, le <a title="Java Advanced Imaging API" href="http://java.sun.com/javase/technologies/desktop/media/" target="_blank">Java Advanced Imaging API</a>:</p>
<pre class="brush: java">
public static byte[] convertImage(Image img) {
	ParameterBlock pb = new ParameterBlock();
	pb.add(img) ;
	PlanarImage image = JAI.create("awtImage", pb,null);

	ByteArrayOutputStream stream = new ByteArrayOutputStream();

	JAI.create("encode", image, stream, "tiff");
	byte[] b = stream.toByteArray();
	return b;
}
</pre>
<p>In questo bonus script invece, viene ridimensionata un&#8217;immagine presente in un byte[] e viene restituita sottoforma di byte[] in formato jpg, pronto per essere salvata su file:</p>
<pre class="brush: java">
// iconData is the original array of bytes
ImageIcon imageIcon = new ImageIcon(iconData);
Image img = imageIcon.getImage();

Image imageResize = img.getScaledInstance(100, 100, 0);

ImageIcon imageIconResize = new ImageIcon (imageResize);

int resizeWidth = imageIconResize.getIconWidth();
int resizeHeight = imageIconResize.getIconHeight();

Panel p = new Panel();
BufferedImage bi = new BufferedImage(resizeWidth, resizeHeight,
BufferedImage.TYPE_INT_RGB);

Graphics2D big = bi.createGraphics();
big.drawImage(imageResize, 0, 0, p);

ByteArrayOutputStream os = new ByteArrayOutputStream();

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
encoder.encode(bi);
byte[] byteArray = os.toByteArray();
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.rainbowbreeze.it/java-image-conversion-to-byte-array/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
