<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/wordpress-mu-1.2.4" -->
<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/"
	>

<channel>
	<title>Aplicativos</title>
	<link>http://blog.globoi.com/aplicativos</link>
	<description>Informações sobre área de aplicativos</description>
	<pubDate>Thu, 05 Jun 2008 17:33:06 +0000</pubDate>
	<generator>http://wordpress.org/?v=wordpress-mu-1.2.4</generator>
	<language>en</language>
			<item>
		<title>Forum!</title>
		<link>http://blog.globoi.com/aplicativos/2008/06/05/forum/</link>
		<comments>http://blog.globoi.com/aplicativos/2008/06/05/forum/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 17:33:06 +0000</pubDate>
		<dc:creator>pedroteixeira</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.globoi.com/aplicativos/2008/06/05/forum/</guid>
		<description><![CDATA[Já faz um tempo que o forum interno está no ar, mas para quem ainda não acessou dê uma olhada em http://forum.globoi.com/
]]></description>
			<content:encoded><![CDATA[<p>Já faz um tempo que o forum interno está no ar, mas para quem ainda não acessou dê uma olhada em http://forum.globoi.com/</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.globoi.com/aplicativos/2008/06/05/forum/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Melhor do que Google</title>
		<link>http://blog.globoi.com/aplicativos/2008/02/11/melhor-do-que-google/</link>
		<comments>http://blog.globoi.com/aplicativos/2008/02/11/melhor-do-que-google/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 16:01:24 +0000</pubDate>
		<dc:creator>pedroteixeira</dc:creator>
		
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://blog.globoi.com/aplicativos/2008/02/11/melhor-do-que-google/</guid>
		<description><![CDATA[Poucos conhecem o carrot2, mas é uma ferramenta muito boa para busca. Além disse, quase todo o código fonte está disponível. Quem estiver trabalhando com busca e clustering de páginas, vale a pena dar uma olhada.
]]></description>
			<content:encoded><![CDATA[<p>Poucos conhecem o <a href="http://demo.carrot2.org/demo-stable/main" title="carrot2">carrot2</a>, mas é uma ferramenta muito boa para busca. Além disse, quase todo o código fonte está <a href="http://project.carrot2.org/index.html">disponível</a>. Quem estiver trabalhando com busca e clustering de páginas, vale a pena dar uma olhada.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.globoi.com/aplicativos/2008/02/11/melhor-do-que-google/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Modelo TDD Globo.com</title>
		<link>http://blog.globoi.com/aplicativos/2008/01/15/modelo-tdd-globocom/</link>
		<comments>http://blog.globoi.com/aplicativos/2008/01/15/modelo-tdd-globocom/#comments</comments>
		<pubDate>Tue, 15 Jan 2008 22:03:26 +0000</pubDate>
		<dc:creator>Cláudio Luz</dc:creator>
		
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://blog.globoi.com/aplicativos/2008/01/15/modelo-tdd-globocom/</guid>
		<description><![CDATA[É possível definirmos um modelo de TDD para a Globo.com? É claro que dentro da empresa temos diferentes sistemas, implementados com linguagens distintas, com arquiteturas que às vezes não tem nenhuma semelhança, mas acho que se chegarmos a um consenso sobre um ou mais modelos podemos facilitar a adoção dessa metodologia de desenvolvimento.
Aqui no grupo [...]]]></description>
			<content:encoded><![CDATA[<p>É possível definirmos um modelo de TDD para a Globo.com? É claro que dentro da empresa temos diferentes sistemas, implementados com linguagens distintas, com arquiteturas que às vezes não tem nenhuma semelhança, mas acho que se chegarmos a um consenso sobre um ou mais modelos podemos facilitar a adoção dessa metodologia de desenvolvimento.</p>
<p>Aqui no grupo DesenvAplicativos2, estamos com algumas dúvidas e eu mesmo, tenho vários questionamento a fazer. Não tenho muita experiência com TDD e confesso que ainda não tive tempo pra estudar o assunto e formar uma opinião. O tempo de estudo fora do trabalho está todo dedicado ao mestrado.</p>
<p>O primeiro questionamento é em relação a testes unitários. Como implementá-los de acordo com a realidade de arquitetura das nossa aplicações? Já lí um artigo que falava de TDD onde o autor usava como exemplo uma função que fazia a divisão entre dois números. Achei esse artigo muito interessante por que ele ia melhorando a implementação do método conforme os testes iam falhando. Mas esse exemplo, como muitos que aparecem na internet, utilizam classes simples, com métodos estáticos, o que é bem diferente do que implementamos no nosso dia-a-dia. As nossas aplicações usam uma arquitetura separada em camadas, numa variação do padrão Model 2. Poderíamos implementar JUnits que chamassem diretamente a camada de dados, ou que chamassem a camada de negócios, ou mesmo as actions. Uma coisa parece certa, quanto mais perto da camada client, mais garantimos maior cobertura de código. Confere?</p>
<p>Outra dúvida: se fizermos um JUnit que chama a camada de negócio, esse teste não estaria deixando de ser unitário, já que a camada de negócios depende da camada de dados?</p>
<p>Uma opção na implementação dos testes é o uso de mock objects. Cheguei a conversar com Nunes na época em que ele ainda estava aqui e torci um pouco o nariz para essa prática. Ele me passou um link que achei interessante ( <a href="http://www.martinfowler.com/articles/mocksArentStubs.html">http://www.martinfowler.com/articles/mocksArentStubs.html</a> ). Acho que o uso de mocks implica na quebra de um dos pilares da orientação a objetos que é o encapsulamento. Pelo menos no exemplo que ele fez comigo eu tive essa impressão.</p>
<p>A informação que tenho é que a equipe de webmedia já adota TDD a algum tempo e faz isso com sucesso. Podemos então escolher uma dentre duas estratégias: ou adotamos o modelo que webmedia está utilizando e evoluimos a partir daí, ou colocamos o assunto em discussão como estou fazendo agora para chegarmos a um consenso e adotarmos como modelo.</p>
<p>Existem vários outros assuntos relacionados a testes que pretendo discutir mas queria deixar o escopo desse post fechado em testes unitários.</p>
<p>A discussão está aberta para compartilharmos o conhecimento.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.globoi.com/aplicativos/2008/01/15/modelo-tdd-globocom/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Unblubbing</title>
		<link>http://blog.globoi.com/aplicativos/2007/09/25/unblubbing/</link>
		<comments>http://blog.globoi.com/aplicativos/2007/09/25/unblubbing/#comments</comments>
		<pubDate>Tue, 25 Sep 2007 19:10:18 +0000</pubDate>
		<dc:creator>lucindo</dc:creator>
		
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://blog.globoi.com/aplicativos/2007/09/25/unblubbing/</guid>
		<description><![CDATA[ Sem querer começar uma language war mas postando mesmo assim&#8230;  
Ultimamente tem se falado muito dessas novas linguagens como Ruby/Python e técnicas e padrões de várias letrinhas. Até parece o paradoxo do programador Blub aflorando.
Aqui vai uma dica de vídeo para quem se interessa por programação: Structure and Interpretation of Computer Programs - [...]]]></description>
			<content:encoded><![CDATA[<p> Sem querer começar uma <em>language war</em> mas postando mesmo assim&#8230; <img src='http://blog.globoi.com/aplicativos/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ultimamente tem se falado muito dessas <em>novas</em> linguagens como Ruby/Python e técnicas e padrões de várias letrinhas. Até parece o <a href="http://c2.com/cgi/wiki?BlubParadox">paradoxo do programador Blub</a> aflorando.</p>
<p>Aqui vai uma dica de vídeo para quem se interessa por programação: <a href="http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/"><em>Structure and Interpretation of Computer Programs - Video Lectures</em></a>. É o curso de introdução a computação do MIT (primeiro semestre) gravado em 1986. É muito interessante ver que desde essa época nem as linguagens nem os métodos de programação evoluiriam em quase nada. Nesse curso <em>introdutório</em> eles vão de programação procedural, passam por OO, programação funcional, programação lógica (baseadas em regras), constroem um interpretador e novas linguagens (DSLs anyone?) entre outras coisas. Além dos vídeos o livro também é free e pode ser acessado nesse <a href="http://mitpress.mit.edu/sicp/full-text/book/book.html">link</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.globoi.com/aplicativos/2007/09/25/unblubbing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Buscando qualidade de código (parte 1)</title>
		<link>http://blog.globoi.com/aplicativos/2007/09/17/qualidade-de-codigo-parte-1/</link>
		<comments>http://blog.globoi.com/aplicativos/2007/09/17/qualidade-de-codigo-parte-1/#comments</comments>
		<pubDate>Mon, 17 Sep 2007 21:30:56 +0000</pubDate>
		<dc:creator>Alexandre Nunes</dc:creator>
		
		<category><![CDATA[Software Design]]></category>

		<category><![CDATA[Engenharia de Software]]></category>

		<guid isPermaLink="false">http://blog.globoi.com/aplicativos/2007/09/17/alcancando-qualidade-de-codigo-parte-1/</guid>
		<description><![CDATA[Essa semana durante uma sessão de refatoração, tive a idéia de sempre que me deparar com situações de códigos que precisam ser alterados afim de se adequarem a alguns princípios de boas práticas de desenvolvimento de software, vou compartilhar aqui, explorando os pontos negativos do código e as vantagens de se adequar a um desses [...]]]></description>
			<content:encoded><![CDATA[<p>Essa semana durante uma sessão de refatoração, tive a idéia de sempre que me deparar com situações de códigos que precisam ser alterados afim de se adequarem a alguns princípios de boas práticas de desenvolvimento de software, vou compartilhar aqui, explorando os pontos negativos do código e as vantagens de se adequar a um desses princípios, falando também um pouco sobre eles, um caso de cada vez, começando agora com <strong>OCP (Open-Closed Principle)</strong>.</p>
<p><strong><u>The Open-Closed Principle</u></strong></p>
<p>Este princípio é a fundação para construção de códigos reutilizáveis e de fácil manutenção. Módulos que se adequam a este princípio são, ao mesmo tempo, <strong>abertos para serem extendidos</strong>, de maneira que se comporte de maneiras diferentes, a medida que surgem novos requisitos para a aplicação, ou a medida que estes são modificados. E <strong>fechados para modificação</strong>, o que significa que o código fonte deste módulo não pode ser violado, ninguém pode fazer mudanças neste código fonte.</p>
<p>A descrição deste princípio pode parecer conflitante, já que para extender a funcionalidade de um módulo, é necessário modificá-la, logo deduzimos que uma funcionalidade que não pode ser alterada é dada como fixa. Como este conflito pode ser resolvido? A melhor maneira de demonstrar é através de um exemplo.</p>
<p>No projeto CartolaFC, que estou trabalhando atualmente, existe um gerenciador de tarefas que é responsável pela execução assíncrona de tarefas enfileiradas pela aplicação. Basicamente ele percorre uma lista de pendencias, executando cada uma das tarefas, na ordem em que aparecem. O código abaixo está modificado em relação ao original, para podermos visualizar com mais facilidade.</p>
<pre>public class GerenciadorDeTarefas {

    public List&lt;Tarefas&gt; pendentes;</pre>
<pre>    public void executaTarefasPendentes() {
	for (int i=0; i&lt;pendentes.length; i++) {
	    Tarefa tarefa = pendentes[i];

	    switch (tarefa.tipo()) {
	    case calculoTrofeus:
	    	engine.calculaTrofeus();
	    	break;

	    case calculoEstatisticas:
	    	engine.calculaEstatisticas();
	    	break;
	    }

	    case fechamentoDeMercado:
	    	engine.fechaMercado();
	    	break;
	    }

	    case aberturaDeMercado:
	    	engine.abreMercado();
	    	break;
	    }

	    // .... e assim continua ....
	}
    }
}</pre>
<p>O método <em><strong>executaTarefasPendentes()</strong></em> não se adequa ao Open-Closed Principle, pois não está fechado para novos tipos de implementação. Se um dia o cliente decidir extender esta funcionalidade para incluir novas tarefas a serem executadas, que é o que acontece hoje em dia, o método terá que ser modificado para atender este requisito, incluindo mais um bloco <em>&#8220;case&#8221;</em>, que já não é nada elegante, e assim continuará, para cada novo tipo de tarefa.</p>
<p>O código, na vida real é ainda pior, atualmente são 18 blocos <em>&#8220;case&#8221;</em>, o que torna a implementação de novas tarefas uma prática intrusiva, suja e acoplada (imagine se todos os métodos a serem executados para as tarefas ficassem espalhados&#8230; quantos objetos teríamos que instânciar no gerenciador de tarefas&#8230;)</p>
<p>O código a seguir mostra a solução que pretendo dar para este problema, uma solução que se adequa ao Open-Closed Principle. Resumindo, a classe <em>Tarefa</em> se torna abstrata e acrescentamos a ela um método abstrato chamado <em>executar(). </em>Com esse approach, TODOS os tipos de tarefas criados, serão classes concretas que derivam desta classe, implementando seu método abstrato.</p>
<pre>public class abstract Tarefa {
    public abstract void executar();
}</pre>
<pre>public class CalculoDeTrofeus extends Tarefa {
    public void executar() {
	// lógica para cálculo de troféus...
    }
}</pre>
<pre>public class CalculoDeEstatisticas extends Tarefa {
    public void executar() {
	// lógica para cálculo de estatísticas...
    }
}</pre>
<p>E a partir de agora, para o nosso gerenciador de tarefas, o ato de invocar as tarefas pendentes fica totalmente transparente. Tudo que ele precisa fazer é percorrê-las, e para cada uma, invocar seu método <em>executar()</em>, tornando o código não intrusivo, limpo e desacoplado.</p>
<pre>public class GerenciadorDeTarefas {

    public List&lt;Tarefas&gt; pendentes;</pre>
<pre>    public void executaTarefasPendentes() {
	for (int i=0; i&lt;pendentes.length; i++) {
	    Tarefa tarefa = pendentes[i];
	    tarefa.executar();
	}
    }
}</pre>
<p>Agora, se quisermos extender a funcionalidade de <em><strong>executarTarefasPendentes()</strong></em> do nosso gerenciador para que passe a executar uma tarefa nova qualquer, tudo o que precisamos fazer é adicionar uma nova implementação para a classe abstrata <em>Tarefa</em>. O nosso método <em><strong>executarTarefasPendentes()</strong></em> não precisa ser alterado, se adequando ao Open-Closed Principle. Seu comportamento pode ser extendido, sem que ele seja alterado.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.globoi.com/aplicativos/2007/09/17/qualidade-de-codigo-parte-1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tracking agile projects</title>
		<link>http://blog.globoi.com/aplicativos/2007/09/11/tracking-agile-projects/</link>
		<comments>http://blog.globoi.com/aplicativos/2007/09/11/tracking-agile-projects/#comments</comments>
		<pubDate>Tue, 11 Sep 2007 21:11:11 +0000</pubDate>
		<dc:creator>Alexandre Nunes</dc:creator>
		
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://blog.globoi.com/aplicativos/2007/09/11/tracking-agile-projects/</guid>
		<description><![CDATA[Este artigo fala sobre a utilização de gráficos visíveis, colados na parede, para o acompanhamento do status de projetos ágeis, explicando o funcionamento de alguns destes, como os diversos tipos de kanban boards e um chamado niko cale.

Este último em especial chamou minha atenção, pois possibilita a conexão do humor e motivação de cada pessoa [...]]]></description>
			<content:encoded><![CDATA[<p>Este artigo fala sobre a utilização de gráficos visíveis, colados na parede, para o acompanhamento do status de projetos ágeis, explicando o funcionamento de alguns destes, como os diversos tipos de <a href="http://en.wikipedia.org/wiki/Kanban">kanban boards</a> e um chamado <a href="http://www.geocities.jp/nikonikocalendar/index_en.html">niko cale</a>.</p>
<p><img src="http://www.infoq.com/resource/articles/agile-kanban-boards/en/resources/Fig5_hitori-niko.jpg" alt="niko cale" height="315" width="350" /></p>
<p>Este último em especial chamou minha atenção, pois possibilita a conexão do humor e motivação de cada pessoa da equipe com o andamento do projeto.</p>
<blockquote><p><em> Niko-niko Calendar (or Smiley Calendar), a Japanese creation, showing team member’s mood for each day. Everyone puts a smiley mark onto their own calendar after the day’s work, before leaving the team room [Sakata06]. It looks at the project from the viewpoint of member’s mental health and motivation.</em></p></blockquote>
<p>Saiba mais <a href="http://www.infoq.com/articles/agile-kanban-boards">aqui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.globoi.com/aplicativos/2007/09/11/tracking-agile-projects/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Inaugurada a era &#8220;Enterprise 2.0&#8243; na globo.com ;)</title>
		<link>http://blog.globoi.com/aplicativos/2007/08/24/inaugurada-a-era-enterprise-20-na-globocom/</link>
		<comments>http://blog.globoi.com/aplicativos/2007/08/24/inaugurada-a-era-enterprise-20-na-globocom/#comments</comments>
		<pubDate>Fri, 24 Aug 2007 18:07:59 +0000</pubDate>
		<dc:creator>bardusco</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.globoi.com/aplicativos/2007/08/24/inaugurada-a-era-enterprise-20-na-globocom/</guid>
		<description><![CDATA[Hoje colocamos no ar nosso primeiro blog corporativo, com o objetivo de dividir o conhecimento gerado entre as várias equipes da globo.com.Em paralelo ao que estamos vendo acontecer com a Web no mundo e que todos estão chamando de Web 2.0, está surgindo um novo conceito chamado de Enterprise 2.0, onde as empresas comecam a [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje colocamos no ar nosso primeiro blog corporativo, com o objetivo de dividir o conhecimento gerado entre as várias equipes da globo.com.Em paralelo ao que estamos vendo acontecer com a Web no mundo e que todos estão chamando de Web 2.0, está surgindo um novo conceito chamado de Enterprise 2.0, onde as empresas comecam a utilizar cada vez mais aplicativos de colaboracão social, para melhorar a documentacão, fluxo de informacão e divisão do conhecimento entre todos dentro da organizacão.</p>
<p>Aplicacões nessa área incluem, Blogs, Bookmarks Online, WiKis, Ferramentas de comunidades, e por ai vai.</p>
<p>Seguindo essa linha a Globo.com já tem seu Wiki como ferramenta de documentacão oficial a mais de 1 ano e agora estamos inaugurando nosso Blog Corporativo:</p>
<p>blog.globoi.com</p>
<p>Os primeiros blogs criados são:</p>
<p><a href="http://blog.globoi.com/aplicativos">blog.globoi.com/aplicativos</a></p>
<p><a href="http://blog.globoi.com/webmedia">blog.globoi.com/webmedia</a></p>
<p><a href="http://blog.globoi.com/clientside">blog.globoi.com/clientside </a></p>
<p>mais sobre o tema em:</p>
<p><a href="http://del.icio.us/bardusco/enterprise2.0">http://del.icio.us/bardusco/enterprise2.0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.globoi.com/aplicativos/2007/08/24/inaugurada-a-era-enterprise-20-na-globocom/feed/</wfw:commentRss>
		</item>
		<item>
		<title>FooBar</title>
		<link>http://blog.globoi.com/aplicativos/2007/08/23/foobar/</link>
		<comments>http://blog.globoi.com/aplicativos/2007/08/23/foobar/#comments</comments>
		<pubDate>Thu, 23 Aug 2007 20:50:32 +0000</pubDate>
		<dc:creator>falcao</dc:creator>
		
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://blog.globoi.com/aplicativos/2007/08/23/foobar/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.globoi.com/aplicativos/files/2007/08/060911-scrumtoon-portuguese-brazil.jpg" title="060911-scrumtoon-portuguese-brazil.jpg"><img src="http://blog.globoi.com/aplicativos/files/2007/08/060911-scrumtoon-portuguese-brazil.jpg" alt="060911-scrumtoon-portuguese-brazil.jpg" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.globoi.com/aplicativos/2007/08/23/foobar/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
