<?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>Programadoras</title>
	<atom:link href="http://www.programadoras.com.br/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.programadoras.com.br</link>
	<description>Mulheres programando um mundo melhor</description>
	<lastBuildDate>Wed, 25 Aug 2010 16:12:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Switch java</title>
		<link>http://www.programadoras.com.br/?p=102</link>
		<comments>http://www.programadoras.com.br/?p=102#comments</comments>
		<pubDate>Wed, 25 Aug 2010 16:11:24 +0000</pubDate>
		<dc:creator>melissa</dc:creator>
				<category><![CDATA[Diversos]]></category>

		<guid isPermaLink="false">http://www.programadoras.com.br/?p=102</guid>
		<description><![CDATA[Já ouvi falar que o switch do java deixa muito a desejar, e estou começando a acreditar&#8230; Olhem que interessante&#8230; o codigo abaixo não compila:

public static final Byte VIGENTE   = 1;
public static final Byte HISTORICO = 2;
public static String GetIcone(Byte codSituacao){
      	String img="";
     	switch(codSituacao){
 [...]]]></description>
			<content:encoded><![CDATA[<p>Já ouvi falar que o switch do java deixa muito a desejar, e estou começando a acreditar&#8230; Olhem que interessante&#8230; o codigo abaixo não compila:<br />
<code><br />
public static final Byte VIGENTE   = 1;<br />
public static final Byte HISTORICO = 2;</p>
<p>public static String GetIcone(Byte codSituacao){<br />
      	String img="";<br />
     	switch(codSituacao){<br />
     	case VIGENTE:<br />
     		img="icon_indicar.png";<br />
     		break;<br />
     	case HISTORICO:<br />
     		img="icon_remover1.png";<br />
     		break;<br />
     	}<br />
        return "<img src='"+img+"' border='0'>";<br />
    }</code></p>
<p>No Eclipse aparece a mensagem &#8220;<strong>case expressions must be constants expressions</strong>&#8220;, utilizando o javac dá a mesma coisa.</p>
<p>Agora, utilizando o tipo primitivo, o mesmo codigo funciona, como abaixo:<br />
<code><br />
public static final <strong>byte</strong> VIGENTE   = 1;<br />
public static final <strong>byte</strong> HISTORICO = 2;</p>
<p>public static String GetIcone(Byte codSituacao){<br />
      	String img="";<br />
     	switch(codSituacao){<br />
     	case VIGENTE:<br />
     		img="icon_indicar.png";<br />
     		break;<br />
     	case HISTORICO:<br />
     		img="icon_remover1.png";<br />
     		break;<br />
     	}<br />
        return "<img src='"+img+"' border='0'>";<br />
}</code></p>
<p>Alguem sabe explicar o porque disso? =)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programadoras.com.br/?feed=rss2&amp;p=102</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arredondamento no Java: do double ao BigDecimal</title>
		<link>http://www.programadoras.com.br/?p=100</link>
		<comments>http://www.programadoras.com.br/?p=100#comments</comments>
		<pubDate>Wed, 04 Aug 2010 18:20:53 +0000</pubDate>
		<dc:creator>melissa</dc:creator>
				<category><![CDATA[Diversos]]></category>

		<guid isPermaLink="false">http://www.programadoras.com.br/?p=100</guid>
		<description><![CDATA[Gostei muito deste artigo do Paulo Silveira, por isso resolvi compartilhar:
É fácil se deparar com as limitações do double no Java e na maioria das outras linguagens: quando vamos trabalhar com dinheiro notamos que as contas não estão saindo exatamente como esperávamos:
double d1 = 0.1;
double d2 = 0.2;
System.out.println(d1 + d2);
O resultado é um estranho 0.30000000000000004, [...]]]></description>
			<content:encoded><![CDATA[<p>Gostei muito deste artigo do Paulo Silveira, por isso resolvi compartilhar:</p>
<p>É fácil se deparar com as limitações do double no Java e na maioria das outras linguagens: quando vamos trabalhar com dinheiro notamos que as contas não estão saindo exatamente como esperávamos:</p>
<p><code>double d1 = 0.1;<br />
double d2 = 0.2;<br />
System.out.println(d1 + d2);</code></p>
<p>O resultado é um estranho 0.30000000000000004, que pode acarretar em problemas graves dependendo da utilização e arrendondamento aplicado depois nesse número. O problema é que um número com 0.1 não pode ser representado em binário de maneira finita: ele vira uma dízima (no binário ficaria algo como 0.110011001100…) diferente do número 0.25, que pode ser representado perfeitamente (no binário 0.01). A representação é um pouco mais complicada que isso, a JVM segue o padrão IEEE 754 para trabalhar com números de ponto flutuante.</p>
<p>Como obter o esperado 0.3? A sugestão sempre é usar o BigDecimal. BigDecimal é uma classe que trabalha com números de ponto flutuante de precisão arbitrária: você pode escolher quanto de precisão você quer usar. Por padrão ele vai utilizar o que for necessário, e, diferente do double, ele consegue guardar números como 0.1, pois guardará isto como sendo 1 x 10ˆ-1 (isto é, usando a base decimal em vez de binária, evitando a dízima).</p>
<p><code>// nao use esse construtor:<br />
BigDecimal big1 = new BigDecimal(0.1);<br />
BigDecimal big2 = new BigDecimal(0.2);</p>
<p>System.out.println(big1.add(big2));</code></p>
<p>O resultado é uma nova surpresa, um incrível 0.300000000000000016653345369377&#8230;. O que fizemos de errado agora foi que tentar somar 0.1 e 0.2 sendo que esses dois números já estavam armazenados em memória como double, e, ao serem passados para o construtor do BigDecimal, foram transportados com imprecisão. O próprio javadoc desse construtor diz que “The results of this constructor can be somewhat unpredictable“. Na verdade o resultado é bem previsível pelas suas regras, mas não é o que gostaríamos.</p>
<p>Como resolver? Basta sempre usar o construtor que trabalha com Strings, assim o BigDecimal vai internamente fazer o parsing desses números sem que eles sejam armazenados em um double, evitando os problemas de precisão:</p>
<p><code>// atencao! usando String no construtor:<br />
BigDecimal big1 = new BigDecimal("0.1");<br />
BigDecimal big2 = new BigDecimal("0.2");</p>
<p>System.out.println(big1.add(big2));</code></p>
<p>Finalmente obtendo o resultado esperado. Há ainda importantes observações sobre o BigDecimal: por padrão ele não fará nenhum tipo de arredondamento, o que o obriga a lançar java.lang.ArithmeticException no caso de uma dízima decimal (tentar dividir 1/3 por exemplo). Nesses casos é necessário delimitar a quantidade de bits a serem usados ou escolher o modo de arredondamento:</p>
<p><code>BigDecimal big1 = new BigDecimal("1");<br />
BigDecimal big2 = new BigDecimal("3");</p>
<p>System.out.println(big1.divide(big2, 3, RoundingMode.UP));<br />
</code><br />
Resultando em 0.334. Vale lembrar também da imutabilidade da classe BigDecimal, que traz diversas vantagens mas deve ser usada com cuidado quando diversas operações serão realizadas em cima de um mesmo número dentro de um laço, já que diversos BigDecimals serão instanciados durante a operação, podendo acarretar no mesmo problema de performance do uso de concatenação de Strings. O Donizetti lembrou que esse assunto é bastante discutido no item 48 do Effective Java.</p>
<p>No JavaScript teremos o mesmo problema caso você precise realizar contas no lado do cliente, e aí podemos usar a BigDecimalJS, sugerida pelo Jefferson Girão, que funciona de maneira análoga ao Java.</p>
<p>O Rafael Ferreira lembra que podemos ir além, e como dinheiro é algo pertencente ao nosso domínio e lógica de negócios, criamos uma classe Money para encapsular todo esse comportamento e evitar que RoundingMode, MathContext e escalas se espalhem por todo seu código.</p>
<p>Fonte: http://blog.caelum.com.br/2010/07/15/arredondamento-no-java-do-double-ao-bigdecimal/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programadoras.com.br/?feed=rss2&amp;p=100</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dicas para JasperReports/iReport</title>
		<link>http://www.programadoras.com.br/?p=96</link>
		<comments>http://www.programadoras.com.br/?p=96#comments</comments>
		<pubDate>Mon, 12 Jul 2010 11:00:17 +0000</pubDate>
		<dc:creator>melissa</dc:creator>
				<category><![CDATA[Diversos]]></category>

		<guid isPermaLink="false">http://www.programadoras.com.br/?p=96</guid>
		<description><![CDATA[Estava procurando na internet materiais sobre iReport para me auxiliar num relatório que estou desenvolvendo, e encontrei estas dicas sobre o iReport e decidi compartilhar aqui no meu blog também:
Algumas considerações:
1) cuidado ao dar um nome para salvar o seu relatório no iReport. Apesar da ferramenta não exigir que esse nome seja o mesmo que [...]]]></description>
			<content:encoded><![CDATA[<p>Estava procurando na internet materiais sobre iReport para me auxiliar num relatório que estou desenvolvendo, e encontrei estas dicas sobre o iReport e decidi compartilhar aqui no meu blog também:</p>
<blockquote><p><strong>Algumas considerações:</strong></p>
<p><strong>1)</strong> cuidado ao dar um nome para salvar o seu relatório no iReport. Apesar da ferramenta não exigir que esse nome seja o mesmo que você forneceu ao criar o relatório, o engine Jasper irá usar esse nome, e não o nome do arquivo, para gerar o .jasper e o .jrprint (o default). Por exemplo, se o seu relatório se chama MeuRelatorio, e o arquivo se chama mrelat.jrxml, os arquivos gerados serão MeuRelatorio.jasper e MeuRelatorio.jrprint e não mrelat.jasper nem mrelat.jrprint!</p>
<p><strong>2) </strong>Cuidado com campos cujos valores podem ser grandes. Nas propriedades do campo (duplo clique), selecionar a aba TextField e marcar a opção stretch with overflow. Atenção: na aba common, existe o Stretch type, mas esse tem a ver com a posição relativa às outras colunas e não com o conteúdo do campo.</p>
<p><strong>3) </strong>É possível criar fontes de relatório, que são fontes com características pré-definidas e que depois podem ser usadas por todo o relatório. No iReport, para criar uma fonte nova, ir no menu Visualizar – fontes do relatório, apertando depois o botão new e configurando a fonte. Para usar uma fonte dessas, ir nas propriedades do texto, clicar na aba fonts. O primeiro campo dessa aba é o report fonts, basta escolher.</p>
<p><strong>4)</strong> Uso do printWhenExpression: elementos com essa expressão, só são impressos se a expressão (tipo Boolean) for verdadeira. Um exemplo:</p>
<p>new Boolean ($F{codCliente}).intValue() % 10 == 0)</p>
<p>Faz com que o campo codCliente só seja impresso se for múltiplo de 10.</p>
<p><strong>5) </strong>outro recurso, digamos, avançado é o de scriptlets. Scriptlets são classes que extendem JRAbstractScriptlet ou JRDefaultScriptlet, que extende a anterior. Essas classes servem para implementar algum tipo de cálculo que não os já existentes (soma, média, contagem, etc…). As classes base oferecem métodos que são disparados automaticamente cada vez que um “evento de relatório” acontece. Exemplos: beforeColumnInit(), afterDetailEval(), beforePageInit(), e assim por diante.</p>
<p>Para usar um scriptlet num relatório (aparentemente só é possível usar um), é preciso fornecer o atributo scriptletClass do elemento. Esse elemento é referenciado pela variável REPORT_SCRIPTLET.</p>
<p>No iReport, isso é configurado em visualizar – propriedades do relatório, na aba scriptlet.</p></blockquote>
<p>Fonte: http://rederia.net/2010/04/21/dicas-para-jasperreportsireport/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programadoras.com.br/?feed=rss2&amp;p=96</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bug Javascript</title>
		<link>http://www.programadoras.com.br/?p=88</link>
		<comments>http://www.programadoras.com.br/?p=88#comments</comments>
		<pubDate>Mon, 05 Jul 2010 16:18:34 +0000</pubDate>
		<dc:creator>melissa</dc:creator>
				<category><![CDATA[Diversos]]></category>

		<guid isPermaLink="false">http://www.programadoras.com.br/?p=88</guid>
		<description><![CDATA[Todos que me conhecem sabe que eu simplesmente amo javascript. A maior falha da linguagem (na minha opinião) já foi corrigida com o ajax, que permite o acesso a bancos sem dar o &#8220;chato&#8221; submit.
Imagine uma linguagem de programação em que você só precisa do bloco de notas e um navegador (coisa que todo computador [...]]]></description>
			<content:encoded><![CDATA[<p>Todos que me conhecem sabe que eu simplesmente amo javascript. A maior falha da linguagem (na minha opinião) já foi corrigida com o ajax, que permite o acesso a bancos sem dar o &#8220;chato&#8221; submit.</p>
<p>Imagine uma linguagem de programação em que você só precisa do bloco de notas e um navegador (coisa que todo computador tem) para fazer as mais incríveis e inimagináveis proezas. Nutro paixão pela linguagem porque aprendi a programar com javascript, nos meus idos de 15 anos (época em que não tinha a menor idéia de como fazer um Borland C rodar, ou um Eclipse por exemplo).</p>
<p>Agora, que javascript não é perfeita ninguém discute. Não vou falar neste artigo no fato da linguagem não exigir declaração das variáveis, utilizar apenas o &#8220;var&#8221; para qualquer tipo primitivo, que não é segura, etc&#8230;</p>
<p>O que vou relatar é um bug assutador da linguagem:</p>
<p>Quanto é 1000.28 &#8211; 1000? </p>
<p>Pois é, para o javascript o resultado incrivelmente não é 28!</p>
<p>Ou 0.1 + 0.2?</p>
<p>Não espere um 3 exato!</p>
<p>Faça você mesmo o teste!<br />
<code><br />
&lt;script&gt;<br />
alert(1000.28 - 1000);<br />
alert(0.1 + 0.2);<br />
&lt;/script&gt;<br />
</code></p>
<p>O que acontece é que os &#8220;números em Javascript são representados internamente com 64 bits e cada número pode ter no máximo 17 dígitos significativos&#8221;, palavras de Carlos Brando. </p>
<p>Para mais exempos e explicações, recomendo o blog do Carlos, acessando http://www.nomedojogo.com/2009/08/17/isto-e-um-bug-no-javascript/</p>
<p>Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programadoras.com.br/?feed=rss2&amp;p=88</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>6 x 9 = 42</title>
		<link>http://www.programadoras.com.br/?p=82</link>
		<comments>http://www.programadoras.com.br/?p=82#comments</comments>
		<pubDate>Mon, 21 Jun 2010 10:10:03 +0000</pubDate>
		<dc:creator>melissa</dc:creator>
				<category><![CDATA[Diversos]]></category>

		<guid isPermaLink="false">http://www.programadoras.com.br/?p=82</guid>
		<description><![CDATA[Que a resposta para a vida, o universo e tudo mais é 42 todo mundo sabe (até o google sabe). Mas fiquei bolada com a equação 6 x 9 = 42, que aparece no volume
2 da trilogia de 5 do &#8220;Guia do Moxileiro das Galáxias&#8221; (livro que eu recomendo, incluse consta na lista dos 1001 [...]]]></description>
			<content:encoded><![CDATA[<p>Que a resposta para a vida, o universo e tudo mais é 42 todo mundo sabe (até o google sabe). Mas fiquei bolada com a equação 6 x 9 = 42, que aparece no volume<br />
2 da trilogia de 5 do &#8220;Guia do Moxileiro das Galáxias&#8221; (livro que eu recomendo, incluse consta na lista dos 1001 livros para ler antes de morrer).</p>
<p>Para quem não leu ainda, para entender o significado da pergunta fundamental, os personagens Arthur e Ford estão tentando formular a pergunta correta cujo resultado é 42. Tirando letras feitas em pedras numa toalha ao acaso, o diálogo é o seguinte: </p>
<p><code><br />
– Q– disse Ford–, U, A, L... Qual! Piscou os olhos.<br />
– Acho que está funcionando! – disse. Arthur lhe entregou mais três,<br />
– E, O, R... Eor. Bom, talvez não esteja funcionando – disse Ford.<br />
– Toma mais estas três.<br />
– E, S, U... Eoresu... acho que não está fazendo sentido.<br />
Arthur tirou mais três e depois mais duas. Ford as colocou em seus lugares.<br />
– L, T, A... D, O... Eoresultado... É o resultado! – gritou Ford. – Está funcionando! É fantástico, está funcionando mesmo!<br />
– Tem mais aqui – disse Ford, arrancando-as febrilmente o mais rápido que podia.<br />
– D, E – disse Ford –, S, E, I, S... Qual é o resultado de seis... V, E, Z, E, S... Qual é o resultado de seis vezes... N, O, V, E... seis vezes nove... – fez uma pausa. –Vamos, cadê a próxima?<br />
– Ahn, isso é tudo – disse Arthur –, eram todas que tinha.<br />
Recostou-se, perplexo.<br />
Vasculhou com as pontas dos dedos mais uma vez dentro da toalha mas não havia mais letras.<br />
– Quer dizer que é isso? – disse Ford.<br />
– É isso.<br />
– <strong>Seis vezes nove. Quarenta e dois</strong>.<br />
– É isso. Está tudo aí.</code></p>
<p>Após esse diálogo, o livro não cita mais nada a respeito, os personagens enfrentam outras aventuras no antigo planeta terra.</p>
<p>Muito curiosa, procurei em blogs e foruns de livros mas fiquei frustada por ver que muitos leitores que leram e recomendam a trilogia, sequer citaram esse fato inusitado (ou até mesmo nem notaram, como anda a sua tabuada?).</p>
<p>Cogitei erro de tradução, mas no livro na lingua original está da mesma forma.</p>
<p>Bom, até que um site sério (desciclopedia!) me clareou as ideias e me salvou da escuridão. O que acontece é que a conta é feita em base 13, e não em base decimal. Não, Douglas Adams não errou na conta!</p>
<p>Tanto que se passarmos o resultado de 6 x 9 (54) para base 13 o resultado é exatamente 42 (fiz o teste num coversor de bases, convertworld.com)</p>
<p>Ufa&#8230; muito bom descobrir que não estou ficando louca! Até mais pessoal!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programadoras.com.br/?feed=rss2&amp;p=82</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A culpa é do sistema</title>
		<link>http://www.programadoras.com.br/?p=70</link>
		<comments>http://www.programadoras.com.br/?p=70#comments</comments>
		<pubDate>Mon, 14 Jun 2010 10:36:18 +0000</pubDate>
		<dc:creator>melissa</dc:creator>
				<category><![CDATA[Diversos]]></category>

		<guid isPermaLink="false">http://www.programadoras.com.br/?p=70</guid>
		<description><![CDATA[Olha, já ouvi muita coisa nessa vida, mas na minha opinião a desculpa mais esfarrapada é &#8220;a culpa é do sistema&#8230;&#8221; (a pessoa ainda fala com a cara de um cachorrinho todo coitadinho que não pode fazer nada). Para mostrar minha indignação, resolvi escrever este post.
Imagine a situação, você é contratado para fazer um sistema, [...]]]></description>
			<content:encoded><![CDATA[<p>Olha, já ouvi muita coisa nessa vida, mas na minha opinião a desculpa mais esfarrapada é &#8220;a culpa é do sistema&#8230;&#8221; (a pessoa ainda fala com a cara de um cachorrinho todo coitadinho que não pode fazer nada). Para mostrar minha indignação, resolvi escrever este post.</p>
<p>Imagine a situação, você é contratado para fazer um sistema, faz toda a análise, estuda os requisitos, entrevista clientes e usuários, faz a modelagem, faz o protótipo, discute com o cliente, enfim&#8230; desenvolve o sistema do jeito que o cliente querm, atendento com perfeição às necessidades do cliente.</p>
<p>Aí algum dono de loja ou de estacionamento que não quer dar descontos para um cliente insistente, o que faz? joga a culpa no sistema! ou seja, não é que ele é um mercenário que só pensa no lucro, é que o sistema não permite dar um desconto! </p>
<p>Muita cara de pau não? se o sistema foi feito moldado exatamente para as necessidades do cliente, é a maior desculpa esfarrapada&#8230; e quem fica mau na história somos nós, analistas de sistemas, que somos cruéis e não queremos dar desconto para ninguém.</p>
<p>Pois é, isso é falta de coragem para a pessoa assumir que não vai dar desconto porque é uma política dela ou da empresa, sei lá, mas que o sistema não tem nada a ver com a história&#8230;</p>
<p>Um dia ainda vou ter esse diálogo quando ouvir a famosa desculpa:</p>
<p><code>- Desculpe não fazer isso por voce, o sistema não permite.<br />
- Ah, não tem problema, sou analista de sistemas, é só eu dar uma alterada no código-fonte que o sistema vai permitir tudo que você quiser.<br />
</code><br />
ou então:</p>
<p><code>- Desculpe não fazer isso por voce, o sistema não permite.<br />
- Nossa sério? Vamos fazer o seguinte, já que o sistema é o problema e está engessando tudo, vamos discutir um orçamento para eu desenvolver um sistema melhor. Faço um desconto de 10% para pagamento feito à vista.<br />
</code><br />
Só para chatear o atendente um pouquinho&#8230; afinal, tá na hora de pararem com essa conversa fiada de por a culpa no sistema!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programadoras.com.br/?feed=rss2&amp;p=70</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP x Cookies</title>
		<link>http://www.programadoras.com.br/?p=58</link>
		<comments>http://www.programadoras.com.br/?p=58#comments</comments>
		<pubDate>Tue, 08 Jun 2010 00:33:42 +0000</pubDate>
		<dc:creator>melissa</dc:creator>
				<category><![CDATA[Diversos]]></category>

		<guid isPermaLink="false">http://www.programadoras.com.br/?p=58</guid>
		<description><![CDATA[Cookies nem sempre são recomendados, principalmente porque por serem armazenados no navegador do cliente, o usuário pode desabilitar o cookie ou até mesmo pior, alterar o valor do mesmo. Como o cookie pode ser confiável desse jeito?
Bom, mas tem aplicações em que é inevitável a utilização de cookies. Eu, por exemplo, estou desenvolvendo um sistema [...]]]></description>
			<content:encoded><![CDATA[<p>Cookies nem sempre são recomendados, principalmente porque por serem armazenados no navegador do cliente, o usuário pode desabilitar o cookie ou até mesmo pior, alterar o valor do mesmo. Como o cookie pode ser confiável desse jeito?</p>
<p>Bom, mas tem aplicações em que é inevitável a utilização de cookies. Eu, por exemplo, estou desenvolvendo um sistema onde resumidamente, preciso pegar informações do banco de dados e passar para uma variável javascript, de forma que pelo código fonte não seja possível ver o valor desta informação.</p>
<p>Qual a solução? COOKIES!! Guardo o cookie com o valor confidencial por PHP, direto do banco de dados, e pelo javascript pego o valor do cookie e armazeno numa variável, de forma que ninguém que não acesse meu banco de dados saiba o valor da variável (muito diferente de utilizar os famosos campos &#8220;hidden&#8221;).</p>
<p>Em teste, tudo certo&#8230; e eis que ao passar para produção, claro, tinha que não funcionar direito&#8230; alias essa é uma premissa básica do desenvolvimento de sistemas: não importa o quanto você testa seu programa, ao passar para produção sempre terá um erro desconhecido no qual você perde horas, ou até mesmo dias, estragando de vez seu cronograma de entrega do sistema. (essa é aliás uma das maiores emoções de ser programadora =] )</p>
<p>Após muito mexer e debugar manualmente meu programa (&#8221;debugar&#8221; em php já viu, é um ctrl+c / ctrl+v / echo aqui / echo acolá que não acaba mais), descobri minha salvação! Por algum motivo não identificável (na verdade o que importa mesmo nestes casos é a solução do problema), muito provavelmente diferença de configuração do php, a função setcookie(&#8230;) do php só estava funcionando quando setada antes da TAG &lt;HTML&gt;&#8230; todos os cookies que eram criados após esta tag, em produção não eram criados.</p>
<p>Neste caso, a solução foi colocar logo no início da página, o comando &#8220;ob_start();&#8221; que ativa o output buffering, evitando o erro (que para mim era invisível) &#8220;Warning: Cannot modify header information&#8221;.</p>
<p>Então é isso, para quem for trabalhar com php + cookies, fica aí a dica!</p>
<p><code><br />
&lt;?php<br />
session_start();<br />
ob_start(); // linha milagrosa!<br />
?&gt;<br />
&lt;HTML&gt;<br />
&lt;?<br />
// agora posso criar meus cookies mesmo após a tag HTML<br />
setcookie("cookieDaMelissa", "1000", 0, false);<br />
$nome_do_cookie = "cookieDaMelissa";<br />
if(isset($_COOKIE[$nome_do_cookie]))<br />
  {<br />
     echo "O cookie $nome_do_cookie existe! ";<br />
  }<br />
?&gt;<br />
&lt;HEAD&gt;<br />
....<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.programadoras.com.br/?feed=rss2&amp;p=58</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurando o &#8220;LL&#8221;</title>
		<link>http://www.programadoras.com.br/?p=47</link>
		<comments>http://www.programadoras.com.br/?p=47#comments</comments>
		<pubDate>Mon, 21 Dec 2009 14:24:28 +0000</pubDate>
		<dc:creator>melissa</dc:creator>
				<category><![CDATA[Diversos]]></category>

		<guid isPermaLink="false">http://www.programadoras.com.br/?p=47</guid>
		<description><![CDATA[Neste artigo vou explicar de maneira breve como adicionar o alias para utilizar o ll (ls -lah)
Muita gente já deve ter visto um &#8216;expert&#8217; em linux trabalhando no console listando os arquivos pelo comando &#8216;ll&#8217;, ao invés do tão conhecido &#8216;ls&#8217;. Para poder usar o &#8216;ll&#8217; (no Debian), basta adicionar o alias no ~/.bashrc:
alias ll=&#8217;ls [...]]]></description>
			<content:encoded><![CDATA[<p>Neste artigo vou explicar de maneira breve como adicionar o alias para utilizar o ll (ls -lah)</p>
<p>Muita gente já deve ter visto um &#8216;expert&#8217; em linux trabalhando no console listando os arquivos pelo comando &#8216;ll&#8217;, ao invés do tão conhecido &#8216;ls&#8217;. Para poder usar o &#8216;ll&#8217; (no Debian), basta adicionar o alias no ~/.bashrc:</p>
<blockquote><p>alias ll=&#8217;ls -lah&#8217;</p></blockquote>
<p>Qualquer outro alias pode ser inserido, o limite é a sua imaginação!</p>
<p>Lembre-se: &#8220;O linux se ajusta ao usuário, não usuário que se ajusta ao linux.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programadoras.com.br/?feed=rss2&amp;p=47</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Um pouco de humor&#8230;</title>
		<link>http://www.programadoras.com.br/?p=24</link>
		<comments>http://www.programadoras.com.br/?p=24#comments</comments>
		<pubDate>Mon, 14 Dec 2009 11:00:45 +0000</pubDate>
		<dc:creator>melissa</dc:creator>
				<category><![CDATA[Cotidiano]]></category>
		<category><![CDATA[Diversos]]></category>

		<guid isPermaLink="false">http://www.programadoras.com.br/?p=24</guid>
		<description><![CDATA[Para os viciados em notebook (como eu), um pouco de humor vai bem:


=)
]]></description>
			<content:encoded><![CDATA[<p>Para os viciados em notebook (como eu), um pouco de humor vai bem:<br />
<br/></p>
<p style="text-align: center;"><img class="size-full wp-image-26 aligncenter" title="Humor" src="http://www.programadoras.com.br/wp-content/uploads/2009/12/notebookpiada.jpg" alt="Piada" width="500" height="439" /></p>
<p>=)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programadoras.com.br/?feed=rss2&amp;p=24</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello world from Melissa!</title>
		<link>http://www.programadoras.com.br/?p=1</link>
		<comments>http://www.programadoras.com.br/?p=1#comments</comments>
		<pubDate>Tue, 08 Dec 2009 14:31:58 +0000</pubDate>
		<dc:creator>melissa</dc:creator>
				<category><![CDATA[Diversos]]></category>

		<guid isPermaLink="false">http://www.tuning4girls.com.br/wordpress/?p=1</guid>
		<description><![CDATA[Meu primeiro post!!  Meu &#8220;Alô mundo&#8221;!
Bom, serei breve (até demais) neste post&#8230; gostaria de informar que de agora em diante vocês, profissionais da área de TI e simpatizantes, podem contar com este espaço para ler artigos, notícias, trocar idéias, tirar dúvidas, e até perder tempo!
Espero conquistar a amizade e o interesse de vocês e juntos, [...]]]></description>
			<content:encoded><![CDATA[<p>Meu primeiro post!!  Meu &#8220;Alô mundo&#8221;!</p>
<p>Bom, serei breve (até demais) neste post&#8230; gostaria de informar que de agora em diante vocês, profissionais da área de TI e simpatizantes, podem contar com este espaço para ler artigos, notícias, trocar idéias, tirar dúvidas, e até perder tempo!</p>
<p>Espero conquistar a amizade e o interesse de vocês e juntos, contribuir para uma interent com mais conteúdo!</p>
<p>Irei abordar alguns assuntos de meu interesse, tais como linux, distros, java, struts, ajax, webdesigner, css, entre outros&#8230; Se tiver algum assunto que você, cara(o) leitor(a), gostaria de ver aqui, <em>please let me know</em>!</p>
<p>Fico por aqui&#8230;</p>
<p>Abraços e até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.programadoras.com.br/?feed=rss2&amp;p=1</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
