<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2portuguesefull.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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Nome do Jogo</title>
	
	<link>http://www.nomedojogo.com</link>
	<description>por Carlos Brando</description>
	<lastBuildDate>Wed, 18 Aug 2010 05:13:53 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1-alpha</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/NomeDoJogo" /><feedburner:info uri="nomedojogo" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://superfeedr.com/hubbub" /><feedburner:emailServiceId>NomeDoJogo</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FNomeDoJogo" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/NomeDoJogo" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FNomeDoJogo" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FNomeDoJogo" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FNomeDoJogo" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FNomeDoJogo" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><item>
		<title>Ruby + C + Assembly = Oxente!</title>
		<link>http://feedproxy.google.com/~r/NomeDoJogo/~3/1DfejHNlLsQ/</link>
		<comments>http://www.nomedojogo.com/2010/08/16/ruby-c-assembly-oxente/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 12:32:17 +0000</pubDate>
		<dc:creator>Carlos Brando</dc:creator>
				<category><![CDATA[Eventos]]></category>

		<guid isPermaLink="false">http://www.nomedojogo.com/?p=3418</guid>
		<description><![CDATA[Nos dias 6 e 7 de agosto desse ano estive presente na segunda edição do Oxente Rails em Natal no Rio Grande do Norte. E para variar o evento superou as expectativas. Programadores de qualquer linguagem e pessoas interessadas em empreendedorismo não podem perder esse evento, simples assim. Abaixo estão os slides da minha apresentação [...]]]></description>
			<content:encoded><![CDATA[<p>Nos dias 6 e 7 de agosto desse ano estive presente na segunda edição do <a href="http://oxenterails.com/">Oxente Rails</a> em Natal no Rio Grande do Norte. E para variar o evento superou as expectativas. Programadores de qualquer linguagem e pessoas interessadas em empreendedorismo não podem perder esse evento, simples assim.</p>
<p>Abaixo estão os slides da minha apresentação e um trecho de código que será facilmente entendido por aqueles que assistiram a minha palestra.</p>
<p style="text-align: center;"><object id="__sse4928964" 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=palestra-100809101346-phpapp02&amp;stripped_title=criando-uma-carreira-notvel-em-desenvolvimento-de-software" /><param name="name" value="__sse4928964" /><param name="allowfullscreen" value="true" /><embed id="__sse4928964" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=palestra-100809101346-phpapp02&amp;stripped_title=criando-uma-carreira-notvel-em-desenvolvimento-de-software" name="__sse4928964" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Se você pretende executar o código abaixo é necessário instalar a gem RubyInline antes:</p>
<pre class="textmate-source"><span class="text text_plain"><span class="meta meta_paragraph meta_paragraph_text">gem install RubyInline</span></span></pre>
<p>Segue a brincadeira:</p>
<pre class="textmate-source"><span class="source source_ruby source_ruby_rails"><span class="meta meta_require meta_require_ruby"><span class="keyword keyword_other keyword_other_special-method keyword_other_special-method_ruby">require</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>rubygems<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span></span>
<span class="meta meta_require meta_require_ruby"><span class="keyword keyword_other keyword_other_special-method keyword_other_special-method_ruby">require</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>inline<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span></span>

<span class="meta meta_rails meta_rails_controller"><span class="meta meta_class meta_class_ruby"><span class="keyword keyword_control keyword_control_class keyword_control_class_ruby">class</span> <span class="entity entity_name entity_name_type entity_name_type_class entity_name_type_class_ruby"><span class="variable variable_other variable_other_object variable_other_object_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">&lt;&lt;</span> self</span></span></span>
  inline <span class="keyword keyword_control keyword_control_start-block keyword_control_start-block_ruby">do </span><span class="punctuation punctuation_separator punctuation_separator_variable punctuation_separator_variable_ruby">|</span><span class="variable variable_other variable_other_block variable_other_block_ruby">builder</span><span class="punctuation punctuation_separator punctuation_separator_variable punctuation_separator_variable_ruby">|</span>
    builder<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>add_compile_flags <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>-fasm-blocks<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span>
    builder<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>c <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>
      int sum(int num1, int num2) {
        int result;

        __asm__{
          mov eax, num1
          mov ebx, num2
          add eax, ebx
          mov result, eax
        }

        return result;
      }
    <span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span>
  <span class="keyword keyword_control keyword_control_ruby">end</span>
</span><span class="keyword keyword_control keyword_control_ruby">end</span>

puts sum<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="constant constant_numeric constant_numeric_ruby">2</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_numeric constant_numeric_ruby">3</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>
</span></pre>
<p>Se você não pôde estar presente, a boa notícia é que esse ano todas as palestras foram gravadas e devem ser disponibilizadas em breve!</p>
<img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/1DfejHNlLsQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.nomedojogo.com/2010/08/16/ruby-c-assembly-oxente/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.nomedojogo.com/2010/08/16/ruby-c-assembly-oxente/</feedburner:origLink></item>
		<item>
		<title>“Eu quebrei o código”</title>
		<link>http://feedproxy.google.com/~r/NomeDoJogo/~3/wrDJnAJDNqU/</link>
		<comments>http://www.nomedojogo.com/2010/07/01/eu-quebrei-o-codigo/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 18:08:19 +0000</pubDate>
		<dc:creator>Carlos Brando</dc:creator>
				<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://www.nomedojogo.com/?p=3371</guid>
		<description><![CDATA[No dia 9 de setembro de 1945 a equipe da Dr. Grace Hopper (que mais tarde se tornaria a criadora da linguagem COBOL) e de Howard H. Aiken estava diante de um problema na sala do computador Mark II. Depois de uma análise minuciosa detectaram uma mariposa entre os contatos de um dos relés do [...]]]></description>
			<content:encoded><![CDATA[<p>No dia 9 de setembro de 1945 a equipe da Dr. Grace Hopper (que mais tarde se tornaria a criadora da linguagem COBOL) e de Howard H. Aiken estava diante de um problema na sala do computador Mark II.  Depois de uma análise minuciosa detectaram uma mariposa entre os contatos de um dos relés do computador. Ironicamente Grace documentou o incidente nos registros adicionando o inseto e a frase &#8220;First atual case of bug being found&#8221;.</p>
<div id="attachment_3372" class="wp-caption aligncenter" style="width: 750px"><a href="http://www.nomedojogo.com/wp-content/uploads/2010/07/H96566k.jpg"><img class="size-full wp-image-3372" title="H96566k" src="http://www.nomedojogo.com/wp-content/uploads/2010/07/H96566k.jpg" alt="" width="740" height="583" /></a><p class="wp-caption-text">Foto do que possívelmente seria o primeiro bug encontrado em um computador</p></div>
<p>Existe um efeito psicologico muito forte quando um erro explode em um software. É dificil para um profissional assumir que cometeu um erro ou deixou de testar adequadamente antes de colocar algo em produção. Quando um bug aparece, a tendencia é sempre procurar pelo culpado ao invés de procurar pelo problema.</p>
<p>Há alguns anos eu trabalhei em uma consultoria que mantinha uma lista na parede com um ranking dos programadores que mais deixavam bugs no código. Toda vez que um usuário ligava reclamando de algo, iniciava-se uma espécie de corrida para ver quem encontrava o culpado primeiro. Assim que o infeliz programador era apontado, ele era obrigado a vestir uma faixa com os dizeres: <strong>&#8220;Eu quebrei o código&#8221;</strong> durante todo o dia de trabalho.</p>
<p><a href="http://www.nomedojogo.com/wp-content/uploads/2010/07/g2Ofy.jpg"><img class="aligncenter size-full wp-image-3379" title="g2Ofy" src="http://www.nomedojogo.com/wp-content/uploads/2010/07/g2Ofy.jpg" alt="" width="380" height="380" /></a></p>
<p>Não é possível desenvolver um software isento de falhas. Infelizmente, os computadores ainda estão limitados a fazer aquilo que <em>mandamos</em> ele fazer, e não necessariamente aquilo que <em>queremos</em> que ele faça. E enquanto isso não se tornar uma realidade estaremos sempre em <a href="http://www.nomedojogo.com/2009/03/12/um-pouco-mais-sobre-%E2%80%9Cdon%E2%80%99t-repeat-yourself%E2%80%9D/">modo de manutenção</a>.</p>
<p>Desenvolver é um ciclo que envolve escrever algo original por alguns minutos e então passar algumas horas solucionando bugs. Escrever um código novo e então reescrever algo que aparentemente ficou ruim. Todos os programadores deveriam ter isso em mente antes de ingressarem nessa profissão.</p>
<p>Um bom programador precisa inicialmente desligar todos esses sistemas instintivos de defesa. Eu sei muito bem o que é estar procurando por um bug no código com o gerente de um lado e o cliente do outro observando cada passo que você dá. Concentre-se, não perca o foco.</p>
<p>Pense em um médico. O paciente chega no consultório com dor de cabeça, nauseas, dor em certas partes do corpo, etc.. Se o médico tentar solucionar cada um dos sintomas de forma isolada ele estará mascarando o real problema do paciente. O objetivo é identificar o que está gerando todos esses sintomas. Ao localizar a raiz do problema e medicar o paciente corretamente, de forma natural todos os sintomas desaparecerão.</p>
<p>Da mesma forma, o maior erro que um programador pode cometer ao tentar resolver uma falha em um sistema é atacar os sintomas. Isso normalmente só confundirá a sua mente.</p>
<p>A maneira mais simples de encontrar um erro no código é explicando o problema para outro programador. A outra pessoa não precisa dizer uma única palavra, o simples fato de explicar passo-a-passo o que o código deveria fazer, normalmente é o suficiente para que você mesmo vislumbre o que pode estar causando a falha.</p>
<p>Pode parecer simples demais, mas ao explicar o problema para outra pessoa você terá de entrar em detalhes que talvez estejam passando despercebidos por você. Isso lhe dará uma nova visão do problema.</p>
<p>Solucionar bugs é parte da rotina de um programador. Algumas técnicas apenas diminuem a quantidade de incidencias no seu código, mas evitá-los totalmente é impossível. O mais importante é ter em mente que um erro no software, mesmo trabalhando em uma grande equipe nunca terá um culpado, ele sempre será um problema seu.</p>
<img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/wrDJnAJDNqU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.nomedojogo.com/2010/07/01/eu-quebrei-o-codigo/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		<feedburner:origLink>http://www.nomedojogo.com/2010/07/01/eu-quebrei-o-codigo/</feedburner:origLink></item>
		<item>
		<title>Programadores: Nem sempre o time que está ganhando está ganhando</title>
		<link>http://feedproxy.google.com/~r/NomeDoJogo/~3/lwMgCkNZVfQ/</link>
		<comments>http://www.nomedojogo.com/2010/06/04/programadores-nem-sempre-o-time-que-esta-ganhando-esta-ganhando/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 19:05:17 +0000</pubDate>
		<dc:creator>Carlos Brando</dc:creator>
				<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://www.nomedojogo.com/?p=3358</guid>
		<description><![CDATA[Estou sempre recebendo e-mails de pessoas interessadas em Ruby me questionando se realmente vale a pena gastar o seu tempo estudando essa linguagem de programação ao invés de estudar linguagens mais conhecidas como Java ou C#. Tenho certeza que a mesma dúvida preenche a mente de qualquer um que esteja interessado em apostar em alguma [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_3360" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.nomedojogo.com/wp-content/uploads/2010/06/2628233713_80b72163f4.jpg"><img class="size-full wp-image-3360" title="2628233713_80b72163f4" src="http://www.nomedojogo.com/wp-content/uploads/2010/06/2628233713_80b72163f4.jpg" alt="" width="500" height="334" /></a><p class="wp-caption-text">Foto de Marc Castejón</p></div>
<p style="text-align: center;">
<p>Estou sempre recebendo e-mails de pessoas interessadas em Ruby me questionando se realmente vale a pena gastar o seu tempo estudando essa linguagem de programação ao invés de estudar linguagens mais conhecidas como Java ou C#. Tenho certeza que a mesma dúvida preenche a mente de qualquer um que esteja interessado em apostar em alguma tecnologia emergente.</p>
<p>Por que alguém estaria disposto a gastar o seu precioso tempo estudando algo no qual não tem certeza se terá a oportunidade de ganhar dinheiro com isso depois?</p>
<p>A minha resposta sempre foi: &#8220;paixão&#8221;. Bons programadores são apaixonados pelo que fazem, isso explica o motivo deles adorarem estar sempre aprendendo coisas novas.</p>
<p>Mas existe um dilema cultural aqui. A maioria de nós vem de famílias que emergiram para a classe média apenas uma ou duas gerações atrás. Fomos ensinados por nossos pais e avós a colocar os interesses financeiros da família em primeiro lugar e deixar a satisfação profissional em segundo plano. Isso explica muito bem porque tantos profissionais continuam em empregos ruins, mesmo insatisfeitos.</p>
<p>Seguindo o pensamento de nossos pais, não é mais inteligente apostar no time que está ganhando? De forma alguma. <a href="http://www.nomedojogo.com/2010/04/23/investir-em-ruby-era-muito-arriscado/">Correr riscos</a> e estar satisfeito profissionalmente são sem dúvida a receita para o sucesso.</p>
<img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/lwMgCkNZVfQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.nomedojogo.com/2010/06/04/programadores-nem-sempre-o-time-que-esta-ganhando-esta-ganhando/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://www.nomedojogo.com/2010/06/04/programadores-nem-sempre-o-time-que-esta-ganhando-esta-ganhando/</feedburner:origLink></item>
		<item>
		<title>TextMate: Autocomplete Routes</title>
		<link>http://feedproxy.google.com/~r/NomeDoJogo/~3/885b4XRunp4/</link>
		<comments>http://www.nomedojogo.com/2010/05/28/textmate-autocomplete-routes/#comments</comments>
		<pubDate>Fri, 28 May 2010 15:22:20 +0000</pubDate>
		<dc:creator>Carlos Brando</dc:creator>
				<category><![CDATA[Textmate]]></category>

		<guid isPermaLink="false">http://www.nomedojogo.com/?p=3353</guid>
		<description><![CDATA[http://github.com/carlosbrando/ruby-on-rails-tmbundle]]></description>
			<content:encoded><![CDATA[<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/-JBNLxjJ-xc&#038;hl=pt_BR&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/-JBNLxjJ-xc&#038;hl=pt_BR&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<p><a href="http://github.com/carlosbrando/ruby-on-rails-tmbundle">http://github.com/carlosbrando/ruby-on-rails-tmbundle</a></p>
<img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/885b4XRunp4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.nomedojogo.com/2010/05/28/textmate-autocomplete-routes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.nomedojogo.com/2010/05/28/textmate-autocomplete-routes/</feedburner:origLink></item>
		<item>
		<title>A pseudo-intellisense for Textmate</title>
		<link>http://feedproxy.google.com/~r/NomeDoJogo/~3/Y2JpCEjn_TA/</link>
		<comments>http://www.nomedojogo.com/2010/05/17/a-pseudo-intellisense-for-textmate/#comments</comments>
		<pubDate>Mon, 17 May 2010 11:49:35 +0000</pubDate>
		<dc:creator>Carlos Brando</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Textmate]]></category>

		<guid isPermaLink="false">http://www.nomedojogo.com/?p=3325</guid>
		<description><![CDATA[Getting lost with all available attributes names on an Active Record object is normal, especially on large projects. A lot of programmers have developed the bad habit of consulting the migrations to identify which attributes are available on an Active Record model. This certainly is not the smartest way to do this. I had been [...]]]></description>
			<content:encoded><![CDATA[<p>Getting lost with all available attributes names on an Active Record object is normal, especially on large projects.</p>
<p>A lot of programmers have developed the bad habit of consulting the migrations to identify which attributes are available on an Active Record model. This certainly is not the smartest way to do this.</p>
<p>I had been using a gem called <a href="http://rubygems.org/gems/annotate">annotate</a> to automatically add comments in my models with the database schema. But that wasn&#8217;t automatic enough.</p>
<p>So I decided to create something more practical and I ended up implementing a pseudo-intelissense for Textmate which can display a list with all available attributes for each Active Record model in my project. See how it works:</p>
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/8YvXzRuG-0s&#038;hl=pt_BR&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/8YvXzRuG-0s&#038;hl=pt_BR&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
<p>The idea is pretty simple. The variable name is important here. Since you can&#8217;t get the project scope through TextMate (if anyone has an idea how to do it please let me know), then the variable name is what indicates which Active Record model should be used.</p>
<p>For example, if you have a model named <code>User</code> you should use variable names as <code>user</code>, <code>@user</code>, <code>@@user</code>, etc.. Variables such as <code>product</code> and <code>@products</code> will show the <code>Product</code> model attributes. The concept is simple. If you use a different variable name, you must indicate which model should be used.</p>
<p>This is still an experimental feature and a work in progress. See some of the latest features that I&#8217;ve been working in recent days:</p>

<div class="ngg-galleryoverview" id="ngg-gallery-1-3325">


	
	<!-- Thumbnails -->
		
	<div id="ngg-image-1" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.nomedojogo.com/wp-content/gallery/textmate-bundle-for-ruby-on-rails-development/screen-shot-2010-05-17-at-8-23-37-am.png" title=" " class="shutterset_set_1" >
								<img title="screen-shot-2010-05-17-at-8-23-37-am" alt="screen-shot-2010-05-17-at-8-23-37-am" src="http://www.nomedojogo.com/wp-content/gallery/textmate-bundle-for-ruby-on-rails-development/thumbs/thumbs_screen-shot-2010-05-17-at-8-23-37-am.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-2" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.nomedojogo.com/wp-content/gallery/textmate-bundle-for-ruby-on-rails-development/screen-shot-2010-05-17-at-8-24-43-am.png" title=" " class="shutterset_set_1" >
								<img title="screen-shot-2010-05-17-at-8-24-43-am" alt="screen-shot-2010-05-17-at-8-24-43-am" src="http://www.nomedojogo.com/wp-content/gallery/textmate-bundle-for-ruby-on-rails-development/thumbs/thumbs_screen-shot-2010-05-17-at-8-24-43-am.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-3" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.nomedojogo.com/wp-content/gallery/textmate-bundle-for-ruby-on-rails-development/screen-shot-2010-05-17-at-8-25-06-am.png" title=" " class="shutterset_set_1" >
								<img title="screen-shot-2010-05-17-at-8-25-06-am" alt="screen-shot-2010-05-17-at-8-25-06-am" src="http://www.nomedojogo.com/wp-content/gallery/textmate-bundle-for-ruby-on-rails-development/thumbs/thumbs_screen-shot-2010-05-17-at-8-25-06-am.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-4" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.nomedojogo.com/wp-content/gallery/textmate-bundle-for-ruby-on-rails-development/screen-shot-2010-05-17-at-8-25-39-am.png" title=" " class="shutterset_set_1" >
								<img title="screen-shot-2010-05-17-at-8-25-39-am" alt="screen-shot-2010-05-17-at-8-25-39-am" src="http://www.nomedojogo.com/wp-content/gallery/textmate-bundle-for-ruby-on-rails-development/thumbs/thumbs_screen-shot-2010-05-17-at-8-25-39-am.png" width="79" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


<p>You can install running the following commands in the terminal window:</p>
<pre class="textmate-source"><span class="source source_shell">mkdir -p <span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell">~</span>/Library/Application<span class="constant constant_character constant_character_escape constant_character_escape_shell">\ </span>Support/TextMate/Bundles

<span class="support support_function support_function_builtin support_function_builtin_shell">cd</span> <span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell">~</span>/Library/Application<span class="constant constant_character constant_character_escape constant_character_escape_shell">\ </span>Support/TextMate/Bundles

git clone git://github.com/carlosbrando/ruby-on-rails-tmbundle.git <span class="string string_quoted string_quoted_double string_quoted_double_shell"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell">"</span>Ruby on Rails.tmbundle<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell">"</span></span>

osascript -e <span class="string string_quoted string_quoted_single string_quoted_single_shell"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell">'</span>tell app "TextMate" to reload bundles<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell">'</span></span></span></pre>
<p>This bundle is a fork of Dr. Nic&#8217;s <a href="http://github.com/drnic/ruby-on-rails-tmbundle">ruby-on-rails-tmbundle</a>. So if you already have installed this bundle, it&#8217;s advisable to remove it before to avoid conflicts.</p>
<p>The project is on GitHub: <a href="http://github.com/carlosbrando/ruby-on-rails-tmbundle">http://github.com/carlosbrando/ruby-on-rails-tmbundle</a></p>
<p>Enjoy!</p>
<img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/Y2JpCEjn_TA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.nomedojogo.com/2010/05/17/a-pseudo-intellisense-for-textmate/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		<feedburner:origLink>http://www.nomedojogo.com/2010/05/17/a-pseudo-intellisense-for-textmate/</feedburner:origLink></item>
		<item>
		<title>Um pseudo-intellisense para o Textmate</title>
		<link>http://feedproxy.google.com/~r/NomeDoJogo/~3/xVeI45POVLY/</link>
		<comments>http://www.nomedojogo.com/2010/05/06/um-pseudo-intellisense-para-o-textmate/#comments</comments>
		<pubDate>Thu, 06 May 2010 15:55:30 +0000</pubDate>
		<dc:creator>Carlos Brando</dc:creator>
				<category><![CDATA[Textmate]]></category>

		<guid isPermaLink="false">http://www.nomedojogo.com/?p=3299</guid>
		<description><![CDATA[Quem nunca se confundiu com o nome dos atributos em modelos do Active Record? Principalmente em projetos maiores é comum se perder com os nomes das colunas que cada tabela do projeto possui. Alguns programadores acabam criando o péssimo hábito de consultar os arquivos de migrations para identificar quais atributos estão disponiveis através do banco [...]]]></description>
			<content:encoded><![CDATA[<p>Quem nunca se confundiu com o nome dos atributos em modelos do Active Record? Principalmente em projetos maiores é comum se perder com os nomes das colunas que cada tabela do projeto possui.</p>
<p>Alguns programadores acabam criando o péssimo hábito de consultar os arquivos de migrations para identificar quais atributos estão disponiveis através do banco de dados em uma classe do Active Record. Além de não ser nada pragmático, essa com certeza não é a forma mais inteligente de se fazer isso.</p>
<p>Até então eu costumava usar uma gem chamada <a href="http://rubygems.org/gems/annotate">annotate</a> para adicionar de forma automática comentários em meus modelos com os nomes dessas colunas. Isso já simplificava bastante.</p>
<p>Resolvi então avançar um pouco mais e implementar um pseudo-intelissense no Textmate que pudesse exibir em uma lista quais atributos estão disponíveis em cada modelo do Active Record em meu projeto. Veja como ficou:</p>
<p><center><br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" 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://www.youtube.com/v/8YvXzRuG-0s&amp;hl=pt_BR&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/8YvXzRuG-0s&amp;hl=pt_BR&amp;fs=1&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
</center></p>
<p>A ideia é bem simples. O nome da variável é importante aqui. Como não é possível recuperar o escopo do projeto através do TextMate (se alguém tiver uma ideia de como fazer isso fale comigo), então o nome da variável informa qual é o modelo do Active Record correspondente.</p>
<p>Por exemplo: Se a variável se chamar <code>user</code>, <code>@user</code>, <code>@@user</code> ou qualquer coisa parecida então o bundle procurará pela classe com o mesmo nome, no caso <code>User</code>. O mesmo vale para um modelo chamado <code>Product</code>, onde você deverá usar variáveis com nomes como <code>product</code>, <code>@product</code> e assim por diante.</p>
<p>Esse recurso ainda é experimental. Ainda há muita coisa a ser feita, como melhorar o sistema de cache e resolver algumas incompatibilidades com gemsets do RVM e diferentes versões do Rails.</p>
<p>Para instalar, faça o download do bundle (<a href="http://github.com/downloads/carlosbrando/ruby-on-rails-tmbundle/Ruby%20on%20Rails.tmbundle.1.0.0.zip">clique aqui</a>) e carregue-o clicando duas vezes.</p>
<p>Você também pode instalar diretamente pelo terminal, executando os comandos abaixo:</p>
<pre class="textmate-source"><span class="source source_shell">mkdir -p <span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell">~</span>/Library/Application<span class="constant constant_character constant_character_escape constant_character_escape_shell">\ </span>Support/TextMate/Bundles

<span class="support support_function support_function_builtin support_function_builtin_shell">cd</span> <span class="keyword keyword_operator keyword_operator_tilde keyword_operator_tilde_shell">~</span>/Library/Application<span class="constant constant_character constant_character_escape constant_character_escape_shell">\ </span>Support/TextMate/Bundles

git clone git://github.com/carlosbrando/ruby-on-rails-tmbundle.git <span class="string string_quoted string_quoted_double string_quoted_double_shell"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell">"</span>Ruby on Rails.tmbundle<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell">"</span></span>

osascript -e <span class="string string_quoted string_quoted_single string_quoted_single_shell"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell">'</span>tell app "TextMate" to reload bundles<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell">'</span></span></span></pre>
<p>Esse bundle é um fork do repositório do Dr. Nic, no qual eu também sou commiter. Se você já tem o bundle do drnic instalado, é melhor remove-lo antes de instalar esse novo para evitar conflitos.</p>
<p>O projeto se encontra no Github: <a href="http://github.com/carlosbrando/ruby-on-rails-tmbundle">http://github.com/carlosbrando/ruby-on-rails-tmbundle</a></p>
<p>Boa diversão!</p>
<img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/xVeI45POVLY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.nomedojogo.com/2010/05/06/um-pseudo-intellisense-para-o-textmate/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.nomedojogo.com/2010/05/06/um-pseudo-intellisense-para-o-textmate/</feedburner:origLink></item>
		<item>
		<title>Investir em Ruby era muito arriscado</title>
		<link>http://feedproxy.google.com/~r/NomeDoJogo/~3/xceyOArqAk0/</link>
		<comments>http://www.nomedojogo.com/2010/04/23/investir-em-ruby-era-muito-arriscado/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 13:18:44 +0000</pubDate>
		<dc:creator>Carlos Brando</dc:creator>
				<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://www.nomedojogo.com/?p=3291</guid>
		<description><![CDATA[A muitos anos atrás programar em Visual Basic era uma escolha de baixo risco. Para um jovem em inicio de carreira, como eu, parecia a escolha óbvia a fazer. Era fácil encontrar trabalho, porém havia tantos programadores Visual Basic no mercado que a média salarial não era nada especial. Um baixo risco e uma baixa [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_3292" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.nomedojogo.com/wp-content/uploads/2010/04/2319335415_3c98028b5d.jpg"><img class="size-full wp-image-3292" title="2319335415_3c98028b5d" src="http://www.nomedojogo.com/wp-content/uploads/2010/04/2319335415_3c98028b5d.jpg" alt="" width="500" height="333" /></a><p class="wp-caption-text">Foto de Marcin Wichary</p></div>
<p style="text-align: center;">
<p>A muitos anos atrás programar em Visual Basic era uma escolha de baixo risco. Para um jovem em inicio de carreira, como eu, parecia a escolha óbvia a fazer. Era fácil encontrar trabalho, porém havia tantos programadores Visual Basic no mercado que a média salarial não era nada especial. Um baixo risco e uma baixa recompensa.</p>
<p>Com o tempo o Visual Basic cedeu espaço ao C# e mais uma vez essa era a escolha natural para muitos programadores. Mais uma escolha de baixo risco e por consequência uma recompensa compatível.</p>
<p>Depois de mais de dez anos trabalhando com tecnologia Microsoft, conheci o Ruby. Eu realmente gostava de programar com essa linguagem, porém poucas empresas estavam investindo em Ruby e era muito difícil conseguir um emprego para trabalhar com ele.</p>
<p>Mas alguma coisa dentro de mim dizia que havia algo especial naquela linguagem somada ao framework Rails. Era um sentimento forte de que aquilo poderia se tornar grande.</p>
<p>Eu investi cedo em Ruby, numa época em que o risco era muito alto. Alto risco,  grandes recompensas.</p>
<img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/xceyOArqAk0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.nomedojogo.com/2010/04/23/investir-em-ruby-era-muito-arriscado/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		<feedburner:origLink>http://www.nomedojogo.com/2010/04/23/investir-em-ruby-era-muito-arriscado/</feedburner:origLink></item>
		<item>
		<title>Migrando do Textmate para o Textmate</title>
		<link>http://feedproxy.google.com/~r/NomeDoJogo/~3/5W71K5JRb0s/</link>
		<comments>http://www.nomedojogo.com/2010/04/20/migrando-do-textmate-para-o-textmate/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 00:05:20 +0000</pubDate>
		<dc:creator>Carlos Brando</dc:creator>
				<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://www.nomedojogo.com/?p=3280</guid>
		<description><![CDATA[Até pouco tempo atrás o Textmate era uma unanimidade para programadores Rails. Recentemente porém tenho visto alguns programadores migrando para outros editores de texto, como o Vim e o Emacs. Embora eu já tivesse uma certa experiência com esses últimos, eu nunca havia tentando desenvolver código de verdade com eles. Depois de fazer uma experiência trabalhando com [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_3281" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.nomedojogo.com/wp-content/uploads/2010/04/2392880126_1e12e523d2.jpg"><img class="size-full wp-image-3281" title="2392880126_1e12e523d2" src="http://www.nomedojogo.com/wp-content/uploads/2010/04/2392880126_1e12e523d2.jpg" alt="" width="500" height="282" /></a><p class="wp-caption-text">Foto de D&#39;Arcy Norman</p></div>
<p style="text-align: center;">
<p>Até pouco tempo atrás o <a href="http://macromates.com/">Textmate</a> era uma unanimidade para programadores Rails. Recentemente porém tenho visto alguns programadores migrando para outros editores de texto, como o <a href="http://www.vim.org/">Vim</a> e o <a href="http://www.gnu.org/software/emacs/">Emacs</a>.</p>
<p>Embora eu já tivesse uma certa experiência com esses últimos, eu nunca havia tentando desenvolver código de verdade com eles. Depois de fazer uma experiência trabalhando com cada um deles por uma semana, vejo que ambos são excelentes editores de textos e obviamente boas alternativas para o desenvolvimento de software em diversas linguagens.</p>
<p>Porém, quais critérios devem ser usados ao comparar essas ferramentas e decidir qual delas é a melhor? Quais são as características mais importantes em um editor de textos que poderiam determinar a minha escolha?</p>
<p>Acredito que o mais importante nesse caso é ser proficiente. Chega a ser irritante ver alguém pressionar dezenas de vezes a seta para a esquerda afim de colocar o cursor no começo de uma linha ou recorrer ao mouse para chegar ao topo do documento no Textmate, sendo que existem atalhos para se fazer isso com apenas uma combinação de teclas.</p>
<p>Escolher um editor de textos para programar não deve ser algo trivial. A curva de aprendizado é bastante íngreme até que você não precise mais pensar em quais combinações de teclas devem ser usadas para realizar uma operação. Tudo deve acontecer por reflexo.</p>
<p>É importante que a ferramenta seja flexível, permitindo que o programador possa configura-la de acordo com as suas preferencias. Como o processo de aprendizado é lento, é importante que você possa continuar usando o editor de textos mesmo ao trocar de uma linguagem para outra. Bons editores são capazes de aprender a trabalhar com qualquer nova linguagem de programação que apareça.</p>
<p>Alguns recursos como syntax highlighting e auto-indentation são indispensáveis para o desenvolvimento de software.</p>
<p>A conclusão é que todos esses editores de textos mencionados no inicio do artigo passam com louvor na avaliação dos requisitos mínimos. Mas isso ainda não responde a pergunta: Qual é o melhor editor de textos para se trabalhar com Rails?</p>
<p>Eu não sou um usuário comum do Textmate. Além de me sentir totalmente à vontade com essa ferramenta eu estou constantemente implementando meus próprios <a href="http://github.com/carlosbrando/ruby-on-rails-tmbundle">Bundles</a> e refinando os recursos que mais uso para o meu estilo de trabalho.</p>
<p>Como particularmente sou mais produtivo no Textmate, então especialmente para mim essa é a melhor ferramenta para programar em qualquer linguagem.</p>
<p>A idéia aqui não é defender o meu editor preferido. De fato, não importa se você escolheu o Textmate, o Emacs ou o Vim. Desde que o seu editor seja uma extensão das suas mãos.</p>
<img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/5W71K5JRb0s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.nomedojogo.com/2010/04/20/migrando-do-textmate-para-o-textmate/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		<feedburner:origLink>http://www.nomedojogo.com/2010/04/20/migrando-do-textmate-para-o-textmate/</feedburner:origLink></item>
		<item>
		<title>Acelerando um pouco as buscas no Textmate</title>
		<link>http://feedproxy.google.com/~r/NomeDoJogo/~3/uIG12WP46xE/</link>
		<comments>http://www.nomedojogo.com/2010/04/17/acelerando-um-pouco-as-buscas-no-textmate/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 02:26:40 +0000</pubDate>
		<dc:creator>Carlos Brando</dc:creator>
				<category><![CDATA[Textmate]]></category>

		<guid isPermaLink="false">http://www.nomedojogo.com/?p=3269</guid>
		<description><![CDATA[Eu costumo trabalhar muito com o terminal, assim é natural usar o comando mate . para carregar um projeto Rails no meu Textmate. Em projetos grandes é normal utilizar o sistema de buscas da ferramenta para localizar um arquivo ou encontrar alguma declaração, por exemplo. Embora existam plugin como o excelente AckMate que melhorem perceptivelmente [...]]]></description>
			<content:encoded><![CDATA[<p>Eu costumo trabalhar muito com o terminal, assim é natural usar o comando <code>mate .</code> para carregar um projeto Rails no meu Textmate.</p>
<p>Em projetos grandes é normal utilizar o sistema de buscas da ferramenta para localizar um arquivo ou encontrar alguma declaração, por exemplo. Embora existam plugin como o excelente <a href="http://github.com/protocool/AckMate">AckMate</a> que melhorem perceptivelmente a performance dessas buscas, elas ainda costumam ser lentas. Um dos vilões nessa história são os arquivos temporários e logs que são inclusos no processo de busca, e normalmente esses arquivos costumam ser bem grandes. Além de deixarem a busca mais lenta, eles também acabam poluindo o resultado já que na maioria das vezes não estamos procurando por algo nos logs.</p>
<div id="attachment_3270" class="wp-caption aligncenter" style="width: 573px"><a href="http://www.nomedojogo.com/wp-content/uploads/2010/04/Screen-shot-2010-04-17-at-3.27.28-PM.png"><img class="size-full wp-image-3270" title="Screen shot 2010-04-17 at 3.27.28 PM" src="http://www.nomedojogo.com/wp-content/uploads/2010/04/Screen-shot-2010-04-17-at-3.27.28-PM.png" alt="" width="563" height="307" /></a><p class="wp-caption-text">Arquivos de log incluídos nas buscas </p></div>
<p>Inicialmente eu costumava remover os diretórios <code>tmp</code> e <code>log</code> depois de carregar o projeto no Textmate. Porém realizar essa operação todas as vezes não era nada prático.</p>
<p>A solução mais simples e definitiva é alterar as configurações do Textmate para que ele ignore esses diretórios. Para isso abra as preferencias do editor de textos (<code>⌘,</code>) e na opção <strong>Advanced</strong> vá até a aba <strong>Folder References</strong>.</p>
<div id="attachment_3275" class="wp-caption aligncenter" style="width: 458px"><a href="http://www.nomedojogo.com/wp-content/uploads/2010/04/Screen-shot-2010-04-17-at-11.16.19-PM.png"><img class="size-full wp-image-3275" title="Screen shot 2010-04-17 at 11.16.19 PM" src="http://www.nomedojogo.com/wp-content/uploads/2010/04/Screen-shot-2010-04-17-at-11.16.19-PM.png" alt="" width="448" height="259" /></a><p class="wp-caption-text">Folder References</p></div>
<p style="text-align: center;">
<p>Os dois campos acima são expressões regulares que determinam quais arquivos e diretórios devem ser carregados em um projeto. Isso é útil para impedir que o diretório do CVS apareça no Textmate, por exemplo.</p>
<p>Para adicionar os diretórios log e tmp nessa lista negra precisamos alterar o campo <strong>Folder Pattern</strong>. Adicione <code>|tmp|log</code> exatamente antes do <code>|CVS</code>. Pronto, de agora em diante toda vez que um projeto for carregado à partir de um diretório, essas pastas também serão ignoradas.</p>
<p>Além disso você também pode adicionar outros diretórios ou arquivos, como por exemplo a pasta <code>vendor</code> se você não pretende alterar ou visualizar o código de plugins e gems.</p>
<img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/uIG12WP46xE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.nomedojogo.com/2010/04/17/acelerando-um-pouco-as-buscas-no-textmate/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.nomedojogo.com/2010/04/17/acelerando-um-pouco-as-buscas-no-textmate/</feedburner:origLink></item>
		<item>
		<title>Não se fazem mais programadores como antigamente</title>
		<link>http://feedproxy.google.com/~r/NomeDoJogo/~3/b0oS_Pv7KKk/</link>
		<comments>http://www.nomedojogo.com/2010/03/28/nao-se-fazem-mais-programadores-como-antigamente/#comments</comments>
		<pubDate>Sun, 28 Mar 2010 15:38:02 +0000</pubDate>
		<dc:creator>Carlos Brando</dc:creator>
				<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://www.nomedojogo.com/?p=3243</guid>
		<description><![CDATA[Acredite, nem sempre houve interfaces gráficas. Meu primeiro contato com um computador foi feito através de uma tela preta com letras verdes. Não me lembro exatamente, mas provavelmente era alguma versão do MS-DOS ou do PC-DOS. Qualquer criança com acesso a um computador nessa época, rapidamente aprendia a manipular arquivos e diretórios através de comandos [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_3244" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.nomedojogo.com/wp-content/uploads/2010/03/MS-DOS_125b-e1269789727778.jpg"><img class="size-full wp-image-3244" title="MS-DOS_125b" src="http://www.nomedojogo.com/wp-content/uploads/2010/03/MS-DOS_125b-e1269789727778.jpg" alt="" width="500" height="375" /></a><p class="wp-caption-text">MS-DOS</p></div>
<p style="text-align: center;">
<p>Acredite, nem sempre houve interfaces gráficas. Meu primeiro contato com um computador foi feito através de uma tela preta com letras verdes. Não me lembro exatamente, mas provavelmente era alguma versão do MS-DOS ou do PC-DOS.</p>
<p>Qualquer criança com acesso a um computador nessa época, rapidamente aprendia a manipular arquivos e diretórios através de comandos básicos que o sistema operacional oferecia. Era necessário aprender esses comandos se quisesse se divertir com um novo jogo, por exemplo. Além disso, muitos jogos mais sofisticados exigiam que o usuário entendesse, mesmo que superficialmente, como o sistema operacional manipulava a memória. Termos como memória estendida, superior, convencional e expandida eram comuns na roda de amigos.</p>
<p>Pode parecer nostalgia, mas mesmo depois de mais de uma década, todo esse conhecimento básico continua me sendo prático até os dias de hoje. Afinal, a maior parte do meu trabalho é resolvido através daquela mesma janela do terminal.</p>
<p>É claro que muitos programadores conseguem realizar todo o seu trabalho através de uma um ambiente integrado de desenvolvimento (IDE). Mas será que realmente podemos fazer tudo igualmente bem apontando o ponteiro do mouse e clicando?</p>
<p>Eu sempre acreditei que não. Interfaces gráficas são ótimas e realmente convenientes para muitas situações, mas o seu poder também é a sua limitação. Quando nos tornamos dependentes de uma interface gráfica (GUI) para realizar nosso trabalho, estamos presos à imaginação dos desenvolvedores que a criaram.</p>
<p>No terminal, nossa liberdade é quase infinita. Não vamos encontrar nada muito sofisticado lá, a maioria dos comandos e utilitários realizam apenas uma única tarefa. Mas realizam essa tarefa muito bem. Não existem distinções entre documentos, diretórios, discos rígido, drives de CD e DVD, teclados, impressoras e monitores por lá. Todos são simplesmente arquivos e são manipulados como tais, o que facilita muito as coisas.</p>
<p>Mas a maior vantagem do terminal é que podemos facilmente combinar sequencias desses comandos em scripts, o que nos dá a liberdade de automatizar praticamente qualquer tarefa que podermos imaginar, algo essencialmente importante para um programador pragmático que se preze. </p>
<p>Tire o máximo de proveito da sua IDE, mas não ignore o terminal. Aprender a usar bem o shell deve ser uma prioridade para qualquer programador iniciante.</p>
<img src="http://feeds.feedburner.com/~r/NomeDoJogo/~4/b0oS_Pv7KKk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.nomedojogo.com/2010/03/28/nao-se-fazem-mais-programadores-como-antigamente/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		<feedburner:origLink>http://www.nomedojogo.com/2010/03/28/nao-se-fazem-mais-programadores-como-antigamente/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.956 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-09-02 01:58:19 -->
