<?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>Esfera Microatômica &#187; Io</title>
	<atom:link href="http://diogenesf.wordpress.com/category/io/feed/" rel="self" type="application/rss+xml" />
	<link>http://diogenesf.wordpress.com</link>
	<description></description>
	<lastBuildDate>Tue, 02 Jun 2009 03:33:48 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='diogenesf.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/84e3202ae65e0f89a4f2ea7ddead8a9d?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Esfera Microatômica &#187; Io</title>
		<link>http://diogenesf.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://diogenesf.wordpress.com/osd.xml" title="Esfera Microatômica" />
		<item>
		<title>acts_as_state_machine: Gerenciando estados de um Model Rails</title>
		<link>http://diogenesf.wordpress.com/2007/12/11/acts_as_state_machine-gerenciando-estados-de-um-model-rails/</link>
		<comments>http://diogenesf.wordpress.com/2007/12/11/acts_as_state_machine-gerenciando-estados-de-um-model-rails/#comments</comments>
		<pubDate>Tue, 11 Dec 2007 21:06:51 +0000</pubDate>
		<dc:creator>diogenesf</dc:creator>
				<category><![CDATA[Belo Horizonte]]></category>
		<category><![CDATA[Io]]></category>
		<category><![CDATA[Opiniao]]></category>
		<category><![CDATA[Programacao]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Plugins]]></category>

		<guid isPermaLink="false">http://diogenesf.wordpress.com/2007/12/11/acts_as_state_machine-gerenciando-estados-de-um-model-rails/</guid>
		<description><![CDATA[Acts as State Machine eh um plugin do Rails que visa facilitar o gerenciamento de estados de um dado model ActiveRecord, implementando assim uma Maquina de Estado Finito.  O acts_as_state_machine carrega o conceito de eventos. Que sao blocos de codigo responsaveis pelas transicoes de um estado do Model para o outro.  Suponhamos, por [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diogenesf.wordpress.com&blog=178536&post=13&subd=diogenesf&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk/README">Acts as State Machine</a> eh um plugin do Rails que visa facilitar o gerenciamento de estados de um dado model ActiveRecord, implementando assim uma <a href="http://pt.wikipedia.org/wiki/M%C3%A1quina_de_estado_finito">Maquina de Estado Finito</a>.  O <em>acts_as_state_machine</em> carrega o conceito de eventos. Que sao blocos de codigo responsaveis pelas transicoes de um estado do Model para o outro.  Suponhamos, por exemplo, que voce queira controlar os estados das tarefas que voce irah realizar durante um dia. Com o <em>acts_as_state_machine</em> voce poderia ter algo parecido com o seguinte:</p>
<pre class="brush: ruby;">
class Tarefa &lt; ActiveRecord::Base
  # Inicialmente a Tarefa estarah no estado 'Pendente'
  acts_as_state_machine :initial =&gt; :pendente

  state :pendente
  state :iniciada, :enter =&gt; Proc.new {|o| Mailer.send_notice(o)}
  state :concluida
  state :cancelada

  # No evento 'iniciar' eh realizada a transicao do estado 'pendente' para 'iniciada'
  event :iniciar do
    transitions :from =&gt; :pendente, :to =&gt; :iniciada
  end

  event :concluir do
    transitions :from =&gt; :iniciada, :to =&gt; :concluida
  end

  event :cancelar do
    transitions :from =&gt; :pendente, :to =&gt; :cancelada
  end
end
</pre>
<p>Para cada estado, um metodo &#8220;&lt;nomedoestado&gt;?&#8221; serah  criado, e para cada evento, um metodo &#8220;&lt;nomedoevento&gt;!&#8221; serah criado:</p>
<pre class="brush: ruby;">
  t = Tarefa.create # Cria a tarefa com seu estado inicial...
  t.state # =&gt; &quot;pendente&quot;
  t.iniciar! # Envia notificacao por email, e muda estado da Tarefa para &quot;iniciada&quot;
  t.iniciada? # =&gt; true
  # ...
  t.concluir! # Muda o estado da tarefa para &quot;Concluida&quot;
</pre>
<p>Como voce pode ver no codigo de exemplo, quando a nossa <em>Tarefa</em> mudar para o estado &#8216;iniciada&#8217;, (em consequencia da chamada ao metodo do evento &#8216;iniciar&#8217;), serah enviada uma notificacao por email. Isso eh feito por meio daquela <em>Proc</em> que foi passada como uma funcao de callback do estado <em>:iniciada</em>. Nos mostrando que temos a flexibilidade de fazer qualquer coisa na mudanca de um estado para o outro. Alih, no lugar de um bloco de codigo, pode ser passado um simbolo, com o nome de um metodo de instancia do model.</p>
<h3>Instalacao</h3>
<p>Para quem jah instalou um plugin Rails, instalar o <em>acts_as_state_machine</em> nao tem segredo algum! Na raiz da tua aplicacao Rails, digite:</p>
<pre class="brush: ruby;">
  ./script/plugin install http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk/
</pre>
<p>Daih em diante eh soh usar! <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/diogenesf.wordpress.com/13/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/diogenesf.wordpress.com/13/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diogenesf.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diogenesf.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diogenesf.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diogenesf.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diogenesf.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diogenesf.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diogenesf.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diogenesf.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diogenesf.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diogenesf.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diogenesf.wordpress.com&blog=178536&post=13&subd=diogenesf&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://diogenesf.wordpress.com/2007/12/11/acts_as_state_machine-gerenciando-estados-de-um-model-rails/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cd338fedd59e7d02e9479229679354f3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">diogenesf</media:title>
		</media:content>
	</item>
		<item>
		<title>&#8220;Hello Io!&#8221; println</title>
		<link>http://diogenesf.wordpress.com/2007/12/10/hello-io-println/</link>
		<comments>http://diogenesf.wordpress.com/2007/12/10/hello-io-println/#comments</comments>
		<pubDate>Mon, 10 Dec 2007 20:57:11 +0000</pubDate>
		<dc:creator>diogenesf</dc:creator>
				<category><![CDATA[Io]]></category>
		<category><![CDATA[Programacao]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Linguagens de Script]]></category>

		<guid isPermaLink="false">http://diogenesf.wordpress.com/2007/12/10/hello-io-println/</guid>
		<description><![CDATA[Bem, pra quem nao conhece, Io eh uma linguagem de programacao dinamica, Orientada a Objetos, e baseada em Prototipos.
No Io, com o mesmo programa que voce executa os arquivos fonte .io, voce pode, por exemplo, executar um interpretador interativo, similar ao nosso amado irb no Ruby.
Instalacao
A instalacao no windows eh bem simples!
Na pagina de downloads [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diogenesf.wordpress.com&blog=178536&post=11&subd=diogenesf&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Bem, pra quem nao conhece, <a href="http://www.iolanguage.com">Io</a> <a href="http://en.wikipedia.org/wiki/Io_%28programming_language%29">eh</a> uma linguagem de programacao dinamica, Orientada a Objetos, e <a href="http://en.wikipedia.org/wiki/Prototype-based_programming">baseada em Prototipos</a>.</p>
<p>No Io, com o mesmo programa que voce executa os arquivos fonte .io, voce pode, por exemplo, executar um interpretador interativo, similar ao nosso amado <em>irb</em> no Ruby.</p>
<h3>Instalacao</h3>
<p>A instalacao no windows eh bem simples!<br />
Na <a href="http://www.iolanguage.com/downloads/">pagina de downloads do site oficial</a> voce poderah encontrar o link da versao para Windows. Eh um arquivo zip! Baixe-o, descompacte-o no C:\, e edite a variavel de ambiente Path, incluindo o diretorio &#8220;C:\usr\local\bin&#8221;. Pelo que parece, ha uma limitacao nessa distribuicao que fixa esses diretorios, por causa dos <em>add-ons</em>, que ficam localizados no &#8220;\usr\local\lib\io\addons&#8221;.<br />
Limitacao tosca essa, mas por enquanto nao vou me preocupar com isso!</p>
<h3>Mao na massa!</h3>
<p>Entao vamos lah! Vamos ao nosso &#8220;Hello Io!&#8221;. Digite &#8220;io&#8221; no terminal, e comece a brincar:<br />
<code><br />
Io&gt; "Hello Io!" println<br />
Hello Io!<br />
==&gt; Hello Io!</code></p>
<p>(Veja mais alguns exemplos de codigo no breve <a href="http://www.iolanguage.com/docs/tutorial/">tutorial do site oficial</a>, ou no <a href="http://iolanguage.com/docs/manual">guia oficial da linguagem</a>.)</p>
<h3> Caracteristicas da Linguagem</h3>
<p>Primeiramente, nao tente encontrar classes no Io! Para criar novos objetos voce deve clonar objetos jah existentes:</p>
<p><code>Io&gt; MeuObjeto := Object clone<br />
==&gt;  MeuObjeto_0x485a18:<br />
type             = "MeuObjeto"<br />
</code></p>
<p>Io traz consigo o conceito de <em>slots</em>, que compoem um dado objeto. <em>Slots</em> podem ser interpretadas como as mensagens as quais um objeto sabe responder.  Podemos considerar um <em>slot</em> como um relacionamento &#8216;nome =&gt; valor&#8217;.</p>
<p>Os atributos e metodos de um objeto sao considerados <em>slots</em>, independente de seu valor ser codigo executavel ou outro tipo de objeto.<br />
Voce pode remove-los ou adicionar novos atributos/metodos quando quiser:<br />
<code><br />
Io&gt; MeuObjeto meuMetodo := method( "Meu novo metodo!" println)<br />
==&gt; method(<br />
"Meu novo metodo!" println<br />
)<br />
Io&gt; MeuObjeto meuMetodo<br />
Meu novo metodo!<br />
==&gt; Meu novo metodo!<br />
</code></p>
<p><em>Tudo em Io eh um objeto!</em> Veja o seguinte codigo, por exemplo:<br />
<code><br />
Io&gt; 1 asString<br />
==&gt; 1<br />
Io&gt; 100 asCharacter<br />
==&gt; d</code></p>
<p>A comunicacao dos objetos Io com o resto do mundo eh feita <a href="http://en.wikipedia.org/wiki/Message_passing">por meio do envio/recebimento de mensagens</a>. Considere por exemplo, o seguinte codigo:<br />
<code><br />
System version<br />
</code></p>
<p>No exemplo acima, a mensagem &#8220;version&#8221; eh enviada para o objeto &#8220;System&#8221;, para que esse possa responde-la.</p>
<p>Se eu tentar executar esse codigo acima no &#8220;io&#8221; terei o seguinte resultado:</p>
<p><code>Io&gt; System version<br />
==&gt; 20070410</code></p>
<p>Bem, eh isso! A ideia deste post era soh falar alguma coisa sobre Io. Posteriormente vou escrever sobre algumas features e aspectos um pouco mais interessantes da linguagem. Espero que possa ser util pra alguem! <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Ateh a proxima!</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/diogenesf.wordpress.com/11/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/diogenesf.wordpress.com/11/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diogenesf.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diogenesf.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diogenesf.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diogenesf.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diogenesf.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diogenesf.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diogenesf.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diogenesf.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diogenesf.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diogenesf.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diogenesf.wordpress.com&blog=178536&post=11&subd=diogenesf&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://diogenesf.wordpress.com/2007/12/10/hello-io-println/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/cd338fedd59e7d02e9479229679354f3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">diogenesf</media:title>
		</media:content>
	</item>
	</channel>
</rss>