<?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>Refatorando Padrões</title>
	<atom:link href="http://www.refatorandopadroes.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.refatorandopadroes.com.br</link>
	<description>Programação orientada às melhores práticas</description>
	<lastBuildDate>Mon, 03 Sep 2007 12:40:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Todos os dados na sessão, afinal memória é infinita</title>
		<link>http://www.refatorandopadroes.com.br/2007/09/03/todos-os-dados-na-sessao-afinal-memoria-e-infinita/</link>
		<comments>http://www.refatorandopadroes.com.br/2007/09/03/todos-os-dados-na-sessao-afinal-memoria-e-infinita/#comments</comments>
		<pubDate>Mon, 03 Sep 2007 12:40:10 +0000</pubDate>
		<dc:creator>Carlos</dc:creator>
				<category><![CDATA[Anti-patterns]]></category>
		<category><![CDATA[Boa prática]]></category>
		<category><![CDATA[Padrões]]></category>

		<guid isPermaLink="false">http://www.refatorandopadroes.com.br/2007/09/03/todos-os-dados-na-sessao-afinal-memoria-e-infinita/</guid>
		<description><![CDATA[O título é brincadeira, mas reflete bem a realidade, é muito comum encontrar aplicações web que simplesmente acreditam que todos os dados podem ser guardados na sessão. Que a medida que os usuários tem sua sessão invalidada, o garbage collector irá cuidar de destruir tudo.
Este tipo de problema não existiria se a aplicação fosse usada [...]]]></description>
			<content:encoded><![CDATA[<p>O título é brincadeira, mas reflete bem a realidade, é muito comum encontrar aplicações web que simplesmente acreditam que todos os dados podem ser guardados na sessão. Que a medida que os usuários tem sua sessão invalidada, o garbage collector irá cuidar de destruir tudo.</p>
<p>Este tipo de problema não existiria se a aplicação fosse usada por alguns poucos usuários. Tentem imaginar centenas de atendentes de telemarketing, trabalhando continuamente, entrando em todas as telas possíveis do sistema, executando todo o tipo de ações, e em cada ação mais e mais dados na sessão que somente serão retirados após 6 horas de jornada de trabalho (ou pelo menos deveriam ser 6 horas perante a lei trabalhista, não vou entras nestes detalhes =D). Mas e aí, nestas condições, quanto tempo até chegarmos a um OutOfMemory ?</p>
<p>É muito fácil colocar algo na sessão, por exemplo a lista de cidades de um estado, se a intenção é ajudar no desempenho, esta é a pior estratégia que se pode escolher. Para isso que existem excelentes técnicas de caching e várias bibliotecas que as implementam, a qual garantirá que existe apenas uma única lista em cache para qualquer usuário, além de implementar o padrão <a href="http://pt.wikipedia.org/wiki/Observer" title="Design pattern Observer">Observer</a> para possíveis alterações na lista.</p>
<p>Claro que não estou dizendo que devemos banir o uso de sessões, muito pelo contrário, devemos usá-la, mas tome o cuidado de gerenciar o conteúdo. Um meio simples de se fazer isso é controlar todas as requisições via <a href="http://java.sun.com/products/servlet/Filters.html" title="Servlet Filter API">Servlet Filter</a> em Java ou <a href="http://api.rubyonrails.com/classes/ActionController/Filters/ClassMethods.html" title="Rails Filter">Filters</a> em Rails, colocando/retirando dados conforme a necessidade.</p>
<p>Tão ruim quanto já colocar tudo na sessão é utilizar péssimas chaves, por exemplo:</p>
<div class="igBar"><span id="ljava-2"><a href="#" onclick="javascript:showPlainTxt('java-2'); return false;">Trocar para texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVA:</span>
<div id="java-2">
<div class="java">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">session.<span style="color: #006600;">setAttribute</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"customerId"</span>, id<span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Não sabemos de onde veio isso, para onde vai e pior ainda, alguma outra ação pode sobrescrever este valor. Sem uma identificação correta, nem um controle com filtros vai ajudá-lo.</p>
<p>Pensem duas vezes antes de usar o escopo session, em boa parte dos casos usar os escopos page e request é suficiente, analisem cada situação, vai tomar pouquíssimo tempo e cada bit de memória economizado é bem vindo. Há o velho pensamento: "Depois faço um profiling para eliminar alguns gargalos", isto só irá trazer várias dores de cabeça em um código session-macarrônico.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refatorandopadroes.com.br/2007/09/03/todos-os-dados-na-sessao-afinal-memoria-e-infinita/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como uma mudança de cor me ajudou na usabilidade e a não refazer um layout</title>
		<link>http://www.refatorandopadroes.com.br/2007/08/09/como-uma-mudanca-de-cor-me-ajudou-na-usabilidade-e-a-nao-refazer-um-layout/</link>
		<comments>http://www.refatorandopadroes.com.br/2007/08/09/como-uma-mudanca-de-cor-me-ajudou-na-usabilidade-e-a-nao-refazer-um-layout/#comments</comments>
		<pubDate>Thu, 09 Aug 2007 13:09:40 +0000</pubDate>
		<dc:creator>Carlos</dc:creator>
				<category><![CDATA[Boa prática]]></category>
		<category><![CDATA[Usabilidade]]></category>

		<guid isPermaLink="false">http://www.refatorandopadroes.com.br/2007/08/09/como-uma-mudanca-de-cor-me-ajudou-na-usabilidade-e-a-nao-refazer-um-layout/</guid>
		<description><![CDATA[Quem diria que um layout pré-aprovado pelo cliente seria sumariamente rejeitado na entrega do layout final. Atônito, já pensava em refazê-lo. É dura a vida de freelancer, nem posso pedir a um estagiário que refaça =D.
Antes de recomeçar, é sempre importante parar e pensar: "Onde está o erro, qual o problema desse layout ?", pense [...]]]></description>
			<content:encoded><![CDATA[<p>Quem diria que um layout pré-aprovado pelo cliente seria sumariamente rejeitado na entrega do layout final. Atônito, já pensava em refazê-lo. É dura a vida de freelancer, nem posso pedir a um estagiário que refaça =D.</p>
<p>Antes de recomeçar, é sempre importante parar e pensar: "Onde está o erro, qual o problema desse layout ?", pense como seu cliente, como ele gosta de ver sites e como é o seu público. Foi exatamente o que fiz, percebi que o meu cliente e também o público alvo do website possuem pelo menos mais de 45 anos e segundo suas próprias palavras "Este site parece coisa de gente jovem!"</p>
<p>Voltando no tempo, nas aulas de <a href="http://pt.wikipedia.org/wiki/Ihc" title="Interface Humano Computador">IHC</a> da faculdade, minha professora já tinha dito "Com o passar dos anos as pessoas vão ficando mais sensíveis às cores, portanto o vermelho que vemos hoje não é o mesmo que veremos amanhã, por isso os idosos acabam preferindo cores mais opacas", claro que há exceções, sempre existem idosos radicais =D</p>
<p>Na verdade o website não parecia muito de gente jovem, o problema foram as cores usadas que tinham tonalidades fortes para alguém mais velho.</p>
<p>Pois bem, lembrando disso minha alteração foi apenas abrir o <abbr title="Cascading Style Sheets">CSS</abbr> e diminuir as tonalidades das cores, deixa-as mais opacas e enviei ao cliente.</p>
<p>SUCESSO! Layout aprovado com honras. Nem perceberam que era o mesmo layout...</p>
<p>Portanto entendam seu cliente, pensem como ele, somente o cliente é capaz de fornecer dicas valiosas sobre o público alvo, depois disso façam o website pensando nesse público alvo. O conteúdo é a parte mais importante de um website, dedique sempre muito mais horas a isto mas não se esqueça da embalagem. Pensar em uma cor parece uma coisa boba, mas me salvou horas de retrabalho.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refatorandopadroes.com.br/2007/08/09/como-uma-mudanca-de-cor-me-ajudou-na-usabilidade-e-a-nao-refazer-um-layout/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Deixe que o Apache processe todos os recursos estáticos</title>
		<link>http://www.refatorandopadroes.com.br/2007/08/06/deixe-que-o-apache-processe-todos-os-recursos-estaticos/</link>
		<comments>http://www.refatorandopadroes.com.br/2007/08/06/deixe-que-o-apache-processe-todos-os-recursos-estaticos/#comments</comments>
		<pubDate>Mon, 06 Aug 2007 12:02:25 +0000</pubDate>
		<dc:creator>Carlos</dc:creator>
				<category><![CDATA[Boa prática]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://www.refatorandopadroes.com.br/2007/08/06/deixe-que-o-apache-processe-todos-os-recursos-estaticos/</guid>
		<description><![CDATA[Pagamos barato ao contratar um serviço de hospedagem em servidor compartilhado, mas também pagamos caro se não criarmos um aplicação enxuta. Por mais simples que seja cada requisição no servidor utiliza ciclos do processador e memória, se não tomarmos cuidado o servidor irá gentilmente matar nosso processo para o bem das demais aplicações.
Recentemente tive problemas [...]]]></description>
			<content:encoded><![CDATA[<p>Pagamos barato ao contratar um serviço de hospedagem em servidor compartilhado, mas também pagamos caro se não criarmos um aplicação enxuta. Por mais simples que seja cada requisição no servidor utiliza ciclos do processador e memória, se não tomarmos cuidado o servidor irá gentilmente matar nosso processo para o bem das demais aplicações.</p>
<p>Recentemente tive problemas com um website na <a href="http://www.dreamhost.com/r.cgi?287823/hosting.html" target="_blank">Dreamhost</a>, o processo estava sendo sumariamente assassinado, a princípio estranhei, por ser uma aplicação simples em Rails e era feito cache de boa parte das páginas. Uma conversa com o suporte técnico e me disseram que o website em questão estava gastando muita memória.</p>
<p>Cinco minutos depois o Google (sempre ele <img src='http://www.refatorandopadroes.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ) já tinha uma solução para o meu caso. Eu simplesmente esqueci que existe o <a href="http://pt.wikipedia.org/wiki/Servidor_Apache" target="_blank">Apache</a> para servir minha aplicação web. Para variar, bastaria alterar o bom e velho .htaccess. Estava acontecento o seguinte: todas as requisições de imagens, pdfs, htmls estáticos, rhtml, etc,... tudo que fosse estático ou dinâmico era processado pelo fastcgi em Ruby, que é claro fica dedicado a minha aplicação e possui um limite de memória para não prejudicar o servidor.</p>
<p>Com isso bastou algumas alterações no .htaccess para dizer ao Apache que cuide de processar todas as requisições de recursos estáticos:</p>
<p>RewriteCond %{REQUEST_URI} ^/images/(.*)$<br />
RewriteCond %{REQUEST_URI} ^/javascripts/(.*)$<br />
RewriteCond %{REQUEST_URI} ^/stylesheets/(.*)$<br />
RewriteCond %{REQUEST_URI} ^/*.txt$<br />
RewriteCond %{REQUEST_URI} ^/*.xml$<br />
RewriteCond %{REQUEST_URI} ^/*.pdf$</p>
<p>E o problema foi resolvido, acompanhei os processos no servidor via ssh durante alguns dias e o uso de memória tinha diminuido assustadoramente, com isso tive tempo para estudar alguns outros detalhes para melhorar a aplicação.</p>
<p>Não tenho muita experiência em fazer melhorias no .htaccess, estejam a vontade para apontar outras melhorias.</p>
<p>E é isso, vou aproveitar e fazer uma propaganda da <a href="http://www.dreamhost.com/r.cgi?287823/hosting.html" target="_blank">Dreamhost</a> a qual até hoje só tenho elogios, muito eficientes e gentis no suporte, além do preço camarada e muita banda. A quem estiver interessado em criar uma conta por lá e ganhar um desconto de até 97 dólares, podem utilizar meu código de promoção: <a href="http://www.dreamhost.com/r.cgi?287823/hosting.html" target="_blank"><strong>REFATORANDO</strong></a>. Que me desculpem aqueles que acham que blog não deveria ter propaganda, nada na vida é de graça ^_^</p>
<p>Uma boa semana a todos!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refatorandopadroes.com.br/2007/08/06/deixe-que-o-apache-processe-todos-os-recursos-estaticos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Usabilidade em preenchimento de formulário complexos</title>
		<link>http://www.refatorandopadroes.com.br/2007/07/30/usabilidade-em-preenchimento-de-formulario-complexos/</link>
		<comments>http://www.refatorandopadroes.com.br/2007/07/30/usabilidade-em-preenchimento-de-formulario-complexos/#comments</comments>
		<pubDate>Mon, 30 Jul 2007 11:44:09 +0000</pubDate>
		<dc:creator>Carlos</dc:creator>
				<category><![CDATA[Padrões]]></category>
		<category><![CDATA[Usabilidade]]></category>

		<guid isPermaLink="false">http://www.refatorandopadroes.com.br/?p=7</guid>
		<description><![CDATA[    Continuando com o assunto do artigo anterior, vou procurar demonstrar como um layout de formulário complexo pode alcançar melhor usabilidade com simples mudanças de posicionamento dos campos e rótulos (labels).
Suponhamos este exemplo de formulário abaixo.

Detalhe importante: o formulário acima não parece complexo pois é um pequeno exemplo com alguns campos para [...]]]></description>
			<content:encoded><![CDATA[<p>    Continuando com o assunto do <a href="http://www.refatorandopadroes.com.br/2007/07/23/usabilidade-em-preencimento-de-pequenos-formularios/" rel="nofollow" title="Usabilidade em preenchimento de pequenos formulários">artigo anterior</a>, vou procurar demonstrar como um layout de formulário complexo pode alcançar melhor usabilidade com simples mudanças de posicionamento dos campos e rótulos (labels).</p>
<p>Suponhamos este exemplo de formulário abaixo.</p>
<p><a href="http://www.refatorandopadroes.com.br/wp-content/uploads/2007/07/usability-3.png" title="Exemplo de formulário complexo não reestilizado"><img src="http://www.refatorandopadroes.com.br/wp-content/uploads/2007/07/usability-3.png" alt="Exemplo de formulário complexo não reestilizado" /></a></p>
<p>Detalhe importante: o formulário acima não parece complexo pois é um pequeno exemplo com alguns campos para ajudar no entendimento do artigo, seria inútil criar um enorme cadastro sendo que o importante é o princípio que vou demonstrar =D.</p>
<p>Antes de criar o layout de um formulário desse tipo, devemos nos fazer duas perguntas:</p>
<p><strong>É um formulário que o usuário irá utilizar constantemente ?</strong></p>
<p>Se a resposta for sim então imaginem um típico trabalhador de almoxarifado, ele recebe várias notas fiscais todos os dias para dar entrada no sistema, ele já conhece de cabo a rabo, na sequência, todos os campos a serem digitados. Ou seja, o formulário fica melhor se for cada campo e rótulo em uma linha, exatamente como no <a href="http://www.refatorandopadroes.com.br/2007/07/23/usabilidade-em-preencimento-de-pequenos-formularios/" rel="nofollow" title="Usabilidade em preenchimento de pequenos formulários">artigo anterior</a>, para que ele faça tudo sempre na mesma sequência. Automatize isso na mente dele.</p>
<p>Se a resposta for não então voltemos ao exemplo do formulário acima. Vamos supor que ele esteja disponível ao público. Nesse caso, o formato tem que ser mais defensivo, deixar a pessoa informada sobre o que é preciso para preenchê-lo. Exemplo remodelado:</p>
<p><a href="http://www.refatorandopadroes.com.br/wp-content/uploads/2007/07/usability-4.png" title="Exemplo de formulário complexo reestilizado"><img src="http://www.refatorandopadroes.com.br/wp-content/uploads/2007/07/usability-4.png" alt="Exemplo de formulário complexo reestilizado" /></a></p>
<p>Cada rótulo e campo juntos ocupam uma linha sozinhos, todos os rótulos no mesmo alinhamento à esquerda, assim como os campos. O que vai acontecer aqui é o seguinte, o usuário vai prestar atenção primeiro no que está escrito nos rótulos. Indo de cima para baixo ele irá ler "nome, rg, cic, etc" sem dar a mínima atenção para os campos. Por consequência, ele irá se preparar para o preenchimento deles e até mesmo pensar: "preciso dos meus documentos antes de começar". Aí sim, ele volta ao início de tudo, presta atenção no rótulo na esquerda e preenche o campo na direita, desce uma linha e prossegue assim até o fim, na mesma sequência de movimentação dos olhos.</p>
<p>Se tivesse utilizado o esquema de layout do <a href="http://www.refatorandopadroes.com.br/2007/07/23/usabilidade-em-preencimento-de-pequenos-formularios/" rel="nofollow" title="Usabilidade em preenchimento de pequenos formulários">artigo anterior</a>, a pessoa ia ter a leitura dos rótulos atrapalhada pelos campos, e não se "preparia" para o preenchimento, esse "preparo" forçado é bom pois o usuário nunca viu este formulário.</p>
<p>Há um espaço em branco entre cada rótulo e campo, procurem minimizar este espaço não colocando rótulos de comprimento muito desiguais, pois atrapalharia a concentração na leitura da esquerda para direita.</p>
<p><strong>É um formulário que pode ser agrupado em formulários menores ?</strong></p>
<p>No exemplo, observem que podemos agrupar os campos:</p>
<p><a href="http://www.refatorandopadroes.com.br/wp-content/uploads/2007/07/usability-5.png" title="Exemplo de formulário complexo reestilizado e agrupado"><img src="http://www.refatorandopadroes.com.br/wp-content/uploads/2007/07/usability-5.png" alt="Exemplo de formulário complexo reestilizado e agrupado" /></a></p>
<p>Em um grupo temos os dados pessoais e em outro grupo temos os dados de usuário. É muito importante fazer essa separação, mantêm o usuário focado em um pequeno assunto dentro do formulário. Procurem colocar uma demarcação visual para separar estes agrupamentos, sem nunca esquecer as regras de posicionamento dos campos, mesmo nestes formulários menores, mantenham um padrão.</p>
<p>Claro que podemos ajudar ainda mais, é imprescindível colocar pequenas dicas e ajudas de preenchimento, mas nosso foco aqui no artigo é posicionamento dos objetos no formulário, fica para um futuro artigo falar sobre estes pequenos auxílios visuais.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refatorandopadroes.com.br/2007/07/30/usabilidade-em-preenchimento-de-formulario-complexos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Usabilidade em preencimento de pequenos formulários</title>
		<link>http://www.refatorandopadroes.com.br/2007/07/23/usabilidade-em-preencimento-de-pequenos-formularios/</link>
		<comments>http://www.refatorandopadroes.com.br/2007/07/23/usabilidade-em-preencimento-de-pequenos-formularios/#comments</comments>
		<pubDate>Mon, 23 Jul 2007 12:43:49 +0000</pubDate>
		<dc:creator>Carlos</dc:creator>
				<category><![CDATA[Padrões]]></category>
		<category><![CDATA[Usabilidade]]></category>

		<guid isPermaLink="false">http://www.refatorandopadroes.com.br/?p=27</guid>
		<description><![CDATA[Usabilidade para mim era o mesmo que design, nunca me importei com a melhoria delas no sentido de ajudar o usuário. O tempo passou e fui percebendo as dificuldades encontradas até mesmo em preenchimentos de formulários simples. Na minha arrogância, imaginei que fosse problema das pessoas em se adaptarem ao sistema, até que Jakob Nielsen [...]]]></description>
			<content:encoded><![CDATA[<p>Usabilidade para mim era o mesmo que design, nunca me importei com a melhoria delas no sentido de ajudar o usuário. O tempo passou e fui percebendo as dificuldades encontradas até mesmo em preenchimentos de formulários simples. Na minha arrogância, imaginei que fosse problema das pessoas em se adaptarem ao sistema, até que <a href="http://en.wikipedia.org/wiki/Jakob_Nielsen_%28usability_consultant%29" title="Sobre Jakob Nielsen" target="_blank">Jakob Nielsen</a> finalmente <a href="http://www.useit.com/jakob/webusability" title="Designing Web Usability">abriu meus olhos</a>.</p>
<p>Vejamos um exemplo:</p>
<p><a href="http://www.refatorandopadroes.com.br/wp-content/uploads/2007/07/usability-1.png" title="Exemplo usabilidade"><img src="http://www.refatorandopadroes.com.br/wp-content/uploads/2007/07/usability-1.png" alt="Exemplo usabilidade" /></a></p>
<p>Parece um inocente formulário, dados simples e fáceis de serem preenchidos, mas por um momento tente mentalmente preencher este formulário. Normalmente nossos olhos vão de cima para baixo, da esquerda para direita, mas por algumas vezes voltamos para  verificar se preenchemos os dados anteriores e quando terminamos essa verificação temos que lembrar onde paramos. Mesmo após preencher tudo não sabemos exatamente onde focar nossa atenção.</p>
<p>É muito comum encontrarmos formulários assim, o designer tenta preencher todos os buracos vazios na tela, criar uma estética simétrica, sem pensar que o usuário irá interagir com esses campos.</p>
<p>As normas da usabilidade recomendam a forma abaixo para expor os campos para preenchimento:</p>
<p><a href="http://www.refatorandopadroes.com.br/wp-content/uploads/2007/07/usability-2.png" title="Exemplo de usabilidade em formulário (correto)"><img src="http://www.refatorandopadroes.com.br/wp-content/uploads/2007/07/usability-2.png" alt="Exemplo de usabilidade em formulário (correto)" /></a></p>
<p>A mudança é simples, cada campo e rótulo (label) ocupa sozinho uma linha, o usuário fará apenas uma única leitura de cima para baixo, sem chances de dispersar os olhos. Ele lê o rótulo, preenche o campo e segue para o rótulo seguinte até chegar no botão enviar. Muito mais rápido para preenchimento, o usuário foca em uma única informação por vez.</p>
<p>Claro que ficou um buraco branco no formulário, mas se formos criativos no design, o buraco branco será facilmente disfarçado.</p>
<p>Lembrem-se, quanto mais rápido e fácil um usuário preencher um formulário, mais chance temos que ele compre nossos produtos =D. Preencher formulários é tedioso, se o usuário sentir que é difícil continuar com o preenchimento ele não vai pedir ajuda para a atendente online, vai simplesmente comprar no site do concorrente. Sempre que possível procurem fazer um teste com pessoas não técnicas para preenchimento de seus formulários.</p>
<p>O que demonstrei acima é válido para formulários rápidos e comuns, como preenchimento de endereço. Para formulários mais complexos a recomendação é outra, no próximo post vou continuar com esta explicação.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refatorandopadroes.com.br/2007/07/23/usabilidade-em-preencimento-de-pequenos-formularios/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>The way of Testivus, um pequeno e gratuito ensinamento sobre testes</title>
		<link>http://www.refatorandopadroes.com.br/2007/06/22/the-way-of-testivus-um-pequeno-e-gratuito-ensinamento-sobre-testes/</link>
		<comments>http://www.refatorandopadroes.com.br/2007/06/22/the-way-of-testivus-um-pequeno-e-gratuito-ensinamento-sobre-testes/#comments</comments>
		<pubDate>Fri, 22 Jun 2007 11:30:22 +0000</pubDate>
		<dc:creator>Carlos</dc:creator>
				<category><![CDATA[Padrões]]></category>
		<category><![CDATA[Testes]]></category>

		<guid isPermaLink="false">http://www.refatorandopadroes.com.br/?p=24</guid>
		<description><![CDATA[Como de costume estava lendo vários posts via Google Reader (infelizmente também abandonei o Bloglines devido a vários incômodos bugs), quando me deparei com este post
O livro para download gratuito é simplesmente  simples e simpático e o modo como TDD é mostrado encanta.
Não entendo a insistência de muitos programadores em não criar testes, o [...]]]></description>
			<content:encoded><![CDATA[<p>Como de costume estava lendo vários posts via Google Reader (infelizmente também abandonei o Bloglines devido a vários incômodos bugs), quando me deparei com este <a href="http://searchsoftwarequality.techtarget.com/general/0,295582,sid92_gci1261688,00.html" title="The way of Testivus" target="_blank">post</a></p>
<p>O livro para <a href="http://www.refatorandopadroes.com.br/wp-content/uploads/2007/06/thewayoftestivus.pdf" title="The way of Testivus">download gratuito</a> é simplesmente  simples e simpático e o modo como <a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank"><acronym title="Test Driven Development">TDD</acronym></a> é mostrado encanta.</p>
<p>Não entendo a insistência de muitos programadores em não criar testes, o tempo que se gasta agora criando testes vai impedir que vários erros e transtornos com o cliente surjam no futuro, o custo é muito menor agora.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refatorandopadroes.com.br/2007/06/22/the-way-of-testivus-um-pequeno-e-gratuito-ensinamento-sobre-testes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Separando Javascript do HTML até demais</title>
		<link>http://www.refatorandopadroes.com.br/2007/06/18/separando-javascript-do-html-ate-demais/</link>
		<comments>http://www.refatorandopadroes.com.br/2007/06/18/separando-javascript-do-html-ate-demais/#comments</comments>
		<pubDate>Mon, 18 Jun 2007 14:02:04 +0000</pubDate>
		<dc:creator>Carlos</dc:creator>
				<category><![CDATA[Boa prática]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://www.refatorandopadroes.com.br/?p=22</guid>
		<description><![CDATA[É interessante notar como alguns programadores seguem padrões com afinco, até as últimas consequências, onde houver código lá está ele impondo todos os padrões possíveis. Existe a boa prática em separar comportamento e apresentação, no caso de páginas HTML, os arquivos javascript são o comportamento e os arquivos CSS a apresentação, e o HTML faz [...]]]></description>
			<content:encoded><![CDATA[<p>É interessante notar como alguns programadores seguem padrões com afinco, até as últimas consequências, onde houver código lá está ele impondo todos os padrões possíveis. Existe a boa prática em separar comportamento e apresentação, no caso de páginas HTML, os arquivos javascript são o comportamento e os arquivos CSS a apresentação, e o HTML faz uso de ambos, como pode ser observado <a href="http://www.standardsforlife.com/standards-in-a-nutshell">aqui</a>.</p>
<p>Observem o exemplo:</p>
<div class="igBar"><span id="lhtml-6"><a href="#" onclick="javascript:showPlainTxt('html-6'); return false;">Trocar para texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">HTML:</span>
<div id="html-6">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">&lt;input</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"button"</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">"botão"</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"meuBotao"</span> <span style="color: #000066;">onclick</span>=<span style="color: #ff0000;">"meuEventoAqui()"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Algo que tem-se pregado por aí é retirar o totalmente o Javascript do HTML, ou seja, o exemplo acima ficaria assim:</p>
<div class="igBar"><span id="lhtml-7"><a href="#" onclick="javascript:showPlainTxt('html-7'); return false;">Trocar para texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">HTML:</span>
<div id="html-7">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">&lt;input</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"button"</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"meuBotao"</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">"botão"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>E teríamos um arquivo .js com o seguinte código para ligar o evento onclick do button:</p>
<div class="igBar"><span id="ljavascript-8"><a href="#" onclick="javascript:showPlainTxt('javascript-8'); return false;">Trocar para texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-8">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">function</span> ligacaoDeEventos<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> botao = document.<span style="color: #006600;">getElementById</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'meuBotao'</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; botao.<span style="color: #006600;">onclick</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; finalmenteMeuEventoAqui<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;window.<span style="color: #000066;">onload</span> = ligacaoDeEventos; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Puxa vida, toda essa volta só para não usar a propriedade onclick no HTML e se livrar totalmente do Javascript, isso vale a pena ?</p>
<p>Há vários motivos para que eu não concorde com isso:</p>
<ul>
<li>Mais código para dar manutenção, foram criadas várias linhas de javascript para algo que funcionaria no primeiro exemplo usando a propriedade onclick da tag input.</li>
<li>E quando eu quiser saber qual evento o button aciona, será fácil de achar ? Podem haver vários objetos na página, todos com seus eventos ligados apenas no momento do onload da página. Vários objetos é igual a várias linhas de código javascript com as ligações, se você estiver usando um editor de textos comum, bem... boa sorte, e mesmo com uma IDE não é tão simples assim.</li>
<li>A propriedade onclick, onkeypress, etc faz parte da especificação HTML, justamente para facilitar isso, porque iria deixar de usá-los ?</li>
</ul>
<p>Então muito cuidado ao seguir padrões ao extremo, questione-os, cada um tem o seu lugar e hora certa.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refatorandopadroes.com.br/2007/06/18/separando-javascript-do-html-ate-demais/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Refatorar é melhorar e reaproveitar código, não tenha medo</title>
		<link>http://www.refatorandopadroes.com.br/2007/06/04/refatorar-e-melhorar-e-reaproveitar-codigo-nao-tenha-medo/</link>
		<comments>http://www.refatorandopadroes.com.br/2007/06/04/refatorar-e-melhorar-e-reaproveitar-codigo-nao-tenha-medo/#comments</comments>
		<pubDate>Mon, 04 Jun 2007 15:35:47 +0000</pubDate>
		<dc:creator>Carlos</dc:creator>
				<category><![CDATA[Boa prática]]></category>
		<category><![CDATA[Padrões]]></category>

		<guid isPermaLink="false">http://www.refatorandopadroes.com.br/?p=21</guid>
		<description><![CDATA[Não sei se um dia vou entender qual o medo das pessoas em aceitar mudanças, ainda mais em pessoas da área de informática. Elas são inevitáveis, é a evolução. Quando chega o momento em que deve-se alterar código que já está funcionando, é praticamente um "parto" convencer outros de que isso é bom.
Martin Fowler, em [...]]]></description>
			<content:encoded><![CDATA[<p>Não sei se um dia vou entender qual o medo das pessoas em aceitar mudanças, ainda mais em pessoas da área de informática. Elas são inevitáveis, é a evolução. Quando chega o momento em que deve-se alterar código que já está funcionando, é praticamente um "parto" convencer outros de que isso é bom.</p>
<p><a href="http://www.martinfowler.com">Martin Fowler</a>, em seu famoso livro <a href="http://www.martinfowler.com/books.html#refactoring">Refactoring: Improving the design of Existing Code</a> (em português "Refatoração: Aperfeiçoando o Projeto de Código Existente"), já dizia que refatorar é: "modificar um sistema de modo que seu comportamento não se altere, mas que sua arquitetura melhore, fique mais limpa". Um dos meus livros prediletos, praticamente livro de cabeceira. Inúmeras técnicas de como melhorar seu código.</p>
<p>É muito comum encontrarmos código duplicado, e mais comum ainda observar que o programador não reaproveitou o código porque precisava refatorá-lo, por puro medo de "quebrar" outra parte do  sistema. Oras, pra isso existe <a href="http://en.wikipedia.org/wiki/Test-driven_development">TDD (Test Driven Development)</a>, se criássemos testes não haveria nenhum medo em quebrar outras partes do sistema, as quebras seriam imediatamente visíveis. E refatorar ficou ainda muito mais simples com as IDEs atuais, qualquer uma possui mecanismos poderosos para auxiliar esta tarefa.</p>
<p>Refatorar nosso código, mesmo código antigo, constitui menos manutenção no futuro, pois refatorar é também diminuir a complexidade e quantidade de código. As partes duplicadas no sistema, se contiverem quaisquer erro ou necessidade de mudança na regra de negócios, vai realmente tirar seu sono, pois obviamente nunca sabemos onde estão as cópias. Uma regra de negócio ou erro poderia ter sido resolvido com uma única "martelada" no lugar certo em um código "enxuto".</p>
<p>Então sem medo de refatorar, você não está perdendo tempo agora, está na verdade economizando tempo de manutenção.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refatorandopadroes.com.br/2007/06/04/refatorar-e-melhorar-e-reaproveitar-codigo-nao-tenha-medo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax é técnica para desempenho, use com parcimônia.</title>
		<link>http://www.refatorandopadroes.com.br/2007/05/22/ajax-e-tecnica-para-desempenho-use-com-parcimonia/</link>
		<comments>http://www.refatorandopadroes.com.br/2007/05/22/ajax-e-tecnica-para-desempenho-use-com-parcimonia/#comments</comments>
		<pubDate>Tue, 22 May 2007 16:19:38 +0000</pubDate>
		<dc:creator>Carlos</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://www.refatorandopadroes.com.br/?p=20</guid>
		<description><![CDATA[Da técnica AJAX, o que sempre noto é que as pessoas a amam de coração ou odeiam até a morte, não há um meio termo.
Os que odeiam, normalmente já odeiam Javascript também, e odeiam ainda mais quando os que amam exageram absurdamente no uso da técnica, conseguem fazer o site ficar inutilizável, uma usabilidade de [...]]]></description>
			<content:encoded><![CDATA[<p>Da técnica <a href="http://en.wikipedia.org/wiki/AJAX">AJAX</a>, o que sempre noto é que as pessoas a amam de coração ou odeiam até a morte, não há um meio termo.</p>
<p>Os que odeiam, normalmente já odeiam Javascript também, e odeiam ainda mais quando os que amam exageram absurdamente no uso da técnica, conseguem fazer o site ficar inutilizável, uma usabilidade de dar medo, o teclado simplesmente não serve mais. E não me venham falar pra usar o mouse pois usabilidade é para todos os dispositivos. E o motivo principal de usar AJAX (desempenho), foi esquecido a muito tempo.</p>
<p>Dou certa razão para os que odeiam, a usabilidade é item prioritário na construção de um website, de que adianta ser lindo se não conseguimos utilizá-lo. Existem padrões web, utilize-os sempre na medida das possibilidades. Antes perder em semântica do que usabilidade.</p>
<p>Mas vamos lembrar primeiro que AJAX não é um framework, tecnologia, API ou biblioteca. AJAX é uma técnica que pode envolver o uso de várias tecnologias (Javascript, XML, DOM, etc), e pra espanto de vários, foi iniciativa da Microsoft, a própria criou o objeto <a href="http://en.wikipedia.org/wiki/XMLHttpRequest">XMLHttpRequest</a>, responsável pelas requisições assíncronas, embora seja uma técnica que pode ser alcançada usando iFrames também.</p>
<p>Desempenho! Afinal banda de internet é cara, os serviços de hospedagem no Brasil que o digam... AJAX serve para melhorar o desempenho para todos, seja do sobrecarregado servidor ou do usuário que ainda utiliza modem (sem piadas, 53% dos internautas brasileiros ainda utilizam modem). Um bom exemplo de uso da técnica pode ser vista no sistema de creditar do <a href="http://infoblogs.com.br">Infoblogs</a>, um simples clique e pronto lá foi o crédito, sem precisar que a página seja renderizada novamente para atualizar uma única tag, simples e ótimo para todos.</p>
<p>Agora um péssimo exemplo é quando temos mega formulários em alguns sites e o submit é uma chamada usando AJAX. Se não utilizar um framework decente, isso dá um trabalho enorme para implementar. E o que ganhamos com isso ? Mais manutenção, o ganho de desempenho é minúsculo. Os vários dados do formulário terão que ser enviados de qualquer forma, todo um processo de parse deve ser feito via javascript e parse de dados é algo que o próprio browser já faz naturalmente ao fazer o submit, ou seja, apenas processando à toa.</p>
<p>Então devemos pesar bem quando utilizar a técnica, pode até ser para algo bonitinho, mas vale mesmo a pena ganhar mais manutenção ? Pense sempre em desempenho e não perca a usabilidade de vista.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refatorandopadroes.com.br/2007/05/22/ajax-e-tecnica-para-desempenho-use-com-parcimonia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Uma documentação padronizada garante novos usuários em qualquer framework</title>
		<link>http://www.refatorandopadroes.com.br/2007/05/14/uma-documentacao-padronizada-garante-novos-usuarios-em-qualquer-framework/</link>
		<comments>http://www.refatorandopadroes.com.br/2007/05/14/uma-documentacao-padronizada-garante-novos-usuarios-em-qualquer-framework/#comments</comments>
		<pubDate>Mon, 14 May 2007 14:08:14 +0000</pubDate>
		<dc:creator>Carlos</dc:creator>
				<category><![CDATA[Boa prática]]></category>
		<category><![CDATA[Padrões]]></category>

		<guid isPermaLink="false">http://www.refatorandopadroes.com.br/?p=19</guid>
		<description><![CDATA[Vejo muitos que programam perfeitamente, orientado a objetos, seguindo padrões a risca. Comentam entusiasticamente em fóruns sobre seus novos frameworks, linguagens e bibliotecas, querem é claro, angariar novos adeptos. De fato, boa parte desses projetos são maravilhosos em suas descrições, isso quando há uma descrição...
O ponto onde quero chegar é que na maioria dos projetos [...]]]></description>
			<content:encoded><![CDATA[<p>Vejo muitos que programam perfeitamente, orientado a objetos, seguindo padrões a risca. Comentam entusiasticamente em fóruns sobre seus novos frameworks, linguagens e bibliotecas, querem é claro, angariar novos adeptos. De fato, boa parte desses projetos são maravilhosos em suas descrições, isso quando há uma descrição...</p>
<p>O ponto onde quero chegar é que na maioria dos projetos que vejo, a documentação é escassa, não há tutoriais ou documentação sequer no código fonte.</p>
<p>Quanto a documentação em código, eu reconheço o que <a href="http://blog.interface21.com/main/author/rodj/">Rod Johnson</a>, criador do <a href="http://www.springframework.org/">Spring</a>, sabiamente afirmou em seu célebre livro <a href="http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764543857.html">Expert One-on-One J2EE Design and Development</a>, um código bem escrito, seguindo padrões claros, sem classes, métodos ou variáveis obscuros, não necessita de documentação, o código fala por si, qualquer programador olha e entende sem medo, mas isso serve somente para quem participa do projeto.</p>
<p>O problema é que ninguém está interessado em olhar dúzias e dúzias de classes para entender como usar. São necessários tutoriais e documentação farta para que consigamos manter alguém usando o que criamos, por melhor que ela seja.</p>
<p>O criador se desespera, óbvio que para muitos é maçante documentar código, mas é necessário, e não é preciso escrever duas vezes, uma em código e outra em documentação pública. São muitas as ferramentas que resolvem o problema. Mas lembre-se que é necessário documentar seguindo padrões, para o pessoal de Java, use JavaDoc, embora limitado/criticado por muitos, é muito fácil de ser utilizado, quantos já não recorreram a documentação do JDK, alguém teria a paciência de ter lido o código ? Eu já tive que ler código várias vezes em muitos frameworks sem documentação, sendo que um mero comentário explicativo na documentação da classe teria resolvido o problema rapidamente.</p>
<p>Eu não sou muito fã da Microsoft, mas tenho que dar o braço a torcer, felizes os usuários do <a href="http://msdn2.microsoft.com/en-us/library/aa155073.aspx">MSDN</a>, quando necessito tirar uma dúvida quanto ao uso de CSS, HTML, ou outras áreas relacionadas, vou direto nele, tudo bem explicado e com ótimos exemplos. A Microsoft pode até não abrir o código fonte de suas ferramentas, mas ela compensa muito bem isso fornecendo aos seus usuários toda a documentação necessária para utilizá-la.</p>
<p>Então na próxima vez que alguém reclamar que seu framework é complicado, para e pense um pouco? "Será que tenho bons tutoriais e documentação ? Será que descrevi de forma concisa o que ele faz ?". Não espere que o usuário simplesmente baixe e fique tentando adivinhar como usar, não o chame de estúpido, o código do framework/biblioteca é simples para você que criou.</p>
<p>O usuário terá que perder um tempo precioso estudando, e a não ser que seja algo revolucionário, existem alternativas para vários frameworks/bibliotecas. Temos que aprender a cada dia, cada vez mais, não temos tempo a perder tentando adivinhar o que foi codificado. Queremos algo claro e rápido, bem documentado, para finalmente decidir se vale a pena investir tempo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.refatorandopadroes.com.br/2007/05/14/uma-documentacao-padronizada-garante-novos-usuarios-em-qualquer-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
