<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title></title>
	<atom:link href="http://pronetics.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://pronetics.wordpress.com</link>
	<description></description>
	<lastBuildDate>Wed, 10 Aug 2011 12:03:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='pronetics.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/327c1af1f36a61d2f6d03c76612036a2?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title></title>
		<link>http://pronetics.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://pronetics.wordpress.com/osd.xml" title="" />
	<atom:link rel='hub' href='http://pronetics.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Codemotion 2010 slides</title>
		<link>http://pronetics.wordpress.com/2011/04/11/codemotion-2010-slides/</link>
		<comments>http://pronetics.wordpress.com/2011/04/11/codemotion-2010-slides/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 09:49:23 +0000</pubDate>
		<dc:creator>desmax74</dc:creator>
				<category><![CDATA[Meeting]]></category>
		<category><![CDATA[casbah]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[scalate]]></category>
		<category><![CDATA[scalatra]]></category>
		<category><![CDATA[sharding]]></category>

		<guid isPermaLink="false">http://pronetics.wordpress.com/?p=637</guid>
		<description><![CDATA[MongoDB with mongoshell (JS), Java 10gen Driver, Casbah 10gen scala driver Javascript, Clojure, Scala<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=637&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<iframe src='http://www.slideshare.net/slideshow/embed_code/7215412' width='600' height='492'></iframe>
<p>MongoDB with mongoshell (JS), Java 10gen Driver, Casbah 10gen scala driver</p>
<iframe src='http://www.slideshare.net/slideshow/embed_code/7559839' width='600' height='492'></iframe>
<p>Javascript, Clojure, Scala</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pronetics.wordpress.com/637/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pronetics.wordpress.com/637/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pronetics.wordpress.com/637/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pronetics.wordpress.com/637/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pronetics.wordpress.com/637/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pronetics.wordpress.com/637/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pronetics.wordpress.com/637/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pronetics.wordpress.com/637/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pronetics.wordpress.com/637/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pronetics.wordpress.com/637/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pronetics.wordpress.com/637/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pronetics.wordpress.com/637/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pronetics.wordpress.com/637/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pronetics.wordpress.com/637/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=637&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pronetics.wordpress.com/2011/04/11/codemotion-2010-slides/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d911377de96e99bd75430675dd20136c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">desmax74</media:title>
		</media:content>
	</item>
		<item>
		<title>Pro-Netics: Serious Fun</title>
		<link>http://pronetics.wordpress.com/2011/03/29/pro-netics-serious-fun/</link>
		<comments>http://pronetics.wordpress.com/2011/03/29/pro-netics-serious-fun/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 10:35:48 +0000</pubDate>
		<dc:creator>desmax74</dc:creator>
				<category><![CDATA[Meeting]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[codemotion]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[pro-netics]]></category>
		<category><![CDATA[semantic-web]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://pronetics.wordpress.com/?p=629</guid>
		<description><![CDATA[<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=629&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<script type="text/javascript" src="http://blip.tv/syndication/write_player?skin=js&posts_id=4943933&cross_post_destination=-1&view=full_js"></script>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pronetics.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pronetics.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pronetics.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pronetics.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pronetics.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pronetics.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pronetics.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pronetics.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pronetics.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pronetics.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pronetics.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pronetics.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pronetics.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pronetics.wordpress.com/629/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=629&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pronetics.wordpress.com/2011/03/29/pro-netics-serious-fun/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d911377de96e99bd75430675dd20136c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">desmax74</media:title>
		</media:content>
	</item>
		<item>
		<title>Hibernate Search</title>
		<link>http://pronetics.wordpress.com/2010/06/22/hibernate-search/</link>
		<comments>http://pronetics.wordpress.com/2010/06/22/hibernate-search/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 09:25:29 +0000</pubDate>
		<dc:creator>desmax74</dc:creator>
				<category><![CDATA[Meeting]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[hibernate search]]></category>
		<category><![CDATA[infinispan]]></category>
		<category><![CDATA[Lucene]]></category>

		<guid isPermaLink="false">http://pronetics.wordpress.com/?p=606</guid>
		<description><![CDATA[Presentazione tenuta al Jug Sardegna Meeting su tecnologie Jboss. La presentazione mostra il funzionamento e le caratteristiche di Hibernate Search Author:Sanne Grinovero<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=606&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<iframe src='http://www.slideshare.net/slideshow/embed_code/4402935' width='600' height='492'></iframe>
<p>Presentazione tenuta al Jug Sardegna Meeting su tecnologie Jboss.</p>
<p>La presentazione mostra il funzionamento e le caratteristiche di Hibernate Search</p>
<p>Author:Sanne Grinovero</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pronetics.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pronetics.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pronetics.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pronetics.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pronetics.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pronetics.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pronetics.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pronetics.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pronetics.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pronetics.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pronetics.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pronetics.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pronetics.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pronetics.wordpress.com/606/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=606&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pronetics.wordpress.com/2010/06/22/hibernate-search/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d911377de96e99bd75430675dd20136c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">desmax74</media:title>
		</media:content>
	</item>
		<item>
		<title>Infinispan</title>
		<link>http://pronetics.wordpress.com/2010/06/16/infinispan/</link>
		<comments>http://pronetics.wordpress.com/2010/06/16/infinispan/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 07:45:32 +0000</pubDate>
		<dc:creator>desmax74</dc:creator>
				<category><![CDATA[Meeting]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[@Cache]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[infinispan]]></category>
		<category><![CDATA[jboss]]></category>

		<guid isPermaLink="false">http://pronetics.wordpress.com/?p=601</guid>
		<description><![CDATA[Presentazione tenuta al Jug Sardegna Meeting su tecnologie Jboss. La presentazione mostra il funzionamento e le caratteristiche di Infinispan Author:Sanne Grinovero<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=601&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<iframe src='http://www.slideshare.net/slideshow/embed_code/4403024' width='600' height='492'></iframe>
<p>Presentazione tenuta al Jug Sardegna Meeting su tecnologie Jboss.</p>
<p>La presentazione mostra il funzionamento e le caratteristiche di Infinispan</p>
<p>Author:Sanne Grinovero</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pronetics.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pronetics.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pronetics.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pronetics.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pronetics.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pronetics.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pronetics.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pronetics.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pronetics.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pronetics.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pronetics.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pronetics.wordpress.com/601/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pronetics.wordpress.com/601/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pronetics.wordpress.com/601/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=601&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pronetics.wordpress.com/2010/06/16/infinispan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d911377de96e99bd75430675dd20136c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">desmax74</media:title>
		</media:content>
	</item>
		<item>
		<title>RESTEasy</title>
		<link>http://pronetics.wordpress.com/2010/06/08/resteasy/</link>
		<comments>http://pronetics.wordpress.com/2010/06/08/resteasy/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 13:53:44 +0000</pubDate>
		<dc:creator>desmax74</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[GZIP]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[resteasy]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[SpringMVC]]></category>

		<guid isPermaLink="false">http://pronetics.wordpress.com/?p=594</guid>
		<description><![CDATA[Presentazione tenuta al Jug Sardegna Meeting su tecnologie Jboss. La presentazione mostra i principi REST e come renderli utilizzabili con RESTEasy tramite annotazioni. Vengono mostrate anche funzionalità avanzate come chiamate e Job asincroni, compressione gzip, cache, integrazione con Spring Author: Massimiliano Dessì<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=594&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<iframe src='http://www.slideshare.net/slideshow/embed_code/4402214' width='600' height='492'></iframe>
<p>Presentazione tenuta al <a href="http://www.jugsardegna.org/vqwiki/jsp/Wiki?29maggio2010" target="_blank">Jug Sardegna Meeting</a> su tecnologie Jboss.</p>
<p>La presentazione mostra i principi REST e come renderli utilizzabili con RESTEasy tramite annotazioni.<br />
Vengono mostrate anche funzionalità avanzate come chiamate e Job asincroni, compressione gzip, cache, integrazione con Spring</p>
<p>Author: <a href="http://www.jroller.com/desmax/" target="_blank">Massimiliano Dessì</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pronetics.wordpress.com/594/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pronetics.wordpress.com/594/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pronetics.wordpress.com/594/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pronetics.wordpress.com/594/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pronetics.wordpress.com/594/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pronetics.wordpress.com/594/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pronetics.wordpress.com/594/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pronetics.wordpress.com/594/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pronetics.wordpress.com/594/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pronetics.wordpress.com/594/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pronetics.wordpress.com/594/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pronetics.wordpress.com/594/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pronetics.wordpress.com/594/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pronetics.wordpress.com/594/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=594&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pronetics.wordpress.com/2010/06/08/resteasy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d911377de96e99bd75430675dd20136c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">desmax74</media:title>
		</media:content>
	</item>
		<item>
		<title>Scala Traits</title>
		<link>http://pronetics.wordpress.com/2010/03/16/scala-traits/</link>
		<comments>http://pronetics.wordpress.com/2010/03/16/scala-traits/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 09:50:51 +0000</pubDate>
		<dc:creator>desmax74</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[traits]]></category>

		<guid isPermaLink="false">http://pronetics.wordpress.com/?p=551</guid>
		<description><![CDATA[In questo articolo vedremo una delle interessanti caratteristiche del linguaggio Scala riguardo i mixin. In Java abbiamo la possibilità di implementare un qualsiasi numero di Interface a piacere, ma purtoppo non è possibile riutilizzarne l&#8217;implementazione .     Per riutilizzare queste implementazioni si può utilizzare l&#8217;Aspect Oriented Programming utilizzando mixin/introduction. Vediamo questo aspetto implementativo utilizzando Scala. Scala fornisce [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=551&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In questo articolo vedremo una delle interessanti caratteristiche del linguaggio Scala riguardo i mixin. In Java abbiamo la possibilità di implementare un qualsiasi numero di Interface a piacere, ma purtoppo non è possibile riutilizzarne l&#8217;implementazione .     <span id="more-551"></span>Per riutilizzare queste implementazioni si può utilizzare l&#8217;Aspect Oriented Programming utilizzando mixin/introduction. Vediamo questo aspetto implementativo utilizzando Scala.</p>
<p>Scala fornisce la possibilità di definire le astrazioni come nelle Java Interface chiamate Trait, ma in più possiamo anche definire l&#8217;implementazione della astrazione dentro il Trait.</p>
<p>Vediamo ora l&#8217;utilizzo dei Trait scrivendo del codice usando il pattern Observer.</p>
<p><pre class="brush: scala;">
trait Subject {
    /* definisce la struttura di un observer, possiamo pensarla come una classe anonima java */
    type Observer = { def receiveUpdate(subject: Any) }

    // dichiara la lista di osservatori
    private var observers = List[Observer]()
    // definisce il metodo addObserver per aggiungere osservatori
    def addObserver(observer:Observer) = observers ::= observer
    // definisce il metodo di notifica di un evento a tutti gli osservatori
    def notifyObservers = observers foreach (_.receiveUpdate(this))
}
</pre></p>
<p>Definiamo ora un generico Component che realizza un command</p>
<p><pre class="brush: scala;">class Component(val label: String) {
    def execute() = {
      // Logica del componente
    }
}
</pre></p>
<p>Utilizziamo il Trait Subject nella classe ObservableComponent per  mostrare come viene utilizzato anche il corpo della astrazione  (notifyObservers nel nostro caso).</p>
<p><pre class="brush: scala;">
class ObservableComponent(name: String) extends Component(name) with Subject {
    override def execute() = {
        super.execute()
        notifyObservers
    }
}
</pre></p>
<p>Per completare l&#8217;esplorazione dei Trait vediamo ora come possiamo  &#8220;impilare&#8221; (stackable) i Trait ed estenderli.</p>
<p>Definiamo ora l&#8217;astrazione Command ma questa volta senza dargli nessuna  implementazione, in modo che ObservableAction la estenda.</p>
<p><pre class="brush: scala;">
trait Command {
   def execute()
}
</pre></p>
<p>Utilizzando la keyword with possiamo creare lo stack dei nostri Trait,  l&#8217;esecuzione dei Trait avviene in base all&#8217; ordine di dichiarazione con i  with,  e questo ci permette di comporre in maniera dichiarativa dei  comportamenti.</p>
<p><pre class="brush: scala;">trait ObservableAction extends Command with Subject {
abstract override def execute() = {
   super.execute()
   notifyObservers
}
}
</pre></p>
<p>Per brevità diciamo per ora che i Trait, quando utilizziamo la keyword with vengono  chiamati da destra a sinistra, altra cosa importante è che possiamo utilizzarli quando ne abbiamo bisogno.</p>
<p><pre class="brush: scala;">new Component(&quot;Hello&quot;) with ObservableAction with ...</pre></p>
<p>Author <a title="http://www.jroller.com/desmax/" href="http://www.jroller.com/desmax/" target="_blank">Massimiliano Dessì</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pronetics.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pronetics.wordpress.com/551/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pronetics.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pronetics.wordpress.com/551/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pronetics.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pronetics.wordpress.com/551/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pronetics.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pronetics.wordpress.com/551/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pronetics.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pronetics.wordpress.com/551/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pronetics.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pronetics.wordpress.com/551/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pronetics.wordpress.com/551/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pronetics.wordpress.com/551/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=551&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pronetics.wordpress.com/2010/03/16/scala-traits/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d911377de96e99bd75430675dd20136c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">desmax74</media:title>
		</media:content>
	</item>
		<item>
		<title>Multiplayer on-line: dall&#8217;iPhone a Darkstar</title>
		<link>http://pronetics.wordpress.com/2010/03/02/multiplayer-on-line-dalliphone-a-darkstar/</link>
		<comments>http://pronetics.wordpress.com/2010/03/02/multiplayer-on-line-dalliphone-a-darkstar/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 09:02:08 +0000</pubDate>
		<dc:creator>desmax74</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[darkstar]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[multiplayer]]></category>

		<guid isPermaLink="false">http://pronetics.wordpress.com/?p=545</guid>
		<description><![CDATA[Attraverso il framework opensource Darkstar è possibile implementare un server per il gioco multiplayer online Java e far comunicare client iPhone tra loro per portare una nuova esperienza sui device mobile. Questa e altre informazioni nella presentazione fatta al Javaday Roma 2010 da Stefano Linguerri:  Multiplayer-iPhone-Darkstar-javaday<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=545&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Attraverso il framework opensource Darkstar è possibile  implementare un server per il gioco multiplayer online Java e far  comunicare client iPhone tra loro per portare una nuova esperienza sui  device mobile.</p>
<p><span id="more-545"></span></p>
<p>Questa e altre informazioni nella presentazione fatta al Javaday Roma 2010 da Stefano Linguerri:  <a href="http://pronetics.files.wordpress.com/2010/03/multiplayer-iphone-darkstar-javaday.pdf">Multiplayer-iPhone-Darkstar-javaday</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pronetics.wordpress.com/545/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pronetics.wordpress.com/545/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pronetics.wordpress.com/545/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pronetics.wordpress.com/545/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pronetics.wordpress.com/545/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pronetics.wordpress.com/545/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pronetics.wordpress.com/545/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pronetics.wordpress.com/545/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pronetics.wordpress.com/545/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pronetics.wordpress.com/545/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pronetics.wordpress.com/545/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pronetics.wordpress.com/545/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pronetics.wordpress.com/545/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pronetics.wordpress.com/545/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=545&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pronetics.wordpress.com/2010/03/02/multiplayer-on-line-dalliphone-a-darkstar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d911377de96e99bd75430675dd20136c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">desmax74</media:title>
		</media:content>
	</item>
		<item>
		<title>Spring Web Flow 2-parte-1</title>
		<link>http://pronetics.wordpress.com/2010/02/23/spring-web-flow-2-parte-1/</link>
		<comments>http://pronetics.wordpress.com/2010/02/23/spring-web-flow-2-parte-1/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 09:11:48 +0000</pubDate>
		<dc:creator>desmax74</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[conversation]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[webflow]]></category>

		<guid isPermaLink="false">http://pronetics.wordpress.com/?p=438</guid>
		<description><![CDATA[Le web application basate sul protocollo HTTP sono per loro natura stateless. In alcune situazioni particolari, richieste da determinati tipi di problemi, si rende necessario avere &#8220;memoria&#8221; tra una interazione client-server e l&#8217;altra per poter realizzare una &#8220;macchina a stati&#8221;. Per fare questo, dobbiamo appoggiarci alla HttpSession, rendendo l&#8217;applicazione Stateful, ma dobbiamo pagare il prezzo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=438&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Le web application basate sul protocollo HTTP sono per loro natura stateless.</p>
<p>In alcune situazioni particolari, richieste da determinati tipi di problemi, si rende necessario avere &#8220;memoria&#8221; tra una interazione client-server e l&#8217;altra per poter realizzare una &#8220;macchina a stati&#8221;. Per fare questo, dobbiamo appoggiarci alla HttpSession, rendendo l&#8217;applicazione Stateful, ma dobbiamo pagare il prezzo di avere un applicazione meno leggera e scalabile (a meno di usare altri strumenti come Terracotta).<span id="more-438"></span></p>
<p>Per questo tipo di problemi possiamo usare <a href="http://www.springsource.org/webflow" target="_blank">Spring Web Flow</a>, costruito su Spring MVC che fornisce:</p>
<ul>
<li>Un dsl (domain-specific-language) per definire moduli con controller riusabili definiti <a href="http://static.springframework.org/spring-webflow/docs/2.0.x/reference/html/ch02s02.html" target="_blank">flows</a></li>
<li>Un controller engine per gestire conversational state</li>
<li>Supporto per utilizzare Ajax per costruire rich user  interfaces</li>
<li>Support per utilizzare le JavaServerFaces con Spring</li>
</ul>
<p>SpringWebFlow si prefigge lo scopo di creare flussi riutilizzabili attraverso un flow definition language fatto da XML e Unified EL (JSP e JSF) e OGNL (Object-Graph Navigation Language), principalemente tramite configurazione XML, ma anche tramite classi Java. Con questi flussi possiamo costruire macchine &#8220;a stati&#8221;.</p>
<p>In questo articolo vedremo una trattazione non esaustiva della configurazione di webflow per la costruzione di flussi.</p>
<p><strong>Flows</strong></p>
<p>Vediamo le informazioni che abbiamo a disposizione nei flussi dichiarati nell&#8217; xml.</p>
<ul>
<li><em>currentEvent</em> : Evento corrente, l&#8217; ultimo processato dal flusso attivo</li>
<li><em>currentUser</em> : Il Principal ovvero l&#8217;utente autenticato</li>
<li><em>externalContext</em> : Il contesto &#8220;esterno&#8221; al flusso ovvero le API Servlet (Session, Request, ContextPath, etc) in cui il flusso vive. L&#8217;external Context è a tutti gli  effetti un Facade che fornisce al flusso l&#8217;accesso al mondo &#8220;esterno&#8221;.</li>
<li><em>flowExecutionContext</em> : Fornisce l&#8217;accesso al Contesto (interno) di esecuzione del flusso.</li>
<li><em>flowExecutionUrl</em> : Url relativo al contesto del flusso in esecuzione</li>
<li><em>flowRequestContext</em> : Fornisce l&#8217;accesso alla istanza corrente della RequestContext</li>
<li><em>messageContext </em>: Fornisce la possibilita&#8217; di creare e recuperare messaggi dal flow execution (messaggi success o error)</li>
<li><em>resourceBundle</em> : Fornisce l&#8217;acccsso al file di properties con i messaggio internazionalizzati</li>
<li><em>requestParameters</em> : Fornisce l&#8217;accesso ai parameters presenti nella Request</li>
</ul>
<p><strong>Scopes</strong></p>
<p>Vediamo ora le diverse visibilità fornite</p>
<ul>
<li><em>flow </em>:<em> </em>Questo scope inizia con l&#8217;avvio del flusso e viene distrutto al termine del flusso, per essere utilizzati nella definizione xml gli oggetti devono implementare<em> </em>java.io.Serializable</li>
<li><em>view </em>:<em> </em>Questo scope visibilità inizia con l&#8217;avvio di uno <em>view-state</em> del flusso e viene distrutto al  termine del <em>view-state</em>, per essere utilizzati nella definizione xml di questo scope gli  oggetti devono implementare<em> </em>java.io.Serializable</li>
<li><em>request </em>:<em> </em>Questo scope<em> i</em>nizia quando il flusso viene creato e la request viene salvata in questo scope. Viene distrutta quando il flusso restituisce l&#8217;elaborazione a seguito della richiesta.<em><br />
</em></li>
<li><em>flash </em>:<em> </em>Questo scope viene creato all&#8217; inizio del flusso e viene svuotato dopo ogni view rendering<em>, </em>per essere utilizzati nella definizione xml di questo scope gli oggetti devono  implementare<em> </em>java.io.Serializable</li>
<li><em>conversation</em> : Inizia con l&#8217;avvio del flusso e viene distrutto al termine. Ha visibilità anche nei sottoflussi, e questa è la diferenza che lo caraterizza dal flow scope</li>
</ul>
<p><strong>Flow States</strong></p>
<p>Un flusso può trovarsi in vari stati, predefiniti attraverso la configurazione xml (o da codice java)</p>
<ul>
<li><em>start-state</em> : Può essere definito esplicitamente o implicitamente uno stato di avvio. Se non definiamo esplicitamente, il primo state definito nel flusso viene considerato start-state. Altrimenti esplicitamente lo definiamo in questo modo:<pre class="brush: xml;">&lt;flow start-state=&quot;myState&quot;/&gt;</pre></li>
</ul>
<ul>
<li><em>action-state</em> : Un action state permette l&#8217;esecuzione di logica di business. Si possono utilizzare due approcci, utilizzando il tag action-state oppure con il tag evaluate dentro un view-state. Il tag evaluate ha tre campi</li>
</ul>
<ol>
<li>expression: permette la valutazione di un metodo su un bean accessibile dal flusso</li>
<li> result: il risultato dell&#8217; evaluate può essere assegnato ad una variabile con uno scope a piacimento</li>
<li>resultType : il tipo del risultato</li>
</ol>
<p><pre class="brush: xml;">&lt;evaluate expression=&quot;myService.findMyObjById(id)&quot; result=&quot;flowScope.myObj&quot;/&gt;</pre></p>
<p>L&#8217; evaluate tag a sua volta può essere utilizzato in vari eventi del flusso:</p>
<p>- All&#8217; avvio del flusso</p>
<p><pre class="brush: xml;">&lt;on-start&gt;&lt;evaluate expression=&quot;issueService.findById(id, true)&quot; result=&quot;flowScope.issue&quot;/&gt;&lt;/on-start&gt;</pre></p>
<p>- All&#8217; ingresso in uno stato</p>
<p><pre class="brush: xml;">&lt;view-state …&gt;&lt;on-entry&gt;&lt;evaluate…&gt;&lt;/on-entry&gt;&lt;/view-state&gt;</pre></p>
<p>- Prima del rendering</p>
<p><pre class="brush: xml;">&lt;view-state …&gt;&lt;on-render&gt;&lt;evaluate …&gt;&lt;/on-render&gt;&lt;/view-state&gt;</pre></p>
<p>- Al momento della esecuzione di una transizione:</p>
<p><pre class="brush: xml;">&lt;transition on=&quot;store&quot; to=&quot;issueStore&quot;&gt;&lt;evaluate expression=&quot;persistenceContext.persist(issue)&quot;/&gt;&lt;/transition&gt;</pre></p>
<p>- All&#8217;uscita da uno stato:</p>
<p><pre class="brush: xml;">&lt;view-state …&gt;&lt;on-exit&gt;&lt;evaluate…&gt;&lt;/on-exit&gt;&lt;/view-state&gt;</pre></p>
<p>- Alla fine di un flusso</p>
<p><pre class="brush: xml;">&lt;on-end&gt;&lt;evaluate expression=&quot;itemInformationService.enrich(issue)&quot;/&gt;&lt;/on-end&gt;</pre></p>
<ul>
<li><em>view-state</em> : Nel view state vengono mostrati dei template</li>
</ul>
<p>- <em>id</em> : identificativo dello stato</p>
<p>- <em>parent</em> : (Opzionale) Se lo stato eredita da un altro</p>
<p>- <em>view</em> : (Opzionale) Nome del view file, se omesso viene usato l&#8217;id come nome logico, sono possibili ridirezioni a file o indirizzi esterni</p>
<p>- <em>redirect</em> : (Opzionale) Viene effettuata una ridirezione prima del rendering</p>
<p>- <em>popup</em> : (Opzionale) Viene mostrato il rendering in un popup</p>
<p>- <em>model</em> : (Opzionale) Indica il modello che deve essere bindato sulla view</p>
<ul>
<li><em>decision-state</em> : Un decision state è come un action state ma con la possibilità di utilizzare un if-then-else</li>
</ul>
<p><pre class="brush: xml;">&lt;decision-state id=&quot;moreAnswersNeeded&quot;&gt;&lt;if test=&quot;interview.moreAnswersNeeded()&quot; then=&quot;answerQuestions&quot; else=&quot;finish&quot;/&gt;&lt;/decision-state&gt;</pre></p>
<ul>
<li><em>subflow-state</em> : Permetto di richiamare un flusso come sottoflusso</li>
</ul>
<p><pre class="brush: xml;">&lt;subflow-state id=&quot;addGuest&quot; subflow=&quot;createGuest&quot;&gt;&lt;transition on=&quot;guestCreated&quot; to=&quot;reviewBooking&quot;&gt;&lt;evaluate expression=&quot;booking.guests.add(currentEvent.attributes.guest)&quot;/&gt;&lt;/transition&gt;&lt;transition on=&quot;creationCancelled&quot; to=&quot;reviewBooking&quot;/&gt;&lt;/subflow-state&gt;</pre></p>
<ul>
<li><em>end-state</em> : Rappresenta la fine del flusso e può restituire un output oppure mostrare una view</li>
</ul>
<p><pre class="brush: xml;">&lt;end-state id=&quot;objStore&quot; commit=&quot;true&quot;&gt;&lt;output name=&quot;name&quot; value=&quot;myObj.name&quot;/&gt;&lt;/end-state&gt;</pre></p>
<p><pre class="brush: xml;">&lt;end-state id=&quot;issueStore&quot; commit=&quot;true&quot; view=&quot;externalRedirect:contextRelative:/myflow/obj/all&quot;/&gt;</pre></p>
<p><strong>Transition</strong></p>
<p>Una transizione avviene quando a seguito di un evento si passa da uno stato ad un altro.Una transizione avviene in un view-state o in un action-state.</p>
<p>I parametri utilizzabili nella configurazione della transizione sono:</p>
<p>-<em>bind</em> : Disponibile nel view-state, se è a true viene effettuato il binding e la validazione prima della transizione, se non viene fatto il binding non viene fatta neppure la validazione. Il valore di default è true</p>
<p>-<em>history</em> : Disponibile nel view-state, opzionale, decide come deve essere il comportamento quando viene usato il tasto back, ci sono tre opzioni:</p>
<ol>
<li>preserve (default) : Dopo la transizione è possibile ritornare allo stato corrente</li>
<li>discard : Dopo la transizione non è possibile ritornare allo stato corrente</li>
<li>invalidate : Dopo la transizione non è possibile ritornare a nessun view-state precedente</li>
</ol>
<p>- <em>on</em> : Disponibile in action e view-state, è il nome del risultato che scatena la transizione, è una campo solo testo</p>
<p>-<em> on-exception</em> : L&#8217;eccezione (fully qualified name) che scatena l&#8217;esecuzione della transizione</p>
<p>- <em>to</em> : Il nome dello stato che viene raggiunto</p>
<p><strong>Validation</strong></p>
<p>Nel view state abbiamo visto che è possibile usare il tag model che causa il binding e la validazione di un nostro oggetto di dominio<strong>. </strong>Per effettuare la validazione abbiamo a disposizione due soluzioni, implementare un metodo<strong> </strong>che si chiami validate${state}(MessageContext context) dentro il nostro model object oppure creare una classe di validazione annotata come @Component e con il nome del metodo sempre come  validate${state} e con parametri in ingresso il nostro Object model e il MessageContext</p>
<p><strong>Global transition</strong></p>
<p>Nella configurazione è possibile definire delle transizioni globali, visibili in qualunque punto della configurazione</p>
<p><pre class="brush: xml;">&lt;global-transitions&gt;&lt;transition on=&quot;login&quot; to=&quot;login&quot;&gt;&lt;transition on=&quot;logout&quot; to=&quot;logout&quot;&gt;&lt;/global-transitions&gt;</pre></p>
<p><strong>On-end</strong></p>
<p>Alla fine di un flusso è possibile compiere delle azioni</p>
<p><strong>ExceptionHandler</strong></p>
<p>Possiamo definire le transizioni da effettuare in caso di eccezioni, specificando il fully qualified name</p>
<p><pre class="brush: xml;">&lt;transition on-exception=&quot;java.lang.NumberFormatException&quot; to=&quot;add&quot; /&gt;</pre></p>
<p><strong>Input/Output</strong></p>
<p>All&#8217; avvio di un flusso possiamo avere dei valori di input, ad esempio se il flow viene fatto partire da un url come il seguente</p>
<p><pre class="brush: xml;">&lt;a href=&quot;/myapp/myflow/issue/add?id=${issue.id}&quot;/&gt;</pre></p>
<p>possiamo scrivere nella configurazione specificando il tipo in cui vogliamo sia convertito</p>
<p><pre class="brush: xml;">&lt;input name=&quot;id&quot; type=&quot;long&quot;/&gt;</pre></p>
<p>oppure recuperandolo da un determinato scope</p>
<p><pre class="brush: xml;">&lt;input name=&quot;id&quot; value=&quot;flowScope.issue.id&quot;/&gt;</pre></p>
<p>In output invece</p>
<p><pre class="brush: xml;">&lt;output name=&quot;id&quot; /&gt;</pre></p>
<p>In output invece &lt;output name=&#8221;id&#8221; /&gt;</p>
<p><strong>Variabili</strong></p>
<p>Possiamo definire delle variabili a cui ci possiamo riferire in qualsiasi parte del flusso</p>
<p>&lt;var name=&#8221;user&#8221; class=&#8221;com.myapp.User&#8221;/&gt;</p>
<p><strong>Flow Execution Listener</strong></p>
<p>Possiamo predisporre dei listener sul flusso, solitamente sono quelli per la sicurezza e per la persistenza</p>
<p><pre class="brush: xml;">
&lt;flow-execution-listeners&gt;&lt;listener ref=&quot;securityFlowExecutionListener&quot;/&gt;
&lt;listener ref=&quot;jpaFlowExecutionListener&quot;/&gt;&lt;/flow-execution-listeners&gt;

&lt;bean id=&quot;jpaFlowExecutionListener&quot;&gt;
&lt;constructor-arg ref=&quot;entityManagerFactory&quot; /&gt;
&lt;constructor-arg ref=&quot;transactionManager&quot; /&gt;
&lt;/bean&gt;

&lt;bean id=&quot;securityFlowExecutionListener&quot;
class=&quot;org.springframework.webflow.security.SecurityFlowExecutionListener&quot;/&gt;</pre></p>
<p><strong> </strong><br />
<strong> </strong></p>
<p><strong>Conclusioni</strong></p>
<p>Abbiamo visto come tramite la configurazaione xml possiamo dichiarare i nostri flussi<strong>, </strong>nell&#8217;articolo  successivo vedremo come realizzare delle azioni Create Read Update e Delete con una  applicazione di esempio, utilizzando la configurazione vista finora<strong>.<br />
</strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pronetics.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pronetics.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pronetics.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pronetics.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pronetics.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pronetics.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pronetics.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pronetics.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pronetics.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pronetics.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pronetics.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pronetics.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pronetics.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pronetics.wordpress.com/438/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=438&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pronetics.wordpress.com/2010/02/23/spring-web-flow-2-parte-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d911377de96e99bd75430675dd20136c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">desmax74</media:title>
		</media:content>
	</item>
		<item>
		<title>Effetti &#8220;AJAX&#8221; con Java Micro Edition &#8211; parte 1</title>
		<link>http://pronetics.wordpress.com/2010/02/16/effetti-ajax-con-java-micro-edition-parte-1/</link>
		<comments>http://pronetics.wordpress.com/2010/02/16/effetti-ajax-con-java-micro-edition-parte-1/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 09:06:09 +0000</pubDate>
		<dc:creator>acastellopnx</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[JavaMe]]></category>
		<category><![CDATA[midp]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://pronetics.wordpress.com/?p=415</guid>
		<description><![CDATA[Molti sviluppatori, negli ultimi anni, si sono ritrovati ad affrontare le sfide poste dall&#8217;evoluzione delle interfacce utente in un numero crescente di dispositivi mobili. L&#8217;avvento di nuovi sistemi operativi, si pensi ad iPhone OS o ad Android, e di browser con funzionalità paragonabili a quelli dei PC, ha reso necessario lo sviluppo di nuove tecnologie [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=415&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Molti sviluppatori, negli ultimi anni, si sono ritrovati ad affrontare le sfide poste dall&#8217;evoluzione delle interfacce utente in un numero crescente di dispositivi mobili. L&#8217;avvento di nuovi sistemi operativi, si pensi ad iPhone OS o ad Android, e di browser con funzionalità paragonabili a quelli dei PC, ha reso necessario lo sviluppo di nuove tecnologie che permettano alle applicazioni Java ME di reggere la competizione con l&#8217;arrembante concorrenza.</p>
<p>L&#8217;interminabile processo di formalizzazione di MIDP 3.0 e la scarsissima adozione su dispositivi reali del pur lodevole Java FX hanno però costretto gli sviluppatori a trovare una serie di soluzioni alternative, spesso consistenti in uno sfruttamento estremo dell&#8217;infrastruttura grafica a basso livello del &#8220;vecchio&#8221; MIDP 2.x.</p>
<p>Usando con accortezza le possibilità offerte dalle ridotte API del MIDP 2 è possibile implementare animazioni ed effetti simili a quelli Ajax. In questo post mostreremo alcuni accorgimenti che facilitano la scrittura di una funzionalità &#8220;AJAX&#8221; simile a quello usata da Google per suggerire termini di ricerca man mano che si scrive in un campo testo. L&#8217;implementazione di un client mobile dotato di una UI completamente customizzata è un lavoro lungo e di una certa complessità: in questo articolo forniremo solo le nozioni basilari per affrontare questa problematica.</p>
<p><span id="more-415"></span>Il modello applicativo di Ajax è di tipo asincrono; le richieste al server vengono eseguite da un modulo separato da quello che gestisce il disegno della UI, la quale viene modificata in tempo reale per adattarsi ai dati che giungono dalle response.</p>
<p><img class="size-medium wp-image-417 alignnone" style="border:1px solid black;" title="Ajax model" src="http://pronetics.files.wordpress.com/2010/02/ajaxmodel.png?w=300&#038;h=192" alt="Modello applicativo Ajax" width="300" height="192" /><br />
(fonte: <strong>J.J.Garrett</strong> from <a href="http://www.adaptivepath.com" target="_blank"><strong>adaptivepath.com</strong></a>)</p>
<p>In Java ME, uno dei modi per ottenere delle UI personalizzate, più gradevoli e facili da usare rispetto a  quelle standard fornite dal sistema operativo del dispositivo è di creare componenti ed animazioni basati sulle classi <strong>Canvas</strong> e <strong>Graphics</strong>.</p>
<p>La classe Canvas è la &#8220;tela&#8221; su cui disegnare i nostri componenti tramite la giustapposizione di elementi geometrici come linee, poligoni e testo aggiunti con i metodi invocati su Graphics. Ad esempio, se <strong>g</strong> è la nostra istanza di Graphics:</p>
<p><pre class="brush: java;">
String text = &quot;Fortza Paris&quot;;
g.setColor(0xffffff);
g.fillRect(0, 0, Canvas.getWidth(), Canvas.getHeight());
g.setColor(0x000000);
g.drawRect(0, 0, Canvas.getWidth(), Canvas.getHeight());
g.drawString(text, Canvas.getWidth()/2, Canvas.getHeight()/2, Graphics.TOP|Graphics.HCENTER);
</pre></p>
<p>il codice soprastante disegna un rettangolo bianco con bordo nero grande quanto lo schermo, al cui centro si trova la stringa <em><code>text</code></em>. La UI appena disegnata viene tenuta in un buffer finchè non viene invocato un metodo di &#8220;esecuzione&#8221; del disegno come <code>paint(), repaint() o serviceRepaints().</code></p>
<p>Vediamo ora come ottenere un comportamento simile a quello di Ajax in un&#8217;applicazione Java ME usando Canvas.</p>
<p>Creiamo una sottoclasse di Canvas (o, se necessario, di GameCanvas) che implementa <code>Runnable</code>, nel cui <code>run()</code> scriveremo il codice che ci permette un refresh ciclico dello schermo, utile per gestire transizioni, animazioni ed eventi della UI (come il cambio di focus da un elemento all&#8217;altro). L&#8217;esecuzione della UI in un thread separato, inoltre, ci permette di disaccoppiarla dal flusso base dell&#8217;applicazione e da altre operazioni potenzialmente bloccanti (es: connessioni).</p>
<p><pre class="brush: java;">
final public void run(){
[...]
// “Invita” a ridisegnare lo schermo con le relative modifiche grafiche.
repaint(0, 0, width, height);
// Obbliga ad eseguire immediatamente qualunque richiesta di repaint ancora in attesa.
// Attenzione: è bloccante.
serviceRepaints();
[...]
}
</pre></p>
<p>Il codice del <code>run()</code> può inoltre comprendere una gestione del framerate (un refresh velocissimo potrebbe risultare troppo dispendioso per alcuni dispositivi, oltre che poco utile) e un metodo per la gestione centralizzata degli eventi, altro aspetto che, usando la <code>Canvas</code>, è gestito a basso livello andando ad intercettare gli eventi base sui tasti/schermo del cellulare.</p>
<p>Una volta scritta la parte che disegna la UI e gestisce i suoi eventi, è necessario scrivere la parte che si connette al server per richiedere i &#8220;suggerimenti&#8221; da mostrare a video.</p>
<p>Anche in questo caso, come dettano le norme di buona programmazione per applicazioni mobili, creeremo la classe che fa da client HTTP in modo che implementi <code>Runnable</code>, così da poter essere utilizzata in un thread separato e non bloccare la UI dell&#8217;applicazione.</p>
<p>Ipotizzando di effettuare delle richieste GET allo stesso server, il <code>run()</code> del nostro client, farà una cosa del genere:</p>
<p><pre class="brush: java;">
synchronized (this){
		 // Se non vi sono richieste pendenti si aspetta...
                while (queryStrings.size() == 0){
                    try{
                        wait();
                    } catch (InterruptedException e){   }
                    //[...]
                }

                request = (String)(queryStrings.elementAt(0));
                listener = (ConnectionListener)listeners.elementAt(0);
		//[...]
            }
            sendRequest(request, listener);
</pre></p>
<p>il vettore <code>listener</code> è un registro di tutte le classi che richiedono una connessione, le cui queryString sono accodate nell&#8217;omonimo vettore e inoltrate progressivamente.</p>
<p>Il metodo <code>sendRequest(request, listener)</code> effettua le connessioni HTTP vere e proprie secondo la modalità standard del<a href="http://developers.sun.com/mobility/midp/articles/genericframework/" target="_blank"> Generic Connection Framework di Java ME</a> ed invoca il metodo di callback definito da un&#8217;interfaccia implementata dalle classi accodate in <code>listener</code>.</p>
<p>Di questa interfaccia e della gestione della response XML parleremo nella seconda parte di questo post.</p>
<p><strong>Autore:</strong> <a href="http://javame-cinghius.blogspot.com" target="_blank">Andrea Castello</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pronetics.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pronetics.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pronetics.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pronetics.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pronetics.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pronetics.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pronetics.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pronetics.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pronetics.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pronetics.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pronetics.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pronetics.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pronetics.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pronetics.wordpress.com/415/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=415&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pronetics.wordpress.com/2010/02/16/effetti-ajax-con-java-micro-edition-parte-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/12196accca4a3e8a257a649b027014e5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">acastellopnx</media:title>
		</media:content>

		<media:content url="http://pronetics.files.wordpress.com/2010/02/ajaxmodel.png?w=300" medium="image">
			<media:title type="html">Ajax model</media:title>
		</media:content>
	</item>
		<item>
		<title>Design Patterns</title>
		<link>http://pronetics.wordpress.com/2010/02/09/design-patterns/</link>
		<comments>http://pronetics.wordpress.com/2010/02/09/design-patterns/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 08:38:49 +0000</pubDate>
		<dc:creator>desmax74</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[builder pattern]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[Gof]]></category>

		<guid isPermaLink="false">http://pronetics.wordpress.com/?p=389</guid>
		<description><![CDATA[Norme di buona programmazione ad oggetti Conosci i pattern? Questa e&#8217; una domanda che prima o poi qualsiasi sviluppatore software si sentira&#8217; fare, o si porra&#8217; da solo. Mitizzati da alcuni, trascurati piu&#8217; o meno volutamente da altri, i pattern, meglio noti come &#8220;design patterns&#8221;, rappresentano per la progettazione software l&#8217;analogo di quelle norme pratiche, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=389&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Norme di buona programmazione ad oggetti</strong></p>
<p>Conosci i pattern? Questa e&#8217; una domanda che prima o poi qualsiasi sviluppatore software si sentira&#8217; fare, o si porra&#8217; da solo. Mitizzati da alcuni, trascurati piu&#8217; o meno volutamente da altri, i pattern, meglio noti come &#8220;design patterns&#8221;, rappresentano per la progettazione software l&#8217;analogo di quelle norme pratiche, tecniche o accorgimenti basilari che costituiscono il fondamento di ogni arte o mestiere.<br />
L&#8217;unica differenza e&#8217; che, mentre la maggior parte dei mestieri con una certa dose di creativita&#8217; provengono da una lunga tradizione e i loro procedimenti sono quindi in qualche modo &#8220;standardizzati&#8221;, quello del programmatore (ad oggetti) e&#8217; un mestiere relativamente recente, e ancora quindi non perfettamente delineato nei suoi canoni. Era inevitabile quindi che un giorno qualcuno si rendesse conto che era il caso di porre ordine in questa situazione, e di provare quindi a delinerare le &#8220;regole<br />
del buon programmatore&#8221;.<span id="more-389"></span></p>
<p><strong>La &#8220;banda dei quattro&#8221;</strong></p>
<p>Fu cosi&#8217; che nel 1994 un gruppo di 4 persone formato da Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides diede alla luce il libro che traccio&#8217; per la prima volta le linee guida della buona programmazione ad oggetti: &#8220;Design Patterns: Elements of Reusable Object-Oriented Software&#8221;. Destinata fin da subito a diventare una delle pietre miliari della letteratura del software, l&#8217;opera dei quattro non fu chiaramente realizzata partendo da zero. Il loro lavoro infatti fu quello di trascrivere, astraendole dalle contingenze, le soluzioni migliori a loro note fino ad allora trovate nel campo della programmazione, ordinandole secondo strutture logiche ben definite e dando loro un nome preciso.<br />
Sorprendentemente, alla fine di questo imponente lavoro, venne fuori che tutto questo insieme di soluzioni si rifaceva in summa a soltanto tre casistiche ben definite: la creazione, la composizione e il comportamento degli oggetti.</p>
<p><strong>Incapsulare il concetto che cambia </strong></p>
<p>Molti e importanti sono i principi alla base di queste soluzioni. Norme comuni di buon senso come &#8220;favorire la composizione rispetto all&#8217;ereditarieta&#8217;&#8221;, “ridurre le interdipendenze tra gli oggetti” e via dicendo trovano in questo catalogo motivazioni teoriche e dimostrazioni pratiche. Ma in particolare c&#8217;e&#8217; un principio, davvero trasversale a tutti i pattern, il quale a mio avviso raccoglie in se&#8217; tutto lo spirito dei design patterns e quindi della buona programmazione ad oggetti.</p>
<p>L&#8217;incapsulamento, tra le caratteristiche dei linguaggi Object Oriented, e&#8217; forse quello piu&#8217; difficile da far proprio per i neofiti della programmazione. Non tanto perche&#8217; sia un concetto di per se&#8217; ostico da capire &#8211; del resto viviamo in un mondo fatto di oggetti molto incapsulati, sia naturali che artificiali; quanto perche&#8217; in fase di progettazione stabilire cosa davvero un oggetto debba esporre attraverso la propria interfaccia, e cosa no, sembra in partenza una questione in qualche modo soggettiva, o che comunque richieda una certa dose di esperienza per essere applicata al meglio.</p>
<p>Il manuale dei pattern ci insegna invece un principio fondamentale da seguire per essere sicuri di ottenere un buon livello di incapsulamento, e quindi un buon design, nel proprio software.</p>
<p>Il principio e&#8217; quello di &#8220;incapsulare il concetto che cambia&#8221;.</p>
<p>Una volta studiato un problema, cioe&#8217;, si devono individuare quei fattori che possono &#8220;cambiare&#8221; nel tempo e nel luogo, allo scopo di rendere il nostro design il piu&#8217; adatto a rispondere correttamente a questi cambiamenti. La progettazione deve quindi mirare ad isolare le parti passibili di cambiamenti in punti ben definiti, mascherando la complessita&#8217; alle altre parti: ne viene fuori quindi un sistema &#8220;modulare&#8221; in cui ogni &#8220;pezzo&#8221; svolge un compito ben preciso, del cui svolgimento pero&#8217; nulla e&#8217;<br />
visibile alle altre parti del sistema.<br />
Per esempio, se progettiamo un&#8217;applicazione grafica, ci sono molti fattori che possono variare nel &#8220;luogo&#8221;: l&#8217;ambiente di esecuzione, le librerie grafiche a disposizione, la risoluzione dello schermo etc., e nel &#8220;tempo&#8221;: una connessione di rete che puo&#8217; andare su e giu&#8217;, un aggiornamento di pacchetti etc.</p>
<p>Nella programmazione ad oggetti un buon incapsulamento e&#8217; alla base della stabilita&#8217; e della longevita&#8217; del software, intesa quest&#8217;ultima sia come manutenibilita&#8217; che come vita vera e propria.<br />
Un modello ad oggetti ben incapsulato e&#8217; infatti facile da modificare: oltre ad essere nel complesso piu&#8217; semplice da capire, un codice ben incapsulato dentro una classe puo&#8217; essere modificato senza impattare sul resto del modello ad oggetti.<br />
E un modello facile da modificare e manutenere e&#8217; una carta vincente per un software che mira ad essere utilizzato con successo a lungo e da molte persone.</p>
<p><strong>Un esempio </strong></p>
<p>Vediamo un esempio di questo concetto: il pattern Builder.</p>
<p><a href="http://pronetics.files.wordpress.com/2010/02/builder2.png"><img class="alignnone size-full wp-image-398" title="Builder pattern" src="http://pronetics.files.wordpress.com/2010/02/builder2.png?w=600" alt="Builder pattern"   /></a></p>
<p>Lo scopo di questo pattern creazionale e&#8217; quello di astrarre la costruzione di oggetti di cui si conosce la logica di base, ma i cui singoli dettagli (i “pezzi” della costruzione) possono variare o non sono noti in fase di design. Esempi di queste situazioni sono le pagine web composte da moduli custom (es. portlet), oppure le interfacce grafiche con look and feel e/o layout personalizzabile o variabile secondo il sistema (es. swing l&amp;f), etc. Come si puo&#8217; notare, il pattern Builder affronta il problema della variabilita&#8217; di costruzione dei componenti incapsulandone il concetto nell&#8217;interfaccia AbstractBuilder.<br />
Il creatore dei prodotti finali, il Director, e&#8217; in grado di assemblare il prodotto finale pur non conoscendo nulla della logica stessa di creazione delle singole parti. Il design che ne risulta e&#8217; altamente flessibile e facilmente manutenibile: la modalita&#8217; di creazione dei pezzi puo&#8217; essere modificata a piacimento senza impattare nel risultato del prodotto finale.</p>
<p><strong>Conclusione</strong></p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } -->La conoscenza dei design pattern e&#8217; una base fondamentale nella progettazione di buon software. Ancora piu&#8217; importante pero&#8217; e&#8217; far propri i principi che stanno alla base dei pattern stessi, in modo da essere in grado di procedere da soli anche quando le problematiche da affrontare sembrano non immediatamente riconducibili ai casi rappresentati nel catalogo. E perche&#8217; no, magari scoprire da soli un nuovo, fantastico design pattern.</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		H2 { margin-bottom: 0.21cm } 		H2.western { font-family: "Arial", sans-serif; font-size: 14pt; font-style: italic } 		H2.cjk { font-family: "DejaVu Sans"; font-size: 14pt; font-style: italic } 		H2.ctl { font-family: "DejaVu Sans"; font-size: 14pt; font-style: italic } --></p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		H2 { margin-bottom: 0.21cm } 		H2.western { font-family: "Arial", sans-serif; font-size: 14pt; font-style: italic } 		H2.cjk { font-family: "DejaVu Sans"; font-size: 14pt; font-style: italic } 		H2.ctl { font-family: "DejaVu Sans"; font-size: 14pt; font-style: italic } -->Author: <a href="http://it.linkedin.com/in/davidedeidda" target="_blank">Davide Deidda</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pronetics.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pronetics.wordpress.com/389/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pronetics.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pronetics.wordpress.com/389/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pronetics.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pronetics.wordpress.com/389/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pronetics.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pronetics.wordpress.com/389/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pronetics.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pronetics.wordpress.com/389/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pronetics.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pronetics.wordpress.com/389/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pronetics.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pronetics.wordpress.com/389/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pronetics.wordpress.com&amp;blog=9649280&amp;post=389&amp;subd=pronetics&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pronetics.wordpress.com/2010/02/09/design-patterns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d911377de96e99bd75430675dd20136c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">desmax74</media:title>
		</media:content>

		<media:content url="http://pronetics.files.wordpress.com/2010/02/builder2.png" medium="image">
			<media:title type="html">Builder pattern</media:title>
		</media:content>
	</item>
	</channel>
</rss>
