<?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>Quanto maior o merge...</title>
	<atom:link href="http://gregoriokusowski.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gregoriokusowski.wordpress.com</link>
	<description>Desenvolvimento sem compromisso com groovy, grails e griffon.</description>
	<lastBuildDate>Wed, 13 Mar 2013 01:06:50 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='gregoriokusowski.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Quanto maior o merge...</title>
		<link>http://gregoriokusowski.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://gregoriokusowski.wordpress.com/osd.xml" title="Quanto maior o merge..." />
	<atom:link rel='hub' href='http://gregoriokusowski.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Abandonando o WordPress</title>
		<link>http://gregoriokusowski.wordpress.com/2013/03/13/abandonando-o-wordpress/</link>
		<comments>http://gregoriokusowski.wordpress.com/2013/03/13/abandonando-o-wordpress/#comments</comments>
		<pubDate>Wed, 13 Mar 2013 01:06:47 +0000</pubDate>
		<dc:creator>gregoriokusowski</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://gregoriokusowski.wordpress.com/?p=61</guid>
		<description><![CDATA[Após algum tempo abandonado aqui, gostaria de informar que o Quanto maior o merge&#8230; continua, porém em outro endereço.  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gregoriokusowski.wordpress.com&#038;blog=14513289&#038;post=61&#038;subd=gregoriokusowski&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Após algum tempo abandonado aqui, gostaria de informar que o <strong>Quanto maior o merge&#8230;</strong> continua, porém em outro <a title="Meu blog :)" href="http://blog.kusowski.com">endereço</a>.</p>
<p> </p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gregoriokusowski.wordpress.com&#038;blog=14513289&#038;post=61&#038;subd=gregoriokusowski&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gregoriokusowski.wordpress.com/2013/03/13/abandonando-o-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/371a30133bfe8cb7fceaf1f023537469?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gregoriokusowski</media:title>
		</media:content>
	</item>
		<item>
		<title>Brincando com Ruby</title>
		<link>http://gregoriokusowski.wordpress.com/2011/09/05/brincando-com-ruby/</link>
		<comments>http://gregoriokusowski.wordpress.com/2011/09/05/brincando-com-ruby/#comments</comments>
		<pubDate>Mon, 05 Sep 2011 23:17:02 +0000</pubDate>
		<dc:creator>gregoriokusowski</dc:creator>
				<category><![CDATA[meta-programação]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://gregoriokusowski.wordpress.com/?p=54</guid>
		<description><![CDATA[Buscando uma idéia para mudar o comportamento de uma classe em uma determinada situação, fiz alguns testes, incluindo o exemplo abaixo. &#160;class Pie &#160; def initialize(name, age) &#160; &#160; @name = name &#160; &#160; @age = age &#160; end &#160; def to_s &#160; &#160; @name &#160; end &#160; def age &#160; &#160; @age &#160; end [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gregoriokusowski.wordpress.com&#038;blog=14513289&#038;post=54&#038;subd=gregoriokusowski&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Buscando uma idéia para mudar o comportamento de uma classe em uma determinada situação, fiz alguns testes, incluindo o exemplo abaixo.</p>
<p><code><br />
&nbsp;class Pie<br />
&nbsp;  def initialize(name, age)<br />
&nbsp;  &nbsp;  @name = name<br />
&nbsp;  &nbsp;  @age = age<br />
&nbsp;  end<br />
&nbsp;  def to_s<br />
&nbsp;  &nbsp;  @name<br />
&nbsp;  end<br />
&nbsp;  def age<br />
&nbsp;  &nbsp;  @age<br />
&nbsp;  end<br />
&nbsp;end<br />
&nbsp;<br />
&nbsp;#Age is saved in seconds<br />
&nbsp;<br />
&nbsp;SECOND = 1<br />
&nbsp;MINUTE = 60 * SECOND<br />
&nbsp;HOUR = 60 * MINUTE<br />
&nbsp;DAY = 24 * HOUR<br />
&nbsp;WEEK = 7 * DAY<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;first_pie = Pie.new "Torta de Ameixa da Vovo", 6000<br />
&nbsp;<br />
&nbsp;def using(unit, &amp;block)<br />
&nbsp;  Pie.class_eval { alias_method :original_age, :age }<br />
&nbsp;  Pie.send :define_method, :age do<br />
&nbsp;  &nbsp;  original_age / (Kernel.const_get unit.to_s.upcase)<br />
&nbsp;  end<br />
&nbsp;  yield<br />
&nbsp;  Pie.class_eval { alias_method :age, :original_age }<br />
&nbsp;end<br />
&nbsp;<br />
&nbsp;using :second do<br />
&nbsp;  puts "Seconds: #{first_pie.age}"<br />
&nbsp;end<br />
&nbsp;<br />
&nbsp;using :minute do<br />
&nbsp;  puts "Minutes: #{first_pie.age}"<br />
&nbsp;end<br />
&nbsp;<br />
&nbsp;using :hour do<br />
&nbsp;  puts "Hours: #{first_pie.age}"<br />
&nbsp;end<br />
</code></p>
<p>Como é possível identificar, cada bloco altera o comportamento do método &#8216;age&#8217;.<br />
A maneira não é segura, nem muito boa para ser usada em produção, pois se ocorrer algum erro, é provavel que o método original se perca, mas é uma ótima forma de saber como a linguagem possui alguns recursos bem interessantes.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gregoriokusowski.wordpress.com&#038;blog=14513289&#038;post=54&#038;subd=gregoriokusowski&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gregoriokusowski.wordpress.com/2011/09/05/brincando-com-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/371a30133bfe8cb7fceaf1f023537469?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gregoriokusowski</media:title>
		</media:content>
	</item>
		<item>
		<title>Gerando migrations rapidamente com rails.</title>
		<link>http://gregoriokusowski.wordpress.com/2011/02/06/gerando-migrations-rapidamente-com-rails/</link>
		<comments>http://gregoriokusowski.wordpress.com/2011/02/06/gerando-migrations-rapidamente-com-rails/#comments</comments>
		<pubDate>Sun, 06 Feb 2011 03:51:49 +0000</pubDate>
		<dc:creator>gregoriokusowski</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[rails generators ruby migrations]]></category>

		<guid isPermaLink="false">http://gregoriokusowski.wordpress.com/?p=47</guid>
		<description><![CDATA[Ontem precisei criar uma migration bem simples, para adicionar a coluna username na tabela users. Ao invés de simplesmente criar a migration através do generate, e alterar para que então crie a coluna, é possível fazer com que o próprio generate faça todo o trabalho. A imagem a baixo demonstra como criar/remover colunas, e um [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gregoriokusowski.wordpress.com&#038;blog=14513289&#038;post=47&#038;subd=gregoriokusowski&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Ontem precisei criar uma migration bem simples, para adicionar a coluna username na tabela users.<br />
Ao invés de simplesmente criar a migration através do generate, e alterar para que então crie a coluna, é possível fazer com que o próprio generate faça todo o trabalho.</p>
<p>A imagem a baixo demonstra como criar/remover colunas, e um exemplo da migration gerada.<div id="attachment_51" class="wp-caption aligncenter" style="width: 520px"><a href="http://gregoriokusowski.files.wordpress.com/2011/02/text3219.png"><img src="http://gregoriokusowski.files.wordpress.com/2011/02/text3219.png?w=510&#038;h=353" alt="" title="RailsGenerateMigration" width="510" height="353" class="size-full wp-image-51" /></a><p class="wp-caption-text">Comando rails para criar migration reponsável por adicionar coluna.</p></div></p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gregoriokusowski.wordpress.com&#038;blog=14513289&#038;post=47&#038;subd=gregoriokusowski&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gregoriokusowski.wordpress.com/2011/02/06/gerando-migrations-rapidamente-com-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/371a30133bfe8cb7fceaf1f023537469?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gregoriokusowski</media:title>
		</media:content>

		<media:content url="http://gregoriokusowski.files.wordpress.com/2011/02/text3219.png" medium="image">
			<media:title type="html">RailsGenerateMigration</media:title>
		</media:content>
	</item>
		<item>
		<title>Matchers Customizados no RSpec</title>
		<link>http://gregoriokusowski.wordpress.com/2010/12/29/matchers-customizados-no-rspec/</link>
		<comments>http://gregoriokusowski.wordpress.com/2010/12/29/matchers-customizados-no-rspec/#comments</comments>
		<pubDate>Wed, 29 Dec 2010 22:53:39 +0000</pubDate>
		<dc:creator>gregoriokusowski</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://gregoriokusowski.wordpress.com/?p=41</guid>
		<description><![CDATA[Esses dias me deparei com um caso no qual havia uma ótima possibilidade de criar um matcher customizado. Em uma verificação, precisei fazer algo do tipo: my_contacts.should list_friends Porém em outra, o seguinte: my_contacts.should list_friends 5 Com base na documentação do RSpec, consegui fazer o seguinte: Spec::Matchers.define :list_friends do &#124;count&#124; match do &#124;my_contacts&#124; if count [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gregoriokusowski.wordpress.com&#038;blog=14513289&#038;post=41&#038;subd=gregoriokusowski&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Esses dias me deparei com um caso no qual havia uma ótima possibilidade de criar um matcher customizado.<br />
Em uma verificação, precisei fazer algo do tipo:<br />
<code>my_contacts.should list_friends</code><br />
Porém em outra, o seguinte:<br />
<code>my_contacts.should list_friends 5</code></p>
<p>Com base na documentação do <a href="http://relishapp.com/rspec">RSpec</a>, consegui fazer o seguinte:<br />
<code>Spec::Matchers.define :list_friends do |count|<br />
	match do |my_contacts|<br />
		if count<br />
			my_contacts.select{|contact| contact.is_friend?}.size == count<br />
		else<br />
			my_contacts.any?{|contact| contact.is_friend?}<br />
		end<br />
	end<br />
	failure_message_for_should do |contacts|<br />
		if count<br />
			"expected that #{count} of your contacts were your friends"<br />
		else<br />
			"expected that any of your contacts were your friend"<br />
		end<br />
	end<br />
	failure_message_for_should_not do |contacts|<br />
		if count<br />
			"didn't expected that #{count} of your contacts were your friends"<br />
		else<br />
			"expected that none of your contacts were your friend"<br />
		end<br />
	end<br />
	description do<br />
		"assure that you have any, many, or no friends"<br />
	end<br />
end</code><br />
Em uma aplicação rails, sugiro que salve o arquivo conforme o seguinte: <em>spec/support/matchers/friends_matchers.rb</em></p>
<p>Solução limpa, bonita, que além de deixar seu teste mais elegante, auxiliará caso ocorra algum erro, especificando na própria mensagem o erro que ocorreu.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gregoriokusowski.wordpress.com&#038;blog=14513289&#038;post=41&#038;subd=gregoriokusowski&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gregoriokusowski.wordpress.com/2010/12/29/matchers-customizados-no-rspec/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/371a30133bfe8cb7fceaf1f023537469?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gregoriokusowski</media:title>
		</media:content>
	</item>
		<item>
		<title>Acelerando o desenvolvimento</title>
		<link>http://gregoriokusowski.wordpress.com/2010/09/22/acelerando-o-desenvolvimento/</link>
		<comments>http://gregoriokusowski.wordpress.com/2010/09/22/acelerando-o-desenvolvimento/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 00:02:04 +0000</pubDate>
		<dc:creator>gregoriokusowski</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[ClipBoard]]></category>

		<guid isPermaLink="false">http://gregoriokusowski.wordpress.com/?p=35</guid>
		<description><![CDATA[Se pararmos para contar quantas vezes lamentamos por ter perdido um importante documento, trecho de texto, e-mail, etc que estava na área de transferencia, talvez fiquemos alguns minutos relembrando de momentos tristes&#8230; hehehe Porém, esse drama para mim acabou! Alguns meses atrás, descobri uma ferramenta muito útil, que utilizo até hoje. O CLCL, é um [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gregoriokusowski.wordpress.com&#038;blog=14513289&#038;post=35&#038;subd=gregoriokusowski&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Se pararmos para contar quantas vezes lamentamos por ter perdido um importante documento, trecho de texto, e-mail, etc que estava na área de transferencia, talvez fiquemos alguns minutos relembrando de momentos tristes&#8230; hehehe</p>
<p>Porém, esse drama para mim acabou!</p>
<p>Alguns meses atrás, descobri uma ferramenta muito útil, que utilizo até hoje. O <a href="http://www.nakka.com/soft/clcl/index_eng.html">CLCL</a>, é um programa que vai &#8220;guardando&#8221; a nossa área de transferencia. Cada vez que fazemos o famoso <em>&#8220;Ctrl + C&#8221;</em>, ele captura o que foi copiado e guarda. Por padrão, ele proporciona 30 <em>&#8220;Ctrl + C&#8221;</em>&#8216;s, mas é possível configurar sem grandes problemas. Após copiar o objeto desejado, basta pressionar <em>&#8220;Alt + C&#8221;</em> para ter acesso a uma lista com as últimas coisas copiadas para a área de transferencia.<br />
Normalmente utilizo com pequenos fragmentos de código, etc. Até hoje, só tive problemas com imagens, uma vez que, tentei capturar mais de 5, e ele não conseguiu recuperar da forma desejada.</p>
<p>As vezes, aquele trabalho de fazer <em>&#8220;Ctrl + C&#8221;</em>, <em>&#8220;Alt + Tab&#8221;</em>, <em>&#8220;Ctrl + V&#8221;</em>, <em>&#8220;Alt + Tab&#8221;</em>, <em>&#8220;Ctrl + C&#8221;</em>, <em>&#8220;Alt + Tab&#8221;</em>, <em>&#8220;Ctrl + V&#8221;</em>&#8230;, pode se tornar o seguinte: <em>&#8220;Ctrl + C&#8221;</em>, <em>&#8220;Ctrl + C&#8221;</em>, <em>&#8220;Ctrl + C&#8221;</em>, <em>&#8220;Alt + Tab&#8221;</em>, <em>&#8220;Alt + C&#8221;</em>, <em>&#8220;Alt + C&#8221;</em>, <em>&#8220;Alt + C&#8221;</em></p>
<p>Embora não pareça muita vantagem, sinto uma agonia em ver 2 documentos &#8216;pulando&#8217; na minha tela, e casos simples como esse são resolvidos com o uso do CLCL.</p>
<p>Após alguns dias de uso, o CLCL torna-se uma ferramenta indispensável não só no desenvolvimento de software, mas também em consultas acadêmicas, montagem de documentos, entre outros.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gregoriokusowski.wordpress.com&#038;blog=14513289&#038;post=35&#038;subd=gregoriokusowski&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gregoriokusowski.wordpress.com/2010/09/22/acelerando-o-desenvolvimento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/371a30133bfe8cb7fceaf1f023537469?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gregoriokusowski</media:title>
		</media:content>
	</item>
		<item>
		<title>Utilizando o Spring-Security-Core em uma aplicação Grails&#8230;</title>
		<link>http://gregoriokusowski.wordpress.com/2010/09/13/utilizando-o-spring-security-core-em-uma-aplicacao-grails/</link>
		<comments>http://gregoriokusowski.wordpress.com/2010/09/13/utilizando-o-spring-security-core-em-uma-aplicacao-grails/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 00:29:52 +0000</pubDate>
		<dc:creator>gregoriokusowski</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://gregoriokusowski.wordpress.com/?p=26</guid>
		<description><![CDATA[Alguns dias atrás, iniciei uma aplicação para controle de estoque em Grails. A princípio, seu uso estaria envolvido apenas na rede interna de uma empresa, porém decidi que utilizaria algumas regras na validação de usuários, para saber quem movimentou o que, quando, etc&#8230; Para me auxiliar nisso, instalei o plugin Spring-Security-Core. Resolvi por utilizar a [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gregoriokusowski.wordpress.com&#038;blog=14513289&#038;post=26&#038;subd=gregoriokusowski&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Alguns dias atrás, iniciei uma aplicação para controle de estoque em Grails.</p>
<p>A princípio, seu uso estaria envolvido apenas na rede interna de uma empresa, porém decidi que utilizaria algumas regras na validação de usuários, para saber quem movimentou o que, quando, etc&#8230;<br />
Para me auxiliar nisso, instalei o plugin Spring-Security-Core. Resolvi por utilizar a anotação <em>@Secured</em> nos meus controllers, para poder validar o que poderia ser alterado por usuários(movimentação em geral), e o que poderia ser alterado pelo administrador(master data, assim como as devidas permissões aos usuários).</p>
<p>Com uma rápida vasculhada pelo guia disponibilizado por eles, seguindo o tutorial, encontrei algo semelhante ao seguinte:<br />
<code>package a.b.c<br />
import grails.plugins.springsecurity.Secured<br />
@Secured(['ROLE_ADMIN'])<br />
class MeuQueridoController { ... }</code></p>
<p>Porém, ao utilizar este recurso do plugin desta forma, ocorria o seguinte erro:<br />
<code>Exception Message: EL1008E:(pos 0): Field or property 'ROLE_ADMIN' cannot be found on object of type 'org.springframework.security.web.access.expression.WebSecurityExpressionRoot'<br />
Caused by: Failed to evaluate expression 'ROLE_ADMIN'</code><br />
Acredito que foi apenas um erro nestes documentos do plugin, pois vasculhando no mesmo, encontramos o código contendo a informação correta, podemos corrigir o erro da seguinte forma:<br />
<code>package a.b.c<br />
import grails.plugins.springsecurity.Secured<br />
@Secured(["hasRole('ROLE_ADMIN')"])<br />
class MeuQueridoController { ... }</code></p>
<p>Buscando um pouco na documentação do Spring, cheguei no seguinte:<br />
	org.springframework.security.web.access.expression.WebSecurityExpressionRoot<br />
	que por sua vez, herda os seguintes métodos da classe SecurityExpressionRoot:<br />
<code>		boolean 	denyAll()<br />
		 boolean 	hasAnyRole(java.lang.String... roles)<br />
		 boolean 	hasRole(java.lang.String role)<br />
		 boolean 	isAnonymous()<br />
		 boolean 	isAuthenticated()<br />
		 boolean 	isFullyAuthenticated()<br />
		 boolean 	isRememberMe()<br />
		 boolean 	permitAll()</code></p>
<p>A partir disso, temos o controle desejado de nossos usuários na aplicação de diversas formas, passando basicamente a condição para acesso:</p>
<blockquote><p>
Liberando para duas &#8220;classes&#8221; de permissões:<br />
<code>@Secured("hasAnyRole(['PERMISSAO_DE_ADMINISTRADOR','PERMISSAO_DE_USUARIO'])")</code>
</p></blockquote>
<blockquote><p>
Liberando acesso apenas para usuários que não estejam logados:<br />
<code>@Secured("isAnonymous()")</code>
</p></blockquote>
<blockquote><p>
Acesso para qualquer usuário, bastando apenas estar logado.<br />
<code>@Secured("isAuthenticated()")</code>
</p></blockquote>
<p>Com base nisso, podemos facilmente controlar o acesso de toda a aplicação.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gregoriokusowski.wordpress.com&#038;blog=14513289&#038;post=26&#038;subd=gregoriokusowski&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gregoriokusowski.wordpress.com/2010/09/13/utilizando-o-spring-security-core-em-uma-aplicacao-grails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/371a30133bfe8cb7fceaf1f023537469?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gregoriokusowski</media:title>
		</media:content>
	</item>
		<item>
		<title>Hello, Groovy!</title>
		<link>http://gregoriokusowski.wordpress.com/2010/07/04/hello-groovy/</link>
		<comments>http://gregoriokusowski.wordpress.com/2010/07/04/hello-groovy/#comments</comments>
		<pubDate>Sun, 04 Jul 2010 14:29:02 +0000</pubDate>
		<dc:creator>gregoriokusowski</dc:creator>
				<category><![CDATA[Hello World]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[hello world]]></category>

		<guid isPermaLink="false">http://gregoriokusowski.wordpress.com/?p=5</guid>
		<description><![CDATA[Ensina desde o básico, como fazer o 'Hello World!' na linguagem.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gregoriokusowski.wordpress.com&#038;blog=14513289&#038;post=5&#038;subd=gregoriokusowski&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Como iniciar em uma nova linguagem sem ser a partir do clássico &#8220;Hello World!&#8221;?</p>
<p>Este post será útil aqueles que ainda não estão familiarizados com Groovy em si, ou alguns de seus frameworks.</p>
<p>Antes de qualquer coisa, não seria bom conhecer um pouco a respeito da linguagem?</p>
<p>Basicamente, Groovy é uma linguagem dinâmica*, que roda na JVM*, que pode fazer uso de todas as bibliotecas já existentes em java*. Ela também simplifica o trabalho do desenvolvedor em testes unitários*, assim como na criação de aplicações desktop e web, e possui suporte à DSL&#8217;s*. Com este breve resumo já somos capazes de entender o suficiente sobre ela.</p>
<blockquote><p>*Dinâmica: A começar pela Tipagem, uma linguagem fortemente tipada é uma linguagem na qual devemos declarar os tipos(se é inteiro, string, etc), já na linguagem dinâmica, não precisamos fazer isso, basta criar uma variável, que poderá ser qualquer coisa. A tipagem também pode ser estática(em tempo de compilação) ou em tempo de execução. Outro ponto interessante do Groovy, é o possibilidade de executar o código diretamente ou compila-lo.</p>
<p>*JVM: É a máquina virtual java. Como já dizia o slogan da sun: &#8220;<strong>Write once, run anywhere</strong>&#8220;, código que fazemos em java, após ser compilado, é interpretado não pelo computador que irá roda-lo, mas sim pela JVM presente naquele computador, que será capaz de executar o código então na máquina. Isso nos garante que o código que criamos rodará em qualquer plataforma, desde que a mesma possua suporte a java(Windows, Unix, MacOS, Aparelhos celulares, etc, java está presente em quase tudo).</p>
<p>*Bibliotecas java: Hoje podemos encontrar milhares de projetos java, que fornecem diversas funcionalidades, desde um framework para desenvolvimento web completo, até um simples(nem tão simples) validador de cpf. Grande parte dessas bibliotecas foram criadas para utilização com java, e sendo Groovy uma linguagem que roda na JVM, nós podemos utilizar todo e qualquer recurso que é fornecidor por essas bibliotecas, isso garante ao groovy um enorme leque de possibilidades.</p>
<p>*Testes unitários: Podemos dizer que testes são uma ferramenta para o desenvolvedor garantir a funcionalidade do seu código. Através de testes unitários, podemos verificar resultados da execução de um método, entre outros.</p>
<p>*DSL&#8217;s: Conhecidades como &#8216;Domain Specific Languages&#8217;, são linguagens específicas para algum contexto. Por exemplo, trabalhando em um banco, é possivel criar uma linguagem própria do banco, que teria funcionalidades do próprio negócio, como acesso a contas, verificação de saldo, movimentação, etc.
</p></blockquote>
<p>O papo está bom, mas vamos deixar de enrolação, e vamos instalar o groovy!</p>
<p>Caso utilize Windows, e esteja com preguiça, você pode baixar o <a title="Groovy Windows Installer" href="http://groovy.codehaus.org/Download" target="_blank">windows-installer</a>, que fará todo o trabalho sujo por você,</p>
<p>caso contrário, pode seguir o guia abaixo para windows:</p>
<ol>
<li>Baixe o <a title="Groovy Binary Release Download" href="http://groovy.codehaus.org/Download" target="_blank">Binary Release do Groovy</a></li>
<li>Descompacte onde achar mais conveniente, eu descompactei em C:/groovy-1.7.1/</li>
<li>Agora vamos direcionar a sua variável de ambiente <em>GROOVY_HOME</em> para a pasta recém criada:</li>
</ol>
<ul>
<li>Clique com o botão direito em Meu Computador, Acesse a opção Propriedades.</li>
<li>Selecione a opção Avançado. Na aba avançado, clique em Variáveis de Ambiente(environment variables).<a href="http://gregoriokusowski.files.wordpress.com/2010/07/properties.png"><img class="aligncenter size-full wp-image-8" title="MeuComputador-Propriedades-Avançado" src="http://gregoriokusowski.files.wordpress.com/2010/07/properties.png?w=510" alt=""   /></a></li>
<li>Após isso, é possível criar a variável de ambiente <em>GROOVY_HOME</em> com a pasta que recém descompactamos:<a href="http://gregoriokusowski.files.wordpress.com/2010/07/properties2.png"><img class="aligncenter size-full wp-image-9" title="Variaveis-de-ambiente" src="http://gregoriokusowski.files.wordpress.com/2010/07/properties2.png?w=510" alt=""   /></a></li>
<li>Depois de criar a variável de ambiente <em>GROOVY_HOME</em> precisamos adicionar na variável <em>PATH </em>o seguinte: <em>%GROOVY_HOME%\bin, </em>separando das demais variáveis com ponto e vírgula(;).</li>
<li>Você também deverá possuir uma <a title="JDK Download" href="http://java.sun.com/javase/downloads/index.jsp" target="_blank">JDK</a> instalada.</li>
<li>Possuindo a JDK instalada, verifique se a váriavel<em> JAVA_HOME</em> já existe, caso não exista, crie-a assim como criamos a variável <em>GROOVY_HOME</em>, porém desta vez, utilizando o caminho da instalação da JDK.</li>
</ul>
<p>Observação Importante: Note que criamos a variável <em>GROOVY_HOME</em> na parte de variáveis do sistema(System variables), e não acima(de usuário, User variables for gregorio), então é importante frisar que as variáveis <em>PATH</em> e <em>GROOVY_HOME</em> contendo a configuração criada, deverão estar ambas ou na parte do usuário, ou na parte do sistema. Minha sugestão é que criem para o sistema.</p>
<p>Em qualquer outro sistema operacional, o necessário para a instalação são os 3 paths vistos acima, <em>GROOVY_HOME, JAVA_HOME </em>e<em> PATH.</em></p>
<p>Após configurado, podemos enfim, meter a mão no código!</p>
<p>Na linha de comando, podemos executar o seguinte comando:<br />
<code>groovysh</code></p>
<p>Este é um simples shell onde podemos executar código groovy, sem qualquer impedimento.</p>
<p>Aproveitamos então, para fazer nosso tão esperado &#8216;Hello World!&#8217;&#8230; basta digitar o seguinte:</p>
<p><code>println 'Hello World!'</code></p>
<p>Após isso temos o seguinte resultado:</p>
<p><a href="http://gregoriokusowski.files.wordpress.com/2010/07/hello_groovy.png"><img class="aligncenter size-full wp-image-14" title="hello_groovy" src="http://gregoriokusowski.files.wordpress.com/2010/07/hello_groovy.png?w=510" alt=""   /></a></p>
<p>Até a próxima!</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gregoriokusowski.wordpress.com&#038;blog=14513289&#038;post=5&#038;subd=gregoriokusowski&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gregoriokusowski.wordpress.com/2010/07/04/hello-groovy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/371a30133bfe8cb7fceaf1f023537469?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gregoriokusowski</media:title>
		</media:content>

		<media:content url="http://gregoriokusowski.files.wordpress.com/2010/07/properties.png" medium="image">
			<media:title type="html">MeuComputador-Propriedades-Avançado</media:title>
		</media:content>

		<media:content url="http://gregoriokusowski.files.wordpress.com/2010/07/properties2.png" medium="image">
			<media:title type="html">Variaveis-de-ambiente</media:title>
		</media:content>

		<media:content url="http://gregoriokusowski.files.wordpress.com/2010/07/hello_groovy.png" medium="image">
			<media:title type="html">hello_groovy</media:title>
		</media:content>
	</item>
	</channel>
</rss>
