<?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/"
	>

<channel>
	<title>CØdeZØne!</title>
	<atom:link href="http://leandrosilva.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://leandrosilva.com.br</link>
	<description>Coisas sobre desenvolvimento de software</description>
	<lastBuildDate>Sun, 22 Jan 2012 22:38:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>A briefly introduction to Cameron</title>
		<link>http://leandrosilva.com.br/2011/08/19/a-briefly-introduction-to-cameron/</link>
		<comments>http://leandrosilva.com.br/2011/08/19/a-briefly-introduction-to-cameron/#comments</comments>
		<pubDate>Sat, 20 Aug 2011 01:17:00 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[misultin]]></category>
		<category><![CDATA[redis]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=899</guid>
		<description><![CDATA[Hi everybody! I&#8217;ve started to write a kind of documentation about Cameron, in the spirit of a presentation, really brief and direct. It&#8217;s still a work in progress, like Cameron as well, but I think it&#8217;s already able to give you an idea on what Cameron aim to be. Stay tuned&#8230; A briefly introduction to [...]]]></description>
			<content:encoded><![CDATA[<p>Hi everybody!</p>
<p>I&#8217;ve started to write a kind of <a href="https://github.com/leandrosilva/cameron/blob/current_work_in_progress/doc/cameron_pres.pdf">documentation</a> about <a href="https://github.com/leandrosilva/cameron">Cameron</a>, in the spirit of a presentation, really brief and direct. It&#8217;s still a work in progress, like Cameron as well, but I think it&#8217;s already able to give you an idea on what <a href="http://leandrosilva.com.br/2011/08/04/who-is-cameron/">Cameron aim to be</a>.</p>
<p>Stay tuned&#8230;</p>
<p><strong style="display: block; margin: 12px 0 4px;"><a title="A briefly introduction to Cameron" href="http://www.slideshare.net/leandrodoze/a-briefly-introduction-to-cameron" target="_blank">A briefly introduction to Cameron</a></strong></p>
<div id="__ss_8928944" style="width: 425px;"><iframe src="http://www.slideshare.net/slideshow/embed_code/8928944" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"></iframe></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/leandrodoze" target="_blank">Leandro Silva</a></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2011/08/19/a-briefly-introduction-to-cameron/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Who is Cameron?</title>
		<link>http://leandrosilva.com.br/2011/08/04/who-is-cameron/</link>
		<comments>http://leandrosilva.com.br/2011/08/04/who-is-cameron/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 15:07:24 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[misultin]]></category>
		<category><![CDATA[redis]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=877</guid>
		<description><![CDATA[Cameron is an Erlang-based workflow engine in which I have been working on for a few weeks. It has been built as an Erlang/OTP system with an REST-like API, powered by Misultin, through which one can POST a JSON request to run a given process workflows, that will be executed in background [parallely with other running ones], and [...]]]></description>
			<content:encoded><![CDATA[<p><strong><a href="https://github.com/leandrosilva/cameron" target="_blank">Cameron</a></strong> is an Erlang-based workflow engine in which I have been working on for a few weeks.</p>
<p>It has been built as an <a href="http://www.erlang.org/doc" target="_blank">Erlang/OTP</a> system with an REST-like API, powered by <a href="https://github.com/ostinelli/misultin" target="_blank">Misultin</a>, through which one can <em>POST</em> a <em>JSON</em> request to run a given <strong>process workflows</strong>, that will be executed in background [parallely with other running ones], and then <em>GET</em> its <em>JSON</em> results as soon as them become available. And obviously, it uses <a href="http://redis.io" target="_blank">Redis</a> for the win.</p>
<h3>What about Process Workflows?</h3>
<p><strong>Process workflows</strong> are defined in terms of REST-like web services, written in virtually any language, which basically must talk a simple JSON contract.</p>
<p>These web services are the <strong>activities</strong> that define a process workflow; these web services are the tasks to achieve a given target. And as you can imagine, yes, an activity can cascade many others; it is pipeline-based, as well.</p>
<p>So if you have any background job that must cascade many tasks to achieve a goal, maybe it fits to your needs.</p>
<h3>Does it work?</h3>
<p>Although it still experimental, a <strong>work in progress</strong>, it works reasonably well <em>&#8211; at least under my tests.</em></p>
<p><em></em>So if you have time, <a href="https://github.com/leandrosilva/cameron">take a look at the documentation</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2011/08/04/who-is-cameron/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>slogger: lugar de mensagens de log é no Syslog</title>
		<link>http://leandrosilva.com.br/2011/02/18/slogger-lugar-de-mensagens-de-log-e-no-syslog/</link>
		<comments>http://leandrosilva.com.br/2011/02/18/slogger-lugar-de-mensagens-de-log-e-no-syslog/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 22:43:28 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[syslog]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=857</guid>
		<description><![CDATA[Uma coisa importante que aprendi na convivencia com os melhores sysadmins de Linux que já trabalhei (esse e esse, por exemplo) é que lugar de log é no Syslog &#8211; e se você não está fazendo isso, hummm, há uma boa chance de you&#8217;re doing it wrong my friend. &#8230;and in The .NET World A [...]]]></description>
			<content:encoded><![CDATA[<p>Uma coisa importante que aprendi na convivencia com os melhores sysadmins de Linux que já trabalhei (<a href="http://twitter.com/deferraz" target="_blank">esse</a> e <a href="http://twitter.com/ncode" target="_blank">esse</a>, por exemplo) é que lugar de log é no <a href="http://en.wikipedia.org/wiki/Syslog" target="_blank">Syslog</a> <em>&#8211; e se você não está fazendo isso, hummm, há uma boa chance de you&#8217;re doing it wrong my friend.</em></p>
<blockquote><p><strong><em>&#8230;and in The .NET World</em></strong></p>
<p>A melhor prática para aqueles que trabalham com .NET é <a href="http://www.developer.com/net/net/article.php/1370771/Interacting-with-the-Windows-2000-Event-Viewer-Using-C.htm" target="_blank">escrever log</a> com o <a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.aspx" target="_blank">Event Log</a>. Os melhores sysadmins de Windows que conheço estão sempre ligados (<a href="http://nagios.sourceforge.net/docs/3_0/monitoring-windows.html" target="_blank">Nagios?</a> <a href="http://www.zabbixbrasil.org/wiki/tiki-index.php?page=Instalacao+de+Agente+Zabbix+em+ambiente+Windows" target="_blank">Zabbix</a>?) no <a href="http://technet.microsoft.com/pt-br/library/cc668520.aspx" target="_blank">Event Viewer</a>.</p>
<p>Então, apesar deste post se destinar a Ruby/POSIX, fica a dica do Renato Lucindo <em>&#8211; no final desse post &#8211;</em> para a galera de .NET/Windows também.</p></blockquote>
<p>Bem, como a biblioteca padrão do Ruby para escrever no Syslog não é lá muito amigável, resolvi facilitar um pouco as coisas e criei a gem <a href="https://github.com/leandrosilva/slogger" target="_blank">slogger</a>.</p>
<h3>Dois exemplos rápidos</h3>
<p>Antes de mais nada, installe a gem:</p>
<p style="padding-left: 30px;">$ gem install slogger</p>
<p><strong>Log simples:</strong></p>
<pre class="brush: ruby; title: ; notranslate">
slogger = Slogger::Logger.new &quot;sample_app&quot;, :debug, :local0
slogger.info &quot;A good info&quot;
slogger.debug &quot;A deep info&quot;
</pre>
<p><strong>Log com tempo de execução:</strong></p>
<pre class="brush: ruby; title: ; notranslate">
slogger = Slogger::Logger.new &quot;sample_app&quot;, :debug, :local0
slogger.info &quot;A really good info preceded by spent time&quot; do
    # do something
end
</pre>
<p>Depois, claro, dê uma olhada no seu Syslog, para ver as mensagens &#8220;logadas&#8221;.</p>
<h3>A lambuja</h3>
<p>Se você estiver usando <a href="http://sinatrarb.com" target="_blank">Sinatra</a>, por exemplo, pode usar o middleware <a href="https://github.com/rack/rack/wiki/List-of-Middleware" target="_blank">Slogger::Rack::RequestLogger</a> em vez do famoso <a href="http://rack.rubyforge.org/doc/Rack/CommonLogger.html" target="_blank">Rack::CommonLogger</a>, que usa <a href="http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc/" target="_blank">Logger</a> (não que o Logger seja ruim).</p>
<pre class="brush: ruby; title: ; notranslate">
configure do
  slogger = Slogger::Logger.new &quot;sample_app&quot;, :debug, :local0
  use Slogger::Rack::RequestLogger, slogger
end
</pre>
<h3>E a dica final</h3>
<p>Ecoando a dica do <a href="http://twitter.com/rlucindo" target="_blank">Renato Lucindo</a>: não seja ingênuo, <a href="http://www.slideshare.net/rlucindo/distributed-systems-5186671" target="_blank">log everything</a>!!!</p>
<p>Tá esperando o que para começar a fazer a coisa direito?</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2011/02/18/slogger-lugar-de-mensagens-de-log-e-no-syslog/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jetty-rackup: rodando aplicações Rack no Jetty</title>
		<link>http://leandrosilva.com.br/2011/02/12/jetty-rackup-rodando-aplicacoes-rack-no-jetty/</link>
		<comments>http://leandrosilva.com.br/2011/02/12/jetty-rackup-rodando-aplicacoes-rack-no-jetty/#comments</comments>
		<pubDate>Sat, 12 Feb 2011 23:38:34 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jetty]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[jython]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=809</guid>
		<description><![CDATA[Por conta de um projeto que está pintando no trabalho, que requer o uso de um conector escrito em Java, há umas duas semanas mais ou menos comecei a fazer novos testes com Jython, considerando fortemente uma solução baseada Python. Até publiquei uma aplicação boba usando Flask, só de exemplo, porque googlando não achei nada que [...]]]></description>
			<content:encoded><![CDATA[<p>Por conta de um projeto que está pintando no trabalho, que requer o uso de um conector escrito em <a href="http://en.wikipedia.org/wiki/Java_(programming_language)" target="_blank">Java</a>, há umas duas semanas mais ou menos comecei a fazer novos testes com <a href="http://jython.org" target="_blank">Jython</a>, considerando fortemente uma solução baseada <a href="http://python.org" target="_blank">Python</a>. Até publiquei <a href="https://github.com/leandrosilva/flaskito" target="_blank">uma aplicação boba</a> usando <a href="http://flask.pocoo.org" target="_blank">Flask</a>, só de exemplo, porque <em>googlando</em> não achei nada que não fosse com <a href="http://pylonshq.com" target="_blank">Pylons</a> ou <a href="http://djangoproject.com" target="_blank">Django</a>. Mas no final, Jython não pode preencher alguns requisitos e voltamos então para <a href="http://jruby.org" target="_blank">JRuby</a>.</p>
<p>É aqui que entra o tema deste post.</p>
<p>Essa semana andei fazendo algumas contribuições em um projeto <em>open source</em> bem simples, mas igualmente interessante, que é o <a href="https://github.com/leandrosilva/jetty-rackup" target="_blank">jetty-rackup</a>.</p>
<p><a href="https://github.com/leandrosilva/jetty-rackup" target="_blank"></a>O objetivo do jetty-rackup é rodar aplicações <a href="http://rack.rubyforge.org/" target="_blank">Rack</a> no <a href="http://jetty.codehaus.org/jetty/" target="_blank">Jetty WebServer</a>, sem ter que empacotá-las em <a href="http://en.wikipedia.org/wiki/WAR_(Sun_file_format)" target="_blank">arquivos WAR</a>, o que é definitivamente excelente em ambiente de desenvolvimento ou quanto você quer fazer deploy orientado a <em>git pull</em>.</p>
<h3><strong>Tutorial de 1 minuto</strong></h3>
<p>Bem, para que o jabá seja completo, nada melhor do que um tutorial. Vamos escrever então uma aplicação Sinatra básica <em>&#8211; ótima pedida para Web API.</em></p>
<p>1. Com Sinatra já instalado, crie uma aplicação <em>&#8211; app.rb</em></p>
<pre class="brush: ruby; title: ; notranslate">
require 'sinatra'

configure :development do
  Sinatra::Application.reset! # recarrega as rotas
  use Rack::Reloader          # recarrega arquivos
end

get '/?' do
  &quot;hello&quot;
end

get '/:message/?' do |message|
  &quot;hello #{message}&quot;
end
</pre>
<p>2. Com a aplicação criada, crie o arquivo rackup <em>&#8211; config.ru</em></p>
<pre class="brush: ruby; title: ; notranslate">
require 'rubygems'
require 'app'

set :run, false
set :environment, :development

run Sinatra::Application
</pre>
<p>3. Com o arquivo rackup criado, installe a <a href="rubygems.org/gems/jetty-rackup" target="_blank">gem jetty-rackup</a></p>
<p style="padding-left: 30px;">$ gem install jetty-rackup</p>
<p>4. Com a gem jetty-rackup instalada, no diretório da aplicação criada, inicie a aplicação</p>
<p style="padding-left: 30px;">$ jetty-rackup config.ru</p>
<p>5. Finalmente, com tudo pronto, teste com <a href="http://curl.haxx.se/" target="_blank">cURL</a> e <a href="http://httpd.apache.org/docs/2.0/programs/ab.html" target="_blank">Apache Benchmark</a></p>
<p style="padding-left: 30px;">$ curl http://localhost:9292/</p>
<p style="padding-left: 30px;">$ ab -n 10000 -c 25 http://localhost:9292/</p>
<p>Voilà!</p>
<p>Agora, rode o último comando algumas vezes e observe a variação crescente de &#8220;Requests per second&#8221;. JIT Compiler for the win!</p>
<h3><strong>Um pouco mais</strong></h3>
<p>Se quiser saber como usar bibliotecas Java, no repositório do projeto tem também um <a href="https://github.com/leandrosilva/jetty-rackup/tree/master/examples/using_java" target="_blank">exemplo</a> usando classes Java, tanto contidas no diretório WEB-INF/classes quanto em <a href="http://en.wikipedia.org/wiki/JAR_file" target="_blank">arquivo JAR</a> no WEB-INF/lib.</p>
<p>Divirta-se!</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2011/02/12/jetty-rackup-rodando-aplicacoes-rack-no-jetty/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A Locaweb está contratando!</title>
		<link>http://leandrosilva.com.br/2011/01/21/a-locaweb-esta-contratando/</link>
		<comments>http://leandrosilva.com.br/2011/01/21/a-locaweb-esta-contratando/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 14:46:02 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[trabalho]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=800</guid>
		<description><![CDATA[A Locaweb está procurando por desenvolvedores experiêntes e talentosos para integrar nossos times de SaaS, Cloud Computing, Hospedagem, Q&#38;A e Sistemas Centrais. Se você tem experiência em Ruby, Python, Java, .NET, PHP, Perl, bancos de dados relacionais e não-relacionais, arquiteturas distribuídas, sistemas de agendamento de tarefas, filas assíncronas, desenvolvimento web, e umas coisinhas mais, pode [...]]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://locaweb.com.br" target="_blank">Locaweb</a> está procurando por desenvolvedores experiêntes e talentosos para integrar nossos times de SaaS, Cloud Computing, Hospedagem, Q&amp;A e Sistemas Centrais.</p>
<p>Se você tem experiência em Ruby, Python, Java, .NET, PHP, Perl, bancos de dados relacionais e não-relacionais, arquiteturas distribuídas, sistemas de agendamento de tarefas, filas assíncronas, desenvolvimento web, e umas coisinhas mais, pode ser que tenhamos um lugar aqui para você. Que tal?</p>
<p>O perfil completo pode ser visto na integra <a href="http://ondetrabalhar.com/vagas/724/desenvolvedores-net-ruby-java-python" target="_blank">aqui</a>, no <a href="http://ondetrabalhar.com" target="_blank">OndeTrabalhar.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2011/01/21/a-locaweb-esta-contratando/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ReactiveJ: uma brincadeirinha com Evented I/O</title>
		<link>http://leandrosilva.com.br/2010/10/12/reactivej-uma-brincadeirinha-com-evented-io/</link>
		<comments>http://leandrosilva.com.br/2010/10/12/reactivej-uma-brincadeirinha-com-evented-io/#comments</comments>
		<pubDate>Tue, 12 Oct 2010 16:26:17 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=796</guid>
		<description><![CDATA[Estive estudando e brincando um pouco com evented I/O nas últimas duas semanas e resolvi então fazer uma implementação disso em Java, usando a Java NIO, que biblioteca de I/O não-blocante da plataforma Java, e seguindo o pattern Reactor. Bem, o resultado dessa brincandeira pode ser visto aqui, no projeto ReactiveJ. Ainda é um projeto de [...]]]></description>
			<content:encoded><![CDATA[<p>Estive estudando e brincando um pouco com evented I/O nas últimas duas semanas e resolvi então fazer uma implementação disso em Java, usando a <a href="http://download.oracle.com/javase/1.4.2/docs/guide/nio/" target="_blank">Java NIO</a>, que biblioteca de I/O não-blocante da plataforma Java, e seguindo o <em>pattern</em> <a href="http://en.wikipedia.org/wiki/Reactor_pattern" target="_blank">Reactor</a>.</p>
<p>Bem, o resultado dessa brincandeira pode ser visto <a href="http://github.com/leandrosilva" target="_blank">aqui</a>, no projeto <a href="http://github.com/leandrosilva/reactivej" target="_blank">ReactiveJ</a>.</p>
<p>Ainda é um projeto de brincandeira, uma coisa didática, sem qualquer otimização extra de performance. Portanto, não é <em>production ready</em>. Quem sabe algum dia, caso eu leve a brincadeira a sério.</p>
<p>Se gostarem da brincadeira e quiserem continuar explorando o assunto, tenho mais uns links pra vocês:</p>
<ul>
<li><a href="http://github.com/fiorix/niosted" target="_blank">Niosted</a>, uma implementação de Reactor baseada em <a href="http://twistedmatrix.com/trac/" target="_blank">Twisted</a> e Java NIO &#8211; <em>por </em><a href="http://github.com/fiorix" target="_blank"><em>Alexandre Fiori</em></a></li>
<li><a href="http://gist.github.com/610500" target="_blank">Exemplo de uso</a> da Niosted com JRuby &#8211; <em>por </em><em><a href="http://github.com/gleicon" target="_blank">Gleicon Moraes</a></em></li>
<li><a href="http://blog.caelum.com.br/2010/09/27/javaee-6-contexto-assincrono-das-servlets-para-o-ajax-push/" target="_blank">Implementação de non-blocking server</a> com a API de Servlet 3 &#8211; <em>por <a href="http://github.com/peas/asyncservlets-test" target="_blank">Paulo Silveira</a></em></li>
</ul>
<p>Divirtam-se!</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/10/12/reactivej-uma-brincadeirinha-com-evented-io/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O quanto realmente importa a escolha de uma linguagem?</title>
		<link>http://leandrosilva.com.br/2010/08/23/o-quanto-realmente-importa-a-escolha-de-uma-linguagem/</link>
		<comments>http://leandrosilva.com.br/2010/08/23/o-quanto-realmente-importa-a-escolha-de-uma-linguagem/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 03:11:45 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[pragmatismo]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=772</guid>
		<description><![CDATA[Há alguns meses perguntaram ao Rich Hickey: &#8220;How much does a choice of language really matter? Are there good reasons to choose one language over another or does it all come down to taste?&#8221; E sua resposta foi: &#8220;I think it matters quite a bit. A good language is opinionated, and strives to make a particular [...]]]></description>
			<content:encoded><![CDATA[<p>Há alguns meses <a href="http://www.simple-talk.com/opinion/geek-of-the-week/rich-hickey-geek-of-the-week/" target="_blank">perguntaram</a> ao <a href="http://en.wikipedia.org/wiki/Rich_Hickey" target="_blank">Rich Hickey</a>:</p>
<blockquote><p><em>&#8220;How much does a choice of language really matter? Are there good reasons to choose one language over another or does it all come down to taste?&#8221;</em></p></blockquote>
<p>E sua resposta foi:</p>
<blockquote><p><em>&#8220;I think it matters quite a bit. A good language is opinionated, and strives to make a particular style of programming easy and idiomatic. It only seems a matter of taste when you are comparing languages that are more similar than they are different, like Java/C# or Python/Ruby. Try something really different like Clojure, Haskell, or Erlang and the fact that it matters becomes readily apparent.&#8221;</em></p></blockquote>
<p>Eu acho que concordo bastante com sua opinião. Discutir se Java é melhor do que C#, por exemplo, é inútil, porque as duas linguagens são muito semelhantes. Nesse caso, o que acaba pesando mais na hora da escolha é o ecosistema no qual cada linguagem está inserida, que pode agradar mais a um ou a outro programador. É puro gosto.</p>
<p>O mesmo vale para Ruby e Python, como ele mesmo cita.</p>
<h4>Mundos diferentes</h4>
<p>Mas e se a comparação for entre Java e Ruby, por exemplo, como é que fica? Na minha humilde opinião, fica <em>no sense</em>. Porque Java e Ruby não são liguagens de mesma proposta; e mesmo sendo ambas de propósito geral, ambas tem objetivos claramente diferentes.</p>
<p><strong>Comparação entre mundos diferentes</strong></p>
<p>Agora vou, propositalmente, contradizer um pouco o que eu disse à cima: faz sentido, sim, você comparar Ruby com Java; Erlang com Python; F# com PHP. Sim, faz sentido.</p>
<p>Faz sentido quando você está escolhendo a linguagem que oferece a melhor solução para um dado domínio de problema.</p>
<blockquote><p><em>Super CRUD com Erlang? Não, acho que não.</em></p>
<p><em>Precisar de c</em><em>oncorrência massiva, tolerância a falhas, processos distribuídos, downtime mínimo? Humm, não sei não, mas será que não é de Erlang que você precisa?</em></p></blockquote>
<p>Entende? É nessa hora que <a href="http://al3x.net/2010/07/27/node.html" target="_blank">a escolha de uma linguagem</a> começa a pesar de verdade. Isso realmente importa.</p>
<p><strong>Mundos diferentes se complementam</strong></p>
<p>Tempos atrás, escrevendo programas Erlang/OTP, senti falta de uma ferramenta que me ajudasse a criar rapidamente a estrutura inicial do projeto e <a href="http://www.erlang.org/doc/design_principles/des_princ.html" target="_blank">umas coisas mais</a>. O que fiz? Criei uma ferramenta que faz isso: <a href="http://github.com/leandrosilva/otp_kickoff" target="_blank">otp_kickoff</a>. Em Erlang? Não, em Ruby. Fiz isso em poucas horas, usando <a href="http://github.com/wycats/thor" target="_blank">Thor</a>.</p>
<p>Pouco tempo depois, senti falta de uma ferramenta de build amigável. Novamente, o que fiz? Criei o <a href="http://github.com/leandrosilva/ebuilder" target="_blank">ebuilder</a>, usando Ruby/Thor.</p>
<p>Um outro exemplo de mundos diferentes que se complementam é o <a href="http://github.com/leandrosilva/jsparrow" target="_blank">JSparrow</a>, um cliente de <a href="http://pt.wikipedia.org/wiki/JMS" target="_blank">JMS</a> bem fluente, que fiz usando <a href="http://jruby.org/" target="_blank">JRuby</a>.</p>
<p>Essa é a ideia de tirar o melhor de cada linguagem!</p>
<p>Mesmo porque, dificilmente, você constroi um sistema de verdade <em>&#8211; que não seja um super CRUD &#8211;</em> com apenas uma única linguagem de programação. Na minha equipe mesmo, há sistemas desenvolvidos em C# .NET, que são <em>buildados, </em>testados e <em>deployados</em> com Ruby/Rake/Cucumber e usam Java/Ivy como repositório de assemblies. Isso sem falar em JavaScript, que também tem de monte.</p>
<p>Esse é o mundo real dos sistemas de verdade.</p>
<p><strong>Moral da história</strong></p>
<p>Isso me faz pensar que brigas de <em>fanboys</em> de linguagens <em>&#8211; em frenéticas buscas por prosélitos &#8211;</em> são uma verdadeira piada.</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/08/23/o-quanto-realmente-importa-a-escolha-de-uma-linguagem/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Gerenciando times autogerenciáveis no OxenteRails 2010</title>
		<link>http://leandrosilva.com.br/2010/08/16/gerenciando-times-autogerenciaveis-no-oxenterails-2010/</link>
		<comments>http://leandrosilva.com.br/2010/08/16/gerenciando-times-autogerenciaveis-no-oxenterails-2010/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 15:17:55 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[agilidade]]></category>
		<category><![CDATA[eventos]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=748</guid>
		<description><![CDATA[Há alguns dias tive a oportunidade de falar uma ou duas palavras no OxenteRails 2010 sobre gerenciamento de times de desenvolvimento de software, em especial, os autogerenciáveis. Foi uma experiência bem bacana, havia mais gente interessada no assunto do que eu imaginava que haveria. Demorei um pouco, mas cá está, subi minha apresentação pro SlideShare. O [...]]]></description>
			<content:encoded><![CDATA[<p>Há alguns dias tive a oportunidade de falar uma ou duas palavras no <a href="http://oxenterails.com" target="_blank">OxenteRails 2010</a> sobre gerenciamento de times de desenvolvimento de software, em especial, os autogerenciáveis. Foi uma experiência bem bacana, havia mais gente interessada no assunto do que eu imaginava que haveria.</p>
<p>Demorei um pouco, mas cá está, subi <a href="http://www.slideshare.net/leandrodoze/gerenciando-times-autogerenciveis" target="_blank">minha apresentação</a> pro <a href="http://www.slideshare.net" target="_blank">SlideShare</a>.</p>
<div id="__ss_4975528" style="width: 425px;"><object id="__sse4975528" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=gerenciandotimesautogerenciveis-oxenterails2010-100815161416-phpapp01&amp;stripped_title=gerenciando-times-autogerenciveis" /><param name="name" value="__sse4975528" /><param name="allowfullscreen" value="true" /><embed id="__sse4975528" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=gerenciandotimesautogerenciveis-oxenterails2010-100815161416-phpapp01&amp;stripped_title=gerenciando-times-autogerenciveis" name="__sse4975528" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<h3>O que achei do evento?</h3>
<p>Achei o evento muito arretado, como de fato era sua proposta. <em>(háh!)</em></p>
<h4><span style="font-weight: normal;">Bem, mas sendo um pouco mais especifico, deixo um destaque especial para a organização do evento, que foi impecável; muito acima da média mesmo; o pessoal da comunidade lá de Natal está de parabéns. Annaysa Melo, Paulo Fagiani, Maximiliano Guerra e todos os demais, muito obrigado pela receptividade!</span></h4>
<h4>Presença da Locaweb</h4>
<p>Esse ano, um coisa peculiar que rolou foi que, além de mim, outros quatro <a href="http://locawebers.com.br" target="_blank">locawebers</a> também palestraram: <a href="http://fabiokung.com" target="_blank">Fábio Kung</a>, <a href="http://simplesideias.com.br" target="_blank">Nando Vieira</a>, <a href="http://rafaelrosafu.com" target="_blank">Rafael Rosa</a> e <a href="http://www.agileandart.com" target="_blank">Daniel Cukier</a>. Me senti em casa!</p>
<h4>Palestras</h4>
<p>A maioria das palestras que assisti foram muito boas, em especial a do <a href="http://twitter.com/tapajos" target="_blank">Tapajós</a> que, como já era de se esperar, mandou super bem falando de <a href="http://blog.couch.io" target="_blank">CouchDB</a>. Queria muito ter visto também a do <a href="http://twitter.com/cv" target="_blank">CV</a>, mas infelizmente não pude, porque palestramos no mesmo horário. Fica pra próxima.</p>
<p>A palestra do <a href="http://peepcode.com/" target="_blank">Geoffrey</a> <em>&#8211; com aquela voz de peepcoder &#8211;</em> foi no mínimo divertida; mas a do <a href="http://www.plataformatec.com.br" target="_blank">José Valim</a> acho que ficou devendo um pouco <em>&#8211; talvez porque, IMHO, soou um tanto quanto marketing da Plataforma</em>. Já a do <a href="http://akitaonrails.com" target="_blank">Akita</a> me surpreendeu. Nem tanto pelo conteúdo <em>&#8211; apesar de indiscutivelmente relevante &#8211;</em>, mas mais pelo formato e desenvoltura. Bem legal mesmo.</p>
<p>Não gostei da palestra do <a href="http://www.nomedojogo.com/" target="_blank">Carlos Brando</a>, achei muito auto-ajuda; mas deixo um ponto positivo pro trecho de <em>Assembly</em> e C que ele codou ao vivo. Aliás, falando em codar ao vivo, a palestra do Nando foi muito boa, com seus slides super descolados e coloridos, mas ele não codou ao vivo. Tadinho do Murphy e sua lei, não paparam essa.</p>
<p><img class="alignnone" title="Minha palestra na sexta-feira" src="http://lh4.ggpht.com/_W8DqIYr194A/TGRd2L8reZI/AAAAAAAAPtk/fLqFeKU68x4/s720/Oxente%20sexta%20feira%20(150).jpg" alt="" width="720" height="480" /></p>
<p>Dessa fez o Kung também não codou ao vivo, como de costume, mas sua palestra foi legal, bem contextualizada, dinâmica e totalmente #<em>devops</em>. Aliás, ela fez tanto sucesso que, depois de terminá-la, ele ficou um tempão trocando idéia e codando com a galera no <em>open space</em>.</p>
<p>Não pude ver a palestra do Rafael Rosa, meu colega de <a href="http://locaweb.com.br" target="_blank">Locaweb</a>, porque estava na do <a href="http://twitter.com/hugobarauna" target="_blank">Hugo Baraúna</a> sobre <em>Project Rescue</em>. Não gostei muito, pra ser sincero, então acabei ficando meio frustrado.</p>
<p>O <a href="http://henriquebastos.net/" target="_blank">Henrique Bastos</a> deu um show de humildade, numa palestra que, sinceramente, eu não esperava muito do tema. Foi excelente. Já a palestra do <a href="http://areacriacoes.com.br/" target="_blank">Daniel Lopes</a>, não gostei não. Gostei do <a href="http://github.com/cavalle/steak" target="_blank">Steak</a>, que eu ainda não conhecia, mas achei a palestra dele meio bala de prata no que diz respeito a testes de aceitação.</p>
<p>A palestra do <a href="http://improveit.com.br/" target="_blank">Vinícius Teles</a> foi legal, mas como eu já tinha visto ele palestrar nos dois últimos anos, na <a href="http://railssummit.com.br/" target="_blank">Rails Summit</a>, não foi muito novidade pra mim. Mesmo assim, uma boa palestra.</p>
<p>Nessa linha de empreendedorismo <em>&#8211; também seguida pelo </em><a href="http://bielsystems.com.br/" target="_blank"><em>Rafael Lima</em></a><em> &#8211;</em>, o <a href="http://twitter.com/alegomes" target="_blank">Alê Gomes</a>, cara muito gente fina, fez uma apresentação meio <em>reworkeana</em>, mas mega divertida. Casquei o bico com ele.</p>
<p>Vi também a palestra da <a href="http://tcamilo.wordpress.com/" target="_blank">Thaís</a>, falando sobre seu dia-a-dia no trabalho, comprometimento e respeito aos colegas. Foi legal.</p>
<p>E por fim, rolou um <em>Q&amp;A</em> com todos os palestrantes, quando foi revelado que somente eu, Akita, CV e <a href="http://www.teamware.com.br/" target="_blank">Juan Bernabó</a> não terminamos a faculdade. Aliás, falando nesse <em>Q&amp;A</em>, rapaz, como tem gente que gosta de falar, hein? Teve palestrante que pegou o microfone e não quis mais largar. Fiquei impressionado.</p>
<h4>Balanço final</h4>
<p>Valeu bastante a pena ter participado dessa conferência, em especial pelas discussões e bate-papos informais.</p>
<p>Ano que vem, quem sabe, nos vemos por lá outra vez!</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/08/16/gerenciando-times-autogerenciaveis-no-oxenterails-2010/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Minha palestra no OxenteRails 2010</title>
		<link>http://leandrosilva.com.br/2010/07/28/minha-palestra-no-oxenterails-2010/</link>
		<comments>http://leandrosilva.com.br/2010/07/28/minha-palestra-no-oxenterails-2010/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 23:01:25 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[agilidade]]></category>
		<category><![CDATA[eventos]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=740</guid>
		<description><![CDATA[Nos dias 6 e 7 de agosto acontecerá em Natal a segunda edição do evento de Rails mais arretado do planeta, o OxenteRails 2010, com palestras técnicas [e não técnicas] de diversas personalidades da comunidade de desenvolvimento de software brasileira e internacional. Se você estiver por lá e quiser ver uma palestra nada técnica, logo depois do [...]]]></description>
			<content:encoded><![CDATA[<p>Nos dias 6 e 7 de agosto acontecerá em Natal a segunda edição do evento de Rails mais arretado do planeta, o <a href="http://oxenterails.com/" target="_blank">OxenteRails 2010</a>, com <a href="http://oxenterails.com/agenda" target="_blank">palestras</a> técnicas [e não técnicas] de diversas <a href="http://oxenterails.com/palestrantes" target="_blank">personalidades</a> da comunidade de desenvolvimento de software brasileira e internacional.</p>
<p><img class="aligncenter" title="OxenteRails 2010" src="http://oxenterails.com/images/bg/bg-banner.jpg" alt="" width="669" height="300" /></p>
<p>Se você estiver por lá e quiser ver uma palestra nada técnica, logo depois do coffe-break, às 16:00, na sala B, <a href="http://oxenterails.com/palestrantes#leandro" target="_blank">vou falar</a> sobre <em>&#8220;gerenciamento de times auto-gerenciáveis&#8221;</em>.</p>
<p>Uma introdução ao assunto da minha palestra são os posts:</p>
<ul>
<li><a href="http://leandrosilva.com.br/2010/02/10/tchau-tchau-gerente-agora-sou-scrum">Tchau, tchau gerente, agora sou Scrum!</a></li>
<li><a href="http://leandrosilva.com.br/2010/04/04/rapidos-conselhos-para-gerentes-humanos/">Rápidos conselhos para gerentes humanos</a></li>
<li><a href="http://leandrosilva.com.br/2010/04/28/voce-ainda-acha-que-programacao-em-par-e-desperdicio/">Você ainda acha que programação em par é desperdício?</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/07/28/minha-palestra-no-oxenterails-2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Review da XP 2010</title>
		<link>http://leandrosilva.com.br/2010/07/01/review-da-xp-2010/</link>
		<comments>http://leandrosilva.com.br/2010/07/01/review-da-xp-2010/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 19:10:15 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[agilidade]]></category>
		<category><![CDATA[eventos]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=734</guid>
		<description><![CDATA[Quem me acompanha no Twitter sabe que mês passado estive na 11ª Conferência Internacional de Desenvolvimento Ágil de Software, a.k.a. XP 2010 &#8211; que este ano aconteceu na longínqua Trondheim, na Noruega &#8211;, junto com meu companheiro de Locaweb, Alexandre Freite, figurinha conhecida da comundade ágil de São Paulo. Bem, aos poucos temos escrito sobre o [...]]]></description>
			<content:encoded><![CDATA[<p>Quem me acompanha no <a href="http://twitter.com/codezone" target="_blank">Twitter</a> sabe que mês passado estive na 11ª Conferência Internacional de Desenvolvimento Ágil de Software, <em>a.k.a.</em> <a href="http://xp2010.org/" target="_blank">XP 2010</a> <em>&#8211; que este ano aconteceu na longínqua Trondheim, na Noruega &#8211;</em>, junto com meu companheiro de <a href="http://locaweb.com.br" target="_blank">Locaweb</a>, <a href="http://ccsl.ime.usp.br/agilcoop/membros" target="_blank">Alexandre Freite</a>, figurinha conhecida da comundade ágil de São Paulo.</p>
<p><a title="Bate papo antes do painel por Leandro Silva (CØdeZØne), no Flickr" href="http://www.flickr.com/photos/37125252@N04/4664107923/"><img src="http://farm5.static.flickr.com/4042/4664107923_32b2413df3.jpg" alt="Bate papo antes do painel" width="500" height="375" /></a></p>
<p>Bem, aos poucos temos escrito sobre o evento (<a href="http://blog.locaweb.com.br/archives/2651/nossa-participacao-da-xp-2010-1o-relato" target="_blank">review</a>, <a href="http://blog.locaweb.com.br/archives/2703/a-importancia-das-historias-de-seguranca" target="_blank">palestras</a>, etc) no <a href="http://locaweb.com.br" target="_blank">blog da Locaweb</a> e também coloquei uma porção de <a href="http://www.flickr.com/photos/37125252@N04/sets/72157624046699563" target="_blank">fotos no meu Flickr</a>.</p>
<p>Divirtam-se!</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/07/01/review-da-xp-2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

