<?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>Guaita &#187; Groovy</title>
	<atom:link href="http://guaita.wordpress.com/category/tecnic/groovy/feed/" rel="self" type="application/rss+xml" />
	<link>http://guaita.wordpress.com</link>
	<description></description>
	<lastBuildDate>Thu, 05 Mar 2009 08:48:20 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>ca</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='guaita.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/a795b8acfeec2650923f9ad830d74817?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Guaita &#187; Groovy</title>
		<link>http://guaita.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://guaita.wordpress.com/osd.xml" title="Guaita" />
		<item>
		<title>Programació concurrent + OOP ~ Actors Model: molt fàcil en Groovy</title>
		<link>http://guaita.wordpress.com/2009/03/05/gparallelizer/</link>
		<comments>http://guaita.wordpress.com/2009/03/05/gparallelizer/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 00:25:02 +0000</pubDate>
		<dc:creator>jordicamposmiralles</dc:creator>
				<category><![CDATA[Didàctica]]></category>
		<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://guaita.wordpress.com/?p=106</guid>
		<description><![CDATA[Fa temps que vaig descobrir Groovy (un llenguatge d&#8217;scripting sobre la JVM ideal per als que saben Java), i ara he trobat el complement ideal per a fer &#8220;pseudo-codi&#8221; (que es pot executar!) per a fer més fàcil l&#8217;estudi dels problemes de concurrència: GParallelizer. De fet, la cosa va més enllà, i es tracta d&#8217;una [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=guaita.wordpress.com&blog=3006084&post=106&subd=guaita&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://groovy.codehaus.org"><img class="alignleft" style="border:0 none;" title="Groovy" src="http://media.xircles.codehaus.org/_projects/groovy/_logos/medium.png" alt="" width="203" height="100" /></a>Fa temps que vaig descobrir <a href="http://groovy.codehaus.org">Groovy</a> (un llenguatge d&#8217;scripting sobre la JVM ideal per als que saben Java), i ara he trobat el complement ideal per a fer &#8220;pseudo-codi&#8221; (que es pot executar!) per a fer més fàcil l&#8217;estudi dels problemes de concurrència: <a href="http://code.google.com/p/gparallelizer/wiki/Actors">GParallelizer</a>. De fet, la cosa va més enllà, i es tracta d&#8217;una llibreria que facilita moltíssim la programació &#8220;en paral·lel&#8221; per aprofitar els nous multi-core&#8230;</p>
<p>Aquí va un petit exemple&#8230;</p>
<pre>import org.gparallelizer.actors.pooledActors.AbstractPooledActor

class GameMaster extends AbstractPooledActor {
  int secretNum

  void afterStart() {
    secretNum = new Random().nextInt(10)
  }

  void act() {
    loop {
      react { int num -&gt;
        if      ( num &gt; secretNum )
          reply 'too large'
        else if ( num &lt; secretNum )
          reply 'too small'
        else {
          reply 'you win'
          stop()
        }
      }
    }
  }
}
<span id="more-106"></span>
class Player extends AbstractPooledActor {
  String              name
  AbstractPooledActor server
  int                 myNum

  void act() {
    loop {
      myNum = new Random().nextInt(10)

      server.send myNum

      react {
        switch( it )
        {
          case 'too large':
            println "$name: $myNum was too large"; break
          case 'too small':
            println "$name: $myNum was too small"; break
          case 'you win':
            println "$name: I won $myNum"; stop(); break
        }
      }
    }
  }
}

final def master = new GameMaster()
final def player = new Player( name: 'Player', server: master )

master.start()
player.start()</pre>
<p>Bé, sembla que aquest paradigma (que existeix des dels 70) va guanyant adeptes ara que estan de moda els multi-core: més en Groovy (<a href="http://groovy.codehaus.org/Concurrency+with+Groovy">1</a>, <a href="http://www.slideshare.net/paulk_asert/groovy-concurrency-paul-king-code-camp-nov2008-presentation">2</a>) , <a href="http://tech.puredanger.com/java7#jsr166">Java</a>, <a href="http://www.scala-lang.org/node/242">Scala</a>, <a href="http://dramatis.mischance.net/wiki/dramatis">Python-Ruby</a> (exemple <a href="http://dramatis.mischance.net/repositories/entry/dramatis/examples/im">chat</a>), <a href="http://www.slideshare.net/vishnu/concurrency-oriented-programming-in-erlang?src=related_normal&amp;rel=474822">Erlang</a>, <a href="http://garuma.wordpress.com/2009/03/02/exploring-other-concurrency-models/">.NET</a></p>
<p>L&#8217;exemple és petitó. La idea seria usar-lo per a les classes de concurrència. Els passos següents podrien ser:</p>
<p>- fer el jugador més &#8220;intel·ligent&#8221;: però no aporta res a les classes de Concurrència<br />
- afegir més jugadors: servidor ha d&#8217;avisar a jugadors perdedors que la  partida s&#8217;ha acabat<br />
- servidor multi-actor: que el servidor estigui composat per més d&#8217;un  actor, per tant afloren problemes d&#8217;accés concurrent al número secret&#8230;<br />
- altres exemples en que hi hagi abraçada mortal donat el tipus de  protocol&#8230;</p>
<p>vaja, que crec que permet &#8220;anar directament al gra&#8221; als problemes nous  de Concurrència, deixant a una banda la dificultat habitual per a implementar-ho  amb Java &#8220;pur&#8221;&#8230; com una mena de pseudo-codi (que es pot executar!). Un  cop entesos i treballats els problemes, una darrera pràctica ja podria  ser en Java &#8220;pur&#8221;.</p>
<p>He creat un fitxer comprimir  <a class="moz-txt-link-freetext" href="http://namaste.maia.ub.es/actors2009-03-04.tar.gz">http://namaste.maia.ub.es/actors2009-03-04.tar.gz</a>, amb tot (groovy,  llibreria actors i codi d&#8217;exemple), només cal descomprimir i executar&#8230;</p>
<p>; )</p>
Posted in Didàctica, Groovy  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/guaita.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/guaita.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/guaita.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/guaita.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/guaita.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/guaita.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/guaita.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/guaita.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/guaita.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/guaita.wordpress.com/106/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=guaita.wordpress.com&blog=3006084&post=106&subd=guaita&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://guaita.wordpress.com/2009/03/05/gparallelizer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b46ee2e9563fc61735a9d9b486da1002?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jordicamposmiralles</media:title>
		</media:content>

		<media:content url="http://media.xircles.codehaus.org/_projects/groovy/_logos/medium.png" medium="image">
			<media:title type="html">Groovy</media:title>
		</media:content>
	</item>
	</channel>
</rss>