<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>act_as_newbie - Home</title>
  <id>tag:www.act-as-newbie.com,2008:mephisto/</id>
  <generator version="0.8.0" uri="http://mephistoblog.com">Mephisto Drax</generator>
  <link href="http://www.act-as-newbie.com/feed/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://www.act-as-newbie.com/" rel="alternate" type="text/html"/>
  <updated>2008-06-12T03:35:36Z</updated>
  <entry xml:base="http://www.act-as-newbie.com/">
    <author>
      <name>Rafael Barbosa</name>
    </author>
    <id>tag:www.act-as-newbie.com,2008-06-04:14</id>
    <published>2008-06-04T20:17:00Z</published>
    <updated>2008-06-12T03:35:36Z</updated>
    <category term="jQuery"/>
    <category term="Rails"/>
    <link href="http://www.act-as-newbie.com/2008/6/4/jquery-screencast-00" rel="alternate" type="text/html"/>
    <title>jQuery ScreenCast 00</title>
<content type="html">
            &lt;p&gt;Esse é o primeiro! Eu sei que demorou mas esse é o piloto e o piloto é sempre mais difícil!&lt;/p&gt;


	&lt;p&gt;Versão em &lt;strong&gt;flash&lt;/strong&gt;:&lt;/p&gt;


&amp;lt;object height=&quot;382&quot; width=&quot;507&quot;&gt;    &amp;lt;param /&gt;    &amp;lt;param /&gt;    &amp;lt;param /&gt;    &amp;lt;embed src=&quot;http://www.vimeo.com/moogaloop.swf?clip_id=1119312&amp;amp;amp;server=www.vimeo.com&amp;amp;amp;show_title=1&amp;amp;amp;show_byline=1&amp;amp;amp;show_portrait=0&amp;amp;amp;color=ff9933&amp;amp;amp;fullscreen=1&quot; height=&quot;382&quot; width=&quot;507&quot;&gt;&amp;lt;/embed&gt;&amp;lt;/object&gt;

	&lt;p&gt;Download do &lt;strong&gt;.mov&lt;/strong&gt; original, qualidade melhor:  &lt;a href=&quot;http://act-as-newbie.com/screencasts/jquery01.mov&quot;&gt;jQuery, screencast 00 &#8211; Isso é só um piloto!!&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Como não tem código funcional ainda nem vou postar nada, aguardem o episódio 01 que será bem melhor e mais completo que esse =)&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;PS: Por favor critiquem a vontade, eu sou muito novato nisso e preciso de idéias pra melhorar \o/&lt;/em&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.act-as-newbie.com/">
    <author>
      <name>Rafael Barbosa</name>
    </author>
    <id>tag:www.act-as-newbie.com,2008-05-29:12</id>
    <published>2008-05-29T14:19:00Z</published>
    <updated>2008-05-29T19:00:44Z</updated>
    <category term="jQuery"/>
    <link href="http://www.act-as-newbie.com/2008/5/29/jquery-1-introdu-o" rel="alternate" type="text/html"/>
    <title>jQuery - 1 - Introdu&#231;&#227;o</title>
<content type="html">
            &lt;p&gt;Bom, eu não vou ensinar o básico do básico do aqui, então eu vou começar isso partindo do princípio que você já saiba programar em JavaScript.&lt;/p&gt;


	&lt;h3&gt;Javascript e a não-obtrusividade&lt;/h3&gt;


	&lt;p&gt;Bom, eu não encontrei uma palavra adequada na nossa língua para traduzir  o termo &lt;strong&gt;unobtrusive&lt;/strong&gt; então eu traduzi livremente como não-obtrusivo.&lt;/p&gt;


	&lt;p&gt;Certamente se você (ou o designer da sua equipe) é preocupado com web standarts e coisas do tipo você não costuma misturar &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt;, CSS e JavaScript, essa separação física garante apenas organização, a não-obtrusão vai um pouco além, e prega que essas 3 partes devem interagir mas não ser &lt;span class=&quot;caps&quot;&gt;DEPENDENTES&lt;/span&gt; umas das outras (o html sendo a excessão, sem ele você não tem nada).&lt;/p&gt;


	&lt;p&gt;Por exemplo, se eu deletar meu css, eu continuo com um &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; funcional, que pode ser feio, ter a navegação difícil, mas funciona.&lt;/p&gt;


	&lt;p&gt;Sendo assim temos &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; definindo &lt;em&gt;o que são&lt;/em&gt; os elementos da página, o &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; definindo &lt;em&gt;como eles serão apresentados&lt;/em&gt; e o JavaScript &lt;em&gt;como eles deverão se &lt;strong&gt;comportar&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;E essa é a chave: &lt;em&gt;comportamento&lt;/em&gt;,  é isso que devemos fazer com nossos arquivos.js adicionar &lt;em&gt;comportamento&lt;/em&gt; às partes dos nossos sistemas que já são funcionais sem ele(lembra da independência?).&lt;/p&gt;


	&lt;p&gt;Devemos sempre lembrar uma coisa, JavaScript é uma &lt;em&gt;melhoria&lt;/em&gt; e não uma funcionalidade segura. Devemos usar JavaScript apenas para melhorar funcionalidades que já existam na nossa aplicação, assim garantimos a operabilidade do nosso sistema mesmo sob condições desfavoráveis, como browsers de celular, por exemplo.&lt;/p&gt;


	&lt;p&gt;Resumindo:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;&lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt;&lt;/strong&gt; O que são meus elementos? O que eu quero mostrar?&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;&lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt;&lt;/strong&gt;  Como eu vou mostrar isso? Qual é minha estratégia de apresentação?&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;JavaScript&lt;/strong&gt; Como eu faço meus elementos, definidos no html e “vestidos” pelo css ganharem comportamento?&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;(Eu sei que eu falo muito, tente não se irritar, exemplos aparecerão em breve =) )&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.act-as-newbie.com/">
    <author>
      <name>Rafael Barbosa</name>
    </author>
    <id>tag:www.act-as-newbie.com,2008-05-29:11</id>
    <published>2008-05-29T13:45:00Z</published>
    <updated>2008-05-29T13:46:16Z</updated>
    <category term="jQuery"/>
    <link href="http://www.act-as-newbie.com/2008/5/29/jquery-porque" rel="alternate" type="text/html"/>
    <title>jQuery, porque?</title>
<content type="html">
            &lt;p&gt;Ontem eu ouvi a pergunta: &lt;a href=&quot;http://jquery.com&quot;&gt;jQuery&lt;/a&gt; é muito melhor que &lt;a href=&quot;http://www.prototypejs.org/&quot;&gt;Prototype&lt;/a&gt;?
Bom, a resposta a essa pergunta é a mesma que você dá quando te perguntam, Java é melhor que C#? Depende!&lt;/p&gt;


	&lt;p&gt;Depende do que você quer, do que você precisa e do que você gosta.&lt;/p&gt;


	&lt;p&gt;Eu andei pesquisando &lt;a href=&quot;http://www.domassistant.com/slickspeed/&quot;&gt;alguns benchmarks&lt;/a&gt; para embasar esse post e pelo que eu pude ver o desempenho das duas frameworks é bem parecido, com uma pequena vantagem para o prototype. Então velocidade não é um fator de decisão aqui.&lt;/p&gt;


	&lt;p&gt;Outra coisa, se você precisa de funcionalidades extras. Como novos helpers para arrays, strings, numbers e etc. Fique com o prototype. O jquery não tanta funcionalidade assim.&lt;/p&gt;


	&lt;p&gt;Ok, o prototype é mais rápido e tem mais coisas, Rafael, então porque diabos jQuery? É simples, é uma preferência &lt;strong&gt;pessoal&lt;/strong&gt;. Eu acho muito mais bonito se trabalhar com jQuery, acho que o código final fica muito mais limpo, elegante e fácil de entender. E pra matar a pau, jQuery, assim como Ruby, é divertido de se trabalhar.  Por conta disso &lt;strong&gt;eu&lt;/strong&gt; uso jQuery!&lt;/p&gt;


	&lt;p&gt;Essa pergunta sobre ser melhor ou pior me deixou com a pulga atrás da orelha, por isso que estou fazendo esse discurso todo, a partir daqui eu vou começar a postar uma série de tutoriais sobre como ser feliz usando jQuery, entretanto, a idéia aqui é apresentar &lt;strong&gt;um&lt;/strong&gt; jeito de se fazer as coisas. Sem jamais negar que existam outros ou afirmar que este é o melhor de todos.&lt;/p&gt;


	&lt;p&gt;Vamos ao que interessa!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.act-as-newbie.com/">
    <author>
      <name>Rafael Barbosa</name>
    </author>
    <id>tag:www.act-as-newbie.com,2008-05-23:10</id>
    <published>2008-05-23T13:07:00Z</published>
    <updated>2008-05-29T19:43:51Z</updated>
    <link href="http://www.act-as-newbie.com/2008/5/23/ufa" rel="alternate" type="text/html"/>
    <title>Ufa!</title>
<content type="html">
            &lt;p&gt;Bom, finalmente esse blog tá estável de novo. As turbulências foram por conta da troca de servidor.
Eu saí da TeHospedo e tô num vps cedido gentilmente pela galera da Fireho. Um agradecimento especial ao Marcos Augusto que me deu uma grande força na transição.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.act-as-newbie.com/">
    <author>
      <name>Rafael Barbosa</name>
    </author>
    <id>tag:www.act-as-newbie.com,2008-05-14:8</id>
    <published>2008-05-14T20:34:00Z</published>
    <updated>2008-06-12T03:07:31Z</updated>
    <category term="Ruby"/>
    <link href="http://www.act-as-newbie.com/2008/5/14/bacon-pedacudo" rel="alternate" type="text/html"/>
    <title>Bacon peda&#231;udo?!</title>
<content type="html">
            &lt;p&gt;&lt;img src=&quot;http://www.act-as-newbie.com/assets/2008/5/14/the.foxes-4g.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


	&lt;p&gt;Galera o &lt;a href=&quot;http://www.akitaonrails.com&quot;&gt;Fábio Akita&lt;/a&gt; declarou iniciada a &#8220;tradução em comunidade&#8221; do livro &lt;a href=&quot;http://poignantguide.net/ruby/&quot;&gt;Why&#8217;s (Poignant) Guide to Ruby&lt;/a&gt;  que talvez não seja o melhor livro sobre ruby, mas com certeza é o mais divertido.&lt;/p&gt;


	&lt;p&gt;Para participar é só entrar na &lt;a href=&quot;http://github.com/carlosbrando/poignant-br/tree/master&quot;&gt;página do projeto no github&lt;/a&gt; e fazer um fork.&lt;/p&gt;


	&lt;p&gt;Ah sim, cadastre-se no &lt;a href=&quot;http://groups.google.com/group/whys-poignant-guide-to-ruby---portugues&quot;&gt;grupo&lt;/a&gt;&#8221; para ter acesso a planilha de tradutores, acrescente seu nomezinho lá &lt;strong&gt;antes&lt;/strong&gt; de começar a traduzir pra evitar que duas pessoas traduzam o mesmo capítulos (são 86, tem pra todo mundo).&lt;/p&gt;


	&lt;p&gt;Depois que você traduziu um (ou mais) capítulos, é só mandar um pull request pro &lt;a href=&quot;http://www.nopmedojogo.com.br&quot;&gt;Carlos Brando&lt;/a&gt; que assim que ele ver ele junta seu código lá.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.act-as-newbie.com/">
    <author>
      <name>Rafael Barbosa</name>
    </author>
    <id>tag:www.act-as-newbie.com,2008-05-08:6</id>
    <published>2008-05-08T21:29:00Z</published>
    <updated>2008-05-20T03:36:46Z</updated>
    <category term="Windows"/>
    <link href="http://www.act-as-newbie.com/2008/5/8/cores-no-console-do-windows" rel="alternate" type="text/html"/>
    <title>Cores no console do windows</title>
<content type="html">
            &lt;p&gt;Se você já viu algum screencast sobre rails feito em um mac (quase todos eles) viu o output do script/server todo colorido.&lt;/p&gt;


	&lt;p&gt;Se vc tentar no windows a maravilha que vai ser apresentada a você é assim:
(as imagens se foram na mudança)
Não é bonito né?
Mas ele pode ficar um pouco melhor, não passa nem perto de um terminal de mac com anti-aliasing ligado, mas é melhor que essa loucura que mal dá pra entender.&lt;/p&gt;


Você vai precisar da gem win32console
&lt;pre class=&quot;twilight&quot;&gt;
gem install win32console
&lt;/pre&gt;
Depois basta acrescentar isso ao &lt;strong&gt;environment.rb&lt;/strong&gt;
&lt;pre class=&quot;twilight&quot;&gt;
&lt;span class=&quot;Keyword&quot;&gt;begin&lt;/span&gt;
  &lt;span class=&quot;Keyword&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;Win32/Console/ANSI&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;Variable&quot;&gt;PLATFORM&lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;=~&lt;/span&gt; &lt;span class=&quot;StringRegexp&quot;&gt;&lt;span class=&quot;StringRegexp&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;StringRegexp&quot;&gt;win32&lt;/span&gt;&lt;span class=&quot;StringRegexp&quot;&gt;&lt;span class=&quot;StringRegexp&quot;&gt;/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Keyword&quot;&gt;rescue&lt;/span&gt; &lt;span class=&quot;Variable&quot;&gt;LoadError&lt;/span&gt;
  &lt;span class=&quot;Keyword&quot;&gt;raise&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;Você precisa da gem win32console para usar cor no windows!&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Keyword&quot;&gt;end&lt;/span&gt;
&lt;/pre&gt;
Olha como fica melhor:
(as imagens se foram na mudança)
          </content>  </entry>
  <entry xml:base="http://www.act-as-newbie.com/">
    <author>
      <name>Rafael Barbosa</name>
    </author>
    <id>tag:www.act-as-newbie.com,2008-05-06:3</id>
    <published>2008-05-06T18:08:00Z</published>
    <updated>2008-05-07T12:58:11Z</updated>
    <link href="http://www.act-as-newbie.com/2008/5/6/5-dicas" rel="alternate" type="text/html"/>
    <title>Dicas</title>
<content type="html">
            &lt;p&gt;Bom, a minha idéia inicial era publicar isso aqui em inglês (e com as 5 dicas necessárias) pra participar do concurso da RailsCasts, mas eu acabei me enrolando com outras coisas e não consegui postar a tempo. Sendo assim eu vou postar as 3 dicas que eu já tinha escrito, assim o trabalho não será perdido =)&lt;/p&gt;


	&lt;h2&gt;#1 &#8211; respond_to com jQuery&lt;/h2&gt;


	&lt;p&gt;Eu apesar de não desgostar do Prototype, sou fã do jQuery e sempre que posso uso ele nos meus projetos. Como o suporte no Rails ainda é ao prototype você perde algumas funcionalidades quando troca de biblioteca.
Existe um plugin chamado &lt;a href=&quot;http://ennerchi.com/projects/jrails&quot;&gt;jRails&lt;/a&gt; que faz a substituição da framework usada nos helpers de javascript. Pra quem quer usa eles, é a melhor alternativa, mas talvez você não precise de todos eles, ou como no meu caso precise apenas que o respont_to funcione e a solução é muito mais simples do que parece.&lt;/p&gt;


	&lt;p&gt;No &lt;strong&gt;final&lt;/strong&gt; do application.js insira&lt;/p&gt;


&lt;pre class=&quot;twilight&quot;&gt;
jQuery.ajaxSetup({ 
  &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;Entity&quot;&gt;beforeSend&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;: &lt;span class=&quot;Entity&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;Variable&quot;&gt;xhr&lt;/span&gt;) {
      xhr.&lt;span class=&quot;SupportFunction&quot;&gt;setRequestHeader&lt;/span&gt;(&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;Accept&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;text/javascript&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
  } 
})
&lt;/pre&gt;

	&lt;h2&gt;#2 &#8211; Foreign Key Migrations&lt;/h2&gt;


&lt;p&gt;Esse plugin da RedHillsOnRails cria as constraints de foreign keys no banco de dados a partir das migrations, nada mais de execução direta de sql.
Para instalar:&lt;/p&gt;
&lt;pre class=&quot;twilight&quot;&gt;
ruby script/plugin install http://redhillonrails.rubyforge.org/svn/trunk/vendor/plugins/redhillonrails_core
ruby script/plugin install http://redhillonrails.rubyforge.org/svn/trunk/vendor/plugins/foreign_key_migrations
&lt;/pre&gt;

	&lt;p&gt;A partir daí ele vai criar as constraints sozinho, se você quiser um controle mais fino, o &lt;a href=&quot;http://www.redhillonrails.org/foreign_key_migrations.html&quot;&gt;site deles&lt;/a&gt; é recheado de exemplos.&lt;/p&gt;


	&lt;h2&gt;#3 &#8211; &lt;span class=&quot;caps&quot;&gt;UTF&lt;/span&gt;-8 mysql vs. postgresql&lt;/h2&gt;


	&lt;p&gt;Essa aqui é bem simples e específica.
O encoding utf-8 tem nomes diferentes para os dois bancos de dados.&lt;/p&gt;


No database.yml
&lt;pre class=&quot;twilight&quot;&gt;
&lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt;mysql&lt;/span&gt;
  &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;MetaTagInline&quot;&gt;encoding&lt;span class=&quot;MetaTagInline&quot;&gt;:&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;utf8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt;postgresql&lt;/span&gt;
  &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;MetaTagInline&quot;&gt;encoding&lt;span class=&quot;MetaTagInline&quot;&gt;:&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;UTF-8&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
          </content>  </entry>
  <entry xml:base="http://www.act-as-newbie.com/">
    <author>
      <name>Rafael Barbosa</name>
    </author>
    <id>tag:www.act-as-newbie.com,2008-04-28:2</id>
    <published>2008-04-28T16:42:00Z</published>
    <updated>2008-04-30T13:23:42Z</updated>
    <category term="seguran&#231;a"/>
    <link href="http://www.act-as-newbie.com/2008/4/28/senhas-salgadas" rel="alternate" type="text/html"/>
    <title>Senhas salgadas</title>
<content type="html">
            &lt;p&gt;Eu sou do mundo &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt;, onde encontrar sistemas que mantém nossas senhas abertas ao mundo no banco de dados é quase lugar comum. Quando algum programador um pouquinho mais ajuizado passava pela equipe as vezes eu encontrava um md5(&#8216;senha&#8217;); no meio do caminho. Isso melhorava a situação, mas ainda deixava muito a desejar. Em rails o pessoal costuma usar &lt;span class=&quot;caps&quot;&gt;SHA1&lt;/span&gt;, que apesar de mais avançado que md5, possui uma vulnerabilidade comum a todos os sistemas de criptografica simples: as Rainbow Tables.&lt;/p&gt;


	&lt;p&gt;[Quem quiser saber o que são e como funcionam as rainbow tables, eu aconselho uma olhadinha na &lt;a href=&quot;http://en.wikipedia.org/wiki/Rainbow_table&quot;&gt;wikipedia&lt;/a&gt; , e &lt;a href=&quot;http://www.codinghorror.com/blog/archives/000949.html&quot;&gt;nesse blog&lt;/a&gt; .]&lt;/p&gt;


	&lt;p&gt;Existe uma forma bem simples de se contornar isso. E ela não é nada nova, segundo &lt;a href=&quot;http://www.matasano.com/log/958/enough-with-the-rainbow-tables-what-you-need-to-know-about-secure-password-schemes/&quot;&gt;esse&lt;/a&gt; especialista essa implementação existe dentro do Unix desde 1976!&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Qual é a grande sacada?&lt;/strong&gt;&lt;br /&gt;
A idéia é adicionar uma string aleatória à senha antes de criptografá-la e salvá-la no banco de dados. Essa string costuma ser chamada de &#8216;salt&#8217; (sal, em português) e apesar de não impossibilitar completamente o uso das rainbow tables, torna-o difícil o suficiente para garantir seu sono.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;&#8220;Salgando&#8221; models&lt;/strong&gt;&lt;br /&gt;
Eu retirei o código a seguir do livro do &lt;span class=&quot;caps&quot;&gt;DHH&lt;/span&gt; que eu citei antes, foi o exemplo mais simples e fácil de entender que eu achei.&lt;/p&gt;


&lt;em&gt;Criando o salt&lt;/em&gt;
&lt;pre class=&quot;twilight&quot;&gt;
&lt;span class=&quot;Keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;Entity&quot;&gt;create_new_salt&lt;/span&gt;
    &lt;span class=&quot;Variable&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;Entity&quot;&gt;salt&lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Variable&quot;&gt;self&lt;/span&gt;.&lt;span class=&quot;Entity&quot;&gt;object_id&lt;/span&gt;.&lt;span class=&quot;Entity&quot;&gt;to_s&lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;+&lt;/span&gt; rand.&lt;span class=&quot;Entity&quot;&gt;to_s&lt;/span&gt;
&lt;span class=&quot;Keyword&quot;&gt;end&lt;/span&gt;
&lt;/pre&gt;

	&lt;p&gt;Nesse exemplo usamos o id do objeto mais uma string aleatória para gerar o nosso sal. Qualquer coisa vale aqui. Com o salt em mãos, basta criptografar a senha usando ele e salvar ambos (a senha criptografada e o salt limpo) no banco.&lt;/p&gt;


&lt;em&gt;Para retornar a senha utilize&lt;/em&gt;
&lt;pre class=&quot;twilight&quot;&gt;
&lt;span class=&quot;Keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;Entity&quot;&gt;self.encrypted_password&lt;/span&gt;(&lt;span class=&quot;Variable&quot;&gt;password&lt;span class=&quot;Variable&quot;&gt;,&lt;/span&gt; salt&lt;/span&gt;)
    string_to_hash &lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt; password &lt;span class=&quot;Keyword&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;wibble&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;+&lt;/span&gt; salt &lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt; 'wibble makes it harder to guess&lt;/span&gt;
    &lt;span class=&quot;Support&quot;&gt;Digest&lt;/span&gt;::&lt;span class=&quot;Entity&quot;&gt;SHA1&lt;/span&gt;.&lt;span class=&quot;Entity&quot;&gt;hexdigest&lt;/span&gt;(string_to_hash)
&lt;span class=&quot;Keyword&quot;&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;em&gt;Aquele &#8220;wibble&#8221; ali no meio também pode ser qualquer coisa, ele aumenta &#8220;um pouquinho&#8221; a dificuldade de um ataque ser bem sucedido.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;
Essa solução é extremamente simples, tanto que ela é apresentada em um dos livros mais &#8220;hands-on&#8221; de rails que existem, mesmo assim eu ainda sou surpreendido todos os dias ao saber que &#8220;sistema X ou Y&#8221; ainda usa md5 puro para criptografia, isso quando usam alguma coisa.

	&lt;p&gt;Vamos cuidar mais da segurança dos nossos usuários ;)&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.act-as-newbie.com/">
    <author>
      <name>Rafael Barbosa</name>
    </author>
    <id>tag:www.act-as-newbie.com,2008-04-27:1</id>
    <published>2008-04-27T22:37:00Z</published>
    <updated>2008-04-27T22:40:28Z</updated>
    <category term="about"/>
    <category term="come&#231;o"/>
    <link href="http://www.act-as-newbie.com/2008/4/27/come-o" rel="alternate" type="text/html"/>
    <title>Come&#231;o</title>
<content type="html">
            Olá cidadão, seja bem vindo!

O intuito desse blog é compartilhar o conhecimento que eu for adquirindo conforme me aventuro no mundo rails.
Não tem muito além disso.

Let the games begin...
          </content>  </entry>
</feed>
