
<?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>Desenvolvendo Software</title>
	<atom:link href="http://www.desenvolvendosoftware.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.desenvolvendosoftware.com.br</link>
	<description>Tudo o que um desenvolvedor quer e precisa saber</description>
	<lastBuildDate>Tue, 29 Dec 2009 22:11:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Safari Books Online &#8211; Resenha</title>
		<link>http://www.desenvolvendosoftware.com.br/2009/12/safari-books-online-resenha/</link>
		<comments>http://www.desenvolvendosoftware.com.br/2009/12/safari-books-online-resenha/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 22:11:35 +0000</pubDate>
		<dc:creator>Leila</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Resenhas]]></category>

		<guid isPermaLink="false">http://www.desenvolvendosoftware.com.br/?p=349</guid>
		<description><![CDATA[A cada dia uma novidade, manter-se atualizado na área de informática é um desafio. Possuir boas fontes de consultas é essencial. Por esse motivo resolvi assinar a pouco mais de um mês Safari Books Online. Virei fã do serviço, não estou ganhando um centavo com este post.

O que é a Safari Books Online?
A Safari Books [...]]]></description>
			<content:encoded><![CDATA[<p>A cada dia uma novidade, manter-se atualizado na área de informática é um desafio. Possuir boas fontes de consultas é essencial. Por esse motivo resolvi assinar a pouco mais de um mês <a href="http://my.safaribooksonline.com/">Safari Books Online</a>. Virei fã do serviço, não estou ganhando um centavo com este post.</p>
<p><span id="more-349"></span></p>
<h2>O que é a Safari Books Online?</h2>
<p>A Safari Books Online é uma biblioteca virtual com os principais livros de informática. As principais editoras estão presentes. Há também vídeos. Além disso, há ferramentas para escrever anotações, marcar determinadas páginas. Há assinatura específicas para grupos de trabalho. Sim, o sistema é pago, mas vale a pena.</p>
<h2>Vantagens</h2>
<ul>
<li><strong>Informações Atualizadas &#8211; </strong> Os melhores lançamentos na área de informática ao alcance de um clique. Não pense que há necessariamente atraso em relação aos lançamentos em livrarias, ao contrário, é possível ler alguns livros <em>antes do lançamento</em>, quando ainda a versão final não está pronta.</li>
<li><strong>Ganho de tempo -</strong> Eu sei, a Internet está cheia de informação, o <em>Google</em> responde tudo. Em termos, muitas vezes demoramos a encontrar. Outras vezes, a redação é confusa e pontos importantes são deixados de fora. O conteúdo dos livros é mais organizado e simples de ler.</li>
<li><strong>Confiabilidade -</strong> Tudo bem, livros não são perfeitos mas a qualidade da informação é maior. Principalmente quando se trata das melhores editoras.</li>
<li><strong>Descontos </strong> Há bons descontos para adquirir os livros em papel. Dependendo do número de livros, a assinatura pode sair de graça. Outra possibilidade, é pagar o acesso por um mês para se ter certeza das compras a serem feitas. O preço é o equivalente a um livro, além dos descontos, tem-se a certeza do que se está comprando.</li>
</ul>
<h2>Desvantagens</h2>
<ul>
<li><strong>A disponibilidade total é apenas online &#8211; </strong> Há possibilidade de ser efetuar download de 5 capítulos por mês, os downloads são em tokens e esses possui validade limitada (90 ou 180 dias, dependendo do tipo de assinatura). No entanto, os livros de informática ficam obsoletos com o tempo ou podem se tornar inúteis, por exemplo, um livro ótimo para iniciantes pode se tornar inútil quando a pessoa se aprimora.</li>
<li><strong>A classificação dos livros é falha -</strong> essa é a minha principal queixa. No entanto, há o sistema de buscas que funciona bem.</li>
<li><strong>Apenas em inglês -</strong> Os livros são disponibilizados apenas em inglês. Se você é da área de TI e não consegue ler inglês técnico muito bem, bom, você está em desvantagem.
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.desenvolvendosoftware.com.br/2009/12/safari-books-online-resenha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desenvolvimento de Software Solo</title>
		<link>http://www.desenvolvendosoftware.com.br/2009/11/desenvolvimento-de-software-solo/</link>
		<comments>http://www.desenvolvendosoftware.com.br/2009/11/desenvolvimento-de-software-solo/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 23:59:06 +0000</pubDate>
		<dc:creator>Leila</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Artigos]]></category>

		<guid isPermaLink="false">http://www.desenvolvendosoftware.com.br/?p=338</guid>
		<description><![CDATA[Muito se fala como gerenciar equipes, projetos envolvendo vários programadores. No entanto, isso nem sempre é o caso. Várias vezes nos deparamos com projetos pequenos, para resolver uma questão pontual do cliente, criar um componente, algo pessoal, ou como na minha situação atual, a construção de um protótipo bom o suficiente para demonstrar o funcionamento [...]]]></description>
			<content:encoded><![CDATA[<p>Muito se fala como gerenciar equipes, projetos envolvendo vários programadores. No entanto, isso nem sempre é o caso. Várias vezes nos deparamos com projetos pequenos, para resolver uma questão pontual do cliente, criar um componente, algo pessoal, ou como na minha situação atual, a construção de um protótipo bom o suficiente para demonstrar o funcionamento de um algoritmo.</p>
<p><span id="more-338"></span></p>
<p>Ao desenvolver um projeto, independente do tamanho, deve-se usar o método adequado. Normalmente, projetos de pequeno porte se adaptam bem a técnicas de desenvolvimento ágil. Mas isso não significa começar a programar sem pensar, sem planejar. Qual a medida certa? Essa não é uma pergunta fácil.</p>
<ol>
<li><strong>Defina o escopo do projeto</strong> &#8211; Essa parte pode ser bem fácil se você possui um pedido bem específico, mas pode se tornar um pesadelo principalmente  nos casos em que se possui muita liberdade. É preciso ter em mente o problema que se deseja resolver e implementar o <em>mínimo necessário</em>. É muito fácil imaginar várias funcionalidades, mas há um custo para tudo, nem que seja do seu tempo livre. Implemente o essencial e depois, se houver depois, você pensa no resto. Descreva em poucas palavras o seu sistema.</li>
<li><strong>Decomponha o sistema nas partes principais</strong> &#8211; Verifique se você sabe como resolver cada pedaço do sistema, se não souber, pode ser que tenha que repetir o processo. Você não precisa implementar tudo. Muitas vezes preciso deixar o orgulho de lado e usar código de outras pessoas.</li>
<li><strong>Escolha a ferramenta adequada</strong> &#8211; Eu me lembro de um projeto, onde foi necessário criar uma rotina para geração de código automático. Adoro Java, foi a minha primeira idéia, mas um colega deu a sugestão acertada de se usar Excel mais VBA (eca). Não gosto de VBA, mas confesso foi a melhor solução. </li>
<li><strong>Escreva bom código</strong> &#8211; Não tenha preguiça de seguir as boas técnicas de desenvolvimento como encapsulamento, unidades de testes, comentários, etc. Muitas vezes você pode se esquecer porque fez algo, com incrível rapidez. Hoje mesmo, apaguei uma variável que havia criado e não utilizado, porque me esqueci do motivo da criação. A necessidade da variável não era óbvia, sendo essencial para uma boa geração de um valor <em>hash</em>. Isso talvez uma hora após escrever o código, imagine daqui a um mês, dois meses, &#8230; </li>
<li><strong>Tenha persistência</strong> &#8211; Isso é pior no caso dos projetos pessoais, quantas pessoas não começam algo para parar logo em seguida? Eu mesmo estou tendo um pouco de dificuldade com este blog. É difícil continuar com algo, apesar de toda a vida atribulada, abrindo mão de outros prazeres. No caso de se ter um prazo elástico, há o risco de se postergar e não conseguir terminar a tempo.</li>
<li><strong>Faça anotações</strong> &#8211; Anote suas idéias, o que foi feito, o que falta para fazer. Se falta algo para ser implementado, ponha um comentário no código, &#8220;TODO&#8221;, do inglês, &#8220;para  fazer&#8221;, é uma forma usual. No caso do NetBeans, por exemplo, esse tipo de comentário é reconhecido automaticamente e entra em uma lista organizada de tarefas. Na verdade qualquer comentário que possa ser facilmente procurado serve. Quando estou estudando uma biblioteca nova, faço anotações das classes e métodos que julgo serem úteis. Algumas pessoas escrevem um comentário no topo do arquivo com o histórico de modificações.</li>
<li><strong>Tenha versões organizadas</strong> &#8211; um sistema de controle de versão como o Subversion é útil, mas caso você não queira ou não possa, tenha os arquivos organizados por data. Compacte todos os fontes e dê um nome da forma <em>aaaammdd-nomedoprojeto</em>, não confie apenas na data do sistema. Se você comentar o cabeçalho dos arquivos, não vai ser fácil recuperar a versão anteriro.</li>
<li><strong>Faça backups</strong> &#8211; Todo mundo sabe que se deve fazer, mas muita gente esquece&#8230;.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.desenvolvendosoftware.com.br/2009/11/desenvolvimento-de-software-solo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aviso de Segurança &#8211; Mantenha-se Atualizado</title>
		<link>http://www.desenvolvendosoftware.com.br/2009/09/aviso-de-seguranca-mantenha-se-atualizado/</link>
		<comments>http://www.desenvolvendosoftware.com.br/2009/09/aviso-de-seguranca-mantenha-se-atualizado/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 20:27:42 +0000</pubDate>
		<dc:creator>Leila</dc:creator>
				<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Artigos]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.desenvolvendosoftware.com.br/?p=326</guid>
		<description><![CDATA[A importância de se manter softwares atualizados é grande. Por exemplo, os blogs da plataforma WordPress não atualizados estão sendo vítimas de ataques sérios. Quais podem ser as consequências? Os seus leitores podem ser infectados com Worms e outros códigos maliciosos, e o seu blog pode ser excluído de indexadores como o Yahoo!, Google e [...]]]></description>
			<content:encoded><![CDATA[<p>A importância de se manter softwares atualizados é grande. Por exemplo, os blogs da plataforma WordPress não atualizados estão sendo vítimas de ataques sérios. Quais podem ser as consequências? Os seus leitores podem ser infectados com Worms e outros códigos maliciosos, e o seu blog pode ser excluído de indexadores como o Yahoo!, Google e Technoratti.</p>
<h2>Por que as pessoas não atualizam o seu blog, ou mesmo outros programas?</h2>
<p>Toda atualização pode causar problemas, plugins podem parar de funcionar, o sistema pode começar a dar erro, o template pode não ser compatível, etc. No entanto, principalmente no caso do WordPress as conseqüências podem ser nefastas. Sem muito esforço, encontrei dois avisos de falhas de segurança graves do WordPress, uma em 2008 e outra nesse ano. <strong>Se a versão do seu WordPress é anterior de 2.8.4, atualize imediatamente!</strong> Qualquer outra versão anterior a atual está sujeita a ataques sérios. Vários posts estão clamando pela <a href="http://blosque.com/2009/09/perigo-a-vista-atualize-seu-wordpress-ja.html">atualização do WordPress</a>.</p>
<p><span id="more-326"></span></p>
<h2>Pirataria, tô fora!</h2>
<p>No caso do seu computador, também há problemas. Recentemente saiu um post sobre <a href="http://usuariocompulsivo.blogspot.com/2009/09/brasil-e-campeao-mundial-de-spam.html">computadores brasileiros serem usados para enviar spams</a>. Aparentemente somos campeões mundiais nessa modalidade. Quais são os computadores afetados? São os computadores com software desatualizado, tais como sistema operacionais, anti-virus e firewall. </p>
<p>Não uso programas piratas. Meu Windows Vista é original, versão OEM. Uso o OpenOffice para editar texto e o Gimp para figuras. O NetBeans é uma ótima IDE para meus projetos de desenvolvimento de software. A assinatura do meu anti-virus e firewall vale por três anos e comprei com um bom desconto junto com a minha WorkStation DELL. Programas piratas podem ser até fáceis de instalar, mas muitas vezes é impossível (ou muito difícil) realizar as atualizações regulares, pois as empresas possuem mecanismos que verificam se o programa é realmente original. O Brasil é um dos campeões em pirataria, porque será que é o campeão mundial em envio de spams ? Nota: a maioria dos spams é enviada para o exterior.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.desenvolvendosoftware.com.br/2009/09/aviso-de-seguranca-mantenha-se-atualizado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10 Dicas para Superar o Bloqueio de Desenvolvedor</title>
		<link>http://www.desenvolvendosoftware.com.br/2009/09/10-dicas-para-superar-o-bloqueio-de-desenvolvedor/</link>
		<comments>http://www.desenvolvendosoftware.com.br/2009/09/10-dicas-para-superar-o-bloqueio-de-desenvolvedor/#comments</comments>
		<pubDate>Sat, 05 Sep 2009 02:56:18 +0000</pubDate>
		<dc:creator>Leila</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Artigos]]></category>

		<guid isPermaLink="false">http://www.desenvolvendosoftware.com.br/?p=312</guid>
		<description><![CDATA[Bloqueio de Desenvolvedor, o que é isso? É o análogo do que acontece com os escritores, a tela branca do IDE na sua frente e não se sabe como começar ou o que fazer em seguida. As causas são diversas, mas a conseqüência uma só: paralisia e perda de tempo. 

Descanse &#8211; Normalmente ocorre no [...]]]></description>
			<content:encoded><![CDATA[<p>Bloqueio de Desenvolvedor, o que é isso? É o análogo do que acontece com os escritores, a tela branca do IDE na sua frente e não se sabe como começar ou o que fazer em seguida. As causas são diversas, mas a conseqüência uma só: paralisia e perda de tempo. </p>
<ol>
<li><strong>Descanse</strong> &#8211; Normalmente ocorre no final do expediente, a tela na sua frente, o compilador só pode estar errado, você fez tudo (aparentemente) certo, mas o código ainda teima em dar erro. Todas as alternativas foram esgotadas, você não sabe mais como prosseguir. Muitas vezes trabalhamos com prazos apertados e achamos que precisamos trabalhar o maior número de horas possível. No entanto, como um colega meu costumava dizer que após um determinado momento &#8220;o tico não fala mais com o teco&#8221;. Perda de tempo tentar encontrar erro sob esgotamento mental, se depois de uma noite de sono, o mesmo salta em sua frente depois de normalmente uns 15 minutos.</li>
<p><span id="more-312"></span></p>
<li><strong>Converse com o seus colegas</strong> &#8211; Explique o problema a algum colega seu. Ele pode lhe dar uma dica valiosa ou, você pode encontrar a solução, apenas por ter que organizar as informações para alguém que não está diretamente envolvido no código.</li>
<li><strong>Comece um prototipo</strong> &#8211; Em conselhos para escritores, há frequentemente o conselho de começar a escrever deixando qualquer tipo de auto-julgamento de lado. Faça o mesmo. Esqueça por um momento da arquitetura perfeita, do código perfeito, simplesmente comece. Veja algo simples, algum teste para ser feito. Não deixe a indecisão tomar conta. Não sabe que nome dar a uma classe, dê algum, nem que seja <em>AlgumNome</em>. <img src='http://www.desenvolvendosoftware.com.br/wordpress/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  </li>
<li><strong>Tenha Intervalos</strong> &#8211; Dê uma caminhada, curta o sol, faça alongamento, bata papo. Lembre: é provado cientificamente que o rendimento e a concentração aumenta se fazemos pequenos intervalos após uma hora de trabalho.</li>
<li><strong>Concentre-se</strong> &#8211; Quando for trabalhar, reduza o uso de Internet ao mínimo. Não fique verificando seu e-mail, Orkut, Twitter, toda hora. Se for necessário desligue o celular.</li>
<li><strong>Desenhe diagramas</strong> &#8211; Pegue uma folha de papel e comece a desenhar as partes do projeto. Quando tento escrever um classe ou conjunto de classes específico, consulto a documentação e começo a por os métodos principais que terei que chamar. Com isso tenho um esboço do algorítmo no papel e não apenas na minha cabeça, fica mais fácil começar.</li>
<li><strong>Escreva os passos</strong> &#8211; Tenha uma lista das tarefas pendentes e no final de cada dia, anote as tarefas iniciais do dia seguinte. Assim fica mais fácil reconectar o raciocínio.</li>
<li><strong>Comece pelo simples</strong> &#8211; Mesmo um projeto complicado possui parte simples, comece por elas. Todo desenvolvimento de software deve ser partido em componentes menores. Se você não consegue fazer isso, você possui a profissão errada.</li>
<li><strong>Escute o seu corpo</strong> &#8211; Vários problemas podem afetar a sua concentração e capacidade de raciocínio, tais como, stress, estafa, depressão. Um estilo de vida mais saudável pode lhe ser útil. Procure ajuda profissional se necessário.</li>
<li><strong>Trabalhe em alguma outra coisa</strong> &#8211; Nada está funcionando? Todos temos outros projetos, profissionais ou pessoais. Trabalhe neles. Funcionou com o meu projeto de dissertação de mestrado. Não conseguia começar. Comecei a trabalhar nesse blog (meu projeto pessoal) e depois de algum tempo comecei a codificar o projeto da minha dissertação. Só tenha cuidado de não perder prazos.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.desenvolvendosoftware.com.br/2009/09/10-dicas-para-superar-o-bloqueio-de-desenvolvedor/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>As estatísticas do seu blog estão corretas?</title>
		<link>http://www.desenvolvendosoftware.com.br/2009/08/as-estatisticas-do-seu-blog-estao-corretas/</link>
		<comments>http://www.desenvolvendosoftware.com.br/2009/08/as-estatisticas-do-seu-blog-estao-corretas/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 04:36:23 +0000</pubDate>
		<dc:creator>Leila</dc:creator>
				<category><![CDATA[Blogs]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Blogger]]></category>
		<category><![CDATA[Resolução Problemas]]></category>

		<guid isPermaLink="false">http://www.desenvolvendosoftware.com.br/?p=301</guid>
		<description><![CDATA[Todo blogueiro que se preze adora estatíticas. Saber que é seu público, o número de visitas, é importante para a avaliação do blogue e, porque não, o ego do blogueiro. Você deve se certificar de que as estatísticas estão corretas. Como assim? Se você é um blogueiro com milhares de visitas diárias, as suas visitas [...]]]></description>
			<content:encoded><![CDATA[<p>Todo blogueiro que se preze adora estatíticas. Saber que é seu público, o número de visitas, é importante para a avaliação do blogue e, porque não, o ego do blogueiro. Você deve se certificar de que as estatísticas estão corretas. Como assim? Se você é um blogueiro com milhares de visitas diárias, as suas visitas não fazem muita diferença, mas se você possui poucas, apenas algumas dezenas?</p>
<p> No final desse artigo cito algumas referências que cobre o básico sobre esse assunto, por exemplo, como se cadastrar no <em>Google Analytics.</em></p>
<p><span id="more-301"></span></p>
<h2>Como funciona os sistemas de estatíticas?</h2>
<p>Os sistemas de estatíticas normalmente requerem que você acrescente um pouco de código no final de todas as páginas. Esse código avisa o sistema toda vez que alguém visita o seu blog, mas não tem como adivinhar se você está visitando o seu próprio blog ou outra pessoa, então ele conta a visitação de todo mundo. Mesmo quando plugins são instalados, por exemplo no WordPress, o código é adicionado nas páginas do blog.</p>
<p>Filtrar as próprias visitas é importante, tanto que o <em>Google Analytics</em> possui mecanismos de exclusão de tráfego nos relatórios. Essa exclusão pode ser feita através de endereço IP ou cookie. Se quiser saber como, está tudo explicado na ajuda do Analytics: <a href="http://www.google.com/support/googleanalytics/bin/answer.py?answer=55481&#038;hl=pt_BR&#038;utm_id=ad">Como faço para excluir meu tráfego interno dos relatórios?</a>. O problema do endereço IP é que a maioria dos blogueiros não possuem um endereço fixo e o problema do cookie é que ele precisa estar presente em todos os browsers, de todos os computadores usados pelo blogueiro e é necessário lembrar de reinstalar o cookie toda vez que esse for apagado. Se você acessar o blog de um computador público, por exemplo, o seu cookie não vai estar lá.</p>
<h2>Como fazer com que suas visitas sejam ignoradas?</h2>
<p>Alguns plugins para o WordPress fazem isso automaticamente. Na verdade a solução é bem simples e pode ser resumida no pseudo código abaixo:</p>
<p><code>Se não for eu então inclui o código das estatísticas. </code></p>
<p>Abaixo está o código do <em>Google Analytics</em> para inclusão no WordPress. É necessário substituir &#8220;UA-XXXXXXX-X&#8221; pela sua chave. O código exclui todos os usuários que estão logados, o que na maioria dos blogs, significa apenas o dono do blog. O mesmo pode ser feito para outros sistemas de estatísticas, sendo suficiente, substituir o código do Google Analytics pelo código do outro sistema. Entendendo o código: </p>
<ul>
<li><strong>Linha 1: </strong>Se o usuário não está logado então,</li>
<li><strong>Linha 2-13:</strong> código do Google Analytics</li>
<li><strong>Linha 14:</strong> Fim</li>
</ul>
<pre class="hl"><span class="hl line"> 1 </span><span class="hl sym">&lt;</span>?php <span class="hl kwa">if</span> <span class="hl sym">( !</span><span class="hl kwd">is_user_logged_in</span><span class="hl sym">() ) {</span> ?<span class="hl sym">&gt;</span>
<span class="hl line"> 2 </span><span class="hl sym">&lt;</span>script type<span class="hl sym">=</span><span class="hl str">&quot;text/javascript&quot;</span><span class="hl sym">&gt;</span>
<span class="hl line"> 3 </span>var gaJsHost <span class="hl sym">= ((</span><span class="hl str">&quot;https:&quot;</span> <span class="hl sym">==</span> document.location.protocol<span class="hl sym">)</span> ? <span class="hl str">&quot;https:</span>
<span class="hl line"> 4 </span><span class="hl str">//ssl.&quot;</span> <span class="hl sym">:</span> <span class="hl str">&quot;http://www.&quot;</span><span class="hl sym">);</span>
<span class="hl line"> 5 </span>document.<span class="hl kwa">write</span><span class="hl sym">(</span><span class="hl kwd">unescape</span><span class="hl sym">(</span><span class="hl str">&quot;%3Cscript src='&quot;</span> <span class="hl sym">+</span> gaJsHost <span class="hl sym">+</span> <span class="hl str">&quot;google-</span>
<span class="hl line"> 6 </span><span class="hl str">analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E&quot;</span><span class="hl sym">));</span>
<span class="hl line"> 7 </span><span class="hl sym">&lt;/</span>script<span class="hl sym">&gt;</span>
<span class="hl line"> 8 </span><span class="hl sym">&lt;</span>script type<span class="hl sym">=</span><span class="hl str">&quot;text/javascript&quot;</span><span class="hl sym">&gt;</span>
<span class="hl line"> 9 </span>try<span class="hl sym">{</span>
<span class="hl line">10 </span>var pageTracker <span class="hl sym">=</span> _gat.<span class="hl kwd">_getTracker</span><span class="hl sym">(</span><span class="hl str">&quot;UA-XXXXXXX-X&quot;</span><span class="hl sym">);</span>
<span class="hl line">11 </span>pageTracker.<span class="hl kwd">_trackPageview</span><span class="hl sym">();</span>
<span class="hl line">12 </span><span class="hl sym">}</span> <span class="hl kwd">catch</span><span class="hl sym">(</span>err<span class="hl sym">) {}</span>
<span class="hl line">13 </span><span class="hl sym">&lt;/</span>script<span class="hl sym">&gt;</span>
<span class="hl line">14 </span><span class="hl sym">&lt;</span>? <span class="hl sym">}</span> ?<span class="hl sym">&gt;</span>
</pre>
<p><br/></p>
<h2>É possível fazer o mesmo para a plataforma Blogger?</h2>
<p>Sim, é provavelmente possível. A plataforma possui um método indireto de saber se o usuário está logado ou não: o link de edição de postagens. A implementação deixo para os hackers do Blogger.</p>
<h2>
Referências básicas:</h2>
<p><a href="http://www.ferramentasblog.com/2009/08/como-usar-google-analytics-no-wordpress.html">Como usar Google Analytics no Wordpress</a><br />
<a href="http://dicasblogger.blogspot.com/2008/03/google-analytics.html">Google Analytics</a><br />
<a href="http://www.ferramentasblog.com/2009/03/criar-conta-no-google-analytics.html">Criar conta no Google Analytics</a><br />
<a href="http://dicasblogger.blogspot.com/2008/05/qual-o-melhor-contador-para-blogs.html">Qual o melhor contador para blogs?</a><br />
<a href="http://dicasblogger.blogspot.com/2008/07/woopra-um-super-programa-de.html">Woopra-um super programa de estatisticas</a><br />
<a href="http://www.ferramentasblog.com/2009/08/woopra-analise-de-visitas-em-tempo-real.html">Woopra – Análise de visitas em tempo real</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.desenvolvendosoftware.com.br/2009/08/as-estatisticas-do-seu-blog-estao-corretas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Redirecionando a saída padrão para o JTextArea</title>
		<link>http://www.desenvolvendosoftware.com.br/2009/08/redirecionando-a-saida-padrao-para-o-jtextarea/</link>
		<comments>http://www.desenvolvendosoftware.com.br/2009/08/redirecionando-a-saida-padrao-para-o-jtextarea/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 15:51:43 +0000</pubDate>
		<dc:creator>Leila</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.desenvolvendosoftware.com.br/?p=285</guid>
		<description><![CDATA[Em Java, a saída padrão é redirecionada usualmente para o console. Aqui vamos ver como fazer para que seja redirecionada de forma fácil para um componente gráfico, no caso um JTextArea.
Saída Padrão, Saída Padrão de Erro e Entrada Padrão &#8211; Uma Breve História
Tudo começou quando os sistemas operacionais ainda possuiam apenas interface de texto. Os [...]]]></description>
			<content:encoded><![CDATA[<p>Em Java, a saída padrão é redirecionada usualmente para o console. Aqui vamos ver como fazer para que seja redirecionada de forma fácil para um componente gráfico, no caso um JTextArea.</p>
<h2>Saída Padrão, Saída Padrão de Erro e Entrada Padrão &#8211; Uma Breve História</h2>
<p>Tudo começou quando os sistemas operacionais ainda possuiam apenas interface de texto. Os programas não gráficos escrevem na saída padrão (normalmente o vídeo) e leem da entrada padrão (normalmente o teclado). A saída e entrada padrão podem ser redirecionadas pelo sistema operacional, por exemplo, se a saída for redirecionada para a impressora, ela é impressa, sem que se precisse modificar uma única linha de código. Também há a possibilidade de fazer com que a saída padrão de um programa, seja a entrada de outro, um mecanismo chamado <em>pipe</em>. Os fãs de Linux, aqueles que adoram a tela preta do console, escrevem linhas de comando enoooooormes, redirecionando a saída de um programa para a entrada de outro. Isso também pode ser feito no Windows, mas simplesmente não faz parte da cultura.</p>
<p><span id="more-285"></span></p>
<h3>Qual a diferença da saída padrão da saída padrão de erro?</h3>
<p>A saída padrão é a saída &#8220;normal&#8221; do programa e a saída de padrão de erro, bem, é a saída onde os erros são impressos. Isso permite que quando a saída padrão de um programa é redirecionada para outro, as mensagens de erros sejam impressas normalmente na tela.</p>
<h3>Como é no Java?</h3>
<p>Em Java, temos a classe <em>java.lang.System</em>, lá temos <em>System.out</em>, <em>System.err</em> e <em>System.in</em>, que são respectivamente: a saída padrão, a saída padrão de erro e a entrada padrão. A instrução<em> System.out.println(&#8220;Olá mundo!&#8221;); </em>é provavelmente uma das primeiras que qualquer um aprende. Nem todos sabem, no entanto, que também se pode escrever <em>System.err.println(&#8220;Olá mundo tem erro!&#8221;); </em>, e a segunda forma é preferível em caso de mensagens de erro, afinal, é a <strong>saída padrão de erro</strong>. Essas mensagens aparecem na tela preta do console, veremos a seguir como redirecioná-las para um componente gráfico.</p>
<h2>MVC &#8211; Model-View-Controler &#8211;  no JTextArea</h2>
<p>Muitos compenentes gráficos Swing implementam o padrão MVC, isto é, possuem um modelo, um visualizador e um controlador. No caso de um JTextArea, na configuração padrão, o modelo é um documento texto, a visualização é a renderização do texto na tela e o controler é a interpretação dos comandos de edição do usuário. O que temos de mudar é o controlador, não serão eventos gerados pelo usuário e sim o texto escrito na saída padrão. Para isso temos:</p>
<ol>
<li>retirar o controle do usuário, setando a propriedade <em>Editable</em> do <em>JTextArea </em>para <em>false</em>. <strong>Muito Fácil</strong>.</li>
<li>criar uma classe para atualizar o modelo, isto é, um controlador.</li>
<li>redirecionar a saída padrão usando o método <em>System.setOut()</em></li>
</ol>
<h3>Controlador: DocumentOutputStream</h3>
<p>O código do controlador é simples. A classe é derivada de java.io.OutputStream porque para redirecionar a saída padrão ou a saída de erro é necessário um objeto do tipo java.io.PrintStream. Uma forma de criar é usar um objeto do tipo java.io.OutputStream. O construtor do controlador recebe como parâmetro o documento que irá armazenar os dados a serem mostrados pelo visualizador.</p>
<p>A classe <em>java.io.OutputStream</em> requer a implementação de um único método: <em>public void write(int b) throws IOException</em>. No entanto, os dois outros métodos <em>write</em> foram também implementados por razões de eficiência. Caso não fossem, cada caracter incluído no documento geraria um evento, implementando os outros métodos, o número de eventos gerados e consequentemente de objetos cai muito.</p>
<p>Abaixo está o código fonte da classe do controlador e aqui está o <a href="/arquivos-publicos/exemplos/JTextAreaIOExemplo.zip">projeto completo do NetBeans</a>. </p>
<pre class="hl"><span class="hl kwa">package</span> br<span class="hl sym">.</span>com<span class="hl sym">.</span>desenvolvendosoftware<span class="hl sym">;</span>

<span class="hl kwa">import</span> java<span class="hl sym">.</span>io<span class="hl sym">.</span><span class="hl kwc">IOException</span><span class="hl sym">;</span>
<span class="hl kwa">import</span> java<span class="hl sym">.</span>io<span class="hl sym">.</span><span class="hl kwc">OutputStream</span><span class="hl sym">;</span>
<span class="hl kwa">import</span> javax<span class="hl sym">.</span>swing<span class="hl sym">.</span>text<span class="hl sym">.</span><span class="hl kwc">BadLocationException</span><span class="hl sym">;</span>
<span class="hl kwa">import</span> javax<span class="hl sym">.</span>swing<span class="hl sym">.</span>text<span class="hl sym">.</span><span class="hl kwc">Document</span><span class="hl sym">;</span>
<span class="hl kwa">import</span> javax<span class="hl sym">.</span>swing<span class="hl sym">.</span>text<span class="hl sym">.</span><span class="hl kwc">SimpleAttributeSet</span><span class="hl sym">;</span>

<span class="hl com">/**</span>
<span class="hl com"> * Output Stream que escreve para um javax.swing.text.</span>
<span class="hl com"> Document</span>
<span class="hl com"> * Dessa forma pode servir de controler de uma JTextArea</span>
<span class="hl com"> * &#64;author Leila Algarve</span>
<span class="hl com"> */</span>
<span class="hl kwa">public class</span> DocumentOutputStream <span class="hl kwa">extends</span> <span class="hl kwc">OutputStream</span><span class="hl sym">{</span>

    <span class="hl com">/** Documento do JTextArea */</span>
    <span class="hl kwa">private</span> <span class="hl kwc">Document</span> _document<span class="hl sym">;</span>
    <span class="hl com">/** Buffer com os bytes adicionados */</span>
    <span class="hl kwa">private</span> <span class="hl kwc">StringBuffer</span> _buffer<span class="hl sym">;</span>
    <span class="hl com">/** localização do último byte inserido no documento</span>
<span class="hl com">    */</span>
    <span class="hl kwa">private</span> <span class="hl kwb">int</span> _offset<span class="hl sym">;</span>

    <span class="hl kwa">public</span> <span class="hl kwd">DocumentOutputStream</span> <span class="hl sym">(</span><span class="hl kwc">Document</span> document<span class="hl sym">){</span>
        _document <span class="hl sym">=</span> document<span class="hl sym">;</span>
    <span class="hl sym">}</span>

    &#64;Override
    <span class="hl kwa">public</span> <span class="hl kwb">void</span> <span class="hl kwd">write</span><span class="hl sym">(</span><span class="hl kwb">int</span> b<span class="hl sym">)</span> <span class="hl kwa">throws</span> <span class="hl kwc">IOException</span> <span class="hl sym">{</span>

        <span class="hl kwa">try</span> <span class="hl sym">{</span>
            _document<span class="hl sym">.</span><span class="hl kwd">insertString</span><span class="hl sym">(</span>_offset<span class="hl sym">++, (</span><span class="hl kwb">char</span><span class="hl sym">)</span> b <span class="hl sym">+</span> <span class="hl str">&quot;&quot;</span><span class="hl sym">,</span>
                                   <span class="hl kwa">new</span> <span class="hl kwc">SimpleAttributeSet</span><span class="hl sym">());</span>
        <span class="hl sym">}</span> <span class="hl kwa">catch</span> <span class="hl sym">(</span><span class="hl kwc">BadLocationException</span> ex<span class="hl sym">) {</span>
            <span class="hl kwa">new</span> <span class="hl kwc">IOException</span><span class="hl sym">(</span>ex<span class="hl sym">);</span>
        <span class="hl sym">}</span>

    <span class="hl sym">}</span>

    &#64;Override
    <span class="hl kwa">public</span> <span class="hl kwb">void</span> <span class="hl kwd">write</span><span class="hl sym">(</span><span class="hl kwb">byte</span><span class="hl sym">[]</span> bytes<span class="hl sym">,</span> <span class="hl kwb">int</span> off<span class="hl sym">,</span> <span class="hl kwb">int</span> len<span class="hl sym">)</span> <span class="hl kwa">throws</span>
                      <span class="hl kwc">IOException</span> <span class="hl sym">{</span>
        <span class="hl kwc">StringBuffer</span> buffer <span class="hl sym">=</span> <span class="hl kwa">new</span> <span class="hl kwc">StringBuffer</span><span class="hl sym">();</span>
        <span class="hl kwa">for</span> <span class="hl sym">(</span><span class="hl kwb">int</span> indice<span class="hl sym">=</span>off<span class="hl sym">;</span> indice <span class="hl sym">&lt;</span> len<span class="hl sym">;</span> indice <span class="hl sym">++)</span>
            buffer<span class="hl sym">.</span><span class="hl kwd">append</span><span class="hl sym">((</span><span class="hl kwb">char</span><span class="hl sym">)</span>bytes<span class="hl sym">[</span>indice<span class="hl sym">]);</span>
        <span class="hl kwa">try</span> <span class="hl sym">{</span>
            _document<span class="hl sym">.</span><span class="hl kwd">insertString</span><span class="hl sym">(</span>_offset<span class="hl sym">,</span> buffer<span class="hl sym">.</span><span class="hl kwd">toString</span><span class="hl sym">()</span>
                                   <span class="hl sym">,</span> <span class="hl kwa">new</span> <span class="hl kwc">SimpleAttributeSet</span><span class="hl sym">()</span>
                                   <span class="hl sym">);</span>
            _offset <span class="hl sym">+=</span> buffer<span class="hl sym">.</span><span class="hl kwd">length</span><span class="hl sym">();</span>
        <span class="hl sym">}</span> <span class="hl kwa">catch</span> <span class="hl sym">(</span><span class="hl kwc">BadLocationException</span> ex<span class="hl sym">) {</span>
            <span class="hl kwa">new</span> <span class="hl kwc">IOException</span><span class="hl sym">(</span>ex<span class="hl sym">);</span>
        <span class="hl sym">}</span>
    <span class="hl sym">}</span>

    &#64;Override
    <span class="hl kwa">public</span> <span class="hl kwb">void</span> <span class="hl kwd">write</span><span class="hl sym">(</span><span class="hl kwb">byte</span><span class="hl sym">[]</span> bytes<span class="hl sym">)</span> <span class="hl kwa">throws</span> <span class="hl kwc">IOException</span> <span class="hl sym">{</span>
        <span class="hl kwc">StringBuffer</span> buffer <span class="hl sym">=</span> <span class="hl kwa">new</span> <span class="hl kwc">StringBuffer</span><span class="hl sym">();</span>
        <span class="hl kwa">for</span> <span class="hl sym">(</span><span class="hl kwb">byte</span> b <span class="hl sym">:</span> bytes<span class="hl sym">)</span> buffer<span class="hl sym">.</span><span class="hl kwd">append</span><span class="hl sym">((</span><span class="hl kwb">char</span><span class="hl sym">)</span>b<span class="hl sym">);</span>
        <span class="hl kwa">try</span> <span class="hl sym">{</span>
            _document<span class="hl sym">.</span><span class="hl kwd">insertString</span><span class="hl sym">(</span>_offset<span class="hl sym">,</span> buffer<span class="hl sym">.</span><span class="hl kwd">toString</span><span class="hl sym">()</span>
                                   <span class="hl sym">,</span> <span class="hl kwa">new</span> <span class="hl kwc">SimpleAttributeSet</span><span class="hl sym">()</span>
                                   <span class="hl sym">);</span>
            _offset <span class="hl sym">+=</span> buffer<span class="hl sym">.</span><span class="hl kwd">length</span><span class="hl sym">();</span>
        <span class="hl sym">}</span> <span class="hl kwa">catch</span> <span class="hl sym">(</span><span class="hl kwc">BadLocationException</span> ex<span class="hl sym">) {</span>
            <span class="hl kwa">new</span> <span class="hl kwc">IOException</span><span class="hl sym">(</span>ex<span class="hl sym">);</span>
        <span class="hl sym">}</span>
    <span class="hl sym">}</span>

<span class="hl sym">}</span>
</pre>
<p><strong>Post inspirado na pergunta de forum postada por <a href="http://javafree.uol.com.br/topic-874692-como-simular-um-console-com-jTextArea.html">rogerio3d</a>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.desenvolvendosoftware.com.br/2009/08/redirecionando-a-saida-padrao-para-o-jtextarea/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Um Tributo aos Desbravadores &#8211; 2 anos do Dicas Blogger</title>
		<link>http://www.desenvolvendosoftware.com.br/2009/08/um-tributo-aos-desbravadores-2-anos-do-dicas-blogger/</link>
		<comments>http://www.desenvolvendosoftware.com.br/2009/08/um-tributo-aos-desbravadores-2-anos-do-dicas-blogger/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 02:16:57 +0000</pubDate>
		<dc:creator>Leila</dc:creator>
				<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Blogger]]></category>

		<guid isPermaLink="false">http://www.desenvolvendosoftware.com.br/?p=279</guid>
		<description><![CDATA[Há dois anos, sem maiores pretenções, um blog com anotações com dicas surgiu: o Dicas Blogger. A proprietária do blog, Juliana Sardinha, sabia pouco no início mas divulgava tudo o que aprendia. O blog cresceu, a Dra. Juliana, psiquiatra por profissão, virou personagem de destaque da blogosfera brasileira. O Dicas Blogger tornou referência de inúmeros [...]]]></description>
			<content:encoded><![CDATA[<p>Há dois anos, sem maiores pretenções, um blog com anotações com dicas surgiu: o <a href="dicasblogger.blogspot.com">Dicas Blogger</a>. A proprietária do blog, <a href="http://www.google.com/profiles/dicasblogger">Juliana Sardinha</a>, sabia pouco no início mas divulgava tudo o que aprendia. O blog cresceu, a Dra. Juliana, psiquiatra por profissão, virou personagem de destaque da blogosfera brasileira. O <em>Dicas Blogger</em> tornou referência de inúmeros blogueiros da plataforma <em>Blogger</em> e também de outras plataformas.</p>
<p>O foco do <em>Dicas Blogger</em> é a <em>plataforma Blogger</em>. A arte de blogar não se resume apenas a encontrar os melhores hacks e templates para uma determinada plataforma, mas também a saber como escrever, como se comportar, recursos disponíveis na Internet, e muito mais. Por esses motivos, mesmo blogueiros que optaram por outras plataformas acompanham o blog.</p>
<p><span id="more-279"></span></p>
<h2>O que aprender com os veteranos?</h2>
<p>Imagine-se em uma floresta densa, território desconhecido, tentando encontrar o seu caminho. Difícil não? Mas se já houverem trilhas, talvez algumas placas, já fica mais fácil. Os que chegaram primeiro possuíam menos informação disponível que temos hoje na blogosfera, devo acrescentar, principalmente informação na nossa querida língua portuguesa, vítima de muitas tentativas de assassinato e mutilações. Leio inglês fluentemente, até mesmo por força da minha profissão, sou aspirante a cientista, e os outros que não tem a mesma sorte? Ficam perdidos, não sabem como se orientar, como procurar ajuda, nesse mundo virtual onde a língua franca é o inglês.</p>
<p>Antes de começar esse blog, li muito, li os melhores, entre eles o <em>Dicas Blogger</em>. Como disse o grande guro Cardoso, em <a href="http://www.passaralho.com/2009/08/nao-basta-ser-pequeno-tem-que-ser.html">Passaralho Twitteiro </a>: &#8220;Eu entendo, começar é uma bosta mesmo.&#8221; Seguindo os conselhos e lendo um pouco mais, reparei que não comecei tão mal como alguns deles. A receita básica é simples: mantenha o seu blog atualizado com conteúdo original e bem escrito, participe da comunidade da blogosfera e divulgue o seu trabalho. Sim, meu blog tem poucas visitas, hoje, até agora consegui 27 visitas e o meu último post não emplacou. Por exemplo, <a href="http://metiredesteocio.com/2009/08/20/o-que-e-um-blog-de-sucesso/">Me Tire do meu Ócio!!!</a> disse que no início ficava feliz com 100 visitas/mês, eu já tenho mais de 300 nas primeiras 3 semanas e eu não aplico tudo (ainda). Com certeza falta muito para atingir os 10.000 page/views diários do <em>Dicas Blogger</em>.</p>
<p>Não são apenas os posts a fonte de aprendizado, o próprio blog também é fonte de aprendizado. Vejamos o homenageado mor de hoje, o <em>Dicas Blogger</em>. Informações importantes estão logo no cabeçalho, como os templates disponibilizados, as perguntas frequentes e a série primeiros passos, essencial para os blogueiros de primeira viagem. Os marcadores usados são descritivos, mas não há excesso deles. Isso demanda organização. Possuir 200 marcadores diferentes não ajuda muito.</p>
<p><strong>O sucesso do Dicas Blogger é por merecimento. O blog completa dois anos, todos torcemos para que continue a nos orientar por muito mais tempo.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.desenvolvendosoftware.com.br/2009/08/um-tributo-aos-desbravadores-2-anos-do-dicas-blogger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como projetar um Wizard</title>
		<link>http://www.desenvolvendosoftware.com.br/2009/08/como-projetar-um-wizard/</link>
		<comments>http://www.desenvolvendosoftware.com.br/2009/08/como-projetar-um-wizard/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 20:09:03 +0000</pubDate>
		<dc:creator>Leila</dc:creator>
				<category><![CDATA[Interface com Usuário]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Wizard]]></category>

		<guid isPermaLink="false">http://www.desenvolvendosoftware.com.br/?p=260</guid>
		<description><![CDATA[O que são Wizards?
Wizards guiam o usuário através de vários passos, realizando as tarefas em um ordem definida. Um Wizard pode ser implementado de diversas maneiras. A forma mais usual inclui uma série de telas, onde o usuário passa de uma para outra seqüencialmente. A estrutura de um Wizard pode ser linear (A) ou possuir [...]]]></description>
			<content:encoded><![CDATA[<h2>O que são Wizards?</h2>
<p>Wizards guiam o usuário através de vários passos, realizando as tarefas em um ordem definida. Um Wizard pode ser implementado de diversas maneiras. A forma mais usual inclui uma série de telas, onde o usuário passa de uma para outra seqüencialmente. A estrutura de um Wizard pode ser linear (A) ou possuir saltos ou ramificações (B), em qualquer um dos casos deve ser dada a opção de voltar. Há também a possibilidade de se implementar em apenas uma tela, onde os passos vão sendo habilitados ou mostrados à medida que os campos são preenchidos. Nesse último caso, diferentes passos podem ser identificados com títulos.</p>
<p><a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/estrutura.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/estrutura.png" alt="estrutura" title="estrutura" width="278" height="230" class="aligncenter size-full wp-image-272" /></a><br />
<span id="more-260"></span></p>
<h2>Quando usar Wizards?</h2>
<ul>
<li>A tarefa é longa ou complicada e não há necessidade do usuário possuir um controle fino sobre ela.</li>
<li>O usuário precisa completar os passos em uma determinda seqüência.</li>
<li>Os passos necessários para chegar a um objetivo final podem variar de acordo com as decisões anteriores.</li>
<li>O usuário não possui conhecimento técnico necessário para completar a tarefa.</li>
<li>A tarefa é complexa e é formada por diversas subtarefas dependentes entre si.</li>
</ul>
<h2>Quais são as Vantagens?</h2>
<ul>
<li>Guia o usuário, decisões são vistas muitas vezes como um peso pelos usuários.</li>
<li>A divisão da tarefas faz com que o usuário se preocupe apenas com um passo de cada vez, simplificando o trabalho.</li>
<li>A tarefa é completada com um número menor de erros.</li>
</ul>
<h2>Quais são as Desvantagens?</h2>
<ul>
<li>A estrutura do Wizard é rígida.</li>
<li>Usuários mais avançados podem sentir falta do controle.</li>
</ul>
<h2>O que evitar?</h2>
<ul>
<li><strong>Propósito não claro &#8211; </strong> O usuário precisa ser lembrado do propósito do Wizard. Cada tela precisa ser adequadamente rotulada.</li>
<li><strong>Muitas Telas &#8211; </strong> Wizards muito longos tendem a ser muito monótonos, os usuários desistem no meio.</li>
<li><strong>Telas muito Longas &#8211; </strong> Um dos propósitos dos Wizards é <em>simplificar</em> as tarefas, e telas muito longas fogem desse objetivo.</li>
<li><strong>Jargão Técnico &#8211; </strong> Deve ser usada uma linguagem acessível ao usuário, pois esse não pode tomar boas decisões em cima do que não entende.</li>
<li><strong>Falta da Opção Cancelar &#8211; </strong> Os usuários devem poder desistir do Wizard sem que nada seja feito. O botão &#8220;cancelar&#8221; deve estar presente.</li>
</ul>
<h2>O que incluir?</h2>
<ul>
<li><strong>Dividir as Tarefas Logicalmente &#8211; </strong> As tarefas devem ser quebradas de forma a ficarem confortáveis aos usuários. Isso pode ser feito observando-se como esse completam suas tarefas.</li>
<li><strong>Informar o Progresso do Usuário &#8211; </strong> Os usuários precisam ter uma idéia do progresso já realizado. Pode ser exato ou aproximado, pois muitas vezes não é possível determinar o número exato de passos.</li>
<li><strong>Indicar Campos Obrigatórios &#8211; </strong>precisa estar claro todos os campos que precisam ser preenchidos, principalmente quando alguns forem opcionais. Especialmente útil no preenchimento de formulários.</li>
<li><strong>Resumir os Dados dos Wizard &#8211; </strong> No final do Wizard pode ser mostrado uma tela com o resumo de todas as escolhas feitas.</li>
<li><strong>Incluir Aviso de Saída &#8211; </strong> Se a saída do Wizard ocasionar perda de dados, uma confirmação pode ser adicionada. Isso pode se tornar irrelevante se o usuário ao começar novamente o Wizard, as informações anteriormente fornecidas não são perdidas.</li>
<li><strong>Incluir Métodos Alternativos para Completar a Tarefa &#8211; </strong> Que o Wizard não seja a única forma de completar a tarefa, é uma recomendação vista muitas vezes. Não que essa recomendação seja inválida, mas deve ser decidido caso a caso. Muitas opções ao usuário muitas vezes causam apenas problemas e confusão.</li>
</ul>
<h2>Fontes: </h2>
<p><a href="http://designinginterfaces.com/Wizard">Designing Interfaces &#8211; Wizard</a><br />
<a href="http://www.ibm.com/developerworks/library/us-wizard/">Crafting a wizard</a><br />
<a href="http://ui-patterns.com/pattern/Wizard">Design Patterns &#8211; Wizard</a><br />
<a href="http://www.welie.com/patterns/showPattern.php?patternID=wizard">Welie.com Wizard</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.desenvolvendosoftware.com.br/2009/08/como-projetar-um-wizard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Diigo, Links e Postagens Automáticas</title>
		<link>http://www.desenvolvendosoftware.com.br/2009/08/diigo-links-e-postagens-automaticas/</link>
		<comments>http://www.desenvolvendosoftware.com.br/2009/08/diigo-links-e-postagens-automaticas/#comments</comments>
		<pubDate>Sat, 15 Aug 2009 02:36:27 +0000</pubDate>
		<dc:creator>Leila</dc:creator>
				<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Ops]]></category>

		<guid isPermaLink="false">http://www.desenvolvendosoftware.com.br/?p=254</guid>
		<description><![CDATA[Ontem decidi que iria postar links uma vez por semana. De alguma forma eu tinha que possuir uma plataforma para isso. Eu já tinha delicious, no entanto queria algo específico para o blog. Por quê? Eu trabalho com alguns assuntos que interessam poucas pessoas, principalmente a grande maioria dos leitores do blog, que tiver alguma [...]]]></description>
			<content:encoded><![CDATA[<p>Ontem decidi que iria postar links uma vez por semana. De alguma forma eu tinha que possuir uma plataforma para isso. Eu já tinha <a href="http://delicious.com/lalgarve">delicious</a>, no entanto queria algo específico para o blog. Por quê? Eu trabalho com alguns assuntos que interessam poucas pessoas, principalmente a grande maioria dos leitores do blog, que tiver alguma curiosidade pode olhar esse <a href="http://www.pathwaycommons.org/pc/">link</a>, além disso os meu bookmarks precisam de uma boa faxina e organização. <a href="http://www.diigo.com/">diigo</a> pareceu-me uma alternativa, eu também podia por links e escrever comentários e havia a possibilidade de postar automaticamente no meu blog duas vezes ao dia, diariamente ou semanalmente. Pus para postar automaticamente e depois me arrependi, no entanto, pensei que estava configurado para postar <strong>semanalmente</strong>, isto é, o post iria sair só no domingo, por isso não me preocupei. Quando entrei no blog hoje à noite, ops, o post estava lá, do jeito que <strong>eu não queria</strong>. Não tive outra alternativa além de editar um post já publicado.</p>
<p><span id="more-254"></span></p>
<h2>Quais são os problemas da postagem automática do diggo?</h2>
<ul>
<li>Posta o conteúdo das páginas: Além disso não ser adequado por poder violar direitos autorais, o automático nem sempre fica bom. Algumas figuras ficaram pela metade.</li>
<li>Posta os links como nofollow: Eu gostei dos links é justo que esses sejam contabilizados no pagerank das referidas páginas.</li>
<li>Posta alguns dizeres em inglês e detalhes que não acho relevantes.</li>
</ul>
<h2>Solução:</h2>
<p>Não vou desistir do diigo, porém passarei a usar o meu próprio &#8220;template&#8221;. Para isso, escreverei um pouco de código, afinal, qual é mesmo minha profissão? <img src='http://www.desenvolvendosoftware.com.br/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.desenvolvendosoftware.com.br/2009/08/diigo-links-e-postagens-automaticas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Os Melhores Links da Semana 14/08/2009</title>
		<link>http://www.desenvolvendosoftware.com.br/2009/08/os-melhores-links-da-semana-08142009/</link>
		<comments>http://www.desenvolvendosoftware.com.br/2009/08/os-melhores-links-da-semana-08142009/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 10:30:34 +0000</pubDate>
		<dc:creator>Leila</dc:creator>
				<category><![CDATA[Links da Semana]]></category>
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://www.desenvolvendosoftware.com.br/2009/08/os-melhores-links-da-semana-08142009/</guid>
		<description><![CDATA[The Holy Grail 3 column Liquid Layout. Pixel widths. Cross-Browser. Equal Height Columns.
Quase ninguém usa layout com percentagens, principalmente em blogs. Porquê? Quando se muda a largura do browser, a largura da barra lateral se altera. O que é o Holy Grail? É uma forma de layout onde a largura da barra lateral se mantem [...]]]></description>
			<content:encoded><![CDATA[<h2><a href='http://matthewjamestaylor.com/blog/ultimate-3-column-holy-grail-pixels.htm'>The Holy Grail 3 column Liquid Layout. Pixel widths. Cross-Browser. Equal Height Columns.</a></h2>
<p>Quase ninguém usa layout com percentagens, principalmente em blogs. Porquê? Quando se muda a largura do browser, a largura da barra lateral se altera. O que é o Holy Grail? É uma forma de layout onde a largura da barra lateral se mantem constante, e toda o espaço extra vai para o conteúdo principal da página.</p>
<p><span id="more-248"></span></p>
<h2><a href='http://www.brasiltech.net/agilez/2009/08/09/por-que-agilez'>AgileZ » Por que AgileZ?</a></h2>
<p>Este blog sobre desenvolvimento de software é novo, tem no momento que escrevo apenas duas postagens mas parece bastante promissor.</p>
<h2><a href='http://www.pendriveapps.com/'>Free Portable Software USB Flash Drive Applications | Pendriveapps</a></h2>
<p>Na escola, na faculdade, em computadores emprestados, não há como instalar programas. A solução é usar programas diretamente do Pen-Drive. Este site é o melhor lugar para se encontrar esses programas.</p>
<p>Postado a partir dos meus bookmarks de <a href='http://www.diigo.com'>Diigo</a>. O restante dos meus <a href='http://www.diigo.com/user/lalgarve'>links favoritos</a> estão.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.desenvolvendosoftware.com.br/2009/08/os-melhores-links-da-semana-08142009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Otimização de Software: Quando? Onde? Porquê?</title>
		<link>http://www.desenvolvendosoftware.com.br/2009/08/otimizacao-de-software-quando-onde-porque/</link>
		<comments>http://www.desenvolvendosoftware.com.br/2009/08/otimizacao-de-software-quando-onde-porque/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 11:47:33 +0000</pubDate>
		<dc:creator>Leila</dc:creator>
				<category><![CDATA[Desempenho]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Resolução Problemas]]></category>

		<guid isPermaLink="false">http://www.desenvolvendosoftware.com.br/?p=237</guid>
		<description><![CDATA[A otimização de software é um dos tópicos mais mal-entendidos pelos profissionais de TI. Muitos pensam que a performace só deve ser levada em consideração ao final do desenvolvimento, devido a uma máxima conhecida por muitos &#34;premature optimization is the root of all evil&#34;, em tradução livre &#34;otimização prematura é a raiz de todos os [...]]]></description>
			<content:encoded><![CDATA[<p>A otimização de software é um dos tópicos mais mal-entendidos pelos profissionais de TI. Muitos pensam que a performace só deve ser levada em consideração ao final do desenvolvimento, devido a uma máxima conhecida por muitos &quot;premature optimization is the root of all evil&quot;, em tradução livre &quot;otimização prematura é a raiz de todos os males&quot;. Este dizer é mal-interpretado por muitos como: todas as considerações de performace devem ser feitas apenas ao final do desenvolvimento. É mesmo? Problemas de performance podem e devem ser previstos durante a fase de projeto, como tudo em software, <strong>quando mais cedo o problema é encontrado, mais barato é a solução.</strong> </p>
<h2>O mal entendido</h2>
<p>O dizer “otimização prematura é a raiz de todos os males” de Donald Knuth está incompleto. A forma completa é “We should forget about small efficiencies, say about 97% of the time, premature optimization is the root of all evil.”, em tradução livre “Devemos esquecer as pequenas eficiências, digamos 97% do tempo, otimização prematura é a raiz de todos os males.” Donald Knuth estava falando da micro-otimização do código, não fornecendo um passe livre para métodos ineficientes. </p>
<p>Outro ponto a ser considerado, é a época na qual Donald Knuth fez a sua declaração. Naqueles idos tempos, otimização normalmente consistia em ficar contando ciclos de CPU gastos em cada instrução. Com certeza, esse tipo de preocupação não é adequada no momento do projeto do sistema. Ele não estava falando da escolha do algoritmo, estruturas de dados, uso adequado de loops, etc.. </p>
<p><span id="more-237"></span></p>
<h2>O que deve ser feito?</h2>
<p>O código fonte de um programa deve ser claro e de fácil manutenção. Pequenas ineficiências são perfeitamente aceitáveis. Em uma série de excelentes artigos de Thomas Aylesworth, Software Efficiency and Optimization Partes <a href="http://swampthingtom.blogspot.com/2007/03/software-efficiency-and-optimization.html">1</a>, <a href="http://swampthingtom.blogspot.com/2007/03/software-efficiency-and-optimization_25.html">2</a> e <a href="http://swampthingtom.blogspot.com/search/label/Software%20Development">3</a>, comenta sobre o caso do laço <em>foreach</em>, mais ineficiente porém mais claro que o laço <em>for</em>. A diferença é pequena o suficiente para não ter importância na maior parte do tempo no desenvolvimento de jogos e os cálculos realizados em jogos precisam ser rápidos o suficiente para que ele flua bem. </p>
<p>Um dos itens mais importantes para a velocidade de um programa é o algoritmo utilizado. Quando se faz a escolha de um determinado algoritmo deve-se poder estimar o seu comportamento, principalmente se o número de dados é alto. Esse comportamento normalmente&#160; é definido usando a notação <em>Big O</em>, a qual é usada para comparar algoritmos.</p>
<table border="1" cellspacing="0" cellpadding="2" width="90%">
<tbody>
<tr>
<td valign="top" width="25%">Eficiência</td>
<td valign="top" width="25%">Propriedade Matemática</td>
<td valign="top" width="50%">Comentário</td>
</tr>
<tr>
<td valign="top" width="25%">O(1)</td>
<td valign="top" width="25%">Constante</td>
<td valign="top" width="50%">Independe do tamanho da entrada. Eficiência ideal. Ex: pesquisa em uma tabela hash bem feita</td>
</tr>
<tr>
<td valign="top" width="25%">O(log n)</td>
<td valign="top" width="25%">Logarítmica</td>
<td valign="top" width="50%">Cresce algoritmicamente com o tamanho da entrada. Excelente eficiência, pois o logaritmo cresce lentamente. Ex: pesquisa em uma árvore binária balanceada</td>
</tr>
<tr>
<td valign="top" width="25%">O(n)</td>
<td valign="top" width="25%">Linear</td>
<td valign="top" width="50%">Cresce linearmente com o tamanho da entrada. Boa eficiência. Ex: pesquisa em uma lista encadeada</td>
</tr>
<tr>
<td valign="top" width="133">O(nlogn)</td>
<td valign="top" width="133">Não Linear</td>
<td valign="top" width="133">Desempenho semelhante ao linear, pois o logaritmo cresce lentamente. Desempenho aceitável para muitos dados. Ex: ordenação usando o método quicksort</td>
</tr>
<tr>
<td valign="top" width="25%">O(n²)</td>
<td valign="top" width="25%">Quadrática</td>
<td valign="top" width="50%">Cresce quadradicamente com o tamanho da entrada. Problemas ocorrem com um volume grande de dados. Ex: ordenação usando o método bolha</td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p>Um algoritimo O(n²) pode ser mais rápido para um número pequenos de dados que um algoritmo O(nlogn), mas com certeza à medida que este número aumenta, o tempo de execução do algoritmo menos eficiente tenderá a ser maior. Isso não quer dizer que o algoritmo mais eficiente deva sempre ser escolhido, muitas vezes um mais simples pode ser o mais adequado. Como escolher? A experiência ajuda, se houver dúvidas pode-se sempre testar com um prototipo.</p>
<p>Outro fato importante é saber as boas práticas da plataforma que você usa. Em Java, por exemplo, você não deve concatenar strings dentro de um loop usando a classe <em>String</em>, deve-se usar a classe <em>StringBuffer.</em> Sobre SQL, encontrei dois posts excelentes: um sobre <a href="http://sqlblog.com/blogs/kevin_kline/archive/2009/07/10/why-do-i-keep-seeing-this-mistake.aspx">loops</a> e outro sobre <a href="http://www.simple-talk.com/community/blogs/philfactor/archive/2009/08/03/74227.aspx">Ad-hoc queries</a>. O post sobre loops traz uma observação simples, aplicável um muitas situações: coloque dentro de loops apenas o que for necessário.</p>
<p><strong>O que eu já vi por aí?</strong> Loops esperando um evento ocorrer sem um sleep (CPU vai a 100%); mensagens de log para debug, dentro de um loop, no código de produção causando lentidão (não havia como desabilitar); criar uma conecção SQL nova para cada usuário logado no sistema de controle de horas e só fechar quando houver <em>logout</em> ou a seção expirar (a empresa tinha direito a 3 conexões e mais de 100 usuários no sistema, na hora da saída, era uma beleza) . Eu já tive problema com o envio de um número excessivo de objetos para um Applet.</p>
<p>É impossível prever tudo. Fez o melhor dentro do seu conhecimento e o desempenho ainda é insatisfatório? Procure a causa e trate, provavelmente será em uma porção pequena do sistema.</p>
<p><strong>Resumindo:</strong> &#8220;otimização prematura é a raiz de todos os males&#8221; não deve ser usada para justificar desperdício de recursos do usuário, nem para codificação descuidada. Deixe a micro-otimização apenas para quando for necessário, mas pense sim, ainda no projeto, no desempenho do sistema. Muitos softwares atuais são pesados, lentos, além do necessário. Bom desempenho e leveza vende bem. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.desenvolvendosoftware.com.br/2009/08/otimizacao-de-software-quando-onde-porque/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Feeds do WordPress &#8211; Resolução de Problemas</title>
		<link>http://www.desenvolvendosoftware.com.br/2009/08/feeds-do-wordpress-resolucao-de-problemas/</link>
		<comments>http://www.desenvolvendosoftware.com.br/2009/08/feeds-do-wordpress-resolucao-de-problemas/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 06:34:05 +0000</pubDate>
		<dc:creator>Leila</dc:creator>
				<category><![CDATA[Blogs]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Resolução Problemas]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.desenvolvendosoftware.com.br/?p=200</guid>
		<description><![CDATA[O WordPress pode retornar erros nos feeds. A solução para os problemas encontrei em W3it: Wordpress: feed output error solution. How to remove white spaces and fix problems . Segundo o artigo publicado pelo blog acima, o erro não acontece sempre, já que não houve problemas durante os testes. De qualquer forma, o erro ocorreu [...]]]></description>
			<content:encoded><![CDATA[<p>O WordPress pode retornar erros nos feeds. A solução para os problemas encontrei em <a href="http://www.w3it.org/blog/wordpress-feed-error-output-solution-how-to/"  >W3it: Wordpress: feed output error solution. How to remove white spaces and fix problems</a> . Segundo o artigo publicado pelo blog acima, o erro não acontece sempre, já que não houve problemas durante os testes. De qualquer forma, o erro ocorreu com o feed desse blog. Na figura 1, temos como o erro é visto no Mozila Firefox:</p>
<div id="attachment_205" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/ErroFeedWP.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/ErroFeedWP.png" alt="Figura 1: Erro do Feed do WordPress no FireFox" title="ErroFeedWP" width="450" height="245" class="size-medium wp-image-205" /></a><p class="wp-caption-text">Figura 1: Erro do Feed do WordPress no FireFox</p></div><br />
<span id="more-200"></span><br />
O erro acima ocorre porque há inclusão de caracteres extras no início do feed. Para resolver esse problema, é necessário modificar os arquivos dos feeds que estão localizados na pasta <em>wp-includes</em>. Como eu uso o <a href="http://www.FeedBurner.com/">FeedBurner</a>, pus para ler o feed de <strong>http://www.desenvolvendosoftware.com.br/feed/rss2/</strong> e uso configuração interna para converter para outros formatos, assim preciso modificar e testar apenas dois feeds (um principal e outro de comentário).  A configuração está indicada abaixo: na aba <em>Optimize</em> escolha a opção <em>SmartFeed</em>.</p>
<p><div id="attachment_218" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/configuração-feedburner.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/configuração-feedburner" alt="Figura 2: Configuração do FeedBurner para feeds" title="Configuração do FeedBurner" width="450" height="467" class="size-medium wp-image-218" /></a><p class="wp-caption-text">Figura 2: Configuração do FeedBurner para feeds</p></div>
<p>Os arquivos a serem modificados são <em>feed-rss2.php</em> e <em>feed-rss2-comments.php</em> da pasta <em>wp-includes</em>. As listagens abaixo mostram o início dos arquivos já modificados. No arquivo <em>feed-rss2.php</em> foram acrescentadas as linhas 11 a 13, e no arquivo <em>feed-rss2-comments.php</em> as linhas 13 a 15. Repare que o código acrescentado em ambos os arquivos é o mesmo. </p>
<p><strong>feed-rss2.php</strong>
<pre class="hl"><span class="hl line"> 1 </span><span class="hl sym">&lt;</span>?php
<span class="hl line"> 2 </span><span class="hl com">/**</span>
<span class="hl line"> 3 </span><span class="hl com"> * RSS2 Feed Template for displaying RSS2 Posts feed.</span>
<span class="hl line"> 4 </span><span class="hl com"> *</span>
<span class="hl line"> 5 </span><span class="hl com"> * &#64;package WordPress</span>
<span class="hl line"> 6 </span><span class="hl com"> */</span>
<span class="hl line"> 7 </span>
<span class="hl line"> 8 </span><span class="hl kwa">header</span><span class="hl sym">(</span><span class="hl str">'Content-Type: '</span> . <span class="hl kwd">feed_content_type</span><span class="hl sym">(</span><span class="hl str">'rss-http'</span><span class="hl sym">)</span> . <span class="hl str">'; charset='</span>
<span class="hl line"> 9 </span>. <span class="hl kwd">get_option</span><span class="hl sym">(</span><span class="hl str">'blog_charset'</span><span class="hl sym">),</span> true<span class="hl sym">);</span>
<span class="hl line">10 </span><span class="hl kwc">$more</span> <span class="hl sym">=</span> <span class="hl num">1</span><span class="hl sym">;</span>
<span class="hl line">11 </span><span class="hl kwc">$out</span> <span class="hl sym">=</span> <span class="hl kwa">ob_get_contents</span><span class="hl sym">();</span>
<span class="hl line">12 </span><span class="hl kwc">$out</span> <span class="hl sym">=</span> <span class="hl kwa">str_replace</span><span class="hl sym">(</span><span class="hl kwa">array</span><span class="hl sym">(</span><span class="hl str">&quot;</span><span class="hl esc">\n</span><span class="hl str">&quot;</span><span class="hl sym">,</span> <span class="hl str">&quot;</span><span class="hl esc">\r</span><span class="hl str">&quot;</span><span class="hl sym">,</span> <span class="hl str">&quot;</span><span class="hl esc">\t</span><span class="hl str">&quot;</span><span class="hl sym">,</span> <span class="hl str">&quot; &quot;</span><span class="hl sym">),</span> <span class="hl str">&quot;&quot;</span><span class="hl sym">,</span> <span class="hl kwc">$input</span><span class="hl sym">);</span>
<span class="hl line">13 </span><span class="hl kwa">ob_end_clean</span><span class="hl sym">();</span>
<span class="hl line">14 </span>
<span class="hl line">15 </span><span class="hl kwa">echo</span> <span class="hl str">'&lt;?xml version=&quot;1.0&quot; encoding=&quot;'</span>.<span class="hl kwd">get_option</span><span class="hl sym">(</span><span class="hl str">'blog_charset'</span><span class="hl sym">)</span>.<span class="hl str">'&quot;?'</span>.
<span class="hl line">16 </span><span class="hl str">'&gt;'</span><span class="hl sym">;</span> ?<span class="hl sym">&gt;</span>
</pre>
<p><br/><br />
<strong>feed-rss2-comments.php</strong>
<pre class="hl"><span class="hl line"> 1 </span><span class="hl sym">&lt;</span>?php
<span class="hl line"> 2 </span><span class="hl com">/**</span>
<span class="hl line"> 3 </span><span class="hl com"> * RSS2 Feed Template for displaying RSS2 Comments feed.</span>
<span class="hl line"> 4 </span><span class="hl com"> *</span>
<span class="hl line"> 5 </span><span class="hl com"> * &#64;package WordPress</span>
<span class="hl line"> 6 </span><span class="hl com"> */</span>
<span class="hl line"> 7 </span>
<span class="hl line"> 8 </span><span class="hl kwa">header</span><span class="hl sym">(</span><span class="hl str">'Content-Type: '</span> . <span class="hl kwd">feed_content_type</span><span class="hl sym">(</span><span class="hl str">'rss-http'</span><span class="hl sym">)</span> . <span class="hl str">'; charset='</span>
<span class="hl line"> 9 </span>. <span class="hl kwd">get_option</span><span class="hl sym">(</span><span class="hl str">'blog_charset'</span><span class="hl sym">),</span> true<span class="hl sym">);</span>
<span class="hl line">10 </span>
<span class="hl line">11 </span><span class="hl kwa">echo</span> <span class="hl str">'&lt;?xml version=&quot;1.0&quot; encoding=&quot;'</span>.<span class="hl kwd">get_option</span><span class="hl sym">(</span><span class="hl str">'blog_charset'</span><span class="hl sym">)</span>.<span class="hl str">'&quot;?'</span>.
<span class="hl line">12 </span><span class="hl str">'&gt;'</span><span class="hl sym">;</span>
<span class="hl line">13 </span><span class="hl kwc">$out</span> <span class="hl sym">=</span> <span class="hl kwa">ob_get_contents</span><span class="hl sym">();</span>
<span class="hl line">14 </span><span class="hl kwc">$out</span> <span class="hl sym">=</span> <span class="hl kwa">str_replace</span><span class="hl sym">(</span><span class="hl kwa">array</span><span class="hl sym">(</span><span class="hl str">&quot;</span><span class="hl esc">\n</span><span class="hl str">&quot;</span><span class="hl sym">,</span> <span class="hl str">&quot;</span><span class="hl esc">\r</span><span class="hl str">&quot;</span><span class="hl sym">,</span> <span class="hl str">&quot;</span><span class="hl esc">\t</span><span class="hl str">&quot;</span><span class="hl sym">,</span> <span class="hl str">&quot; &quot;</span><span class="hl sym">),</span> <span class="hl str">&quot;&quot;</span><span class="hl sym">,</span> <span class="hl kwc">$input</span><span class="hl sym">);</span>
<span class="hl line">15 </span><span class="hl kwa">ob_end_clean</span><span class="hl sym">();</span>
<span class="hl line">16 </span>?<span class="hl sym">&gt;</span>
</pre>
<p><br/><br />
No artigo <a href="http://www.w3it.org/blog/wordpress-feed-error-output-solution-how-to/"  target="_blank">W3it: Wordpress: feed output error solution. How to remove white spaces and fix problems</a> também é colocado um problema em relação à URL no feed de comentários, sendo estas do tipo <strong>http://www.axew3.com/b10g/?page_id=5&#038;cpage=1#comment-357</strong> podem ocasionar problemas em alguns browsers devido ao caracter &#8220;&#038;&#8221;. No entanto, as URL dos meu comentários são da forma <strong>http://www.desenvolvendosoftware.com.br/2009/08/codigo-fonte-com-cores/comment-page-1/#comment-10</strong>.  </p>
<p><strong>Por que a diferença?</strong>  No meu artigo, <a href="http://www.desenvolvendosoftware.com.br/2009/08/configuracoes-importantes-wordpress-url-anti-spam/">Configurações Importantes WordPress: URL e Anti-Spam</a> explico como gerar URL &#8220;bonitas&#8221; para as postagens. Graças a essa configuração, o caracter problemático não aparece e não é necessário fazer nenhuma modificação adicional.</p>
<p>Depois de modificar os arquivos, é necessário dar um &#8220;ping&#8221; no FeedBurner, senão o feed com erro continuará a ser utilizado. O link para o ping está localizado bem abaixo, está em destaque na figura 2. Antes da atualização do WordPress, faça o backup de ambos os arquivos, pois eles serão alterados. Caso você não uso o FeedBurner, os outros arquivos de feed localizados na pasta <em>wp-includes</em> também precisarão ser alterados.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.desenvolvendosoftware.com.br/2009/08/feeds-do-wordpress-resolucao-de-problemas/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Código Fonte com Cores</title>
		<link>http://www.desenvolvendosoftware.com.br/2009/08/codigo-fonte-com-cores/</link>
		<comments>http://www.desenvolvendosoftware.com.br/2009/08/codigo-fonte-com-cores/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 13:06:28 +0000</pubDate>
		<dc:creator>Leila</dc:creator>
				<category><![CDATA[Blogs]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Tutorial WordPress Blogger]]></category>

		<guid isPermaLink="false">http://www.desenvolvendosoftware.com.br/?p=132</guid>
		<description><![CDATA[Muitas vezes se faz necessário incluir código fonte em blogs. Há várias soluções, podendo ser resumidas em: plugins, scripts PHP, JavaScript e colar e copiar. Nesse blog optei pela última por ser rápida, tanto para o servidor quanto para o cliente. Para isso, uso o software Highlight.  O programa gera o CSS necessário, já [...]]]></description>
			<content:encoded><![CDATA[<p>Muitas vezes se faz necessário incluir código fonte em blogs. Há várias soluções, podendo ser resumidas em: plugins, scripts PHP, JavaScript e colar e copiar. Nesse blog optei pela última por ser rápida, tanto para o servidor quanto para o cliente. Para isso, uso o software <a href="http://www.andre-simon.de/">Highlight</a>.  O programa gera o CSS necessário, já vem com várias modelos de cores. O uso do CSS tem a vantagem de permitir a troca do modelo de cores, apenas mudando o templare. É possível que a ferramenta de blogar que você use não permita que mude o CCS, como o WordPress grátis.<br />
<span id="more-132"></span></p>
<h2>1 &#8211; A interface do programa</h2>
<p>A interface do programa é simples, vamos começar com a figura 1. Na posição (1) aparece o menu, isso mesmo, apenas 2 opções. É possível abrir mais de um arquivo ao mesmo tempo e eles aparecem na posição (2). Em (3) temos uma pré-visualização de como ficará a conversão. As opções mais importantes de (4) são:</p>
<ul>
<li><strong>Add line numbers</strong> &#8211; se estiver selecionada, os números de linha serão adicionados e o número à direita (2 na figura) indica o espaço mínimo ocupado pelo número. Essa opção existe para evitar que o código fique desalinhado devido aos números de linhas.</li>
<li><strong>Pad with zeros</strong> -Se estiver selecionada zeros são colocados à esquerda do número, se não estiver, espaços são colocados à esquerda. </li>
<li><strong>Omit header and footer</strong> &#8211; Se estiver selecionada, o cabeçalho nem o rodapé do arquivo HTML é gerado. Depois haverá um exemplo.</li>
</ul>
<p>Na posição (5) o botão <em>Convert Files</em> gera arquivos com o código e o botão <em>Clipboard</em> copia o código para a área de transferência. Veremos adiante que esta é uma opção muito prática.</p>
<div id="attachment_149" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/Highlight_geral.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/Highlight_geral.png" alt="Figura 1: Mostra a tela inicial do Highlight" title="Tela do Highlight - Opção Geral" width="450" height="404" class="size-medium wp-image-149" /></a><p class="wp-caption-text">Figura 1: Mostra a tela inicial do Highlight</p></div>
<p>Na figura 2, temos uma nova tab: <em>Output Specific</em>. Primeiro temos dois checkboxes: Embed Style (CSS) e Inline CSS. A primeira opção inclui o estilo CSS no código gerado. Se a segunda estiver checada também, a formatação não dependerá do CSS. Informações de fonte, cores, etc, estarão especificadas em cada elemento. Esta última opção é útil para os casos onde não é possível modificar o CSS, como a hospedagem gratuita do WordPress.<br />
<div id="attachment_158" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/HighLight_output.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/HighLight_output.png" alt="Figura 2: Mostra opções de estilo da tab output" title="HighLight OutPut tab (1)" width="450" height="404" class="size-medium wp-image-158" /></a><p class="wp-caption-text">Figura 2: Mostra opções de estilo da tab output</p></div></p>
<p>Na figura 3, ainda na tab <em>Output Specific</em>, em <em>Misc</em>, há uma opção bem interessante: &#8220;Enclose in pre tags&#8221;. Esta opção pode ser selecionada quando se omite o cabeçalho e o rodapé (figura 1). Neste caso, o programa porá automaticamente as tags
<pre></pre>
<p>. Neste caso, o código formatado estará pronto para ser copiado e colado na post (lembra do botão clipboard). A tab <em>Formating</em> possui opções para mudar as cores, fontes, etc (figura 4). Eu uso o tema acid.<br />
<div id="attachment_162" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/HighLight_output_mis.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/HighLight_output_mis.png" alt="Figura 3: HighLigh Output - tag &lt;pre&gt;" title="HighLight Output(2)" width="450" height="269" class="size-medium wp-image-162" /></a><p class="wp-caption-text">Figura 3: HighLigh Output - tag
<pre></p></div>

<div id="attachment_163" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/HighLight_formating.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/HighLight_formating.png" alt="Figura 4: HighLight Tab Formating" title="HighLight Formating" width="450" height="269" class="size-medium wp-image-163" /></a><p class="wp-caption-text">Figura 4: HighLight Tab Formating</p></div>
<h2>2 &#8211; Configuração do Template </h2>

Na configuração do template do blog colocamos as definições CSS. Isso é necessário apenas uma vez. 
<ul>
<li>Escolha um arquivo qualquer e gere a saída com as cores e fontes desejadas. A opção <em>Omit header and footer</em> (figura 1) precisa estar desabilitada e a opção <em>Embed style(css)</em> (figura 2) precisa estar habilitada.</li>
<li>O trecho de código abaixo mostra as definições criadas pelo programa. É necessário copiar o conteúdo da linha 7 até a linha 23 e colar no template. </li>
</ul>

<strong>WordPress:</strong> Aparência->Editor->style.css (figura 5)<br/>
<strong>Blogger:</strong> Layout -> Editar HTML -> Editar Modelo (figura 4)<br/>
<strong>Lembre-se de fazer o back-up antes de qualquer alteração!</strong><br/>	
<pre class="hl"><span style="color:#303030"> 5 </span><span style="color:#bb7977; font-weight:bold">&lt;style</span> <span style="color:#8080c0; font-weight:bold">type</span>=<span style="color:#a68500">&quot;text/css&quot;</span><span style="color:#bb7977; font-weight:bold">&gt;</span>
<span style="color:#303030"> 6 </span><span style="color:#ff8000">&lt;!--</span>
<span style="color:#303030"> 7 </span><span style="color:#ff8000">body.hl	{ background-color:#eeeeee; }</span>
<span style="color:#303030"> 8 </span><span style="color:#ff8000">pre.hl	{ color:#000000; background-color:#eeeeee; font-size:8pt;</span>
<span style="color:#303030"> 9 </span><span style="color:#ff8000">font-family:'Courier New';}</span>
<span style="color:#303030">10 </span><span style="color:#ff8000">.hl.num { color:#800080; font-weight:bold; }</span>
<span style="color:#303030">11 </span><span style="color:#ff8000">.hl.esc { color:#ff00ff; font-weight:bold; }</span>
<span style="color:#303030">12 </span><span style="color:#ff8000">.hl.str { color:#a68500; }</span>
<span style="color:#303030">13 </span><span style="color:#ff8000">.hl.dstr { color:#0000ff; }</span>
<span style="color:#303030">14 </span><span style="color:#ff8000">.hl.slc { color:#f27900; }</span>
<span style="color:#303030">15 </span><span style="color:#ff8000">.hl.com { color:#ff8000; }</span>
<span style="color:#303030">16 </span><span style="color:#ff8000">.hl.dir { color:#0080c0; font-weight:bold; }</span>
<span style="color:#303030">17 </span><span style="color:#ff8000">.hl.sym { color:#ff0080; font-weight:bold; }</span>
<span style="color:#303030">18 </span><span style="color:#ff8000">.hl.line { color:#303030; }</span>
<span style="color:#303030">19 </span><span style="color:#ff8000">.hl.mark	{ background-color:#ffffbb;}</span>
<span style="color:#303030">20 </span><span style="color:#ff8000">.hl.kwa { color:#bb7977; font-weight:bold; }</span>
<span style="color:#303030">21 </span><span style="color:#ff8000">.hl.kwb { color:#8080c0; font-weight:bold; }</span>
<span style="color:#303030">22 </span><span style="color:#ff8000">.hl.kwc { color:#0080c0; }</span>
<span style="color:#303030">23 </span><span style="color:#ff8000">.hl.kwd { color:#004466; }</span>
<span style="color:#303030">24 </span><span style="color:#ff8000">//--&gt;</span>
<span style="color:#303030">25 </span><span style="color:#bb7977; font-weight:bold">&lt;/style&gt;</span></pre>
<div id="attachment_172" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/wordpress_css.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/wordpress_css.png" alt="Figura 5: Mudança Template do WordPress" title="Mudança Template do WordPress" width="450" height="346" class="size-medium wp-image-172" /></a><p class="wp-caption-text">Figura 5: Mudança Template do WordPress</p></div>
<div id="attachment_174" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/blogger_css.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/blogger_css.png" alt="Figura 6: Mudança Template Blogger" title="Mudança Template Blogger" width="450" height="382" class="size-medium wp-image-174" /></a><p class="wp-caption-text">Figura 6: Mudança Template Blogger</p></div>
<h2>3 &#8211; Geração do código formatado com cores </h2>
<p>Depois da alteração dos templates, eu deixo as opções <em>Omit header and footer</em> e <em>Enclose in pre tags</em> habilitadas. Abro os arquivos cujo código desejo formatar e clico em <em>Clipboard</em> e depois colo no editor de postagens. Às vezes é necessário fazer alguma formatação adicional. A borda em volta do meu código é uma formatação extra que inclui no meu CSS.</p>
<pre class="hl"><span style="color:#ff8000">pre.hl	{ color:#000000; background-color:#eeeeee; font-size:8pt;</span>
<span style="color:#ff8000">font-family:'Courier New'; border-style:solid; border-width:3px; padding:3px;}</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.desenvolvendosoftware.com.br/2009/08/codigo-fonte-com-cores/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Configurações Importantes WordPress: URL e Anti-Spam</title>
		<link>http://www.desenvolvendosoftware.com.br/2009/08/configuracoes-importantes-wordpress-url-anti-spam/</link>
		<comments>http://www.desenvolvendosoftware.com.br/2009/08/configuracoes-importantes-wordpress-url-anti-spam/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 20:02:58 +0000</pubDate>
		<dc:creator>Leila</dc:creator>
				<category><![CDATA[Blogs]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.desenvolvendosoftware.com.br/?p=72</guid>
		<description><![CDATA[Tutorial para configurações importantes que devem ser feitas após a instalação do WordPress.]]></description>
			<content:encoded><![CDATA[<p>Na <a href="http://www.desenvolvendosoftware.com.br/2009/08/instalando-wordpress-no-seu-computador-ou-pen-drive/" >Instalando WordPress no seu Computador ou Pen-Drive</a> explicamos como instalar o WordPress no pen drive ou no computador. Nessa postagem, usaremos a instalação feita no pen drive ou no computador, para indicar configurações úteis: como executar o WordPress a partir da raiz do site <strong>http://localhost/</strong> e não <strong>http://localhost/wordpress/</strong>, além das configurações do link permanente &#8220;bonito&#8221; e do anti-spam.</p>
<p>Nas instruções do site em inglês da <a href="http://codex.wordpress.org/Installing_WordPress">WordPress</a> diz que para instalar o WordPress na raiz do domínio (ex: http://www.exemplo.com.br/) é necessário por todos os arquivos do WordPress na raiz. Mas isso não é verdade, outro documento ensina como fazer diferente. <em>Por que não é adequado instalar o WordPress na raiz do domínio?</em> Você não instala um programa na raiz do seu disco rígido, não é mesmo? Se instalarmos tudo na raiz, o servidor fica uma bagunça. Assim, no meu domínio eu tenho o WordPress instalado na pasta wordpress mas o endereço do meu blog é http://www.desenvolvendosoftware.com.br/.<br />
<span id="more-72"></span></p>
<h2>1 &#8211; Mudança do endereço do blog</h2>
<ul>
<li>Logue no painel de administração <a href="http://localhost/wordpress/wp-admin/"> http://localhost/wordpress/wp-admin/</a>, usuário admin e a senha.</li>
<li>Na barra lateral, vá em configuração e mude os dados como está na Figura 10 e depois confirme.<br />
<div id="attachment_67" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/endereco_blog.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/endereco_blog.png" alt="Figura 1: Mostra como mudar o endereço do blog" title="Endereço do Blog" width="450" height="180" class="size-medium wp-image-67" /></a><p class="wp-caption-text">Figura 1: Mostra como mudar o endereço do blog</p></div>
</li>
<li>Faça o logout do painel de administração.</li>
<li>Mova o arquivo <em>index.php</em> da pasta <em>UniServer\udrive\www\wordpress</em> para a pasta <em>UniServer\udrive\www</em>. Aparecerá uma mensagem alertando da existência de outro arquivo <em>index.php</em>. Esse arquivo pode ser sobrescrito sem problema.</li>
<li>Mude a seguinte linha do arquivo index.php:<br />
<code>require('./wp-blog-header.php');</code><br />
para<br />
<code>require('./wordpress/wp-blog-header.php');</code>
</li>
<li>Pode agora entrar no seu blog <a href="http://localhost/">http://localhost/</a><br />
<div id="attachment_70" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/pagina_blog.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/pagina_blog.png" alt="Figura 2: Mostra a página inicial do blog" title="Página do Blog" width="450" height="344" class="size-medium wp-image-70" /></a><p class="wp-caption-text">Figura 2: Mostra a página inicial do blog</p></div></li>
</ul>
<p>Pronto o endereço do blog foi alterado.</p>
<h2>2 &#8211; Criação dos Links Permanentes &#8220;Bonitos&#8221;</h2>
<p>A forma padrão de se acessar as postagens do blog é algo do tipo: http://localhost/?p=123. Esse tipo de acesso é pouco conveniente, não diz nada a respeito em relação à postagem. No entanto, o WordPress permite que se configure URL mais &#8220;bonitas&#8221;:<br />
 <strong>http://www.desenvolvendosoftware.com.br/2009/08/configuracoes-importantes-wordpress-url-anti-spam</strong>. </p>
<p>Para isso, siga os passos abaixo:</p>
<ul>
<li>Faça login novamente no painel de administração. Há um link no blog, está indicado em vermelho na figura 2.</li>
<li>No menu lateral escolha a opção <em>Configurações</em> e depois <em>Links Permanentes</em>. Aparecerá a página da figura 3. Lá estão algumas opções, as mais comuns, eu escolhi <em>Mês e Ano</em><br />
<div id="attachment_110" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/Links_Permanentes.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/Links_Permanentes.png" alt="Figura 3: A página para mudança dos links permanentes" title="Links Permanentes" width="450" height="369" class="size-medium wp-image-110" /></a><p class="wp-caption-text">Figura 3: A página para mudança dos links permanentes</p></div></li>
<li>Clique em <em>Salvar Alterações</em>.</li>
<li>Deverá aparecer a mensagem: <em>Estrutura de links permanentes atualizada.</em></li>
</ul>
<h2>3 &#8211; Configuração Anti-Spam</h2>
<ul>
<li>Vá para o site <a href="http://www.wordpress.com/">http://www.wordpress.com/</a>. Caso você já tenha uma conta se logue, caso contrário registre uma.</li>
<li>Clique em <em>Meu painel de controle</em>, está bem em cima.</li>
<li>Clique na barra lateral em <em>Perfil</em>. Na Figura 4 aparece o meu perfil. Na localização do retângulo vermelho está a chave API do WordPress. Copie o valor.<br />
<div id="attachment_116" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/wordpress_com.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/wordpress_com-300x193.png" alt="Figura 4: O perfil em WordPress.com" title="Perfil WordPress.com" width="450" height="290" class="size-medium wp-image-116" /></a><p class="wp-caption-text">Figura 4: O perfil em WordPress.com</p></div></li>
<li>Volte para o painel de administração do seu blogue.</li>
<li>Clique na barra lateral em <em>Plugins</em>. </li>
<li>Clique em Ativar do plugin <em>Akismet</em> <div id="attachment_124" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/Akismet.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/Akismet.png" alt="Figura 5: Ativando o Plugin Akismet" title="Akismet" width="450" height="261" class="size-medium wp-image-124" /></a><p class="wp-caption-text">Figura 5: Ativando o Plugin Akismet</p></div></li>
<li> Aparecerá a mensagem: O Akismet está quase pronto. Você deve digitar sua chave API do WordPress.com para ativar este recurso.</li>
<li>Clique no link, digite a chave que você copiou do site <em>www.wordpress.com</em>  e clique em <em>Atualizar opções</em>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.desenvolvendosoftware.com.br/2009/08/configuracoes-importantes-wordpress-url-anti-spam/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>7 Pontos Críticos de um bom Software</title>
		<link>http://www.desenvolvendosoftware.com.br/2009/08/7-pontos-criticos-para-se-desenvolver-um-bom-programa/</link>
		<comments>http://www.desenvolvendosoftware.com.br/2009/08/7-pontos-criticos-para-se-desenvolver-um-bom-programa/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 05:38:34 +0000</pubDate>
		<dc:creator>Leila</dc:creator>
				<category><![CDATA[Interface com Usuário]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Desempenho]]></category>
		<category><![CDATA[Resolução Problemas]]></category>

		<guid isPermaLink="false">http://www.desenvolvendosoftware.com.br/?p=85</guid>
		<description><![CDATA[Ao se fazer um programa, além do funcionamento correto e desempenho, mais fatores contribuem para que esse seja um bom software. A interface não é lugar para arrombos criativos ou para um amontoado de opções de menus, ícones, etc. A documentação precisa estar presente. Abaixo detalho 7 pontos críticos.

1 &#8211; Conheça o seu usuário
O usuário [...]]]></description>
			<content:encoded><![CDATA[<p>Ao se fazer um programa, além do funcionamento correto e desempenho, mais fatores contribuem para que esse seja um bom software. A interface não é lugar para arrombos criativos ou para um amontoado de opções de menus, ícones, etc. A documentação precisa estar presente. Abaixo detalho 7 pontos críticos.<br />
<span id="more-85"></span></p>
<h2>1 &#8211; Conheça o seu usuário</h2>
<p>O usuário do seu programa normalmente não é você. Parece óbvio, não? Mas não é. Desenvolvedores possuem hábitos diferentes de um usuário &#8220;médio&#8221;. Por exemplo, estou digitando essa postagem em um editor de texto comum, que apenas mostra em destaque a marcação HTML. Não gosto de editores WYSIWYG (What You See, Is What You Get &#8211; O que você vê, é o que você terá), ou seja, editores visuais. Muitos cientistas odeiam o Word, usam só <a href="http://pt.wikipedia.org/wiki/LaTeX" target="wikipedia">Latex</a>. Se você está criando um software para desenvolvedores de Perl, um sistema de buscas usando <a href="http://pt.wikipedia.org/wiki/Expressão_regular" target="wikipedia">regex</a> fará sucesso, mas será inútil para biólogos. Ouça seu usuário, mas não faça aquilo o que ele quer e sim o que ele precisa. </p>
<h2>2 &#8211; Mantenha o simples</h2>
<p>Quantas vezes você não ficou perdido, procurando nas inúmeras opções apresentadas aquilo que você estava procurando? Parece difícil reduzir as opções, garanto que é mesmo. Não encha seu programa de recursos apenas porque você acha que possam ser útil. Interfaces complicadas são mais complicadas de usar e podem dificultar a vida do usuário, pois ele não consegue encontrar o que <strong>realmente</strong> precisa. A simplicidade é difícil de atingir, significa fazer escolhas. O seu software não precisa se dispor a resolver todos os problemas do usuário mas deve se concentrar em resolver um bem.</p>
<h2>3 &#8211; Seja Consistente</h2>
<p>Há dois tipos de consistências:</p>
<ul>
<li><strong>Interna</strong> -A consistência interna significa que as partes do programa funcionam de forma esperada. Por exemplo, se o seu programa tem diversos tipos de cadastros como fornecedores, produtos,<br />
clientes, etc; esses cadastros devem funcionar de forma semelhante.</li>
<li><strong>Externa</strong> &#8211; diz respeito a padrões. Por exemplo, os menus de aplicações diferentes têm usualmente algumas dessas opções: Arquivo, Editar e Ajuda. Eu lhe pergunto qual a opção você acessará para:
<ul>
<li>Copiar um trecho de um texto?</li>
<li>Saber a versão do programa?</i>
<li>Salvar o documento que você está editando com outro nome?</li>
</ul>
<p>Foi fácil, não? Nem falei qual era o programa.</li>
</ul>
<h2>4 &#8211; Forneça boas mensagens de erros </h2>
<p>As mensagens de erro devem ser positivas, indicando ao usuário o caminho a tomar. Por exemplo, em uma busca no banco de dados pelo nome <em>Felipe Santos</em>, a pessoa cometeu um erros de digitação e escreve <em>Felipe Snatos</em>. Uma mensagem do tipo  “Felipe Snatos não foi encontrado na tabela TP_CLIENTES” é inadequada. Seria melhor algo assim “Não consegui encontrar o cliente <em>Felipe Snatos</em>, você quis dizer <em>Felipe Santos</em>?”.</p>
<h2>5 &#8211; Não puna o usuário pelos erros cometidos</h2>
<p>Os dados e o trabalho do usuário são sagrados, faça tudo para que eles não sejam perdidos. Um sistema de desfazer as operações é essencial para a maioria dos programas e confirme todas as operações que são destrutivas, como sair do programa sem salvar o documento.  </p>
<h2>6 &#8211; Preste atenção nas cores e fontes</h2>
<p>A interface gráfica precisa ser facilmente lida, as cores precisam de um bom contraste entre si e as fontes precisam ser escolhidas com critério. Nada de usar fontes rebuscadas, escolha fonte simples como Times New Roman, Arial e Verdana.</p>
<h2>7 &#8211; Sistema de Ajuda e Documentação</h2>
<p>O seu software precisa de um sistema de ajuda. Inclua vários tipos de ajuda contextual, para guiar o usuário durante o uso do sistema. No sistema global, não liste apenas os diversos recursos existentes, mas também explique como executar tarefas específicas. A documentação pode ter vários níveis de detalhamento. Ninguém gosta de ler manuais extensos, seja breve e claro. Inclua um guia rápido de como usar as principais funções do seu programa.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.desenvolvendosoftware.com.br/2009/08/7-pontos-criticos-para-se-desenvolver-um-bom-programa/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Instalando WordPress no seu Computador ou Pen-Drive</title>
		<link>http://www.desenvolvendosoftware.com.br/2009/08/instalando-wordpress-no-seu-computador-ou-pen-drive/</link>
		<comments>http://www.desenvolvendosoftware.com.br/2009/08/instalando-wordpress-no-seu-computador-ou-pen-drive/#comments</comments>
		<pubDate>Sat, 01 Aug 2009 06:21:08 +0000</pubDate>
		<dc:creator>Leila</dc:creator>
				<category><![CDATA[Blogs]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.desenvolvendosoftware.com.br/?p=6</guid>
		<description><![CDATA[Instalar o WordPress em seu computador é mais simples que você imagina. Não há necessidade de configurações complicadas de servidores, banco de dados, etc.]]></description>
			<content:encoded><![CDATA[<p>WordPress é uma das mais populares plataformas de se blogar. Ele pode ser instalado facilmente no computador. São necessários um servidor web, php e banco de dados SQL. A instalação local é excelente para se criar um blog para testes e para conhecer a plataforma. Esse tutorial é para Windows.</p>
<p>Há outras maneiras de se criar um blog de testes. Por exemplo, no post do <a href="http://www.ferramentasblog.com/2009/07/criar-uma-conta-no-wordpress-padrao.html">Ferramentasblog</a>, explica como criar uma conta gratuita no WordPress.</p>
<p><em>Vantagem</em> da instalação do computador: está sempre disponível mesmo sem Internet.</p>
<p><em>Vantagem</em> da conta do WordPress: é mas simples. Cabe ressaltar que a instalação no computador é bem fácil quando se conhece o &#8220;caminho das pedras&#8221;. Nesse tutorial explico tudo detalhadamente.</p>
<p><span id="more-6"></span></p>
<h2>Programas Necessários:</h2>
<ul>
<li><a href="http://www.uniformserver.com/">The Uniform Server -</a> Este servidor possui o Apache, PHP e MySQL previamente instalados e configurados. Após clicar em <em>Download</em>, aparecerá uma página com dois arquivos para download. Eu fiz o download do arquivo UniServer4_3.zip, isso não significa que o UniServer4_3.exe não funcione, apenas não testei. Todo o tutorial é baseado no arquivo com extensão zip.
</li>
<li><a href="http://www.wordpress-br.com/">WordPress em Português do Brasil</a> Afinal estamos instalando o WordPress <img src='http://www.desenvolvendosoftware.com.br/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</li>
</ul>
<h2>Instalação do Servidor</h2>
<ul>
<li>Extraia o arquivo do servidor em uma pasta do disco rígido ou no Pen-Drive. Eu criei uma pasta em meu pen drive chamada <em>Blog Teste</em>, movi o arquivo UniServer4_3.zip para lá. Cliquei com o botão direito e pedi para extrair o arquivo. No Windows Vista aparece a janela da Figura 1. Eu apaguei o nome da última pasta. A extração pode demorar alguns minutos. Se o Windows criar uma pasta chamada UniServer4_3, não tem problema. Nesse caso você pode mover a pasta UniServer que está dentro.  <br/><br />
<div id="attachment_13" class="wp-caption aligncenter" style="width: 460px"> <a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/07/extracao_servidor.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/07/extracao_servidor.png" alt="Figura 1: Extraindo o servidor para a pasta Blog Teste do meu Pen Drive" title="Extração do Uniform Server" width="450" height="333" class="size-medium wp-image-13" /></a><p class="wp-caption-text">Figura 1: Extraindo o servidor para a pasta Blog Teste do meu Pen Drive</p></div></li>
<li>A pasta Uniserver deve ter sido criada, dentro dela há o arquivo Server_start.bat. Execute esse arquivo dando um clique duplo.</li>
<li>É possível que algum Firewall reclame do programa, dê as permissões necessárias.</li>
<li>A página inicial do servidor deve aparecer. (Figura 2)<br />
<div id="attachment_22" class="wp-caption aligncenter" style="width: 460px"><br />
<a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/07/uniform_server_inicio.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/07/uniform_server_inicio.png" alt="Figura 2: Página Inicial do Uniserver" title="Página Inicial do Uniserver" width="450" height="201" class="size-medium wp-image-22" /></a><p class="wp-caption-text">Figura 2: Página Inicial do Uniserver</p></div>
</li>
</ul>
<h2>Instalação do WordPress</h2>
<h3>1 &#8211; Criação do Banco de Dados SQL</h3>
<ul>
<li>Na barra lateral, dentro de Tools, escolha a opção <em>phpMyAdmin.</em>
<li>Irá aparecer uma nova janela, dentro da caixa <em>Create a New Database</em> entre com o nome do banco de dados, eu escolhi
<p><em>wordpress</em>.(Figura 3)</li>
<p><div id="attachment_26" class="wp-caption aligncenter" style="width: 460px"> <a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/07/phpmyadmin.png"> <img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/07/phpmyadmin.png" alt="Figura 3: Página do phpMyAdmin - administra o banco de dados MySQL" title="phpMyAdmin" width="450" height="201" class="size-medium wp-image-26"/></a><p class="wp-caption-text">Figura 3: Página do phpMyAdmin - administra o banco de dados MySQL</p></div>
</li>
<li>Depois de clicar em <em>Create</em> deve surgir uma página indicando que o banco de dados foi criado com sucesso.<br />
<div id="attachment_30" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/07/sucesso_banco_dados.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/07/sucesso_banco_dados.png" alt="Figura 4: Página que aparece quando o banco de dados foi inserido com sucesso" title="Sucesso com o Banco de Dados" width="450" height="210" class="size-medium wp-image-30" /></a><p class="wp-caption-text">Figura 4: Página que aparece quando o banco de dados foi inserido com sucesso</p></div>
</li>
</ul>
<h3>2 &#8211; Colocando arquivos do WordPress no Servidor</h3>
<ul>
<li>Extrair os arquivos do WordPress na pasta UniServer\udrive\www (Figura 5). Para isso mova o arquivo wordpress-2.8.2-pt_BR.zip para a referida pasta e use o botão direito para extrair os arquivos. Se uma pasta chamada wordpress foi criada, parabéns. Se foi criada uma pasta chama wordpress-2.8.2-pt_BR, mova a pasta wordpress (está dentro dela) para a pasta UniServer\udrive\www.<br />
<div id="attachment_32" class="wp-caption aligncenter" style="width: 460px"> <a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/07/extracao_wordpress.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/07/extracao_wordpress.png" alt="Figura 5: Extraindo o WordPress para o Servidor" title="Extração do WordPress" width="450" height="333" class="size-medium wp-image-32" /></a><p class="wp-caption-text">Figura 5: Extraindo o WordPress para o Servidor</p></div></li>
<li>Na pasta wordpress criada, renomei o arquivo <em>wp-config-sample.php</em> para <em>wp-config.php</em>.</li>
<li>Modifique o arquivo wp-config.php entrando com os parâmetros do banco de dados. A configuração padrão está abaixo. Se a segurança for importante a senha do banco precisa ser modificada . Isso normalmente não é um problema porque o blog só estará disponível no seu computador.<\ br><br />
<code>/** O nome do banco de dados do WordPress */<br />
define('DB_NAME', 'wordpress');</p>
<p>/** Usuário do banco de dados MySQL */<br />
define('DB_USER', 'root');</p>
<p>/** Senha do banco de dados MySQL */<br />
define('DB_PASSWORD', 'root');</p>
<p>/** nome do host do MySQL */<br />
define('DB_HOST', 'localhost');</code>
</li>
</ul>
<h3>3 &#8211; Installando o WordPress</h3>
<ul>
<li>Vá para a URL <a href="http://localhost/wordpress/wp-admin/install.php">http://localhost/wordpress/wp-admin/install.php</a> e entre com os dados pedidos.<br />
<div id="attachment_49" class="wp-caption aligncenter" style="width: 460px"> <a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/tela_instalacao_wp.png"> <img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/tela_instalacao_wp.png" alt="Figura 6: Página que aparece para a Instalar o WordPress" title="Página de Instalação do WordPress" width="450" height="334" class="size-medium wp-image-49" /></a><p class="wp-caption-text">Figura 6: Página que aparece para a Instalar o WordPress</p></div>
</li>
<li>Depois de clicar em <em>Instalar WordPress</em> aparecerá a seguinte tela:<br />
<div id="attachment_51" class="wp-caption aligncenter" style="width: 460px"> <a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/tela_sucesso_wp.png"><img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/tela_sucesso_wp.png" alt="Figura 7: Tela de sucesso do WordPress" title="Tela Sucesso do WordPress" width="450" height="234" class="size-medium wp-image-51" /></a><p class="wp-caption-text">Figura 7: Tela de sucesso do WordPress</p></div>
</li>
</ul>
<p><strong>A instalação do WordPress terminou! O blog está em <a href="http://localhost/wordpress/">http://localhost/wordpress/</a>O passo abaixo é opcional, mas mudar a senha gerada por outra mais fácil de lembrar é recomendação do WordPress.</strong> </p>
<h2>Mudança da Senha Original</h2>
<ul>
<li>Entre com o nome do usuário (admin), entre com a senha aleatória gerada e click em <em>Login</em><br />
<div id="attachment_52" class="wp-caption aligncenter" style="width: 343px"><br />
<a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/tela_login.png"><br />
<img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/tela_login.png" alt="Figura 8: Tela de Login do WordPress" title="Tela de Login do WordPress" width="333" height="343" class="size-full wp-image-52" /></a><p class="wp-caption-text">Figura 8: Tela de Login do WordPress</p></div></li>
<li>Logo após o login, irá aparecer a seguinte advertência:<div id="attachment_53" class="wp-caption aligncenter" style="width: 460px"><br />
<a href="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/mensagem_painel.png"> <img src="http://www.desenvolvendosoftware.com.br/wordpress/wp-content/uploads/2009/08/mensagem_painel.png" alt="Figura 9: Mensagem de Advertência do WordPress" title="Mensagem do Painel" width="450" height="75" class="size-medium wp-image-53" /></a><p class="wp-caption-text">Figura 9: Mensagem de Advertência do WordPress</p></div>
</li>
<li>Na página do perfil digite a nova senha (está bem embaixo), atualize o perfil e pronto. Não há mais necessidade de se lembrar da senha maluca.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.desenvolvendosoftware.com.br/2009/08/instalando-wordpress-no-seu-computador-ou-pen-drive/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

