<?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>Blog do PacMan &#187; Dicas</title>
	<atom:link href="http://pacman.blog.br/blog/tag/dicas/feed/" rel="self" type="application/rss+xml" />
	<link>http://pacman.blog.br/blog</link>
	<description>Varias Coisas, por Tiago Peczenyj</description>
	<lastBuildDate>Thu, 15 Jul 2010 02:04:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Sempre defina a forma de abertura de arquivos</title>
		<link>http://pacman.blog.br/blog/dicas/sempre-defina-a-forma-de-abertura-de-arquivos/</link>
		<comments>http://pacman.blog.br/blog/dicas/sempre-defina-a-forma-de-abertura-de-arquivos/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 21:26:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[base64]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/dicas/sempre-defina-a-forma-de-abertura-de-arquivos/</guid>
		<description><![CDATA[Linguagens script tornam tudo muito facil. Codificar uma informação para base64, por exemplo, pode ser feito assim: require 'base64' data = &#34;Now is the time for all good coders\nto learn Ruby&#34; Base64.b64encode&#40;data&#41; Entretanto se vc quer processar o conteudo de &#8230; <a href="http://pacman.blog.br/blog/dicas/sempre-defina-a-forma-de-abertura-de-arquivos/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Linguagens script tornam tudo muito facil. Codificar uma informação para base64, por exemplo, pode ser feito assim:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">   <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'base64'</span>
   data = <span style="color:#996600;">&quot;Now is the time for all good coders<span style="color:#000099;">\n</span>to learn Ruby&quot;</span>
   <span style="color:#CC00FF; font-weight:bold;">Base64</span>.<span style="color:#9900CC;">b64encode</span><span style="color:#006600; font-weight:bold;">&#40;</span>data<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Entretanto se vc quer processar o conteudo de um arquivo, vale um cuidado extra: definir a forma de abertura dos arquivos.</p>
<p>Por exemplo, eu posso fazer isso</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">   <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'base64'</span>
   data = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'imagem.jpg'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">read</span>
   <span style="color:#CC00FF; font-weight:bold;">Base64</span>.<span style="color:#9900CC;">b64encode</span><span style="color:#006600; font-weight:bold;">&#40;</span>data<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Se eu estou desenvolvendo no linux, para mim o resultado é coerente. Eu ficaria feliz (sem sacanagem) se fosse o caso de desenvolver um software que rodasse exclusivamente nesse sistema operacional. As vezes não é bem assim&#8230;</p>
<p>Ruby é um bom exemplo de uma linguagem que permite desenvolver software multi-plataforma, entretanto é muito facil atrapalhar o interpretador (afinal, quem nunca teve problema com uma referência a um arquivo &#8220;C:\xxx&#8221;?). No exemplo real que eu passei, bastaria informar o modo &#8216;rb&#8217; (r de read, b de binary) para o comando open que eu teria o mesmo comportamento em todas as plataformas.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">   <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'base64'</span>
   data = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'imagem.jpg'</span>,<span style="color:#996600;">'rb'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">read</span>
   <span style="color:#CC00FF; font-weight:bold;">Base64</span>.<span style="color:#9900CC;">b64encode</span><span style="color:#006600; font-weight:bold;">&#40;</span>data<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>É claro que este tipo de comportamento pode ser verificado através de uma suite de testes em todas as plataformas-alvo, entretanto vale de alerta para estudarmos um pouco as caracteristicas das apis e bibliotecas nas diferentes plataformas (não adianta, desenvolver software signfica estudar constantemente).</p>
<p>Para terminar, vejamos esta <a href="http://mail.python.org/pipermail/python-bugs-list/2006-April/032911.html">thread</a>:</p>
<blockquote><p>Summary: open should default to binary mode on windows</p>
<p>Initial Comment:<br />
On windows the open() function defaults to reading<br />
files in text mode.  To get a binary mode file I need<br />
to append a &#8220;b&#8221; to the mode string.  I think this is an<br />
unnessary platform inconsistency.  Twice now I&#8217;ve had<br />
hard to track down bugs because I was reading a file in<br />
text mode and should have been using binary.  This is a<br />
wart, IMO.</p></blockquote>
<p>Ou seja, muita gente, em diferentes linguagens, vai enfrentar o mesmo problema de achar que o open, pode padrão, vai abrir o arquivo em modo binario. A origem disso é <a href="http://www.felgall.com/cplus4.htm">antiga</a> e não vai desaparecer de uma hora para outra.</p>
<p>Por fim, vale lembrar que o conceito de &#8216;nova linha&#8217; é diferente de acordo com o sistema operacional, no unix é \n enquanto no windows é \r\n. Também é antigo e remonta a epoca de impressoras matriciais, DOS e por ai vai. É o tipo da coisa que, pela lei de murphy, vai sacanear a gente quando menos esperamos.</p>
<p>Obrigado ao <a href="http://rafaelspereira.wordpress.com">Rafael</a> por ter visto este detalhe comigo tarde da noite.</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/dicas/sempre-defina-a-forma-de-abertura-de-arquivos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Adicionando Funcionalidades a um Sistema em Produção</title>
		<link>http://pacman.blog.br/blog/dicas/adicionando-funcionalidades-a-um-sistema-em-producao/</link>
		<comments>http://pacman.blog.br/blog/dicas/adicionando-funcionalidades-a-um-sistema-em-producao/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 23:04:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dicas]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/?p=70</guid>
		<description><![CDATA[Por mais de uma vez eu tive que adicionar certas funcionalidades em sistemas que ja estavam em produção. É uma tarefa arriscada pois o serviço não pode parar por algum erro que vc esta introduzindo, ainda mais se este mesmo &#8230; <a href="http://pacman.blog.br/blog/dicas/adicionando-funcionalidades-a-um-sistema-em-producao/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Por mais de uma vez eu tive que adicionar certas funcionalidades em sistemas que ja estavam em produção. É uma tarefa arriscada pois o serviço não pode parar por algum erro que vc esta introduzindo, ainda mais se este mesmo sistema estiver funcionando sem problemas nos ultimos meses ou anos.</p>
<p>Aprendi um truque bem interessante que, pensando bem, é um tanto obvio: ao adicionar uma funcionalidade onde boa parte do codigo ficou inalterada, pode fazer sentido desabilitar esta nova funcionalidade na configuração. Dessa forma se a porção nova de codigo produzir algum problema é possivel &#8211; teoricamente &#8211; minimizar os problemas desabilitando temporariamente esta <em>feature</em>.</p>
<p>Nem sempre isto faz sentido, porém não se trata de esconder a sujeita para debaixo do tapete: é de se esperar uma intensa bateria de testes de regressão alem de testes sobre o codigo novo. Conseguimos ter certeza da situação ao olhar os relatorios de cobertura de código, por exemplo. Esta é mais uma tecnica para evitar problemas em algo ja estabelecido.</p>
<p>Imagine que, no ambiente de produção, a nova feature desenvolve um memory leak, ou a escalabilidade dela não é a esperada? Desabilitar na configuração é menos traumatico do que um rollback na aplicação, mas ainda assim é traumatico. Agora, se vc desabilita e o problema continua isso ja dá pistas de que existe um problema em outro lugar &#8211; por exemplo na propria porção de código legado.</p>
<p>E vc, como adiciona funcionalidade a um sistema em produção?</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/dicas/adicionando-funcionalidades-a-um-sistema-em-producao/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Ah, essa tal de autenticação</title>
		<link>http://pacman.blog.br/blog/dicas/ah-essa-tal-de-autenticacao/</link>
		<comments>http://pacman.blog.br/blog/dicas/ah-essa-tal-de-autenticacao/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 20:28:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dicas]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/?p=9</guid>
		<description><![CDATA[Algumas dicas sobre autenticação, etc. <a href="http://pacman.blog.br/blog/dicas/ah-essa-tal-de-autenticacao/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Estou dando manutenção no site de uma pequena empresa. Anteriormente a atualização era feita enviando um email para o &#8220;webmaster&#8221; responsável que editava os htmls e fazia o upload dos arquivos. Trabalho duro, cobrado por hora inclusive. O estranho é que, numa época em que os programas de cms (Content Management System) são tão bons e gratuitos, algumas pessoas insistem em trabalhar como há 10 anos, onde ter um host no geocities era o máximo (invariavelmente cheio de gifs animados, letras amarelas sobre fundo azul e muitos, mas muitos frames).</p>
<p>Durante a migração para o wordpress descobri uma particularidade: uma parte das novidades do site estavam vindo de outro servidor via iframe. Havia um pequeno cms para noticias, escrito em ASP, em que cada noticia podia ser acessada dessa forma:</p>
<p>http://outrositeexterno.com/xxx/client666/mostraNoticia.aspx?id=9</p>
<p>Como fui testador de software por mais de 4 anos, resolvi brincar um pouco com essa url. Pensei em que mensagens de erro poderiam ser exibidas caso uma noticia de id inexistente fosse requisitada. Coloque lá id=999999999 e mandei bala. Era <strong>pior</strong> do que eu pensava.</p>
<p>Uma interface tosquissima apareceu, mostrando uma listagem de todas as noticias e botões de new, delete, edit estavam presentes. Tive um mal pressentimento. Não é que eu tinha acesso a um CRUD de noticias <strong>sem</strong> precisar de autenticação? Pois é&#8230; e a culpa não é da tecnologia: com certeza é possivel desenvolver sites seguros até com shell-script, basta ter os profissionais adequados (desses que sabem procurar no google).<br />
.</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/dicas/ah-essa-tal-de-autenticacao/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
