<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Jony dos Santos Kostetzer</title>
	
	<link>http://jonysk.net/blog</link>
	<description>ruby on rails and some other stuffs...</description>
	<lastBuildDate>Sun, 30 Aug 2009 17:03:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/jonysk" /><feedburner:info uri="jonysk" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-sa/2.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><item>
		<title>Slides da palestra no RS Rails 2009</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/-Gqu8vhKRx0/</link>
		<comments>http://jonysk.net/blog/2009/08/30/slides-da-palestra-no-rs-rails-2009/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 16:31:33 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[cucumber]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/?p=63</guid>
		<description><![CDATA[Neste dia 29 de agosto tivemos o primeiro evento especificamente de Rails aqui no Rio Grande do Sul, que foi muito bom por sinal! Parabenizo o pessoal da Softa por tomar frente na organização e promover o evento.
Disponibilizo abaixo os slides da minha palestra de Behaviour-Driven Development e os projetos no github, como havia prometido.
Espero [...]]]></description>
			<content:encoded><![CDATA[<p>Neste dia 29 de agosto tivemos o primeiro evento especificamente de Rails aqui no Rio Grande do Sul, que foi muito bom por sinal! Parabenizo o pessoal da Softa por tomar frente na organização e promover o evento.</p>
<p>Disponibilizo abaixo os slides da minha palestra de Behaviour-Driven Development e os projetos no github, como havia prometido.</p>
<p>Espero que tenham gostado!</p>
<ul>
<li><a href="http://www.slideshare.net/jonysk/behaviourdriven-development-com-ruby">Slides</a></li>
<li><a href="http://github.com/jonysk/rsrails_rspec/tree/master">Live coding RSpec</a></li>
<li><a href=" http://github.com/jonysk/rsrails_cucumber/tree/master">Live coding Cucumber</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/-Gqu8vhKRx0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2009/08/30/slides-da-palestra-no-rs-rails-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2009/08/30/slides-da-palestra-no-rs-rails-2009/</feedburner:origLink></item>
		<item>
		<title>Nova turma do curso de Ruby on Rails em Porto alegre</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/zDqHQ_DL2Ww/</link>
		<comments>http://jonysk.net/blog/2009/06/08/nova-turma-do-curso-de-rails-em-porto-alegre/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 13:47:10 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[off-topic]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/?p=39</guid>
		<description><![CDATA[O Instituto de Informática UNISINOS está oferecendo uma nova turma da Formação Desenvolvedor Web com Ruby on Rails. Duas novidades sobre o curso:

Possui agora 60 horas (20 de Ruby e 40 de Rails), ou seja, o módulo de SQL foi removido.
As aulas serão no período da noite, em São Leopoldo.

Detalhes da formação na página Curso [...]]]></description>
			<content:encoded><![CDATA[<p>O Instituto de Informática UNISINOS está oferecendo uma nova turma da Formação Desenvolvedor Web com Ruby on Rails. Duas novidades sobre o curso:</p>
<ul>
<li>Possui agora 60 horas (20 de Ruby e 40 de Rails), ou seja, o módulo de SQL foi removido.</li>
<li>As aulas serão no período da noite, em São Leopoldo.</li>
</ul>
<p>Detalhes da formação <a href="http://jonysk.net/blog/curso-rails">na página Curso Rails</a>.</p>
<p><strong>NOVA AGENDA:</strong><br />
* Introdução a linguagem Ruby (20h)<br />
Data: 13/07/2009 a 17/07/2009 </p>
<p>* Ruby on Rails prático (40h)<br />
Data: 20/07/2009 a 31/07/2009 </p>
<p><strong>LOCAL: </strong>Câmpus Unisinos &#8211; São Leopoldo<br />
<strong>HORÁRIO:</strong> Noite &#8211; das 18:45 às 22:45</p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/zDqHQ_DL2Ww" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2009/06/08/nova-turma-do-curso-de-rails-em-porto-alegre/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2009/06/08/nova-turma-do-curso-de-rails-em-porto-alegre/</feedburner:origLink></item>
		<item>
		<title>Shoulda x RSpec: Cuidado nas comparações</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/_AniM2yT6_U/</link>
		<comments>http://jonysk.net/blog/2008/08/17/shoulda-x-rspec-cuidado-nas-comparacoes/#comments</comments>
		<pubDate>Sun, 17 Aug 2008 23:25:36 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[shoulda]]></category>
		<category><![CDATA[testes]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2008/08/17/shoulda-x-rspec-cuidado-nas-comparacoes/</guid>
		<description><![CDATA[Tenho visto diversas pessoas falando do Shoulda, e algumas que já sentiram o gosto do RSpec e depois também gostaram do Shoulda. Até aí sem problemas. Agora, ao passo que surgem comparações entre RSpec e Shoulda, um sinal amarelo deveria aparecer por aí e deixar algumas coisas bem claras. E este é o objetivo do [...]]]></description>
			<content:encoded><![CDATA[<p>Tenho visto diversas pessoas falando do Shoulda, e algumas que já sentiram o gosto do RSpec e depois também gostaram do Shoulda. Até aí sem problemas. Agora, ao passo que surgem comparações entre RSpec e Shoulda, um sinal amarelo deveria aparecer por aí e deixar algumas coisas bem claras. E este é o objetivo do post.</p>
<h2>Primeiro ponto</h2>
<p>Em primeiro lugar, a diferença fundamental é: RSpec é totalmente focado no teste de comportamento (Behaviour). Esse é o seu  objetivo e a orientação de sua sintaxe. Ok, é possível sim fazer testes no estilo unit/test com RSpec, mas obviamente, não é a intenção ao usá-lo. É como uma implicação na lógica clássica: vou usar RSpec, logo (deveria) me focar em testar comportamento. E, numa implicação, o inverso não é necessariamente verdadeiro.</p>
<p>Resumindo: RSpec é focado em testar comportamento <em>(Behaviour Driven Development)</em>. Shoulda não é focado em testar comportamento (<em>Test Driven Development</em> sem o &#8220;behaviour&#8221; na história), mas tem a intenção de melhorar o test/unit com helpers, macros e contextos. É um açucar sintático que torna os test/unit mais, digamos, pragmáticos e também documentados.</p>
<p>Dito isso, deve-se ter muito cuidado ao compará-los porque são <strong>ABORDAGENS e VISÕES diferentes</strong>, embora o objetivo de testar seja o mesmo.</p>
<p>Podemos comparar apenas da seguinte forma: Eu gosto mais de RSpec, ou eu gosto mais de Shoulda. Ponto. Qualquer comparação dizendo &#8220;este é melhor&#8221;, ou &#8220;este é pior&#8221; deve ser evitada e levar essa diferença fundamental em consideração: &#8220;Eu gosto de testar comportamento com o RSpec&#8221; ou &#8220;Eu prefiro testar no modelo test/unit com Shoulda&#8221; são argumentos válidos e não depreciativos entre ambos.</p>
<h2>Segundo ponto</h2>
<p>Agora, quando eu vejo alguém falando que faz &#8220;BDD com Shoulda&#8221;, isso me preocupa um pouco. Eu me pergunto: &#8220;Será mesmo?&#8221;. Confesso, sou um pouco purista no que tange a testar comportamento e estou sempre procurando uma melhor forma de fazê-lo. <a href="http://www.nabble.com/BDD-Rails-Shoulda-td16881036.html#a16881036">E já vi opiniões semelhantes por aí</a>.<br />
É possível fazer BDD com Shoulda? Sim, mas de fato <strong>não é a tendência</strong> ao usar o Shoulda. Vejamos porque.</p>
<p>Suponhamos a seguinte linha, retirada da documentacao do Shoulda:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> Article <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span> <span style="color:#006600; font-weight:bold;">&#123;</span>
  named_scope <span style="color:#ff3333; font-weight:bold;">:visible</span>, <span style="color:#ff3333; font-weight:bold;">:conditions</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>:visible <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>E o teste para ela com Shoulda:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">should_have_named_scope <span style="color:#ff3333; font-weight:bold;">:visible</span>, <span style="color:#ff3333; font-weight:bold;">:conditions</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>:visible <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>Então eu pergunto: testei comportamento ou garanti que existe aquela linha de código no meu Model? Naturalmente, a segunda opção. Não que isso esteja errado, pelo contrário, seu teste tem 100% de cobertura. </p>
<p>Mas, e se minha lógica estiver errada? Digamos que você esqueceu que ao chamar Article.visible não deveria incluir os itens que não foram publicados ainda. Ou seja, você esqueceu uma condição que deveria fazer parte da regra. Mas você tem o teste, então (teoricamente) sua mente está livre do medo de ter errado.</p>
<p>É nesse ponto que entra a idéia de testar comportamento. É <strong>mais provável</strong> que você descubra esse problema se pensou anteriormente no comportamento que sua busca deveria ter. Note, eu disse que é mais provável, não é garantido que você perceberia isso imediatamente.</p>
<h3>OK, e como eu testo o comportamento neste caso?</h3>
<p>Estamos lidando com uma busca. Logo, vamos testar o comportamento desta busca simulando-a com exemplos (sintaxe abaixo é RSpec):</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">describe Article, <span style="color:#996600;">&quot;being displayed on the website&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  it <span style="color:#996600;">&quot;should display only visible entries&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    visible = Article.<span style="color:#9900CC;">create</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:name</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Art1&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:visible</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>, <span style="color:#ff3333; font-weight:bold;">:published_at</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#CC00FF; font-weight:bold;">Time</span>.<span style="color:#9900CC;">now</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    hidden = Article.<span style="color:#9900CC;">create</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:name</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Art2&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:visible</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">false</span>, <span style="color:#ff3333; font-weight:bold;">:published_at</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#CC00FF; font-weight:bold;">Time</span>.<span style="color:#9900CC;">now</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    visible_not_published = Article.<span style="color:#9900CC;">create</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:name</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Art3&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:visible</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>, <span style="color:#ff3333; font-weight:bold;">:published_at</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">nil</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
    Article.<span style="color:#9900CC;">visible</span>.<span style="color:#9900CC;">should</span> be_eql<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span>visible<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Nota: Num contexto real, estou usando o <a href="http://github.com/thoughtbot/factory_girl/tree/master">plugin factory_girl</a>, da própria empresa que criou o Shoulda. É ótimo, sugiro o uso.</p>
<p>Simulei alguns cenários e acredito que é mais provável que eu encontre um erro no comportamento dessa forma, pois fui obrigado a formular um exemplo. Quem é acostumado a unit/test geralmente olha essa situação como um pouco de overkill: o que faria em uma linha, demorou bem mais tendo que pensar nos exemplos e na construção do teste em si. </p>
<p>Mas, o foco de BDD é <strong>CLAREZA</strong> nos testes e não DRY. Nem sempre um teste deve ser DRY.</p>
<p>É claro que é perfeitamente possível fazer isso com Shoulda e outras libs. A questão é: macros como should_have_named_scope <em>induzem</em> a esquecer o comportamento em benefício da simplicidade e rapidez em escrever o teste.</p>
<h2>After all, it&#8217;s a matter of taste..</h2>
<p>Escolher entre Shoulda e RSpec é uma questão de gosto, como eu falei no começo. Ou você gosta de focar seus testes no comportamento de um objeto, ou você prefere utilizar asserções do test/unit.</p>
<p>Para finalizar, volto a dizer que estamos falando aqui de BDD e TDD, e o objetivo aqui não é comparar frameworks nem gerar flames. &#8220;Shouldeiros&#8221;, não me crucifiquem por favor <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
E opiniões são bem vindas sobre isso tudo.</p>
<p>Obrigado!</p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/_AniM2yT6_U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2008/08/17/shoulda-x-rspec-cuidado-nas-comparacoes/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2008/08/17/shoulda-x-rspec-cuidado-nas-comparacoes/</feedburner:origLink></item>
		<item>
		<title>Pixily procurando mais railers brasileiros</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/p06gYawjsEg/</link>
		<comments>http://jonysk.net/blog/2008/08/15/pixily-procurando-mais-railers-brasileiros/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 18:26:06 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[off-topic]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[hiring]]></category>
		<category><![CDATA[jobs]]></category>
		<category><![CDATA[pixily]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2008/08/15/pixily-procurando-mais-railers-brasileiros/</guid>
		<description><![CDATA[Estamos buscando mais brasileiros para o time, abaixo alguns detalhes sobre a oportunidade.
Pixily, a well-funded start-up is looking for experienced Rails programmers. We provide you with excellent opportunities to learn and work with the best in the industry and build amazing products. 
About Pixily:
Pixily helps professionals, home offices and small businesses aggregate, organize and find [...]]]></description>
			<content:encoded><![CDATA[<p>Estamos buscando mais brasileiros para o time, abaixo alguns detalhes sobre a oportunidade.</p>
<p>Pixily, a well-funded start-up is looking for experienced Rails programmers. We provide you with excellent opportunities to learn and work with the best in the industry and build amazing products. </p>
<h3>About Pixily:</h3>
<p>Pixily helps professionals, home offices and small businesses aggregate, organize and find paper and digital documents. You mail-in your paper documents periodically to us in prepaid envelopes or boxes, we scan them into your online accounts and make the content searchable. You can then search, organize, share, and download documents. You can also upload documents or scan them into your account directly.</p>
<p>With Pixily, you save money, time, space and trees.</p>
<p>Get a taste for the beta by <a href="https://www.pixily.com/demo/videos.html">viewing this video</a></p>
<h3>What you can expect:</h3>
<p>•	A great working environment<br />
•	An opportunity to work with the best<br />
•	An opportunity to learn and apply cool scalable technologies in cloud computing, Rails, Ajax, RSpec and Java<br />
•	An opportunity to be creative and make large contributions<br />
•	An opportunity to grow with the company </p>
<h3>What we are looking for:</h3>
<p>•	Strong fundamentals (MVC, data structures, etc.,)<br />
•	Experience in at least one production Rails application<br />
•	A working knowledge of Javascript, CSS and SQL. (Expertise in Javascript and CSS would be a big plus)<br />
•	Good spoken and written communication skills in English<br />
•	Ability to work in geographically distributed teams over IM and phone<br />
•	A Smart Generalist. (Competent in both depth and breadth of technologies) </p>
<p>Please send your resume to careers@pixily.com, if you are interested.  </p>
<p>Pixily is an Equal Opportunity Employer.  </p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/p06gYawjsEg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2008/08/15/pixily-procurando-mais-railers-brasileiros/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2008/08/15/pixily-procurando-mais-railers-brasileiros/</feedburner:origLink></item>
		<item>
		<title>Palestra “Conhecendo Ruby on Rails”, em Porto Alegre</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/JvQpRcbELbo/</link>
		<comments>http://jonysk.net/blog/2008/06/01/palestra-conhecendo-ruby-on-rails-em-porto-alegre/#comments</comments>
		<pubDate>Sun, 01 Jun 2008 07:18:41 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[eventos]]></category>
		<category><![CDATA[off-topic]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[palestras]]></category>
		<category><![CDATA[porto-alegre]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[unisinos]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2008/06/01/palestra-conhecendo-ruby-on-rails-em-porto-alegre/</guid>
		<description><![CDATA[UPDATE: Agradeço a presença de todos que participaram, o encontro foi ótimo. Os slides estão disponíveis na seção de Palestras. Qualquer dúvida, entre em contato direto comigo por e-mail ou deixe um comentário  
O Instituto de Informática Unisinos convida para o evento gratuito &#8220;Conhecendo Ruby on Rails&#8221;, onde serão abordados os seguintes tópicos:

 Conhecendo [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #F00"><strong>UPDATE:</strong></span> Agradeço a presença de todos que participaram, o encontro foi ótimo. Os slides estão disponíveis na <a href="http://jonysk.net/blog/palestras">seção de Palestras</a>. Qualquer dúvida, entre em contato direto comigo por e-mail ou deixe um comentário <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>O Instituto de Informática Unisinos convida para o evento gratuito &#8220;Conhecendo Ruby on Rails&#8221;, onde serão abordados os seguintes tópicos:</p>
<ul>
<li> Conhecendo o Ruby on Rails: Princípios por trás do Rails. Por que Ruby on Rails?</li>
<li> Mercado interno e externo: oportunidades</li>
<li> Cases e Projetos</li>
<li> Demonstração</li>
<li> Entre outros tópicos</li>
</ul>
<p>O evento é gratuito e acontecerá no dia 13/6 (sexta-feira) no Auditório do Centro Empresarial Presidente Kennedy, em Porto Alegre.<br />
Inscrições até dia 11 de junho.</p>
<p>==> As vagas são limitadas!</p>
<p> <strong>Realização:</strong> 13/06/2008<br />
 <strong>Horário: </strong>às 18h30min<br />
 <strong>Local:</strong> Auditório do Centro Empresarial Presidente Kennedy<br />
 Avenida Carlos Gomes, 111 &#8211; Bairro Auxiliadora &#8211; Porto Alegre</p>
<h4>INSCRIÇÕES ON-LINE</h4>
<p>Acesse o link: <a href="http://www.ccti.unisinos.br/ccti_interna.php?corpo=acontece&#038;codigo=253 ">http://www.ccti.unisinos.br/ccti_interna.php?corpo=acontece&#038;codigo=253 </a></p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/JvQpRcbELbo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2008/06/01/palestra-conhecendo-ruby-on-rails-em-porto-alegre/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2008/06/01/palestra-conhecendo-ruby-on-rails-em-porto-alegre/</feedburner:origLink></item>
		<item>
		<title>Pixily, aí vou eu!</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/1yArNQb5fTE/</link>
		<comments>http://jonysk.net/blog/2008/05/16/pixily-ai-vou-eu/#comments</comments>
		<pubDate>Fri, 16 May 2008 12:40:53 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[off-topic]]></category>
		<category><![CDATA[offshoring]]></category>
		<category><![CDATA[pixily]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2008/05/16/pixily-ai-vou-eu/</guid>
		<description><![CDATA[Depois de 2 semanas de negociação, diversas entrevistas, e uma madrugada em claro com muita coca-cola (programador geralmente adora isso, diz aí), tenho a satisfação de dizer que entrei para o time da Pixily!
A Pixily é um startup focado estritamente nos EUA. É um serviço online que ajuda clientes a agregar, organizar, localizar e compartilhar [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de 2 semanas de negociação, diversas entrevistas, e uma madrugada em claro com muita coca-cola (programador geralmente adora isso, diz aí), tenho a satisfação de dizer que entrei para o time da <a href="http://pixily.com"><strong>Pixily</strong></a>!</p>
<p>A Pixily é um startup focado estritamente nos EUA. É um serviço online que ajuda clientes a agregar, organizar, localizar e compartilhar papéis e documentos digitais. Dessa forma:</p>
<p><img src='http://jonysk.net/blog/files/2008/05/static_how.gif' alt='Pixily - Como funciona' style="width: 96%" /></p>
<p>Você coleta seus papéis e os envia por correio, é feita a conversão em arquivos PDF e os conteúdos são indexados para que seja possível buscar, compartilhar, organizar, etc. </p>
<p>Quero agradecer a ajuda do Fábio Espindula, que colaborou nesse processo e tem se mostrado uma pessoa fantástica. Ao Fábio Akita também, pelo auxilio nas dúvidas em relação a exportação de serviços e pelas dicas valiosas.</p>
<p>É isso aí, que venha o desafio!</p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/1yArNQb5fTE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2008/05/16/pixily-ai-vou-eu/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2008/05/16/pixily-ai-vou-eu/</feedburner:origLink></item>
		<item>
		<title>Curso de Ruby on Rails – nova turma</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/OVgAbkOV7lE/</link>
		<comments>http://jonysk.net/blog/2008/04/24/curso-de-ruby-on-rails-nova-turma/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 18:50:09 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[curso]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[curso rails]]></category>
		<category><![CDATA[porto-alegre]]></category>
		<category><![CDATA[rio-grande-do-sul]]></category>
		<category><![CDATA[unisinos]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2008/04/24/curso-de-ruby-on-rails-nova-turma/</guid>
		<description><![CDATA[Para os residentes da região metropolitana de Porto Alegre &#8211; RS, estão abertas vagas para a Formação Desenvolvedor Web com Ruby on Rails, a ser realizada no Instituto de Informática Unisinos.
Mais detalhes da formação.
A carga horária é de 80 horas, dividia em 3 módulos. A estrutura está adequada tanto para profissionais que já programam em [...]]]></description>
			<content:encoded><![CDATA[<p>Para os residentes da região metropolitana de Porto Alegre &#8211; RS, estão abertas vagas para a <strong>Formação Desenvolvedor Web com Ruby on Rails</strong>, a ser realizada no <a href="http://www.inf.unisinos.br/instituto/ccti/">Instituto de Informática Unisinos</a>.</p>
<p><a href="http://jonysk.net/blog/curso-rails/">Mais detalhes da formação.</a></p>
<p>A carga horária é de 80 horas, dividia em 3 módulos. A estrutura está adequada tanto para profissionais que já programam em outras linguagens como iniciantes. Na página acima têm todos os detalhes <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/OVgAbkOV7lE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2008/04/24/curso-de-ruby-on-rails-nova-turma/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2008/04/24/curso-de-ruby-on-rails-nova-turma/</feedburner:origLink></item>
		<item>
		<title>Rails caminhando para o Lighthouse</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/C_hzO3im7lQ/</link>
		<comments>http://jonysk.net/blog/2008/04/23/rails-caminhando-para-o-lighthouse/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 17:07:21 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2008/04/23/rails-caminhando-para-o-lighthouse/</guid>
		<description><![CDATA[Não sei se é oficial (nem mesmo se estou atrasado comentando isso), mas vi agora que passaram a constar alguns tickets no Lighthouse: http://rails.lighthouseapp.com/
Agora a logística parece ser Github + Lighthouse. O Github é muito bacana, já tem vários forks do Rails, o último que vi é um esforço para implementar características thread-safe.
Legal, vamos acompanhar [...]]]></description>
			<content:encoded><![CDATA[<p>Não sei se é oficial (nem mesmo se estou atrasado comentando isso), mas vi agora que passaram a constar alguns tickets no Lighthouse: <a href="http://rails.lighthouseapp.com/">http://rails.lighthouseapp.com/</a></p>
<p>Agora a logística parece ser Github + Lighthouse. O <a href="http://github.com">Github</a> é muito bacana, já tem vários forks do Rails, o último que vi é um esforço para implementar características thread-safe.</p>
<p>Legal, vamos acompanhar o progresso da migração <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>UPDATE:</strong> Pois é, passei batido no feed do <a href="http://weblog.rubyonrails.com/">weblog.rubyonrails.com</a> e não vi o anúncio oficial hehe. Não só o Rails foi para o Lighthouse, mas também o Capistrano e Prototype. Acontece <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/C_hzO3im7lQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2008/04/23/rails-caminhando-para-o-lighthouse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2008/04/23/rails-caminhando-para-o-lighthouse/</feedburner:origLink></item>
		<item>
		<title>FISL, um balanço geral</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/UtCNz9jY3l0/</link>
		<comments>http://jonysk.net/blog/2008/04/20/fisl-um-balanco-geral/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 17:27:29 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[eventos]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[fisl]]></category>
		<category><![CDATA[networking]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2008/04/20/fisl-um-balanco-geral/</guid>
		<description><![CDATA[Acabaram ontem os 3 ótimos dias de FISL (com uma baita churrascada), que a cada ano fica mais interessante. Neste ano poucas palestras me atraíram, mas o que realmente valeu à pena foi conhecer grandes pessoas, tanto da comunidade Rails, como de outros lugares.
O Lucas Húngaro e o Tiago (Lecom), Ronaldo Ferraz e a Taís [...]]]></description>
			<content:encoded><![CDATA[<p>Acabaram ontem os 3 <strong>ótimos</strong> dias de FISL (com uma baita churrascada), que a cada ano fica mais interessante. Neste ano poucas palestras me atraíram, mas o que realmente valeu à pena foi conhecer grandes <strong>pessoas</strong>, tanto da comunidade Rails, como de outros lugares.</p>
<p>O Lucas Húngaro e o Tiago (Lecom), Ronaldo Ferraz e a Taís (Brasigo/BlogBlogs), Fábio Akita e Rodrigo (Sugerworks), Carlos Eduardo (e-Genial), Everton Carpes, Weldyss Santos, Vinícius Teles (ImproveIT), o pessoal da UDESC (Grupo Colméia), Sylvestre Mergulhão, entre outros que me fogem da memória neste instante.<br />
Revi também os amigos, Júlio Santos Monteiro, Evandro Dutra, Pablo Targa e outros que convivem comigo na universidade, como o Joni Canal e o Eduardo Pittol.</p>
<p>Conheci também o Evan &#8220;Rabble&#8221; Henshaw-Plath, profissional que trabalha no Yahoo! e é responsável pelo recente Fireeagle.com, e outros sites como Odeo.com. Ele foi palestrante na RailsConf 2007 também. Chegou com irreverência no stand do Rails Brasil, questionando-nos &#8220;Onde estão os Macs?&#8221;. Extremamente gentil e simpático.</p>
<p>Assisti à palestra de Seaside com Randal Schwartz. Foi uma pena que ficou muito focada na linguagem, e o framework sobrou pouco tempo. Um detalhe interessante é que já nos primeiros slides ele disse acreditar que o Seaside será o próximo Rails. Ávidos e curiosos (rsrs), eu e o Júlio (que o abordou) conversamos rapidamente com ele, e resolvi perguntar o por quê desta opinião. Segundo ele, dois fatores: velocidade e debugging. A propósito, o debugging é fora do comum mesmo, pretendo olhar (novamente, mas com calma) o Seaside.</p>
<p>Algumas descobertas:</p>
<ul>
<li>A Globo.com está utilizando Rails em alguns de seus projetos, como a intranet. Estão contratando profissionais também.</li>
<li>A Propus também usa Rails em alguns de seus projetos.</li>
<li>O Yahoo! parece estar gradativamente entrando no Rails, agora com o Fireeagle. O Rabble nos contou mais ou menos a arquitetura deles, que está otimizada principalmente para o PHP, mas aos poucos o Rails tem entrado na jogada.</li>
</ul>
<p>O encerramento foi magnífico, com o onipresente Jon &#8220;maddog&#8221; Hall que, com muita sabedoria e irreverência (assim como em TODOS os FISL que ele fala), levantou o público através de aplausos.</p>
<p>Resumindo: foi ótimo! Infelizmente minha câmera estava há alguns kilômetros daqui, mas <strong>aguardo as fotos do pessoal</strong> que estiver lendo e que, por gentileza, puder mandar para jonysk AT gmail DOT com.  <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/UtCNz9jY3l0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2008/04/20/fisl-um-balanco-geral/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2008/04/20/fisl-um-balanco-geral/</feedburner:origLink></item>
		<item>
		<title>Gerenciando seus plugins Rails com GIT + braid</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/vF9YuPPl0Ek/</link>
		<comments>http://jonysk.net/blog/2008/03/09/gerenciando-seus-plugins-rails-com-git-braid/#comments</comments>
		<pubDate>Sun, 09 Mar 2008 15:49:30 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[git]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[braid]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2008/03/09/gerenciando-seus-plugins-rails-com-git-braid/</guid>
		<description><![CDATA[Este cenário surgiu da necessidade de sincronizar o desenvolvimento de mais pessoas num projeto Rails (usando GIT), no que diz respeito a vendor branches externos (plugins). Quando se usa SVN, instalar plugins no Rails com ./script/plugin install -x parece uma maravilha até o momento que você começa a alterar seus plugins.. Quando faz isso, não [...]]]></description>
			<content:encoded><![CDATA[<p>Este cenário surgiu da necessidade de sincronizar o desenvolvimento de mais pessoas num projeto Rails (usando GIT), no que diz respeito a vendor branches externos (plugins). Quando se usa SVN, instalar plugins no Rails com <em>./script/plugin install -x</em> parece uma maravilha <strong>até o momento que você começa a alterar seus plugins.</strong>. Quando faz isso, não pode comitá-los, e fica no impasse sobre o que fazer. Nem preciso comentar o quão estranho seria mandar patchs para equipe&#8230;</p>
<p>As premissas, antes de tudo, eram: </p>
<ol>
<li><strong>Não usar SVN.</strong></li>
<li><strong>Flexibilidade para SVN e GIT como repositórios remotos.</strong></li>
<li><strong>Possibilidade de trabalhar em ambiente multiusuário, ou seja, vários desenvolvedores.</strong></li>
</ol>
<p>Deixe-me explicar a primeira premissa: Usar Subversion implicaria em merges a cada atualização dos plugins. Independente da solução que fosse usada para o merge de um plugin (<a href="http://piston.rubyforge.org/">piston</a>, <a href="http://www.dellroad.org/svnmerge/index">svnmerge</a>, <a href="http://svnbook.red-bean.com/en/1.0/ch07s04.html">svn_load_dirs</a>), o Subversion não trabalha bem com arquivos removidos/renomeados/movidos. Seja qual for a estratégia, o fato de fazer merge em repositórios <strong>diferentes</strong> no Subversion é um &#8220;tiro no escuro&#8221;: você nunca sabe está realmente idêntico ao repositório que você sincronizou, principalmente quando há mudanças drásticas neles (arquivos removidos/renomeados/movidos), e vai deixando seu rastro de desorganização com o tempo. <a href="http://piston.rubyforge.org/caveats.html#copies-and-renames">No site do Piston eles também comentam sobre isso.</a></p>
<p><span id="more-20"></span></p>
<p>Passei horas e horas pesquisando e rascunhando no papel estratégias com repositório central. A solução que mais se aproximou àquela que eu gostaria foi <a href="http://panthersoftware.com/articles/view/3/svn-s-svn-externals-to-git-s-submodule-for-rails-plugins"> esta aqui, que trabalha com git-submodule</a>.<br />
  Fantástica por sinal! Adorei o git-submodule. Como o GIT não permite fazer clones parciais, apenas de repositórios inteiros, achei que fosse a solução. Fiz vários testes, e quando eu havia compreendido muito bem o seu funcionamento, percebi que o git-submodule era <a href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#id280316">muito peculiar para trabalhar com alterações,</a> e certamente causaria confusões na equipe.<br />
Mas essa solução é muito bacana. <strong>Se o objetivo for centralizar um repositório de plugins</strong>, essa solução pode muito bem ser avaliada.</p>
<p>Mas ela já mata a primeira e a segunda premissa: tem em sua base um servidor Subversion. Ao passo que alguns plugins vêm sendo gerenciados por GIT, já começariamos aqui a ter que colocar repositórios GIT no Subversion! Um retrocesso à nossa meta, na minha opinião <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h2>Enfim, o braid!</h2>
<p>Até que encontrei o <a href="http://evil.che.lu/projects/braid">braid</a> (O Fábio Akita já havia comentado sobre ele no Rails Podcast Brasil). O braid é uma ferramenta simples pra gerenciar vendor branches (no nosso caso, plugins do Rails) de repositórios diferentes. Mais ou menos um Piston para GIT.</p>
<p> Resumindo o funcionamento do braid: ele faz uma branch chamada braid/track e nela adiciona clones (git-svn init) para os seus plugins, e ainda faz o merge nesta branch. Quando julgar necessário, você faz merge com sua branch principal.</p>
<h2>Experimentando</h2>
<p>Para instalar o braid, faça:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">$ git clone git:<span style="color:#006600; font-weight:bold;">//</span>github.<span style="color:#9900CC;">com</span><span style="color:#006600; font-weight:bold;">/</span>evilchelu<span style="color:#006600; font-weight:bold;">/</span>braid.<span style="color:#9900CC;">git</span>
$ cd braid
$ sudo gem install main open4
$ sudo ruby setup.<span style="color:#9900CC;">rb</span></pre></td></tr></table></div>

<p>Com o braid instalado, inicie um projeto apenas para teste:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">mkdir</span> testing
$ <span style="color: #7a0874; font-weight: bold;">cd</span> testing
$ git init
$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;test&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">file</span>
$ git add <span style="color: #c20cb9; font-weight: bold;">file</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> git commit <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;import inicial&quot;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Jabá brazuca como exemplo: adicionar o plugin feito pelo Carlos Brando</span>
$ braid add  http:<span style="color: #000000; font-weight: bold;">//</span>plugins.nomedojogo.com<span style="color: #000000; font-weight: bold;">/</span>custom_resource_name <span style="color: #660033;">--type</span> <span style="color: #c20cb9; font-weight: bold;">svn</span> vendor<span style="color: #000000; font-weight: bold;">/</span>plugins<span style="color: #000000; font-weight: bold;">/</span>custom_resource_name</pre></td></tr></table></div>

<p>Isto cria a seguinte estrutura:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ git branch <span style="color: #660033;">-a</span>
  braid<span style="color: #000000; font-weight: bold;">/</span>track
<span style="color: #000000; font-weight: bold;">*</span> master
  braid<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>vendor<span style="color: #000000; font-weight: bold;">/</span>plugins<span style="color: #000000; font-weight: bold;">/</span>custom-resource-name</pre></td></tr></table></div>

<p>Quando houver modificação no plugin, basta fazer:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ braid update  <span style="color: #666666; font-style: italic;"># atualiza o plugin</span>
$ git merge braid<span style="color: #000000; font-weight: bold;">/</span>track <span style="color: #666666; font-style: italic;"># merge com sua branch principal (master)</span></pre></td></tr></table></div>

<h2>Bacana, mas e a equipe?</h2>
<p>Num cenário real (como o que motivou essa estratégia), o repositório está num servidor central que os outros desenvolvedores fazem seus clones. Mas nesse repositório não ficarão os dados da branch recém criada. Então, como os desenvolvedores atualizarão os plugins?</p>
<p>Uma maneira é passar aos demais desenvolvedores os repositórios remotos para que eles adicionem manualmente no .git/config dos seus clones.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">cat</span> .git<span style="color: #000000; font-weight: bold;">/</span>config 
<span style="color: #7a0874; font-weight: bold;">&#91;</span>core<span style="color: #7a0874; font-weight: bold;">&#93;</span>
        repositoryformatversion = <span style="color: #000000;">0</span>
        filemode = <span style="color: #c20cb9; font-weight: bold;">true</span>
        bare = <span style="color: #c20cb9; font-weight: bold;">false</span>
        logallrefupdates = <span style="color: #c20cb9; font-weight: bold;">true</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># esta parte aqui e mais eventuais outros plugins instalados:</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span>svn-remote <span style="color: #ff0000;">&quot;braid/svn/vendor/plugins/custom-resource-name&quot;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>
        url = http:<span style="color: #000000; font-weight: bold;">//</span>plugins.nomedojogo.com<span style="color: #000000; font-weight: bold;">/</span>custom_resource_name
        fetch = :refs<span style="color: #000000; font-weight: bold;">/</span>remotes<span style="color: #000000; font-weight: bold;">/</span>braid<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>vendor<span style="color: #000000; font-weight: bold;">/</span>plugins<span style="color: #000000; font-weight: bold;">/</span>custom-resource-name</pre></td></tr></table></div>

<p>Sim, isto funciona. Depois basta fazer um <strong>braid update</strong>.</p>
<p>Mas não é uma forma muito interessante. Ótimo seria explorar o arquivo que o braid cria automaticamente, chamado .braids, que mantém os dados dos vendor branches adicionados:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">cat</span> .braids 
<span style="color: #660033;">---</span> 
vendor<span style="color: #000000; font-weight: bold;">/</span>plugins<span style="color: #000000; font-weight: bold;">/</span>custom_resource_name: 
  local_branch: braid<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>vendor<span style="color: #000000; font-weight: bold;">/</span>plugins<span style="color: #000000; font-weight: bold;">/</span>custom-resource-name
  <span style="color: #7a0874; font-weight: bold;">type</span>: <span style="color: #c20cb9; font-weight: bold;">svn</span>
  branch: master
  remote: http:<span style="color: #000000; font-weight: bold;">//</span>plugins.nomedojogo.com<span style="color: #000000; font-weight: bold;">/</span>custom_resource_name</pre></td></tr></table></div>

<p>Uma maneira seria modificar o braid e adicionar a funcionalidade de ler este arquivo e adicioná-lo com comandos do GIT. O criador do braid <a href="http://evil.che.lu/2008/2/14/ann-braid-0-3-2#comment-926">já havia comentado que isso seria feito.</a> Como ainda não foi feito e eu queria testar essa solução, <a href="http://jonysk.net/blog/files/2008/03/patch.diff">criei um patch e enviei a ele.<br />
</a></p>
<p>Com este patch, um desenvolvedor pode fazer um clone do repositório e, em seguida, executar <strong>git rebuild</strong>, que reconstruiria a branch e os links remotos a partir do arquivo .braids.<br />
Em breve será feito algo semelhante no braid, seja a partir deste patch ou um novo <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>É isso!<br />
Vale lembrar que o braid ainda está amadurecendo. O gem, por exemplo, ainda nem foi publicado.<br />
Se você tiver alguma outra idéia ou modelo, fique à vontade em comentar <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/vF9YuPPl0Ek" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2008/03/09/gerenciando-seus-plugins-rails-com-git-braid/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2008/03/09/gerenciando-seus-plugins-rails-com-git-braid/</feedburner:origLink></item>
		<item>
		<title>Capistrano com remote_cache + mongrel_cluster</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/gZeoA8Tf6LY/</link>
		<comments>http://jonysk.net/blog/2008/02/23/capistrano-com-remote_cache-mongrel_cluster/#comments</comments>
		<pubDate>Sat, 23 Feb 2008 04:49:20 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[capistrano]]></category>
		<category><![CDATA[deploy]]></category>
		<category><![CDATA[mongrel]]></category>
		<category><![CDATA[mongrel_cluster]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2008/02/23/capistrano-com-remote_cache-mongrel_cluster/</guid>
		<description><![CDATA[Uma dica rápida para fazer o deploy usando remote_cache e mongrel_cluster. Antes da dica, uma introdução nos temas abordados:

Capistrano é uma ferramenta que, a grosso modo, permite realizar tarefas remotas de todos os tipos. Uma das aplicações comuns é no processo de deployment do Rails que é, de longe, facilitado pelo Capistrano 


mongrel_cluster é, em [...]]]></description>
			<content:encoded><![CDATA[<p>Uma dica rápida para fazer o deploy usando remote_cache e <a href="http://mongrel.rubyforge.org/wiki/MongrelCluster">mongrel_cluster</a>. Antes da dica, uma introdução nos temas abordados:</p>
<p>
<strong>Capistrano</strong> é uma ferramenta que, a grosso modo, permite realizar tarefas remotas de todos os tipos. Uma das aplicações comuns é no processo de deployment do Rails que é, de longe, facilitado pelo Capistrano <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</p>
<p>
<strong>mongrel_cluster</strong> é, em suma, um <em>Gem</em> que agrupa um cluster de servidores de aplicação Mongrel, simplificando a tarefa de gerenciá-los.
</p>
<p><strong>Remote cache</strong> é uma estratégia de deployment do Capistrano que executa uma tarefa interessante: ela faz um clone do repositório GIT (ou um checkout, se for Subversion) e atualiza a aplicação apenas com um <a href="http://www.samba.org/rsync/">rsync</a>, ou seja, copia apenas os arquivos modificados para a release atual.
</p>
<p><span id="more-15"></span></p>
<p>Dentre as estratégias existentes de deployment do Capistrano, prefiro utilizar o remote_cache. Porém, quando em conjunto com mongrel_cluster, existe a necessidade de que o arquivo de configuração do mongrel_cluster (config/mongrel_cluster.yml) exista para que os processos Mongrel possam ser levantados e o deploy tenha sucesso.</p>
<p>Uma saída seria adicionar o arquivo config/mongrel_cluster.yml ao repositório. Entretanto, perderíamos a flexibilidade de centralizar nosso deploy no deploy.rb (arquivo principal do Capistrano na aplicação). Qualquer modificação exigiria, em seguida, executar <strong>mongrel:cluster:configure</strong> e comitar para o repositório.<br />
Uma saída simples que montei para manter a flexibilidade de fazer o deploy usando mongrel_cluster e as configurações foi:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'mongrel_cluster/recipes'</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># outras configurações omitidas...</span>
&nbsp;
set <span style="color:#ff3333; font-weight:bold;">:deploy_via</span>, <span style="color:#ff3333; font-weight:bold;">:remote_cache</span>
set <span style="color:#ff3333; font-weight:bold;">:mongrel_conf</span>, <span style="color:#996600;">&quot;#{current_path}/config/mongrel_cluster.yml&quot;</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># outras configurações omitidas...</span>
&nbsp;
before <span style="color:#996600;">&quot;deploy:start&quot;</span>, <span style="color:#996600;">&quot;mongrel:cluster:configure&quot;</span>
before <span style="color:#996600;">&quot;deploy:restart&quot;</span>, <span style="color:#996600;">&quot;mongrel:cluster:configure&quot;</span></pre></div></div>

<p></p>
<p>
Com as duas últimas linhas acontece o seguinte: quando um <strong>cap deploy</strong> ou <strong>cap deploy:cold</strong> é executado, a configuração do mongrel_cluster é gerada no servidor, a partir das configurações do seu deploy.rb.
</p>
<p>Simples, quem sabe seja útil no seu próximo deploy. <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/gZeoA8Tf6LY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2008/02/23/capistrano-com-remote_cache-mongrel_cluster/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2008/02/23/capistrano-com-remote_cache-mongrel_cluster/</feedburner:origLink></item>
		<item>
		<title>Ufa, um layout “clean”</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/QqDjdfI8Cxg/</link>
		<comments>http://jonysk.net/blog/2008/02/23/ufa-um-layout-clean/#comments</comments>
		<pubDate>Sat, 23 Feb 2008 04:46:06 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[off-topic]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2008/02/23/ufa-um-layout-clean/</guid>
		<description><![CDATA[Ok, o senso estético dos programadores não costuma ser muito apurado. Eu mesmo já me peguei olhando para trás nos temas antigos e pensando &#8220;onde eu estava com a cabeça ao tentar usar isso?&#8221;.
Mas é inegável que gostamos de um ambiente agradável. Seja um site, blog, ou a querida IDE, cheia de janelas e aquele [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, o senso estético dos programadores não costuma ser muito apurado. Eu mesmo já me peguei olhando para trás nos temas antigos e pensando &#8220;onde eu estava com a cabeça ao tentar usar isso?&#8221;.<br />
Mas é inegável que gostamos de um ambiente agradável. Seja um site, blog, ou a querida IDE, cheia de janelas e aquele syntax highlight nos códigos que &#8220;enchem&#8221; nossos olhos.</p>
<p>Sem mais, acho que dessa vez achei um tema bem agradável. Nada mais de bordas quadradas!</p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/QqDjdfI8Cxg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2008/02/23/ufa-um-layout-clean/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2008/02/23/ufa-um-layout-clean/</feedburner:origLink></item>
		<item>
		<title>Formação Desenvolvedor Web com Ruby on Rails no RS</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/1Kg2dnxHqqE/</link>
		<comments>http://jonysk.net/blog/2008/02/15/formacao-desenvolvedor-web-com-ruby-on-rails-no-rs/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 15:21:54 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[curso]]></category>
		<category><![CDATA[formação]]></category>
		<category><![CDATA[porto-alegre]]></category>
		<category><![CDATA[rio-grande-do-sul]]></category>
		<category><![CDATA[rs]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2008/02/15/formacao-desenvolvedor-web-com-ruby-on-rails-no-rs/</guid>
		<description><![CDATA[É com muita satistafação que anuncio a nova formação &#8220;Desenvolvedor Web com Ruby on Rails&#8221;, a ser realizada aos sábados no Instituto de Informática &#8211;  UNISINOS em São Leopoldo, Rio Grande do Sul (região metropolitana de Porto Alegre).
Como o nome sugere, é uma formação bastante abrangente que envolve não apenas o desenvolvimento de aplicações [...]]]></description>
			<content:encoded><![CDATA[<p>É com muita satistafação que anuncio a nova formação <a href="http://www.inf.unisinos.br/instituto/ccti/ccti_interna.php?corpo=trilha&amp;cod_trilha=160&amp;cod_area=1" title="Sobre a formação" target="_blank">&#8220;Desenvolvedor Web com Ruby on Rails&#8221;</a>, a ser realizada aos sábados no <a href="http://www.ccti.unisinos.br" title="Site do Instituto de Informática" target="_blank">Instituto de Informática &#8211;  UNISINOS</a> em São Leopoldo, Rio Grande do Sul (região metropolitana de Porto Alegre).</p>
<p>Como o nome sugere, é uma <strong>formação</strong> bastante abrangente que envolve não apenas o desenvolvimento de aplicações com Ruby on Rails, mas também módulos de HTML/Webstandards e SQL, provendo uma base necessária para construir aplicações web completas.</p>
<p>A carga horária em Ruby e Rails é forte. Serão 60 horas no total (20-Ruby, 40-Rails) onde propõe-se uma formação consistente em tópicos não só básicos, mas também deployment, RESTful, etc, assim como o desenvolvimento de uma aplicação com contexto real e útil.</p>
<p>Cabe um comentário pessoal aqui: Estou bastante satisfeito em pensar que esta é mais uma iniciativa visando a divulgação do Ruby on Rails no Brasil. Espero contribuir ampliando a rede de desenvolvedores e boas aplicações saindo do Brasil. Ah, e <a href="http://www.monteiro.eti.br/2008/02/10/rails-brasil-on-fisl/" title="Júlio comentando sobre o stand do Rails Brasil" target="_blank">nos veremos também no FISL, nos stand do Rails Brasil!</a></p>
<h3>INFORMAÇÕES E INSCRIÇÕES:</h3>
<p>Telefone e fax: (51) 3328-2221<br />
Proposta on-line: <a href="http://www.ccti.unisinos.br/ccti_interna.php?corpo=faleconosco" class="moz-txt-link-freetext">http://www.ccti.unisinos.br/ccti_interna.php?corpo=faleconosco</a></p>
<h3>DETALHES DA FORMAÇÃO:</h3>
<p><strong> Objetivo:</strong><br />
Capacitar os profissionais a desenvolver aplicações Web utilizando os recursos do framework Rails e da linguagem Ruby, seguindo os princípios e práticas que norteiam o modelo de desenvolvimento ágil.</p>
<p><strong>Público-Alvo:</strong><br />
Desenvolvedores PHP, Java, .NET e/ou outras linguagens; Programadores com pouca ou bastante experiência.</p>
<p><strong>Pré-requisitos:</strong><br />
Conhecimentos em ambiente Windows ou Linux; Noções básicas de programação; Desejável conhecimento em Orientação a Objetos.</p>
<p><em>Realização da formação: </em>De 29/03 à 05/07<br />
<em> Local:</em> Câmpus Unisinos &#8211; São Leopoldo<br />
<em> Horário &gt;</em> Sábado 08:30 até 12:30 e das 13:30 até 16:00</p>
<h3>CONTEÚDO PROGRAMÁTICO:</h3>
<p><strong>HTML e WebStandards &#8211; 20 horas </strong>-&gt; apresenta a linguagem HTML e os últimos padrões de desenvolvimento de páginas para Web, incluindo os Web Standards, a linguagem XHTML, e o desenvolvimento de páginas utilizando CSS e Tableless Design.<br />
Realização: 29/03/2008 &#8211; 12/04/2008 &#8211; São Leopoldo</p>
<p><strong>Linguagem SQL Padrão ANSI &#8211; 20 horas</strong><br />
Realização: 19/04/2008 &#8211; 03/05/2008 &#8211; São Leopoldo</p>
<p><strong>Introdução à linguagem Ruby &#8211; 20 horas </strong>-&gt; Compreender a linguagem Ruby e a aplicabilidade de suas principais funcionalidades para otimizar a construção de algorítimos.<br />
Realização: 10/05/2008 &#8211; 24/05/2008 &#8211; São Leopoldo</p>
<p><strong>Ruby on Rails prático &#8211; 40 horas </strong>-&gt; Capacitar o aluno a desenvolver aplicações web com o framework Rails utilizando seus principais recursos, melhores práticas e técnicas de desenvolvimento, voltadas a projetos e cenários reais.<br />
Realização: 31/05/2008 &#8211; 05/07/2008 &#8211; São Leopoldo</p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/1Kg2dnxHqqE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2008/02/15/formacao-desenvolvedor-web-com-ruby-on-rails-no-rs/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2008/02/15/formacao-desenvolvedor-web-com-ruby-on-rails-no-rs/</feedburner:origLink></item>
		<item>
		<title>PHP no Windows: pronto para produção</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/mFG5P_imyaU/</link>
		<comments>http://jonysk.net/blog/2007/11/13/php-no-windows-pronto-para-producao/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 11:06:59 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[fastcgi]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2007/11/13/php-no-windows-pronto-para-producao/</guid>
		<description><![CDATA[Vários blogs estão anunciando o suporte do Microsoft Internet Information Service (IIS 6.0) a FastCGI (Windows 2003 apenas):
Veja a página da extensão.

Agora, PHP é oficialmente suportado pela Microsoft em seus servidores IIS. Em suma, PHP para Windows (2003) está finalmente com suporte estável. Mais uma justificativa para argumentar caso surja um &#8220;.NET&#8221; no meio da [...]]]></description>
			<content:encoded><![CDATA[<p>Vários blogs estão anunciando o suporte do Microsoft Internet Information Service (IIS 6.0) a FastCGI (Windows 2003 apenas):</p>
<p><a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;g=6&amp;i=1521" title="Página da extensão" target="_blank">Veja a página da extensão.<br />
</a></p>
<p>Agora, PHP é <a href="http://www.iis.net/php" title="Anúncio" target="_blank">oficialmente suportado pela Microsoft</a> em seus servidores IIS. Em suma, PHP para Windows (2003) está finalmente com suporte estável. Mais uma justificativa para argumentar caso surja um &#8220;.NET&#8221; no meio da conversa com os clientes que utilizam Windows como servidor, ou aquele temeroso papo de performance do PHP no Windows <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Mais detalhes no site do <a href="http://andigutmans.blogspot.com/2007/11/production-ready-php-on-windows.html" title="Blog do Andi Gutmans" target="_blank">Andi Gutmans</a> ou em vários outros no <a href="http://www.planet-php.net/" title="Planet PHP" target="_blank">Planet PHP.</a></p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/mFG5P_imyaU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2007/11/13/php-no-windows-pronto-para-producao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2007/11/13/php-no-windows-pronto-para-producao/</feedburner:origLink></item>
		<item>
		<title>Mini-curso “Introdução ao Ruby on Rails” no UniInfo 2007</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/T8sy65e4X-A/</link>
		<comments>http://jonysk.net/blog/2007/10/05/mini-curso-introducao-ao-ruby-on-rails-no-uniinfo-2007/#comments</comments>
		<pubDate>Fri, 05 Oct 2007 23:45:11 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[eventos]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[uniinfo]]></category>
		<category><![CDATA[unisinos]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2007/10/05/mini-curso-introducao-ao-ruby-on-rails-no-uniinfo-2007/</guid>
		<description><![CDATA[Divulgando aqui o mini-curso de Introdução ao Ruby on Rails que ocorrerá no 19/10 na Semana Acadêmica da Informática Unisinos (Uniinfo 2007)
19/10 &#8211; 13h às 16h
Minicurso: Introdução ao Ruby on Rails
Ministrante: Jony dos Santos Kostetzer
Local: Sala 6L 118
Objetivo: Conhecer alguns conceitos, recursos e práticas no desenvolvimento de aplicações em ambiente web utilizando a linguagem Ruby [...]]]></description>
			<content:encoded><![CDATA[<p>Divulgando aqui o mini-curso de Introdução ao Ruby on Rails que ocorrerá no 19/10 na <a href="http://www.unisinos.br/eventos/index.php?option=com_content&amp;task=view&amp;id=52&amp;Itemid=116&amp;modulo=verCurso&amp;class_nbr=5585&amp;strm=0525&amp;tipo=NAO" title="Semana Acadêmica da Informática Unisinos (Uniinfo 2007)">Semana Acadêmica da Informática Unisinos (Uniinfo 2007)</a></p>
<p><em>19/10 &#8211; 13h às 16h</em><br />
<strong>Minicurso: </strong>Introdução ao Ruby on Rails<br />
<strong>Ministrante:</strong> Jony dos Santos Kostetzer<br />
<strong>Local:</strong> Sala 6L 118<br />
<strong>Objetivo:</strong> Conhecer alguns conceitos, recursos e práticas no desenvolvimento de aplicações em ambiente web utilizando a linguagem Ruby e o framework Rails.<br />
<strong>Conteúdo:</strong> Introdução à linguagem Ruby; Instalaçao em amb. Windows e Linux; IRB; Modelo MVC; Introdução ao Rails; Primeiros passos; Relacionamentos; Ajax; IDEs; Atualidade e futuro do RoR.</p>
<p>Quem é estudante da <a href="http://www.unisinos.br" title="Unisinos">Unisinos</a> ou reside na região e gostaria de conhecer um pouco a linguagem Ruby e o framewok Rails, fica o meu convite <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Importante:</strong></p>
<ul>
<li>É necessário fazer a inscrição no evento através do <a href="http://www.unisinos.br/eventos/index.php?option=com_content&amp;task=view&amp;id=52&amp;Itemid=116&amp;modulo=verCurso&amp;class_nbr=5585&amp;strm=0525&amp;tipo=NAO" title="Semana Acadêmica da Informática Unisinos (Uniinfo 2007)">site</a></li>
<li>É solicitado aos inscritos que informem ao coordenador do evento (pelo e-mail cazella@unisinos.br) se desejarem realizar o minicurso: NOME COMPLETO, E-MAIL e NOME DO MINICURSO (<strong>Introdução ao Ruby on Rails</strong>). Este controle torna-se necessário devido ao número de vagas disponíveis ser limitado para minicursos.</li>
</ul>
<p>Conto com a presença de vocês!</p>
<p><strong><span style="color: #ff0000">UPDATE:</span></strong> Muito obrigado pela presença de todos! Foi um ótimo encontro <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Aqui estão os slides conforme prometido: <a class="downloadlink" href="http://jonysk.net/blog/download/introducao_ror-2007-10-19.pdf" title="Version 1 downloaded 726 times" >Introdução ao Ruby on Rails</a></p>
<p>Até a próxima!</p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/T8sy65e4X-A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2007/10/05/mini-curso-introducao-ao-ruby-on-rails-no-uniinfo-2007/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2007/10/05/mini-curso-introducao-ao-ruby-on-rails-no-uniinfo-2007/</feedburner:origLink></item>
		<item>
		<title>Propel, Oracle e nomes de tabelas</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/AerioZe9CvA/</link>
		<comments>http://jonysk.net/blog/2007/08/19/propel-oracle-e-nomes-de-tabelas/#comments</comments>
		<pubDate>Mon, 20 Aug 2007 01:54:39 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[propel]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2007/08/19/propel-oracle-e-nomes-de-tabelas/</guid>
		<description><![CDATA[Nos últimos dias experienciei problemas em utilizar o Symfony com banco de dados Oracle (mais especificamente, em utilizar o Propel com Oracle). O que acontece é que os scripts gerados através do comando propel-build-sql do Symfony, por padrão, ficam da seguinte forma:

CREATE TABLE &#34;estado&#34;
&#40;
&#34;id&#34; NUMBER  NOT NULL,
&#34;nome&#34; VARCHAR2&#40;50&#41;,
&#34;sigla&#34; VARCHAR2&#40;2&#41;
&#41;;

MySQL e PostgreSQL não apresentaram problemas. [...]]]></description>
			<content:encoded><![CDATA[<p>Nos últimos dias experienciei problemas em utilizar o Symfony com banco de dados Oracle (mais especificamente, em utilizar o Propel com Oracle). O que acontece é que os scripts gerados através do comando <strong>propel-build-sql</strong> do Symfony, por padrão, ficam da seguinte forma:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #ff0000;">&quot;estado&quot;</span>
<span style="color: #66cc66;">&#40;</span>
<span style="color: #ff0000;">&quot;id&quot;</span> NUMBER  <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
<span style="color: #ff0000;">&quot;nome&quot;</span> VARCHAR2<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
<span style="color: #ff0000;">&quot;sigla&quot;</span> VARCHAR2<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>MySQL e PostgreSQL não apresentaram problemas. Porém, a inserção deste SQL no Oracle força que todas as tabelas e campos sejam criados na forma de caracteres minúsculos.</p>
<p><span id="more-10"></span></p>
<p>Ou seja, se você fizer uma consulta diretamente no banco<sup>1</sup> da seguinte forma:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> nome <span style="color: #993333; font-weight: bold;">FROM</span> estado;</pre></div></div>

<p>Receberá um erro informando que a tabela não existe! Apenas nesta forma funcionaria:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #ff0000;">&quot;nome&quot;</span> <span style="color: #993333; font-weight: bold;">FROM</span> <span style="color: #ff0000;">&quot;estado&quot;</span>;</pre></div></div>

<p>Conseqüentemente, <strong>todas </strong>as consultas efetuadas através dos objetos de mapeamento do banco geradas pelo Propel não funcionarão. A solução foi simples: remover as aspas duplas do arquivo SQL gerado (utilizei a ferramente <a href="http://www.laffeycomputer.com/rpl.html" target="_blank" title="Página do RPL">rpl</a> do linux):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rpl <span style="color: #ff0000;">'&quot;'</span> <span style="color: #ff0000;">''</span> data<span style="color: #000000; font-weight: bold;">/</span>sql<span style="color: #000000; font-weight: bold;">/*</span></pre></div></div>

<p>Uma solução não muito adequada, mas resolveu. Até que resolvi consultar a lista <a href="http://groups.google.com/group/symfony-users" title="Abrir lista de discussão" target="_blank">symfony-users </a> sobre o problema e um integrante, Charley Tiggs, sugeriu a seguinte configuração no propel.ini:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">propel.disableIdentifierQuoting = <span style="color: #c20cb9; font-weight: bold;">true</span></pre></div></div>

<p>Simples e funcional. Fica a referência para consultas futuras <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><sup>1</sup> Sugiro o <a href="http://www.oracle.com/technology/products/database/sql_developer/index.html" title="Página do Oracle SQL Developer" target="_blank">Oracle SQL Developer</a>, uma ótima ferramenta GUI desenvolvida em Java para acessar bancos em Oracle, MySQL e SQL Server. Sendo uma ferramenta Java, pode ser executada perfeitamente no Linux, como estou utilizando aqui!</p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/AerioZe9CvA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2007/08/19/propel-oracle-e-nomes-de-tabelas/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2007/08/19/propel-oracle-e-nomes-de-tabelas/</feedburner:origLink></item>
		<item>
		<title>Dica rápida: foreign key para tabelas de plugins</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/jtHWocOJaNU/</link>
		<comments>http://jonysk.net/blog/2007/07/27/dica-rapida-foreign-key-para-tabelas-de-plugins/#comments</comments>
		<pubDate>Fri, 27 Jul 2007 20:55:46 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[propel]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2007/07/27/dica-rapida-foreign-key-para-tabelas-de-plugins/</guid>
		<description><![CDATA[Se você já tentou criar uma chave estrangeira no seu schema.yml para a tabela de um plugin pode ter esbarrado em um problema: Usar a convenção do Symfony para chaves estrangeiras em plugins não funciona, visto que os namespaces (packages) são gerados em locais diferentes.
Por exemplo:
project:
id:
title: varchar(255)
sf_guard_user_id:
O código acima resultará no seguinte erro:
&#8220;Unable to resolve [...]]]></description>
			<content:encoded><![CDATA[<p>Se você já tentou criar uma chave estrangeira no seu schema.yml para a tabela de um plugin pode ter esbarrado em um problema: <em>Usar a convenção do Symfony para chaves estrangeiras em plugins não funciona</em>, visto que os namespaces (packages) são gerados em locais diferentes.</p>
<p>Por exemplo:</p>
<p><code>project:<br />
id:<br />
title: varchar(255)<br />
sf_guard_user_id:</code></p>
<p>O código acima resultará no seguinte erro:</p>
<blockquote><p>&#8220;Unable to resolve foreign table for column &#8220;sf_guard_user_id&#8221;"</p></blockquote>
<p><span id="more-8"></span><br />
Pesquisando sobre o assunto, <a href="http://www.symfony-project.com/snippets/snippet/170" title="Snippet para alterar o namespace">uma sugestão seria alterar o namespace</a>  onde são gerados os arquivos de ORM do Propel. Particularmente, não achei interessante. Na lista <a href="http://groups.google.com/group/symfony-users" title="Grupo symfony-users">symfony-users</a>, uma referência diz que essa é uma <a href="http://www.mail-archive.com/symfony-users@googlegroups.com/msg00602.html" title="Symfony-users">limitação do Propel. </a></p>
<p>A verdade é que a &#8220;solução&#8221; é extremamente simples:</p>
<p><code>project:<br />
id:<br />
title: varchar(255)<br />
user_id: { type: integer, foreignTable: sf_guard_user, foreignReference: id, required: true, onDelete: cascade }<br />
</code></p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/jtHWocOJaNU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2007/07/27/dica-rapida-foreign-key-para-tabelas-de-plugins/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2007/07/27/dica-rapida-foreign-key-para-tabelas-de-plugins/</feedburner:origLink></item>
		<item>
		<title>How-to: Integrando Symfony e SugarCRM</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/y9S38rMtve0/</link>
		<comments>http://jonysk.net/blog/2007/07/19/how-to-integrando-symfony-e-sugarcrm/#comments</comments>
		<pubDate>Fri, 20 Jul 2007 02:11:47 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[sugarcrm]]></category>
		<category><![CDATA[webservices]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2007/07/19/how-to-integrando-symfony-e-sugarcrm/</guid>
		<description><![CDATA[O SugarCRM é uma interessante aplicação open source para Gestão de Relacionamento com o Cliente (CRM). Mesmo que muitas características avançadas sejam reservadas às versões pagas (Professional e Enterprise), sua versão livre possui recursos muito completos de customização de módulos, plugins, entre outros, e desempenha muito bem a sua função. Um dos recursos que viabiliza [...]]]></description>
			<content:encoded><![CDATA[<p>O <a href="http://sugarcrm.com" title="Página do SugarCRM">SugarCRM</a> é uma interessante aplicação open source para Gestão de Relacionamento com o Cliente (CRM). Mesmo que muitas características avançadas sejam reservadas às versões pagas (Professional e Enterprise), sua <a href="http://www.sugarcrm.com/crm/download/sugar-suite.html" title="SugarCRM Open Source">versão livre</a> possui recursos muito completos de customização de módulos, <a href="http://www.sugarexchange.com/" title="SugarExchange">plugins</a>, entre outros, e desempenha muito bem a sua função. Um dos recursos que viabiliza grande parte de plugins e integrações é um Webservice construído em NuSOAP, para que outras aplicações interajam com os dados do SugarCRM.</p>
<p><span id="more-6"></span></p>
<p>Supondo um endereço de intranet, o WSDL deste webservice estaria disponível na URL:</p>
<ul>
<li>http://intranet/sugarcrm/soap.php?wsdl</li>
</ul>
<p>Este how-to abrange a integração do SugarCRM com o <a href="http://symfony-project.com" title="Symfony Project">Symfony</a>. Neste cenário, uma aplicação deve manter os mesmos registros de contas (Accounts)  que existem no SugarCRM. Vamos apenas gerar um array onde a chave será o ID da conta e o valor será o nome da conta.</p>
<p>Uma curiosa surpresa ao iniciar a integração foi descobrir que havia um plugin para o Symfony chamado <a href="http://trac.symfony-project.com/trac/wiki/sfSugarCRMPlugin" title="sfSugarCRM">sfSugarCRM</a>, constituído de duas classes:</p>
<ul>
<li><strong>sfSugarCRMSOAPClient</strong>: Classe com um método no padrão Singleton que retorna a instância de <a href="http://www.php.net/manual/pt_BR/function.soap-soapclient-construct.php" title="Informações sobre a classe SoapClient">SoapClient</a> conectada ao WSDL do SugarCRM.</li>
<li><strong>sfSugarCRM</strong>: Classe que abstrai <u>algumas</u> requisições ao Webservice do SugarCRM.</li>
</ul>
<p><u><em>Importante:</em></u> este plugin não utiliza NuSOAP, mas sim as bibliotecas SOAP distribuídas nas versões do PHP5 e posteriores. Certifique-se que a extensão SOAP está instalada.</p>
<p>Inicialmente, seguindo a breve documentação de exemplo do sfSugarCRM, vamos instalar o plugin:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">.<span style="color: #000000; font-weight: bold;">/</span>symfony plugin-install http:<span style="color: #000000; font-weight: bold;">//</span>plugins.symfony-project.com<span style="color: #000000; font-weight: bold;">/</span>sfSugarCRMPlugin
.<span style="color: #000000; font-weight: bold;">/</span>symfony <span style="color: #c20cb9; font-weight: bold;">cc</span></pre></div></div>

<p>Pulemos os passos de criação da aplicação e do módulo no Symfony, o código abaixo conecta ao Webservice:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$sugar</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> sfSugarCRM<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;http://intranet/sugarcrm/soap.php?wsdl&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$sugar</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setUsername</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;usuario&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$sugar</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setPassword</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;senha&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>O trecho acima armazena o usuário e a senha em variáveis de instância, e as utiliza para a chamada de alguns métodos do servidor SOAP, que são:</p>
<ul>
<li>Localizar contatos pelo nome: <strong>searchContactsByName()</strong></li>
<li>Localizar contatos pelo e-mail: <strong>searchContactsByEmail()</strong></li>
<li>Retornar lista de usuários: <strong>getUserList()</strong></li>
<li>Métodos para criação de registros: <strong>createLead(), createContact(), createAccount(), createOpportunity(), createCase()</strong></li>
</ul>
<p>Um detalhe a importante é que os métodos acima enviam usuário e senha <em>a cada requisição </em>ao Webservice. Alguns métodos do Webservice, entretando, exigem como parâmetro o ID do login, uma string gerada com a chamada ao método login() do Webservice. Como a classe sfSugarCRM não implementa nenhum método para isso, abaixo um patch que cria essa função:</p>
<ul>
<li><a href="http://jonysk.net/blog/files/2007/07/patch.txt" title="Patch sfSugarCRM">Patch sfSugarCRM</a></li>
</ul>
<p>Para aplicar o patch, entre na raiz do projeto e digite:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">patch</span> <span style="color: #660033;">-p0</span> <span style="color: #000000; font-weight: bold;">&lt;</span> patch.txt</pre></div></div>

<p>Após aplicado o patch, você tem os novos métodos na classe sfSugarCRM: <strong>getLoginId()</strong> e <strong>doLogin()</strong> , que facilitam a chamada para diversos métodos do Webservice. Dessa forma, é só criar novos métodos na classe sfSugarCRM! Criei um método chamado getEntryList() (que utiliza o método get_entry_list() do webservice), veja como retornar todos os clientes:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$params</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
  <span style="color: #0000ff;">&quot;module_name&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;Accounts&quot;</span><span style="color: #339933;">,</span>
  <span style="color: #0000ff;">&quot;order_by&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;name ASC&quot;</span><span style="color: #339933;">,</span>
  <span style="color: #0000ff;">&quot;offset&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
  <span style="color: #0000ff;">&quot;select_fields&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
  <span style="color: #0000ff;">&quot;max_results&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1000</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$sugar</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getEntryList</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$params</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$response</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$sugar</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getResponse</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$contas</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$response</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">entry_list</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$entry</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$contas</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$entry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">id</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$entry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name_value_list</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">value</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #990000;">print_r</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$contas</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Então é isso! Este material não será de uso constante, mas fica como referência quando um cenário semelhante surgir <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Referências:</strong></p>
<ul>
<li><a href="http://www.sugarforge.org/frs/download.php/216/SugarCRM_SOAP_Overview.rtf">SugarCRM SOAP Overview (.rtf)</a></li>
<li><a href="http://www.php.net/manual/pt_BR/ref.soap.php">PHP Soap Extension</a></li>
<li><a href="http://trac.symfony-project.com/trac/wiki/sfSugarCRMPlugin">Symfony plugins: sfSugarCRM</a></li>
<li><a href="http://www.sugarcrm.com/wiki/index.php?title=SOAP_Intro_and_Practical_Examples">Soap Intro and pratical examples</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/y9S38rMtve0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2007/07/19/how-to-integrando-symfony-e-sugarcrm/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2007/07/19/how-to-integrando-symfony-e-sugarcrm/</feedburner:origLink></item>
		<item>
		<title>Agora vai!</title>
		<link>http://feedproxy.google.com/~r/jonysk/~3/CodKkhNatnU/</link>
		<comments>http://jonysk.net/blog/2007/07/16/agora-vai/#comments</comments>
		<pubDate>Mon, 16 Jul 2007 11:59:04 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[off-topic]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2007/07/16/agora-vai/</guid>
		<description><![CDATA[Já estava na hora. Domínio registrado há um bom tempo, alguns aplicativos PHP rodando, mas faltava o blog! Não sei se é modismo entrar na blogosfera, mas me atrai a idéia de compartilhar informações, sem contar que os blogs são minhas fontes primárias de estudo e atualização. Experimente um agregador ao invés do about:blank e [...]]]></description>
			<content:encoded><![CDATA[<p>Já estava na hora. Domínio registrado há um bom tempo, alguns aplicativos PHP rodando, mas faltava o blog! Não sei se é modismo entrar na blogosfera, mas me atrai a idéia de compartilhar informações, sem contar que os blogs são minhas fontes primárias de estudo e atualização. Experimente um <a href="http://netvibes.com/" onclick="javascript:urchinTracker('/outbound/netvibes.com');" title="Recomendo o Netvibes" target="_blank">agregador</a> ao invés do about:blank e você saberá o que estou dizendo (supondo que você ainda viva sem um agregador RSS).</p>
<p>Ok, sem mais para o primeiro post, mesmo porque ninguém o lê por completo se for extenso.</p>
<img src="http://feeds.feedburner.com/~r/jonysk/~4/CodKkhNatnU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2007/07/16/agora-vai/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://jonysk.net/blog/2007/07/16/agora-vai/</feedburner:origLink></item>
	</channel>
</rss>
