﻿<?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>Heróis da T.I.</title>
	<atom:link href="http://www.heroisdati.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.heroisdati.com</link>
	<description>Por Denis Ferrari</description>
	<lastBuildDate>Thu, 02 Sep 2010 00:45:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Counter-Strike e Desenvolvimento de Software</title>
		<link>http://www.heroisdati.com/counter-strike-e-desenvolvimento-de-software/</link>
		<comments>http://www.heroisdati.com/counter-strike-e-desenvolvimento-de-software/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 10:00:12 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Metodologias e processos]]></category>
		<category><![CDATA[OFF-TOPIC]]></category>
		<category><![CDATA[Reflexões]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=694</guid>
		<description><![CDATA[Olá Pessoal! Não escondo que sou “meio” viciado em quadrinhos, games, filmes, etc. Pois bem, depois de algum tempo parado decidi voltar a jogar um dos games mais viciantes da minha adolescência: O Counter-Strike. Voltei a jogar somente para dar uma surra no pessoal do escritório (@hrosko e @andrepiresmct), mas acabei deixando-o instalado e jogando eventualmente.<br/><br/><span class="readmore"><a href="http://www.heroisdati.com/counter-strike-e-desenvolvimento-de-software/" title="Counter-Strike e Desenvolvimento de Software">Continue Reading--237 words totally</a></span>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.youtube.com/watch?v=4lKfstI2moQ&amp;feature=related" target="_blank"><img class="size-medium wp-image-699 alignright" title="Silvio Santos Jogando CS! :)" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/08/counterstrike-300x300.jpg" alt="counterstrike" width="210" height="210" /></a>Olá Pessoal! Não escondo que sou “meio” viciado em quadrinhos, games, filmes, etc. Pois bem, depois de algum tempo parado decidi voltar a jogar um dos games mais viciantes da minha adolescência: O Counter-Strike. Voltei a jogar somente para dar uma surra no pessoal do escritório<a href="http://www.mindworks.com.br/" target="_blank"></a> (<a href="http://twitter.com/Hrosko" target="_blank">@hrosko</a> e <a href="http://twitter.com/AndrePiresMCT">@andrepiresmct</a>), mas acabei deixando-o instalado e jogando eventualmente.</p>
<p>Apensar das coisas não terem muito a ver uma com a outra, comecei a traçar uma linha entre Counter-Strike e Desenvolvimento de Software, uma espécie de “boas práticas” comuns para ambos. Pensei muito antes de escrever esse post, depois desencanei e vi que o máximo que pode acontecer é que essas dicas ajudem vocês a desenvolver melhor ou a jogar melhor, então vamos lá:</p>
<p><strong>Não adianta ser estrela em time que está perdendo</strong>: Mesmo com o melhor jogador no seu time, não há garantias de que o mesmo será campeão. É muito mais efetivo ter membros de nível mediano e bem entrosados em um time do que ter várias “estrelas” jogando no estilo cada um por si.</p>
<p><strong>Evite ser herói</strong>: Quando damos de cara com vários membros do time adversário, a melhor estratégia é “correr”. Correndo você poderá enfrentar cada adversário separadamente. Alguns desenvolvedores/times trabalham com várias estórias em simultâneo, o que dá uma falsa impressão de produtividade. Quando falamos em requisitos, a melhor estratégia também é dividir para conquistar, ou seja, ao invés de “atacar” várias ao mesmo tempo, podemos atacá-las uma de cada vez (Imagine todo o time atirando em um único membro do time adversário <img src='http://hidrotec-es.com.br/denisferrari/wiki/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ).</p>
<p><strong>90% não é 100%</strong>: É sempre melhor tirar 100% de um adversário do que 70% de dois. Um adversário com 1% de life ainda atira, e com ajuda da <a href="http://pt.wikipedia.org/wiki/Lei_de_Murphy" target="_blank">Lei de Murphy</a> ele pode levar vários membros do time antes de morrer.  Em uma Sprint temos que nos concentrar em terminar cada estória antes de passar para próxima, assim, ao final da Sprint mesmo que não tenhamos concluído todas as estórias teremos algumas concluídas ao invés de todas em 90% (e nada efetivo para entregar).</p>
<p><strong>Ao final de um round, devemos nos preparar para o próximo:</strong> Fases rápidas não habilitam a compra de itens no início do round, porém, ao final podemos ir a pontos específicos do mapa e comprar coletes e granadas. Estar preparado no início de uma Sprint pode fazer tanta diferença quanto lançar uma granada no início do round, mas, afinal de contas o que seria estar preparado? Poderia ser a obtenção de um conhecimento específico que adiantaria todos os requisitos em 50% de todas as estórias por exemplo.</p>
<p><strong>Ser efetivo e econômico traz grandes vantagens</strong>: Se você pode acabar com um adversário com uma única bala (Headshot), por que usar 10? Quanto menos balas você gastar menos terá que recarregar durante o round, o que pode salvar sua vida. Ninguém começa no CS conseguindo 100% de Headshots, esse número vai crescendo com o tempo e experiência (pelo menos com os jogadores normais). Na área de desenvolvimento, ninguém nasce extremamente produtivo, porém, é nossa obrigação buscar aumentar a produtividade através de novos conhecimentos e/ou novas ferramentas.</p>
<p><strong>Quem fica parado morre</strong>: Preciso argumentar? <img src='http://hidrotec-es.com.br/denisferrari/wiki/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Adaptabilidade é crucial</strong>: Você pode ter sua arma predileta, mas ela pode não ser a mais efetiva em algumas fases ou em algumas situações. Na área de desenvolvimento temos cada desenvolvedor tem sua ferramenta preferida, pode ser um linguagem, um framework, uma IDE, etc. O ideal no ramo de desenvolvimento é não ficar preso as coisas somente pela predileção, mas sim pela sua efetividade no contexto em que será aplicada.</p>
<p>Poderia enumerar aqui várias outras práticas que ajudam em ambas as partes, mas prefiro deixar vocês pensarem no assunto e quem sabe compartilharem aqui os seus pensamentos.</p>
<p>Para variar, vou jogar um pouquinho.</p>
<p>Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/counter-strike-e-desenvolvimento-de-software/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>MSDev-ES Arena : Entity Framework x NHibernate</title>
		<link>http://www.heroisdati.com/msdev-es-arena-entity-framework-x-nhibernate/</link>
		<comments>http://www.heroisdati.com/msdev-es-arena-entity-framework-x-nhibernate/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 00:35:55 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Tecnologias e Ferramentas]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[DI]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[MSDev-ES]]></category>
		<category><![CDATA[Ninject]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=663</guid>
		<description><![CDATA[Oi Pessoal! Nesse sábado rolou o primeiro Arena do grupo MSDev-ES na Faculdade Faesa. O evento tinha como objetivo apresentar as características dos dois ORMs que estão mais &#8220;em alta&#8221; no mercado: O NHibernate e o Entity Framework. Apesar do nome Arena, não tínhamos como objetivo definir qual das duas ferramentas era a melhor, e sim apresentar suas características e particularidades a fim de tirar as principais dúvidas dos desenvolvedores locais sobre suas utilizações.<br/><br/><span class="readmore"><a href="http://www.heroisdati.com/msdev-es-arena-entity-framework-x-nhibernate/" title="MSDev-ES Arena : Entity Framework x NHibernate">Continue Reading--60 words totally</a></span>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.youtube.com/watch?v=rMWcY9y0jzo" target="_blank"><img class="alignleft size-medium wp-image-667" title="Click para assistir um vídeo do Fábio Jr. :)" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/08/DSC_0007-Copy-300x199.jpg" alt="Perguntas ao final do evento" width="300" height="199" /></a>Oi Pessoal! Nesse sábado rolou o primeiro Arena do grupo <a href="http://www.msdev-es.com.br/" target="_blank">MSDev-ES</a> na <a href="http://site.faesa.br/" target="_blank">Faculdade Faesa</a>. O evento tinha como objetivo apresentar as características dos dois <a href="http://pt.wikipedia.org/wiki/Mapeamento_objeto-relacional" target="_blank">ORMs</a> que estão mais &#8220;em alta&#8221; no mercado: O <a href="http://nhforge.org/" target="_blank">NHibernate</a> e o <a href="http://msdn.microsoft.com/en-us/library/bb399572.aspx" target="_blank">Entity Framework</a>. Apesar do nome Arena, não tínhamos como objetivo definir qual das duas ferramentas era a melhor, e sim apresentar suas características e particularidades a fim de tirar as principais dúvidas dos desenvolvedores locais sobre suas utilizações.</p>
<p>A idéia era o Dilter Porto (<a href="http://twitter.com/dilterporto" target="_blank">@dilterporto</a>) apresentar o NHibernate e eu apresentar o EF4. Conversamos muito nas semanas que antecederam o evento e decidimos não falar puramente das ferramentas. Tomei a liberdade de falar não só de EF4, mas sim como eu tenho utilizado o EF4, sendo assim, falei sobre Arquitetura de software, <a href="http://www.heroisdati.com/tags/tdd/" target="_blank">TDD</a>, <a href="http://www.heroisdati.com/tags/ddd/" target="_blank">Domain-Driven Design</a>, <a href="http://www.heroisdati.com/tags/dependency-injection/" target="_blank">DI</a>, Repository e finalmente EF4. O Dilter abordou desde a teoria dos ORMs até sua experiência na utilização do NHibernate. Os feedbacks que tivemos é que as palestras se encaixaram perfeitamente. Gostei muito da seleção de informações que foram apresentadas no evento.</p>
<p>Após as duas palestras tivemos uma mesa redonda mediada pelo Rafael Hrasko (<a href="http://twitter.com/Hrosko" target="_blank">@hrosko</a>) com perguntas e comparações sobre os dois ORMs. Procurei deixar bem claro que não curto vestir camisas de tecnologias, e sim tentar aplicá-las da melhor forma para solucionar os meus problemas. Tivemos perguntas bem interessantes sobre Performance, facilidades, maturidade, etc. Acredito que esse tenho sido um dos melhores eventos que participei ultimamente.</p>
<p><strong>Vídeo da palestra</strong></p>
<div style="margin: auto; width: 550px; margin-bottom: 20px;">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="412" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="best" /><param name="scale" value="showAll" /><param name="allowfullscreen" value="true" /><param name="wmode" value="transparent" /><param name="src" value="http://www.vimeo.com/moogaloop.swf?clip_id=14587140&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00adef" /><embed type="application/x-shockwave-flash" width="550" height="412" src="http://www.vimeo.com/moogaloop.swf?clip_id=14587140&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00adef" wmode="transparent" allowfullscreen="true" scale="showAll" quality="best"></embed></object>
</div>
<p><strong>Apresentação</strong></p>
<div style="margin: auto; width: 425px; ">
<div id="__ss_5078077" style="width: 425px;"><strong style="display:block;margin:12px 0 4px"><a title="Palestra sobre Arquitetura e utilização do EF4" href="http://www.slideshare.net/denisnferrari/palestra-sobre-arquitetura-e-utilizao-do-ef4">Palestra sobre Arquitetura e utilização do EF4</a></strong><object id="__sse5078077" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=msdev-esarena-ef4-100828160419-phpapp01&amp;stripped_title=palestra-sobre-arquitetura-e-utilizao-do-ef4" /><param name="name" value="__sse5078077" /><param name="allowfullscreen" value="true" /><embed id="__sse5078077" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=msdev-esarena-ef4-100828160419-phpapp01&amp;stripped_title=palestra-sobre-arquitetura-e-utilizao-do-ef4" name="__sse5078077" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/denisnferrari">Denis Ferrari</a>.</div>
</div>
</div>
<p><strong>Fotos do evento</strong></p>
<div style="margin: auto; width: 400px;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="flashvars" value="offsite=true&amp;lang=pt-br&amp;page_show_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624827614170%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624827614170%2F&amp;set_id=72157624827614170&amp;jump_to=" /><param name="allowFullScreen" value="true" /><param name="src" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowfullscreen="true" flashvars="offsite=true&amp;lang=pt-br&amp;page_show_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624827614170%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624827614170%2F&amp;set_id=72157624827614170&amp;jump_to="></embed></object></div>
<p>Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/msdev-es-arena-entity-framework-x-nhibernate/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>II Fórum para Gerentes de Sistemas</title>
		<link>http://www.heroisdati.com/ii-forum-para-gerentes-de-sistemas/</link>
		<comments>http://www.heroisdati.com/ii-forum-para-gerentes-de-sistemas/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 14:22:51 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Metodologias e processos]]></category>
		<category><![CDATA[OFF-TOPIC]]></category>
		<category><![CDATA[Tecnologias e Ferramentas]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Cases]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Mindworks]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=639</guid>
		<description><![CDATA[Relato sobre o II Fórum para Gerentes de Sistemas.]]></description>
			<content:encoded><![CDATA[<p>Nessa semana realizamos o II Fórum para Gerentes de Sistemas na <a href="http://www.mindworks.com.br/" target="_blank">Mindworks</a> em Vitória-ES. Realizamos a <a href="http://www.heroisdati.com/i-forum-microsoft-para-gerentes-de-sistemas-em-vitoria-es/" target="_blank">primeira versão do evento no mês passado</a> a pedido da própria Microsoft, e depois de uma série de pedidos para realização de uma segunda versão, decidimos organizar um evento semelhante, porém, voltado para a comunidade local.</p>
<p>Acredito que a segunda versão do evento ficou ainda melhor que a primeira. Mudamos algumas abordagens, inserimos alguns assuntos importantes e procuramos trabalhar de uma forma dinâmica e interativa com os participantes. Vou relatar agora um pouco do que aconteceu no evento:</p>
<p><strong>.NET 4.0 e Visual Studio 2010</strong></p>
<p>Nesse evento procuramos apresentar todos os recursos do <a href="http://en.wikipedia.org/wiki/.NET_Framework" target="_blank">Framework .NET</a> desde a sua primeira versão lançada em 2003. O objetivo principal dessa parte do evento foi mostrar a maturidade da plataforma e como a mesma vem sendo melhorada de forma contínua e incremental (desde sua versão 2.0).</p>
<p>Como a idéia era fazer uma espécie de túnel do tempo das tecnologias Microsoft, procuramos abordar desde as características mais básicas da versão 2.0 do framework até as novidades mais quentes da versão 4.0 (versão mais atual).</p>
<p>Depois do apanhado histórico sobre o framework, fizemos algumas demonstrações das ferramentas de arquitetura do Visual Studio 2010, tais como: Gráfico de Dependências e Diagrama de camadas.</p>
<p>É impressionante perceber o mundo de ferramentas que temos à disposição no Framework .NET, e essa foi a idéia dessa apresentação, mostrar o poder que temos nas mãos utilizando essa plataforma.</p>
<p><strong>Scrum e Agilidade</strong></p>
<p>O <a href="http://twitter.com/AndrePiresMCT" target="_blank">André Pires</a> apresentou o <a href="http://www.google.com.br/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CCQQFjAA&amp;url=http%3A%2F%2Fpt.wikipedia.org%2Fwiki%2FScrum&amp;ei=P0tsTKuKLsP-8AasvcGcCw&amp;usg=AFQjCNF7weY7XxC0jTQ16aU5SS-kD2djxQ&amp;sig2=gIGWzl_rt7YdO1Ky-TNMZg" target="_blank">Scrum </a>de uma forma muito interativa e dinâmica. Visitamos os conceitos do Scrum, seus papéis, artefatos, regras, cerimônias e recomendações. Acredito que todos os participantes tiveram uma visão bem clara do framework.</p>
<p>Gosto muito de discutir sobre <a href="http://www.agilemanifesto.org/iso/ptbr/" target="_blank">Agile</a> e Scrum. Apesar de não ser o palestrante desse tema, foi muito rico só ouvir os questionamentos feitos pelos gerentes de projetos que estavam presentes. O André apresentou com maestria o tema discorrendo sobre as grandes dúvidas e questionamentos dos gerentes de projeto tradicionais ao mundo ágil.</p>
<p>A apresentação terminou com uma dinâmica que exemplificava a utilização do Scrum. Os participantes tinham que atingir um objetivo específico em um tempo limite. O bacana é que o PO (André) passava pelas equipes gerando pequenos impedimentos e interferindo nos trabalhos, o que gerou fortes reações pela parte de alguns ScrumMasters. <img src='http://hidrotec-es.com.br/denisferrari/wiki/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Volto a destacar que, apesar de entender do tema, nada paga a troca de experiências que temos com os participantes do evento.</p>
<p><strong>Técnicas de engenharia de software e TDD</strong></p>
<p>Diferente da versão anterior desse evento, abordamos a importância da orientação a objetos e das técnicas de engenharia em projetos de software que usem processos interativos e incrementais na produção.</p>
<p>Fizemos algumas reflexões sobre qualidade de software e discutimos como é importante utilizar técnicas para construir o projeto que façam com que o custo de evolução não seja discrepante do custo de produção. Afinal de contas, em processos iterativos estamos sempre evoluindo o projeto.</p>
<p>Aprofundamos alguns conceitos que o André havia citado na palestra sobre Scrum. Falamos sobre <a href="http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objetos" target="_blank">POO</a>, <a href="http://pt.wikipedia.org/wiki/Padr%C3%A3o_de_projeto_de_software" target="_blank">Design Patterns</a>, <a href="http://martinfowler.com/articles/continuousIntegration.html" target="_blank">CI</a>, <a href="http://pt.wikipedia.org/wiki/Mapeamento_objeto-relacional" target="_blank">ORMs</a> (<a href="http://msdn.microsoft.com/en-us/library/aa697427%28VS.80%29.aspx" target="_blank">Entity Framework</a> e <a href="http://www.nhibernate.com/" target="_blank">NHibernate</a>), <a href="http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_extrema" target="_blank">Programação em par</a>, <a href="http://pt.wikipedia.org/wiki/Teste_de_unidade" target="_blank">Testes unitários</a>, <a href="http://en.wikipedia.org/wiki/Domain-driven_design" target="_blank">DDD</a> e <a href="http://www.heroisdati.com/tdd-para-iniciantes-para-quem-quer-comecar-e-nao-sabe-como/" target="_blank">TDD</a>. Foi muito legal apresentar uma visão geral sobre esses assuntos que estão em alta nas listas de discussão mais ativas.</p>
<p>Finalmente, apresentamos o TDD de uma forma resumida como primeira prática a ser adotada dentre todas as práticas que havíamos discutido nessa etapa do evento.</p>
<p>O objetivo principal dessa parte do evento foi mostrar aos participantes que investir nas disciplinas apresentadas é um investimento tão importante quanto o investimento feito no aprendizado das tecnologias (ou mais).</p>
<p><strong>Fotos do evento</strong></p>
<div style="width: 400px; margin: auto; margin-bottom: 20px;">
<object width="400" height="300"><param name="flashvars" value="offsite=true&#038;lang=pt-br&#038;page_show_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624634933055%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624634933055%2F&#038;set_id=72157624634933055&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=pt-br&#038;page_show_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624634933055%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624634933055%2F&#038;set_id=72157624634933055&#038;jump_to=" width="400" height="300"></embed></object>
</div>
<p>Estamos preparando muitas novidades para o próximo evento, fiquem ligados!</p>
<p>Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/ii-forum-para-gerentes-de-sistemas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design By Contract (DbC) em .NET &#8211; Comparando soluções</title>
		<link>http://www.heroisdati.com/design-by-contract-dbc-em-net-comparando-solucoes/</link>
		<comments>http://www.heroisdati.com/design-by-contract-dbc-em-net-comparando-solucoes/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 03:31:18 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Tecnologias e Ferramentas]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[AOP]]></category>
		<category><![CDATA[DbC]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=563</guid>
		<description><![CDATA[Batman - DC Universe Online

Olá Pessoal! No meu primeiro post sobre Design By Contract recebi questionamentos interessantes sobre os prós e contras dessa abordagem comparando-a com a forma tradicional de validações com if&#8230;throw, logo, o objetivo deste post será evidenciar as diferenças entre essas duas abordagens.<br/><br/><span class="readmore"><a href="http://www.heroisdati.com/design-by-contract-dbc-em-net-comparando-solucoes/" title="Design By Contract (DbC) em .NET &#8211; Comparando soluções">Continue Reading--139 words totally</a></span>]]></description>
			<content:encoded><![CDATA[<div id="attachment_624" class="wp-caption alignright" style="width: 255px"><a href="http://www.youtube.com/watch?v=2lGTfK4PmPw" target="_blank"><img class="size-full wp-image-624  " title="DC Universe Online Exclusive Who Do You Trust Trailer" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/08/batman-dc-ultimate-online.jpg" alt="batman-dc-ultimate-online" width="245" height="169" /></a><p class="wp-caption-text">Batman - DC Universe Online</p></div>
<p>Olá Pessoal! No meu primeiro post sobre <a href="http://www.heroisdati.com/design-by-contract-dbc-em-net/" target="_blank">Design By Contract</a> recebi questionamentos interessantes sobre os prós e contras dessa abordagem comparando-a com a forma tradicional de validações com if&#8230;throw, logo, o objetivo deste post será evidenciar as diferenças entre essas duas abordagens.</p>
<p>No <a href="http://www.heroisdati.com/design-by-contract-dbc-em-net/" target="_blank">último post</a> lancei um desafio ao meu amigo Gustavo Badke (<a href="http://twitter.com/guripunk" target="_blank">@guripunk</a>) após ele ter escrito o seguinte comentário: &#8220;<a href="http://www.heroisdati.com/design-by-contract-dbc-em-net/comment-page-1/#comment-99" target="_blank"><em>Pra min isso é firula, não vejo diferença nenhum do if(…) throw new Exception…</em></a>&#8220;. Alguns códigos que vou apresentar aqui foram escritos por ele, então, considerem-no como uma participação especial nesse post <img src='http://hidrotec-es.com.br/denisferrari/wiki/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Vamos lá:</p>
<p><strong>Pré-condições</strong></p>
<p>Tradicionalmente, quando precisamos verificar se os parâmetros de um método qualquer estão válidos para utilização, escrevemos algo semelhante ao código abaixo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> Cor<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> pVermelho, <span style="color: #FF0000;">int</span> pVerde, <span style="color: #FF0000;">int</span> pAzul<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>pVermelho <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">||</span> pVermelho <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">255</span><span style="color: #000000;">&#41;</span>
        <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> ArgumentOutOfRangeException<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;O argumento 'pVermelho' deve ser entre 0 e 255&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>pVerde <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">||</span> pVerde <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">255</span><span style="color: #000000;">&#41;</span>
        <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> ArgumentOutOfRangeException<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;O argumento 'pVerde' deve ser entre 0 e 255&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>pAzul <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">||</span> pAzul <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">255</span><span style="color: #000000;">&#41;</span>
        <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> ArgumentOutOfRangeException<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;O argumento 'pAzul' deve ser entre 0 e 255&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// Implementação...</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>A abordagem acima resolve o nosso requisito de validação dos parâmetros, porém, o código utilizado para isso é extremamente &#8220;<em>carregado</em>&#8221; para a implementação de um requisito <em>simples</em>. Utilizando DbC a implementação ficaria da seguinte forma:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> Cor<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> pVermelho, <span style="color: #FF0000;">int</span> pVerde, <span style="color: #FF0000;">int</span> pAzul<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    Contract.<span style="color: #0000FF;">Requires</span><span style="color: #008000;">&lt;</span>ArgumentOutOfRangeException<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>pVermelho <span style="color: #008000;">&gt;=</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">&amp;&amp;</span> pVermelho <span style="color: #008000;">&lt;=</span> <span style="color: #FF0000;">255</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    Contract.<span style="color: #0000FF;">Requires</span><span style="color: #008000;">&lt;</span>ArgumentOutOfRangeException<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>pVerde <span style="color: #008000;">&gt;=</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">&amp;&amp;</span> pVerde <span style="color: #008000;">&lt;=</span> <span style="color: #FF0000;">255</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    Contract.<span style="color: #0000FF;">Requires</span><span style="color: #008000;">&lt;</span>ArgumentOutOfRangeException<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>pAzul <span style="color: #008000;">&gt;=</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">&amp;&amp;</span> pAzul <span style="color: #008000;">&lt;=</span> <span style="color: #FF0000;">255</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// Implementação...</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>A abordagem acima não só resolve o nosso requisito de validação dos parâmetros, como também deixa o código mais legível e você ainda conta com a validação dos contratos em tempo de compilacão. O método Requires ainda possibilita a configuração de uma mensagem personalizada caso seja necessário.</p>
<p>Também poderíamos usar <a href="http://www.heroisdati.com/tags/aop/" target="_blank">AOP </a>para resolver nosso problema, contudo, seria utilizar um recurso muito poderoso e complexo para uma necessidade muito simples. Se você não vai usar <a href="http://www.heroisdati.com/tags/aop/" target="_blank">AOP</a> para nenhuma outra necessidade do seu projeto, não recomendo utilizar nessa situação.</p>
<p>Não devemos avaliar o poder do DbC analisando somente suas pré-condicões. Precisamos avaliar se todos os aspectos dessa abordagem serão realmente úteis no nosso projeto, isso inclui também as pós-condições e invariantes.</p>
<p><strong>Pós-condições</strong></p>
<p>É comum, após a execução de um método, realizar a verificação de estado da classe nos membros que foram afetados pelo mesmo. Nessa situação, usando a abordagem tradicional, faríamos uma verificação qualquer no final do corpo do método. Algo como mostra o código abaixo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> AdicionarVermelho<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> pValor<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Vermelho</span> <span style="color: #008000;">+=</span> pValor<span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Vermelho</span> <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">255</span><span style="color: #000000;">&#41;</span>
        <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> Exception<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;A propriedade Vermelho não deve ser maior que 255&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>Um dos principais problemas nessa abordagem é a falta de legibilidade no método. Veja a solução usando DbC:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> AdicionarVermelho<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> pValor<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    Contract.<span style="color: #0000FF;">Ensures</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Vermelho</span> <span style="color: #008000;">&lt;=</span> <span style="color: #FF0000;">255</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Vermelho</span> <span style="color: #008000;">+=</span> pValor<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>Quando trabalhamos com contratos, sempre inserimos os mesmos no topo dos métodos, o que facilita muito a leitura dos códigos. Mesmo com exemplos simples como esses, podemos perceber que a curva de aprendizagem é muito baixa.</p>
<p><strong>Invariantes</strong></p>
<p>Como você garantiria que um objeto estará válido sempre independente de quais e quantos métodos forem executados? Provavelmente, você precisará construir algum método de validação e chamá-lo ao final de cada método público de sua classe. Nesse ponto, percebemos uma grande diferença entre as abordagens, pois usando DbC, só precisaríamos construir o método Invariant com as validações necessárias e pronto, vejam o exemplo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>ContractInvariantMethod<span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> Invariant<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    Contract.<span style="color: #0000FF;">Invariant</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Vermelho</span> <span style="color: #008000;">&lt;=</span> <span style="color: #FF0000;">255</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>Em resumo, como disse anteriormente, é necessário analisar todos os recursos da abordagem e não somente um. Apensar das pré-condições serem facilmente substituídas por if&#8230;throw, isso não acontece da mesma forma com as invariantes.</p>
<p>DbC não é para todos os projetos, DbC não é regra, DbC não é melhor ou pior que ninguém. Use em seus projetos quando precisar de todos os recursos que a abordagem dispõe, e mesmo assim não deixe de analisar alternativas como AOP.</p>
<p>Abraços Pessoal!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/design-by-contract-dbc-em-net-comparando-solucoes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desenvolvimento Web &#8211; O que todo desenvolvedor web deveria saber</title>
		<link>http://www.heroisdati.com/desenvolvimento-web-o-que-todo-desenvolvedor-web-deveria-saber/</link>
		<comments>http://www.heroisdati.com/desenvolvimento-web-o-que-todo-desenvolvedor-web-deveria-saber/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 08:00:54 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Tecnologias e Ferramentas]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Guia de estudos]]></category>
		<category><![CDATA[Screencasts]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=534</guid>
		<description><![CDATA[Olá Pessoal! Continuando a onda de gravações de palestras estou disponibilizando a palestra que dei ano passado na Faculdade Faesa sobre Desenvolvimento Web. O objetivo dessa palestra era mostrar para os graduandos que a área não é tão simples quanto parece, e que para realmente para sermos considerados Web Masters precisamos dominar uma série de tecnologias e saber aplicá-las corretamente aos projetos. Espero que gostem de mais esse screencast:<br/><br/><span class="readmore"><a href="http://www.heroisdati.com/desenvolvimento-web-o-que-todo-desenvolvedor-web-deveria-saber/" title="Desenvolvimento Web &#8211; O que todo desenvolvedor web deveria saber">Continue Reading--23 words totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>Olá Pessoal! Continuando a onda de gravações de palestras estou disponibilizando a palestra que dei ano passado na <a href="http://site.faesa.br/" target="_blank">Faculdade Faesa</a> sobre <strong>Desenvolvimento Web</strong>. O objetivo dessa palestra era mostrar para os graduandos que a área não é tão simples quanto parece, e que para realmente para sermos considerados <span style="text-decoration: underline;">Web Masters</span> precisamos dominar uma série de tecnologias e saber aplicá-las corretamente aos projetos. Espero que gostem de mais esse screencast:</p>
<div style="width: 550px; margin: auto; margin-bottom: 20px;">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="412" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="best" /><param name="scale" value="showAll" /><param name="allowfullscreen" value="true" /><param name="wmode" value="transparent" /><param name="src" value="http://www.vimeo.com/moogaloop.swf?clip_id=13615815&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00adef" /><embed type="application/x-shockwave-flash" width="550" height="412" src="http://www.vimeo.com/moogaloop.swf?clip_id=13615815&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00adef" wmode="transparent" allowfullscreen="true" scale="showAll" quality="best"></embed></object>
</div>
<div style="width:425px; margin: auto; margin-bottom: 20px;" id="__ss_4831971"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/denisnferrari/desenvolvimento-web-o-que-todo-desenvolvedor-web-deveria-saber" title="Desenvolvimento web - O que todo desenvolvedor web deveria saber">Desenvolvimento web &#8211; O que todo desenvolvedor web deveria saber</a></strong><object id="__sse4831971" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=desenvolvimentoweb-oquetododesenvolvedorwebdeveriasaber-vweb-100725003040-phpapp02&#038;stripped_title=desenvolvimento-web-o-que-todo-desenvolvedor-web-deveria-saber" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4831971" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=desenvolvimentoweb-oquetododesenvolvedorwebdeveriasaber-vweb-100725003040-phpapp02&#038;stripped_title=desenvolvimento-web-o-que-todo-desenvolvedor-web-deveria-saber" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/denisnferrari">Denis Ferrari</a>.</div>
</div>
<p><strong>Links contidos na apresentação</strong></p>
<p style="padding-left: 30px;"><em>CSS Zen Garden</em><br />
<a href="http://www.csszengarden.com/" target="_blank">http://www.csszengarden.com/</a></p>
<p style="padding-left: 30px;"><em>Html</em><br />
<a href="http://www.w3schools.com/html/" target="_blank">http://www.w3schools.com/html/</a><br />
<a href="http://www.w3schools.com/tags/" target="_blank">http://www.w3schools.com/tags/</a></p>
<p style="padding-left: 30px;"><em>W3C</em><br />
<a href="http://pt.wikipedia.org/wiki/W3C" target="_blank">http://pt.wikipedia.org/wiki/W3C</a><br />
<a href="http://validator.w3.org/" target="_blank">http://validator.w3.org/</a></p>
<p style="padding-left: 30px;"><em>Java Script</em><br />
<a href="http://nagueva.com/o-que-e-javascript-nao-obstrutivo/" target="_blank">http://nagueva.com/o-que-e-javascript-nao-obstrutivo/</a><br />
<a href="http://dev.opera.com/articles/view/the-seven-rules-of-unobtrusive-javascrip/" target="_blank">http://dev.opera.com/articles/view/the-seven-rules-of-unobtrusive-javascrip/</a><br />
<a href="http://gujs.com.br/blog/2007/04/compactacao-javascript/" target="_blank">http://gujs.com.br/blog/2007/04/compactacao-javascript/</a><br />
<a href="http://www.prototypejs.org/" target="_blank">http://www.prototypejs.org/</a><br />
<a href="http://www.scripteka.com/" target="_blank">http://www.scripteka.com/</a></p>
<p style="padding-left: 30px;"><em>CSS e Tableless</em><br />
<a href="http://www.tableless.com.br/" target="_blank">http://www.tableless.com.br/</a><br />
<a href="http://www.oficinadanet.com.br/area/31/tableless/" target="_blank">http://www.oficinadanet.com.br/area/31/tableless/</a><br />
<a href="http://maujor.com/" target="_blank">http://maujor.com/</a><br />
<a href="http://maujor.com/tutorial/hacks-css.php" target="_blank">http://maujor.com/tutorial/hacks-css.php</a></p>
<p style="padding-left: 30px;"><em>Performance</em><br />
<a href="http://www.meiocodigo.com/category/css/" target="_blank">http://www.meiocodigo.com/category/css/</a><br />
<a href="http://www.meiocodigo.com/exemplos/bg-position/" target="_blank">http://www.meiocodigo.com/exemplos/bg-position/</a></p>
<p>Abraços!</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">
<p style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 0in; text-align: left; direction: ltr; unicode-bidi: embed;"><span style="font-size: 18pt; font-family: Corbel; color: black;"><a href="http://www.w3schools.com/html/">http://www.w3schools.com/html/</a></span><span style="font-size: 18pt; font-family: Corbel; color: black;"><a href="http://www.w3schools.com/tags/"> </a></span></p>
<p style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 0in; text-align: left; direction: ltr; unicode-bidi: embed;"><span style="font-size: 18pt; font-family: Corbel; color: black;"><a href="http://www.w3schools.com/tags/">http://www.w3schools.com/tags/</a></span><span style="font-size: 18pt; font-family: Corbel; color: black;"> </span></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/desenvolvimento-web-o-que-todo-desenvolvedor-web-deveria-saber/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Podcast: Programação Orientada a Aspecto</title>
		<link>http://www.heroisdati.com/podcast-programacao-orientada-a-aspecto/</link>
		<comments>http://www.heroisdati.com/podcast-programacao-orientada-a-aspecto/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 10:00:16 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Tecnologias e Ferramentas]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Architects]]></category>
		<category><![CDATA[AOP]]></category>
		<category><![CDATA[Componentes]]></category>
		<category><![CDATA[Podcasts]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=454</guid>
		<description><![CDATA[Programação orientada a aspectos é uma ótima saída para solução de requisitos ortogonais em projetos de software. Após algumas experiências e palestras sobre o tema, tive a oportunidade de participar da gravação de um podcast com a galera do .NET Architects: Alexandre Valente e Fábio Gouw.<br/><br/><span class="readmore"><a href="http://www.heroisdati.com/podcast-programacao-orientada-a-aspecto/" title="Podcast: Programação Orientada a Aspecto">Continue Reading--24 words totally</a></span>]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-455 alignright" title="Podcast" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/07/podcast_recording_editing_tools-289x300.jpg" alt="Podcast" width="173" height="180" /><a href="http://www.google.com.br/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CBYQFjAA&amp;url=http%3A%2F%2Fpt.wikipedia.org%2Fwiki%2FPrograma%25C3%25A7%25C3%25A3o_orientada_a_aspecto&amp;ei=PC5CTMnEJpCGuAe9-YH1Dg&amp;usg=AFQjCNFNEoAy2lJESsSerMYw7c7DQroNkw&amp;sig2=wpwuG26Rzbcb587yblt2vw" target="_blank">Programação orientada a aspectos</a> é uma ótima saída para solução de requisitos ortogonais em projetos de software. Após algumas experiências e palestras sobre o tema, tive a oportunidade de participar da gravação de um podcast com a galera do <a href="http://www.dotnetarchitects.net/" target="_blank">.NET Architects</a>: <a href="http://agvalente.wordpress.com/" target="_blank">Alexandre Valente</a> e <a href="http://www.galorebr.blogspot.com/" target="_blank">Fábio Gouw</a>.</p>
<p>Nos projetos em que usei AOP, trabalhei com o framework <a href="http://www.sharpcrafters.com/" target="_blank">PostSharp</a>, mas no podcast também abordamos <a href="http://www.aspectdotnet.org/" target="_blank">Aspect.NET</a> e <a href="http://www.eclipse.org/aspectj/" target="_blank">AspectJ</a>.</p>
<p>Vale muito a pena pesquisar sobre o tema.</p>
<p><strong>Podcast</strong></p>
<p><object width="290" height="24" type="application/x-shockwave-flash" name="pod_audio_1" style="outline-color: -moz-use-text-color; outline-style: none; outline-width: medium; visibility: visible;" data="http://podcast.dotnetarchitects.net/wp-content/plugins/podcasting/player/player.swf" id="pod_audio_1"><param name="wmode" value="opaque"><param name="menu" value="false"><param name="flashvars" value="soundFile=http%3A%2F%2Fpodcast.dotnetarchitects.net%2Fwp-content%2Fuploads%2F2010%2F05%2F013-AOP.mp3&amp;playerID=pod_audio_1"></object></p>
<p><strong>Post no DNA</strong></p>
<p><a href="http://podcast.dotnetarchitects.net/2010/05/podcast-13programacao-orientada-a-aspecto/" target="_blank">http://podcast.dotnetarchitects.net/2010/05/podcast-13programacao-orientada-a-aspecto/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/podcast-programacao-orientada-a-aspecto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TDD para iniciantes &#8211; Para quem quer começar e não sabe como</title>
		<link>http://www.heroisdati.com/tdd-para-iniciantes-para-quem-quer-comecar-e-nao-sabe-como/</link>
		<comments>http://www.heroisdati.com/tdd-para-iniciantes-para-quem-quer-comecar-e-nao-sabe-como/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 04:50:18 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Metodologias e processos]]></category>
		<category><![CDATA[Guia de estudos]]></category>
		<category><![CDATA[Screencasts]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=538</guid>
		<description><![CDATA[Olá Pessoal! Para auxiliar quem está começando ou quer começar a utilizar o TDD, estou disponibilizando um vídeo com uma demostração da ténica. O objetivo do vídeo é apresentar a utilização do TDD e fornecer algumas dicas sobre como se sair bem na utilização da técnica. Espero que gostem do vídeo:<br/><br/><span class="readmore"><a href="http://www.heroisdati.com/tdd-para-iniciantes-para-quem-quer-comecar-e-nao-sabe-como/" title="TDD para iniciantes &#8211; Para quem quer começar e não sabe como">Continue Reading--171 words totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>Olá Pessoal! Para auxiliar quem está começando ou quer começar a utilizar o <a href="http://pt.wikipedia.org/wiki/Test_Driven_Development" target="_blank">TDD</a>, estou disponibilizando um vídeo com uma demostração da ténica. O objetivo do vídeo é apresentar a utilização do TDD e fornecer algumas dicas sobre como se sair bem na utilização da técnica. Espero que gostem do vídeo:</p>
<div style="margin: auto; width: 550px; margin-bottom: 20px;">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="412" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="best" /><param name="scale" value="showAll" /><param name="allowfullscreen" value="true" /><param name="wmode" value="transparent" /><param name="src" value="http://www.vimeo.com/moogaloop.swf?clip_id=13635357&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00adef" /><embed type="application/x-shockwave-flash" width="550" height="412" src="http://www.vimeo.com/moogaloop.swf?clip_id=13635357&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00adef" wmode="transparent" allowfullscreen="true" scale="showAll" quality="best"></embed></object>
</div>
<p><strong>Dicas gerais sobre TDD<br />
</strong></p>
<p style="padding-left: 30px;"><strong>Sempre inicie com uma lista de testes</strong> : No TDD, não saímos codificando. Antes de iniciar a construção de qualquer coisa, elabore uma lista de testes inicial. Caso seja necessário, você poderá incluir mais itens na sua lista de testes mesmo depois de já ter iniciado a codificação;</p>
<p style="padding-left: 30px;"><strong>Sempre inicie pelo teste mais simples</strong> : Após elaborar sua lista de testes, inicie a codificação pelo teste mais simples da sua lista. Desenvolvendo dessa forma, você não só ganha ritmo, mas também vai aprendendo de pouco a pouco sobre o problema que está resolvendo.</p>
<p style="padding-left: 30px;"><strong>Comece a construção do seu código pela construção do seu teste</strong> : Desenvolvendo o teste primeiro (como preza o TDD) temos a oportunidade de tomar decisões de design das nossas classes antes mesmo de construí-las. Iniciar a construção do código pelo teste possibilita que você veja o seu código pela perspectiva de quem o utilizará, ou seja, você terá um feedback de utilização antes mesmo de codificar sua classe.</p>
<p style="padding-left: 30px;"><strong>Comece o teste pela assertiva</strong> : Iniciar o teste pela assertiva é definir o objetivo do teste. Escrever a assertiva é definir onde você quer chegar no teste, qual objetivo quer alcançar, se isso não estiver bem definido não adianta escrever o teste.</p>
<p style="padding-left: 30px;"><strong>Simule até construir realmente</strong> : Sempre que possível, construa implementações falsas. Deixe para construir as implementações reais só quando for realmente necessário.</p>
<p style="padding-left: 30px;"><strong>Busque o verde o mais rápido possível</strong> : Quando o teste estiver vermelho, procure fazê-lo passar o mais rápido possível, mesmo que a implementação feita não seja a mais agradável de ver. Quando o teste estiver verde, substitua a implementação feita por uma implementação mais elegante, afinal, a fase de refatoração serve para isso. <img src='http://hidrotec-es.com.br/denisferrari/wiki/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="padding-left: 30px;"><strong>Construa somente o necessário para o teste passar</strong> : Não construa nada além do que o seus testes pedirem. Se desejar realizar alguma codificação, escreve primeiro um teste e depois o código. TDD também exige muita disciplina.</p>
<p style="padding-left: 30px;"><strong>Passos de bebê</strong> : Procure sempre dar passos pequenos durante a construção dos seus testes, evite assumir um teste muito difícil ou grande logo de cara, deixe sempre os testes mais complicados para o final.</p>
<p><strong>Links</strong></p>
<p style="padding-left: 30px;">Faça download do projeto construído: <a href="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/07/RomanNumberConversion.rar">ConversaoNumerosRomanos</a></p>
<p style="padding-left: 30px;">Veja outros links sobre TDD no delicious: <a href="http://delicious.com/denisferrari/tdd" target="_blank">delicious.com/denisferrari/tdd</a></p>
<p>Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/tdd-para-iniciantes-para-quem-quer-comecar-e-nao-sabe-como/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Design By Contract (DbC) em .NET</title>
		<link>http://www.heroisdati.com/design-by-contract-dbc-em-net/</link>
		<comments>http://www.heroisdati.com/design-by-contract-dbc-em-net/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 14:57:53 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Tecnologias e Ferramentas]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[DbC]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=483</guid>
		<description><![CDATA[Olá Pessoal! Estou escrevendo esse post no intuito de compartilhar com vocês o resultado de uma de minhas pesquisas: Como aplicar o Design By Contract usando os recursos do framework .NET.

O conceito DbC é usado para garantir o estado de seus objetos em tempo de execução. Basicamente, quando construímos nossa classe usando o conceito DbC, definimos acordos formais (o que chamamos de contratos) com quem a utiliza. Esses contratos visam garantir regras de utilização e estado, regras essas que são expressas através de pré-condições, pós-condições e invariantes.<br/><br/><span class="readmore"><a href="http://www.heroisdati.com/design-by-contract-dbc-em-net/" title="Design By Contract (DbC) em .NET">Continue Reading--223 words totally</a></span>]]></description>
			<content:encoded><![CDATA[<p><a href="http://delicious.com/denisferrari/DbC" target="_blank"><img class="alignright size-medium wp-image-489" title="Design By Contract (DbC)" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/07/EB6033-001-246x300.jpg" alt="Design By Contract (DbC)" width="148" height="180" /></a>Olá Pessoal! Estou escrevendo esse post no intuito de compartilhar com vocês o resultado de uma de minhas pesquisas: Como aplicar o<a href="http://en.wikipedia.org/wiki/Design_by_contract" target="_blank"> Design By Contract</a> usando os recursos do framework .NET.</p>
<p>O conceito DbC é usado para garantir o estado de seus objetos em tempo de execução. Basicamente, quando construímos nossa classe usando o conceito DbC, definimos <em>acordos formais</em> (o que chamamos de <span style="text-decoration: underline;">contratos</span>) com quem a utiliza. Esses contratos visam garantir regras de utilização e estado, regras essas que são expressas através de <a href="http://en.wikipedia.org/wiki/Precondition" target="_blank">pré-condições</a>, <a href="http://en.wikipedia.org/wiki/Postcondition" target="_blank">pós-condições</a> e <a href="http://en.wikipedia.org/wiki/Invariant_%28computer_science%29" target="_blank">invariantes</a>.</p>
<p>Vamos explorar algumas situações do nosso dia-a-dia para fortalecer o conceito e aprender a utizar a classe <em><strong>Contract </strong></em>que se encontra no namespace <em><strong>System.Diagnostics.Contracts</strong></em>:</p>
<p>Como podem ver no código abaixo, estou criando uma classe chamada <strong>Cor</strong> que receberá no construtor uma string contendo o código hexadecimal. No teste, desejo garantir que caso a classe Cor seja instanciada com um parâmetro nulo, uma exceção do tipo <strong>ArgumentNullException</strong> seja lançada.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>TestMethod<span style="color: #000000;">&#93;</span>
<span style="color: #000000;">&#91;</span>ExpectedException<span style="color: #000000;">&#40;</span><span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span>ArgumentNullException<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Deve_rejeitar_parametros_nulos<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    var cor <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Cor<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>Para fazer o nosso teste passar, poderíamos verificar se o parâmetro é nulo usando <em>if </em>e lançar a exceção, porém, quando pensamos em contratos, o que fazemos é criar uma pré-condição de utilização da nossa classe. Para construir pré-condições, utilizamos o método <strong>Requires </strong>da classe <strong>Contract </strong>informando qual tipo de exceção será lançada caso o contrato for quebrado. Vejam o código abaixo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Cor
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">public</span> Cor<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> pCodigoHexadecimal<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        Contract.<span style="color: #0000FF;">Requires</span><span style="color: #008000;">&lt;</span>ArgumentNullException<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>pCodigoHexadecimal <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">// Código que converte o hexadecimal...</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>Como podem ver, o código fica bem mais limpo e expressivo. Sem falar que caso você tenha o <a href="http://research.microsoft.com/en-us/downloads/4ed7dd5f-490b-489e-8ca8-109324279968/default.aspx" target="_blank">plugin do Visual Studio</a> instalado terá essas verificações de constrato em tempo de design, isso mesmo, enquanto você cria suas classes seu código será analisado para verificar possíveis quebras de contrato. Vejam a imagem abaixo:</p>
<p style="text-align: center;"><a href="http://research.microsoft.com/en-us/downloads/4ed7dd5f-490b-489e-8ca8-109324279968/default.aspx" target="_blank"><img class="aligncenter size-full wp-image-522" title="Validação do contrato" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/07/validacaoContrato1.jpg" alt="validacaoContrato" width="530" height="317" /></a></p>
<p>Vamos para outra situação: Agora nossa classe Cor possui um construtor que recebe as taxas de vermelho, verde e azul. Construímos um método para adicionar tonalidades de vermelho na cor, porém, a taxa máxima permitida de vermelho é de 255.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>TestMethod<span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Deve_garantir_taxa_de_vermelho_menor_ou_igual_255<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    var vermelho <span style="color: #008000;">=</span> <span style="color: #FF0000;">200</span><span style="color: #008000;">;</span>
    var verde <span style="color: #008000;">=</span> <span style="color: #FF0000;">200</span><span style="color: #008000;">;</span>
    var azul <span style="color: #008000;">=</span> <span style="color: #FF0000;">200</span><span style="color: #008000;">;</span>
    var cor <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Cor<span style="color: #000000;">&#40;</span>vermelho, verde, azul<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #0600FF;">try</span>
    <span style="color: #000000;">&#123;</span>
        cor.<span style="color: #0000FF;">AdicionarVermelho</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">56</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
    <span style="color: #0600FF;">catch</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">// O método deve lançar a exceção pois 200 + 56 ultrapassa o limite de 255.</span>
        Assert.<span style="color: #0000FF;">AreEqual</span><span style="color: #000000;">&#40;</span>vermelho <span style="color: #008000;">+</span> <span style="color: #FF0000;">56</span>, cor.<span style="color: #0000FF;">Vermelho</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>Para garantir o limite da taxa de vermelho no nosso objeto, precisamos que o nosso método seja executado para então verificar o estado. Em DbC podemos criar uma pós-condição para avaliar o estado do nosso objeto ao final da execução do nosso método/propriedade. No exemplo abaixo usamos o método <strong>Ensures</strong> para criar a pós-condição que verifica a taxa de vermelho do nosso objeto após a execução do nosso método. <span style="text-decoration: underline;">Os contratos sempre são definidos no início</span> dos métodos/propriedades.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Cor
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> Vermelho <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> <span style="color: #0600FF;">private</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF;">public</span> Cor<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> pVermelho, <span style="color: #FF0000;">int</span> pVerde, <span style="color: #FF0000;">int</span> pAzul<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Vermelho</span> <span style="color: #008000;">=</span> pVermelho<span style="color: #008000;">;</span>
        <span style="color: #008080; font-style: italic;">// Configurar as outras propriedades...</span>
    <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> AdicionarVermelho<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> pValor<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">// Aqui estamos garantindo que ao final da execução desse método, a propriedade Vermelho deverá respeitar o limite de 255;</span>
        Contract.<span style="color: #0000FF;">Ensures</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Vermelho</span> <span style="color: #008000;">&lt;=</span> <span style="color: #FF0000;">255</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Vermelho</span> <span style="color: #008000;">+=</span> pValor<span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>As pós-condições são tão simples de serem escritas quanto as pré-condições.</p>
<p>Outra forma de garantir o nosso limite de 255 é criar um contrato invariante, ou seja, uma regra que será mantida sempre, independente de quais método forem executados no objeto. Para criamos o contrato invariante no .net usamos o método <strong>Invariant </strong>da classe <strong>Contract</strong>. Métodos invariantes são verificados sempre após a execução de qualquer método público da sua classe, eles só devem ter declarações de contratos e não podem retornar valores.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>ContractInvariantMethod<span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> Invariant<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    Contract.<span style="color: #0000FF;">Invariant</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Vermelho</span> <span style="color: #008000;">&lt;=</span> <span style="color: #FF0000;">255</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>Como vimos, DbC é uma obordagem muito interessante e pode nos auxiliar muito no dia-a-dia. O objeto desse post não é apresentar bons padrões para design de testes ou grandes soluções no trabalho com cores, os exemplos aqui mostrados visam apenas apresentar alguns recursos da classe Contract. Façam os devidos testes e contem o que acharam do recurso e dessa abordagem.</p>
<p>Separei alguns links interessantes sobre o assunto no delicious, veja no link: <a href="http://delicious.com/denisferrari/DbC" target="_blank">delicious.com/denisferrari/DbC</a>.</p>
<p>Fico no aguardo do feedback de vocês.</p>
<p>Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/design-by-contract-dbc-em-net/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Mercado e Carreira em Desenvolvimento de Software</title>
		<link>http://www.heroisdati.com/mercado-e-carreira-em-desenvolvimento-de-software/</link>
		<comments>http://www.heroisdati.com/mercado-e-carreira-em-desenvolvimento-de-software/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 10:00:24 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[OFF-TOPIC]]></category>
		<category><![CDATA[Reflexões]]></category>
		<category><![CDATA[Certificações]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Screencasts]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=470</guid>
		<description><![CDATA[A pedido do Prof. Lourival Cristofoletti apresentei para uma turma e Ciência da Computação na Faculdade Faesa dicas sobre o mercado e a carreira de desenvolvimento de software. Essa palestra já foi há algum tempo, mas estava organizando as apresentações no meu computador e esbarrei com essa palestra.<br/><br/><span class="readmore"><a href="http://www.heroisdati.com/mercado-e-carreira-em-desenvolvimento-de-software/" title="Mercado e Carreira em Desenvolvimento de Software">Continue Reading--44 words totally</a></span>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="Turma de Ciência da Computação da Faesa" src="http://farm5.static.flickr.com/4137/4803113147_79c65e3f6d.jpg" alt="" width="300" height="225" />A pedido do Prof. <a href="http://cristofoletti.blogspot.com/" target="_blank">Lourival Cristofoletti</a> apresentei para uma turma e Ciência da Computação na <a href="http://site.faesa.br/" target="_blank">Faculdade Faesa</a> dicas sobre o mercado e a carreira de desenvolvimento de software. Essa palestra já foi há algum tempo, mas estava organizando as apresentações no meu computador e esbarrei com essa palestra.</p>
<p>Engraçado como as coisas acontecem, olhando as fotos da palestra vejo que um dos coordenadores do <a href="http://www.msdev-es.com.br/" target="_blank">MSDev-ES</a> e atual membro do time de desenvolvimento da <a href="http://www.mindworks.com.br/" target="_blank">Mindworks</a> estava lá, o <a href="http://twitter.com/Hrosko" target="_blank">Rafael Hrasko</a>. A foto também mostra o ponto onde iniciei algumas boas amizades, afinal, ainda sou formando na Faesa.</p>
<p>A idéia da palestra surgiu a partir de algumas conversas com o Prof. Lourival, que sempre foca nas suas aulas em dicas sobre a carreira e no desenvolvimento profissional dos alunos. Fiquei muito feliz com a confiança depositada em mim pelo Prof. Lourival, afinal de contas, não sou tão mais velho do que os alunos daquela turma, só iniciei na área mais cedo. Depois dessa palestra, decidi escrever algumas idéias sobre Mercado e Carreira, e ingressei no time de colaboradores do <a href="http://www.minhacarreira.com/" target="_blank">Portal Minha Carreira</a>.</p>
<p>Decidi gravar a palestra no formato de screencast e disponibilizá-la aqui no entuito de ajudar quem estiver começando nessa área da qual me orgulho tanto trabalhar. Espero que gostem. Aguardo o Feedback de vocês.</p>
<p><strong>Screencast</strong></p>
<div style="width:400px; height:302px; margin: auto;">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="302" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="best" /><param name="scale" value="showAll" /><param name="allowfullscreen" value="true" /><param name="wmode" value="transparent" /><param name="src" value="http://www.vimeo.com/moogaloop.swf?clip_id=13296732&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00adef" /><embed type="application/x-shockwave-flash" width="400" height="302" src="http://www.vimeo.com/moogaloop.swf?clip_id=13296732&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00adef" wmode="transparent" allowfullscreen="true" scale="showAll" quality="best"></embed></object>
</div>
<p><strong>Fotos</strong></p>
<div style="width:400px; height:300px; margin: auto; margin-bottom: 20px;">
<object width="400" height="300"><param name="flashvars" value="offsite=true&#038;lang=pt-br&#038;page_show_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624400226429%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624400226429%2F&#038;set_id=72157624400226429&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=pt-br&#038;page_show_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624400226429%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624400226429%2F&#038;set_id=72157624400226429&#038;jump_to=" width="400" height="300"></embed></object>
</div>
<p><strong>Apresentação</strong></p>
<div style="width:425px; margin: auto;">
<div style="width:425px" id="__ss_4739040"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/denisnferrari/desenvolvimento-de-software-mercado-e-carreira" title="Desenvolvimento de software - Mercado e Carreira">Desenvolvimento de software &#8211; Mercado e Carreira</a></strong><object id="__sse4739040" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=apresentaofaesa-carreira-web-100712193059-phpapp02&#038;stripped_title=desenvolvimento-de-software-mercado-e-carreira" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4739040" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=apresentaofaesa-carreira-web-100712193059-phpapp02&#038;stripped_title=desenvolvimento-de-software-mercado-e-carreira" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/denisnferrari">Denis Ferrari</a>.</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/mercado-e-carreira-em-desenvolvimento-de-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Palestra sobre Agile e TDD na UNES em Cachoeiro-ES</title>
		<link>http://www.heroisdati.com/palestra-sobre-agile-e-tdd-na-unes-em-cachoeiro-es/</link>
		<comments>http://www.heroisdati.com/palestra-sobre-agile-e-tdd-na-unes-em-cachoeiro-es/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 10:00:26 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Metodologias e processos]]></category>
		<category><![CDATA[OFF-TOPIC]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[MSDev-ES]]></category>
		<category><![CDATA[Reflexões]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=461</guid>
		<description><![CDATA[No dia 16/06 tive a oportunidade e a honra de palestrar na faculdade UNES em Cachoeiro-ES. O Evento foi organizado pelo MIC e marcou a inauguração do mais novo prédio da faculdade. A minha palestra representou a comunidade de desenvolvedores capixabas, o MSDev-ES. A segunda palestra foi realizada pelo Cleyton Santana do grupo MSInfraES.<br/><br/><span class="readmore"><a href="http://www.heroisdati.com/palestra-sobre-agile-e-tdd-na-unes-em-cachoeiro-es/" title="Palestra sobre Agile e TDD na UNES em Cachoeiro-ES">Continue Reading--44 words totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>No dia 16/06 tive a oportunidade e a honra de palestrar na faculdade <a href="http://www.unes.br/" target="_blank">UNES</a> em Cachoeiro-ES. O Evento foi organizado pelo <a href="http://www.micvitoria.com.br/" target="_blank">MIC</a> e marcou a inauguração do mais novo prédio da faculdade. A minha palestra representou a comunidade de desenvolvedores capixabas, o <a href="http://www.msdev-es.com.br/" target="_blank">MSDev-ES</a>. A segunda palestra foi realizada pelo <a href="http://csantanaes.blogspot.com/" target="_blank">Cleyton Santana</a> do grupo <a href="http://www.msinfraes.com.br/" target="_blank">MSInfraES</a>.</p>
<p>Falar para pessoas que estão iniciando na área de desenvolvimento de software é uma extrema responsabilidade, por isso, ao invés de falar somente sobre <a href="http://www.google.com.br/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CB8QFjAA&amp;url=http%3A%2F%2Fpt.wikipedia.org%2Fwiki%2FTest_Driven_Development&amp;ei=SDtCTIvEIs-MuAfTnqH6Dg&amp;usg=AFQjCNF2mRbpSAyP_OjFJhjKCzTEtJu1Sw&amp;sig2=WHJS84I2cNVOGnHUCaSlgg" target="_blank">TDD</a> procurei mostrar alguns problemas da área e boas práticas através do case do meu primeiro projeto de software relevante (tinha 17 ou 18). Esse projeto foi realmente traumático, porém, definiu muitos dos meus paradigmas atuais sobre a carreira e o desenvolvimento de software em geral.</p>
<p>Troquei muitas informações com os profissionais locais após a minha palestra, fizemos tanto networking que acabei nem assistindo a segunda palestra do evento. Outro ponto relevante é que muitas pessoas que estavam lá tinham comparecido ao <a href="http://www.mare-vix.com/" target="_blank">Maré-VIX</a>, evento que organizei no <a href="http://www.cetfaesa.com.br/" target="_blank">CET-Faesa</a> poucos dias antes.</p>
<p><strong>Fotos</strong></p>
<div style="width:400px; height:300px; margin: auto; margin-bottom: 20px;">
<object width="400" height="300"><param name="flashvars" value="offsite=true&#038;lang=pt-br&#038;page_show_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624514530970%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624514530970%2F&#038;set_id=72157624514530970&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=pt-br&#038;page_show_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624514530970%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624514530970%2F&#038;set_id=72157624514530970&#038;jump_to=" width="400" height="300"></embed></object>
</div>
<p><strong>Slides da apresentação</strong></p>
<div style="width:425px; margin: auto;" id="__ss_4522234"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/denisnferrari/desenvolvimento-orientado-a-testes" title="Desenvolvimento orientado a Testes">Desenvolvimento orientado a Testes</a></strong><object id="__sse4522234" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=palestratdd-cachoeiro-100616223707-phpapp02&#038;stripped_title=desenvolvimento-orientado-a-testes" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4522234" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=palestratdd-cachoeiro-100616223707-phpapp02&#038;stripped_title=desenvolvimento-orientado-a-testes" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/denisnferrari">Denis Ferrari</a>.</div>
</div>
<p>Espero que os presentes tenham gostado do evento assim como eu gostei. Agradeço ao MIC e a UNES pela oportunidade e pela confiança.</p>
<p>Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/palestra-sobre-agile-e-tdd-na-unes-em-cachoeiro-es/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Podcast: Modelo Anêmico</title>
		<link>http://www.heroisdati.com/podcast-modelo-anemico/</link>
		<comments>http://www.heroisdati.com/podcast-modelo-anemico/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 10:00:42 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[.NET Architects]]></category>
		<category><![CDATA[Podcasts]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=332</guid>
		<description><![CDATA[Tive a oportunidade de participar do podcast sobre Modelos Anêmicos com a galera do .Net Architects: Giovanni Bassi, Alexandre Valente, Emmanuel Brandão e Fábio Margarito.

Esse podcast ficou muito legal, rolaram discussões muito bacanas sobre o assunto, sem falar que os comentários nos bastidores da gravacão são muito engraçados.<br/><br/><span class="readmore"><a href="http://www.heroisdati.com/podcast-modelo-anemico/" title="Podcast: Modelo Anêmico">Continue Reading--19 words totally</a></span>]]></description>
			<content:encoded><![CDATA[<p><a href="http://martinfowler.com/bliki/AnemicDomainModel.html" target="_blank"><img class="size-medium wp-image-446 alignright" title="Modelos anêmicos" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/07/102383645-300x300.jpg" alt="Modelos anêmicos" width="180" height="180" /></a>Tive a oportunidade de participar do podcast sobre <a href="http://martinfowler.com/bliki/AnemicDomainModel.html" target="_blank">Modelos Anêmicos</a> com a galera do <a href="http://www.dotnetarchitects.net/" target="_blank">.Net Architects</a>: <a href="http://unplugged.giggio.net/" target="_blank">Giovanni Bassi</a>, <a href="http://agvalente.wordpress.com/" target="_blank">Alexandre Valente</a>, <a href="http://blog.egomesbrandao.net/" target="_blank">Emmanuel Brandão</a> e <a href="http://www.mgrtconsultoria.com/blog/" target="_blank">Fábio Margarito</a>.</p>
<p>Esse podcast ficou muito legal, rolaram discussões muito bacanas sobre o assunto, sem falar que os comentários nos bastidores da gravacão são muito engraçados.</p>
<p>Espero que gostem dos tópicos apresentados no podcast.</p>
<p><strong>Podcast</strong></p>
<p><object width="290" height="24" type="application/x-shockwave-flash" name="pod_audio_1" style="outline-color: -moz-use-text-color; outline-style: none; outline-width: medium; visibility: visible;" data="http://podcast.dotnetarchitects.net/wp-content/plugins/podcasting/player/player.swf" id="pod_audio_1"><param name="wmode" value="opaque"><param name="menu" value="false"><param name="flashvars" value="soundFile=http%3A%2F%2Fpodcast.dotnetarchitects.net%2Fwp-content%2Fuploads%2F2010%2F03%2F011-Modelo_anemico.mp3&amp;playerID=pod_audio_1"></object></p>
<p><strong>Post no DNA</strong></p>
<p><a href="http://podcast.dotnetarchitects.net/2010/03/podcast-11-modelo-anemico/" target="_blank">http://podcast.dotnetarchitects.net/2010/03/podcast-11-modelo-anemico/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/podcast-modelo-anemico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I Fórum Microsoft para Gerentes de Sistemas em Vitória-ES</title>
		<link>http://www.heroisdati.com/i-forum-microsoft-para-gerentes-de-sistemas-em-vitoria-es/</link>
		<comments>http://www.heroisdati.com/i-forum-microsoft-para-gerentes-de-sistemas-em-vitoria-es/#comments</comments>
		<pubDate>Sat, 17 Jul 2010 13:45:43 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[OFF-TOPIC]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[CSharp]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Mindworks]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=410</guid>
		<description><![CDATA[Na quarta-feira (14/07) tivemos o I Fórum Microsoft para Gerente de Sistemas em Vitória-ES. O evento foi realizado pela Mindworks a convite da Microsoft, e a equipe de desenvolvimento entrou em cena para apresentar as novidades do Visual Studio 2010, Scrum, TDD, Ferramentas de qualidade do VS2010 e por fim, o TFS.<br/><br/><span class="readmore"><a href="http://www.heroisdati.com/i-forum-microsoft-para-gerentes-de-sistemas-em-vitoria-es/" title="I Fórum Microsoft para Gerentes de Sistemas em Vitória-ES">Continue Reading--112 words totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>Na quarta-feira (14/07) tivemos o <strong>I Fórum Microsoft para Gerente de Sistemas em Vitória-ES</strong>. O evento foi realizado pela <a href="http://www.mindworks.com.br/" target="_blank">Mindworks</a> a convite da Microsoft, e a equipe de desenvolvimento entrou em cena para apresentar as novidades do Visual Studio 2010, Scrum, TDD, Ferramentas de qualidade do VS2010 e por fim, o TFS.</p>
<p>Foi uma imensa responsabilidade apresentar novas ferramentas e principalmente novas idéias em desenvolvimento de software para representantes das empresas do mercado capixaba e para os desenvolvedores presentes. Vejam como foi cada parte do evento:</p>
<p><strong>Novidades do Visual Studio 2010</strong></p>
<p>Abri o evento apresentando as novidades do Visual Studio 2010, e não tinha como não ficar empolgado com tanta coisa boa! Queria mostrar exemplos de tudo, mas não havia tempo, e ainda assim atrasei &#8220;um pouco&#8221; a minha palestra para apresentar todos os recursos que tinha preparado. Alguns tópicos abordados:</p>
<ul>
<li>IntelliTrace</li>
<li>Gráfico de dependências</li>
<li>Diagrama de camadas</li>
<li>Ferramentas para Deploy</li>
<li>Novidades do C# 4.0</li>
<li>Novidades do ASP.NET 4.0</li>
<li>Code Analysis</li>
<li>Performance Analysis</li>
<li>Biblioteca para Paralelismo</li>
<li>Novidades no desenvolvimento para SharePoint</li>
</ul>
<p>Ao final da apresentação, quem já gostava do Visual Studio passou a gostar mais, e quem não conhecia viu o poder dessa IDE.</p>
<p><strong>Scrum e Desenvolvimento Ágil</strong></p>
<p>O <a href="http://twitter.com/AndrePiresMCT" target="_blank">André Pires</a> apresentou muito bem a <a href="http://www.agilemanifesto.org/iso/ptbr/" target="_blank">metodologia ágil</a> e seus <a href="http://www.agilemanifesto.org/iso/ptbr/principles.html" target="_blank">princípios</a>.  Como de costume, a palestra dele foi muito interativa e divertida. Discutimos muito com os representantes do mercado e do governo o cenário atual dos nossos projetos de software e por que precisamos adotar novas estratégias se quisermos melhorar nossas estatísticas de sucesso.</p>
<p>Essa palestra foi praticamente em dupla, pois o André sempre solicitava relatos de experiências e complementações da minha parte. Aproveitei para explicar a importância do trabalho iterativo e <a href="http://www.heroisdati.com/previsibilidade-em-desenvolvimento-de-software/" target="_blank">por que projetos de software são tão difíceis de serem estimados</a>.</p>
<p>Gosto muito do assunto e das discussões que rolam, mas a impressão que tive é que todos os presentes concordaram que a forma de trabalho que estávamos apresentando possuía práticas que facilitariam o desenvolvimento como um todo.</p>
<p><strong>TDD e Ferramentas de garantia da qualidade no Visual Studio 2010</strong></p>
<p>Tenho falado muito sobre <a href="http://pt.wikipedia.org/wiki/Test_Driven_Development" target="_blank">TDD</a> aqui em Vitória. Por questões de tempo, procurei não apresentar todas as dicas que geralmente dou e mostrar um exemplo prático de aplicação do TDD, uma espécie de TDD para iniciantes.</p>
<p>A segunda parte da palestra foi dedicada as ferramentas de Teste do Visual Studio. Gosto muito dessas ferramentas, a Microsoft acertou mais uma vez, apesar de ainda acreditar que eles podem melhorar a biblioteca Microsoft.VisualStudio.TestTools.UnitTesting para dar mais poder e semântica aos testes unitários.</p>
<p><strong>TFS</strong></p>
<p>Só o TFS daria um evento inteiro. O André apresentou a utilização do template Scrum e mais uma série de recursos do TFS, os presentes realmente ficaram impressionados com o nível de integração e as facilidades que os recursos apresentados geram para a equipe.</p>
<p><strong>Fotos do evento</strong></p>
<div style="margin: auto; margin-bottom: 20px; width: 480px; height: 337px;">
<object width="400" height="300"><param name="flashvars" value="offsite=true&#038;lang=pt-br&#038;page_show_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624514437702%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624514437702%2F&#038;set_id=72157624514437702&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=pt-br&#038;page_show_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624514437702%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fdenisferrari%2Fsets%2F72157624514437702%2F&#038;set_id=72157624514437702&#038;jump_to=" width="480" height="337"></embed></object>
</div>
<p>Apesar do trabalho que dá, não vejo a hora do próximo evento. <img src='http://hidrotec-es.com.br/denisferrari/wiki/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Agradeço a todos os presentes e a Mindworks pela oportunidade.</p>
<p>Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/i-forum-microsoft-para-gerentes-de-sistemas-em-vitoria-es/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Previsibilidade em desenvolvimento de software</title>
		<link>http://www.heroisdati.com/previsibilidade-em-desenvolvimento-de-software/</link>
		<comments>http://www.heroisdati.com/previsibilidade-em-desenvolvimento-de-software/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 00:08:35 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Metodologias e processos]]></category>
		<category><![CDATA[Reflexões]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Screencasts]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=382</guid>
		<description><![CDATA[Uma apresentação que visa exmplicar as dificuldades em realizar previsões em projetos de software.]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-386" title="Previsibilidade" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/07/bola_cristal-284x300.jpg" alt="Previsibilidade" width="284" height="300" />A cada dia que passo na área de desenvolvimento de software percebo que a mesma é peculiar em vários aspectos. É comum pessoas de outras áreas formarem opiniões sobre a nossa área usando como referência suas áreas de conhecimento, o problemas disso é que, geralmente, só quem é da área de software consegue ter uma visão realista sobre as características e problemas da área.</p>
<p>Após vários debates sobre o tema, decidi fazer um post sobre Previsibilidade em desenvolvimento de software. Decidi abordar o tema em uma apresentação ao invés de escrever, pois acredito que assim consegui expressar melhor as características que fazem com que seja tão difícil na nossa área estimar o tempo de desenvolvimento dos projetos.</p>
<div style="margin: auto; width: 400px;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="302" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="best" /><param name="scale" value="showAll" /><param name="allowfullscreen" value="true" /><param name="wmode" value="transparent" /><param name="src" value="http://www.vimeo.com/moogaloop.swf?clip_id=13284650&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00adef" /><embed type="application/x-shockwave-flash" width="400" height="302" src="http://www.vimeo.com/moogaloop.swf?clip_id=13284650&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00adef" wmode="transparent" allowfullscreen="true" scale="showAll" quality="best"></embed></object></div>
<div id="__ss_4738683" style="margin: auto; width: 425px;"><strong style="display:block;margin:12px 0 4px"><a title="Previsibilidade em desenvolvimento de software" href="http://www.slideshare.net/denisnferrari/previsibilidade-em-desenvolvimento-de-software-4738683">Previsibilidade em desenvolvimento de software</a></strong><object id="__sse4738683" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=previsibilidadeemdesenvolvimentodesoftware-v2-100712180459-phpapp02&amp;stripped_title=previsibilidade-em-desenvolvimento-de-software-4738683" /><param name="name" value="__sse4738683" /><param name="allowfullscreen" value="true" /><embed id="__sse4738683" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=previsibilidadeemdesenvolvimentodesoftware-v2-100712180459-phpapp02&amp;stripped_title=previsibilidade-em-desenvolvimento-de-software-4738683" name="__sse4738683" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/denisnferrari">Denis Ferrari</a>.</div>
</div>
<p>Veja mais sobre previbilidade em desenvolvimento de software na tag &#8220;Previsibilidade&#8221; no delicious: <a href="http://delicious.com/denisferrari/Previsibilidade" target="_blank">delicious.com/denisferrari/Previsibilidade</a></p>
<p>Fico no aguardo dos feedbacks!</p>
<p>Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/previsibilidade-em-desenvolvimento-de-software/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ninject : Injeção de dependência simples</title>
		<link>http://www.heroisdati.com/ninject-injecao-de-dependencia-simples/</link>
		<comments>http://www.heroisdati.com/ninject-injecao-de-dependencia-simples/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 04:09:54 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Tecnologias e Ferramentas]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[DI]]></category>
		<category><![CDATA[IoC]]></category>
		<category><![CDATA[Mindworks]]></category>
		<category><![CDATA[Ninject]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=348</guid>
		<description><![CDATA[Exemplo de configuração e utilização do NInject para injeção de dependência.]]></description>
			<content:encoded><![CDATA[<p><a href="http://ninject.org/" target="_blank"><img class="alignleft size-full wp-image-361" title="Ninject" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/07/ninja.jpg" alt="Ninject" width="94" height="180" /></a>Realizei nas últimas semanas uma pesquisa sobre frameworks para injeção de dependência (DI) para atender uma demanda do projeto que estou trabalhando atualmente na <a href="http://www.mindworks.com.br/" target="_blank">Mindworks</a>. Encontrei <a href="http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx" target="_blank">vários frameworks bacanas</a>, porém, pela simplicidade de configuração e de uso, acabei decidindo por estudar mais a fundo o framework <a href="http://ninject.org/" target="_blank">Ninject</a>.</p>
<p>O exemplo que vou mostrar aqui é básico, pois esse framework tem vários recursos legais que serão abordados em outros posts. Vou mostrar um pouco da <a href="http://www.martinfowler.com/articles/injection.html" target="_blank">teoria sobre DI</a> e como utilizar o Ninject para aplicar esse pattern.</p>
<p>Quando utilizamos um componente qualquer, estamos acoplando o mesmo a nossa solução. Componentes atendem a necessidades específicas, por exemplo: Enviar e-mail, gerar pdf, compactar arquivos, etc. O que buscamos com o pattern DI é usar esses componentes sem acoplá-los diretamente a nossa solução, e basicamente conseguimos isso através de interfaces.</p>
<p>Vamos começar declarando uma interface <em>IContrato</em>. Esse interface representa uma necessidade qualquer da sua solução, e todos os seus algoritmos devem considerar apenas os membros desse interface.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">interface</span> IContrato <span style="color: #000000;">&#123;</span> <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>A interface que criamos precisa de uma implementação concreta, pois como vimos, ela só representa nossas necessidades. O próximo passo é criar a classe <em>Fornecedor</em> que irá implementar a interface <em>IContrato</em>. Nosso desafio nesse exemplo é usar a classe <em>Fornecedor </em>no nosso código sem criar uma referência direta, ou seja, não poderemos usar o <em>new </em>para obter uma instância da classe <em>Fornecedor</em>.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Fornecedor <span style="color: #008000;">:</span> IContrato <span style="color: #000000;">&#123;</span> <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>A grande solução aqui é delegar a responsabilidade de intanciar os nossos componentes para um terceiro elemento, que nesse caso é o Ninject. Precisamos dizer ao Ninject qual classe queremos que resolva a interface <em>IContrato</em>, para isso, precisamos criar um Módulo e nele configurar os Binds.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Modulo <span style="color: #008000;">:</span> NinjectModule
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> <span style="color: #0600FF;">void</span> Load<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">// Configuramos para que a interface IContrato seja direcionada para a classe Fornecedor;</span>
        Bind<span style="color: #008000;">&lt;</span>IContrato<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">To</span><span style="color: #008000;">&lt;</span>Fornecedor<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>Agora vamos a utilização do Ninject. Criei um método de teste para exemplificar como configuramos e usamos a classe <em>Kernel</em>, que é a classe responsável por retornar as instâncias dos componentes que precisamos a partir da interface.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>TestMethod<span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Deve_obter_fornecedor_pelo_contrato<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #008080; font-style: italic;">// Instancia o módulo;</span>
    var modulo <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Modulo<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// O Kernel é a classe responsável por fornecer as instâncias necessárias para o código;</span>
    IKernel kernel <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StandardKernel<span style="color: #000000;">&#40;</span>modulo<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// O método Get devolve a instância da classe mapeada para a interface;</span>
    IContrato meuContrato <span style="color: #008000;">=</span> kernel.<span style="color: #0000FF;">Get</span><span style="color: #008000;">&lt;</span>IContrato<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    Assert.<span style="color: #0000FF;">IsNotNull</span><span style="color: #000000;">&#40;</span>meuContrato<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    Assert.<span style="color: #0000FF;">IsInstanceOfType</span><span style="color: #000000;">&#40;</span>meuContrato, <span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span>Fornecedor<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>Como vimos anteriormente, podemos solicitar ao <em>Kernel </em>uma instância de classe manualmente, porém, o Ninject possibilita configurar as dependências de uma classe a partir do atributo [<em>Inject</em>]. Vamos declarar uma classe chamada <em>Servico </em>com uma propriedade do tipo <em>IContrato</em>.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Servico
<span style="color: #000000;">&#123;</span>
    <span style="color: #000000;">&#91;</span>Inject<span style="color: #000000;">&#93;</span>
    <span style="color: #0600FF;">public</span> IContrato Fornecedor <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>Vamos aos testes. Podemos perceber no teste abaixo que o método Inject da classe <em>Kernel </em>resolve todas as dependências da instância da classe <em>Servico</em>.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>TestMethod<span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Deve_resolver_dependencias_manualmente<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    IKernel kernel <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StandardKernel<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> Modulo<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// A instância normal não tem as dependências resolvidas;</span>
    var servico <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Servico<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    Assert.<span style="color: #0000FF;">IsNull</span><span style="color: #000000;">&#40;</span>servico.<span style="color: #0000FF;">Fornecedor</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// O método Inject resolve as dependências da instância usando como marcador o atributo [Inject];</span>
    kernel.<span style="color: #0000FF;">Inject</span><span style="color: #000000;">&#40;</span>servico<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    Assert.<span style="color: #0000FF;">IsNotNull</span><span style="color: #000000;">&#40;</span>servico.<span style="color: #0000FF;">Fornecedor</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    Assert.<span style="color: #0000FF;">IsInstanceOfType</span><span style="color: #000000;">&#40;</span>servico.<span style="color: #0000FF;">Fornecedor</span>, <span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span>Fornecedor<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>Nesse teste, percebemos que se solicitarmos uma instância da classe <em>Servico </em>diretamente ao kernel do Ninject, o mesmo já resolverá as dependências internas da classe.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>TestMethod<span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Deve_resolver_dependencias_automaticamente<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    IKernel kernel <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StandardKernel<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> Modulo<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">// Quando solicitamos uma instância de classe, a mesma é devolvida com as dependências resolvidas.</span>
    var servico <span style="color: #008000;">=</span> kernel.<span style="color: #0000FF;">Get</span><span style="color: #008000;">&lt;</span>Servico<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    Assert.<span style="color: #0000FF;">IsNotNull</span><span style="color: #000000;">&#40;</span>servico.<span style="color: #0000FF;">Fornecedor</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    Assert.<span style="color: #0000FF;">IsInstanceOfType</span><span style="color: #000000;">&#40;</span>servico.<span style="color: #0000FF;">Fornecedor</span>, <span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span>Fornecedor<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>Como vimos, o grande truque aqui é delegar a responsabilidade de criação das instâncias para o kernel do Ninject. Como não utilizamos em nenhum momento o <em>new </em>para instanciar a classe <em>Fornecedor</em>, podemos substituí-la só alterando o Bind na classe <em>Módulo</em>.</p>
<p>Posteriormente vou postar outros artigos sobre Ninject focando em características mais específicas do framework.</p>
<p>Para mais referências, visite a tag Ninject no delicious: <a href="http://delicious.com/denisferrari/Ninject" target="_blank">delicious.com/denisferrari/Ninject</a></p>
<p>Você pode baixar o projeto pelo Google Docs: <a href="http://docs.google.com/leaf?id=0B4PDFD2JJvADNDU2NDdlMGYtMDgzZS00NTQzLTgxNmYtN2NiNWE3YzExODZj&amp;hl=en" target="_blank">Faça o Download</a></p>
<p>Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/ninject-injecao-de-dependencia-simples/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Já salvou meu dia: xDirectory</title>
		<link>http://www.heroisdati.com/ja-salvou-meu-dia-xdirectory/</link>
		<comments>http://www.heroisdati.com/ja-salvou-meu-dia-xdirectory/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 00:43:50 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Cases]]></category>
		<category><![CDATA[Tecnologias e Ferramentas]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Componentes]]></category>
		<category><![CDATA[IoC]]></category>
		<category><![CDATA[Mindworks]]></category>
		<category><![CDATA[Qualidade]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=334</guid>
		<description><![CDATA[Quando trabalhamos com um framework vasto como o .NET sempre imaginamos que o mesmo irá resolver nossos problemas mais simples em projetos. O problema é que nem sempre a Microsoft pensa em tudo (sarcasmo).

Atendendo um pedido interno da Mindworks, fiz um projeto muito simples que tinha um requisito principal: Copiar pastas de várias origens para um mesmo destino. Fiz o projeto rapidamente, usei TDD para construção dos processos e Serialização e Desserialização para obtenção das origens e destinos. O problema é que em uma linha de código eu copiava a pasta de um lugar para o outro, e só nesse momento lembrei que o .NET não copia o conteúdo das pastas automaticamente. Apesar de não ser tão trabalhoso a construção desse código, eu não tinha muito tempo restante, então, decidi procurar por uma biblioteca pronta que o fizesse. Foi meu primeiro contato com o xDirectory.<br/><br/><span class="readmore"><a href="http://www.heroisdati.com/ja-salvou-meu-dia-xdirectory/" title="Já salvou meu dia: xDirectory">Continue Reading--66 words totally</a></span>]]></description>
			<content:encoded><![CDATA[<p><a href="http://pt.wikipedia.org/wiki/Invers%C3%A3o_de_controle" target="_blank"><img class="alignright size-full wp-image-341" title="Inversion of Control ou IoC" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/07/substituicao1.jpg" alt="IoC" width="220" height="274" /></a>Quando trabalhamos com um framework vasto como o .NET sempre imaginamos que o mesmo irá resolver nossos problemas mais simples em projetos. O problema é que nem sempre a Microsoft pensa em tudo (sarcasmo).</p>
<p>Atendendo um pedido interno da <a href="http://www.mindworks.com.br/" target="_self">Mindworks</a>, fiz um projeto muito simples que tinha um requisito principal: Copiar pastas de várias origens para um mesmo destino. Fiz o projeto rapidamente, usei <a href="http://pt.wikipedia.org/wiki/Test_Driven_Development" target="_blank">TDD</a> para construção dos processos e <a href="http://www.developer.com/net/csharp/article.php/3110371/SerializationDeserialization-in-NET.htm" target="_blank">Serialização e Desserialização</a> para obtenção das origens e destinos. O problema é que em uma linha de código eu copiava a pasta de um lugar para o outro, e só nesse momento lembrei que o .NET não copia o conteúdo das pastas automaticamente. Apesar de não ser tão trabalhoso a <a href="http://www.logiclabz.com/c/copy-directory-in-net-c-including-sub-folders.aspx" target="_blank">construção desse código</a>, eu não tinha muito tempo restante, então, decidi procurar por uma biblioteca pronta que o fizesse. Foi meu primeiro contato com o xDirectory.</p>
<p>Como produzi o código respeitando a <a href="http://en.wikipedia.org/wiki/Separation_of_concerns" target="_blank">separação de responsabilidades</a> e a <a href="http://pt.wikipedia.org/wiki/Coes%C3%A3o" target="_blank">coesão</a> dos componentes, só precisei alterar uma linha de código para usar o xDiretory, sendo assim, todo o processo que construí manualmente estava coberto por <a href="http://blog.andredias.net/2007/07/teste-unitrio-e-code-coverage-com.html" target="_blank">testes unitários</a>, e como meu código <a href="http://pt.wikipedia.org/wiki/Invers%C3%A3o_de_controle" target="_blank">não estava usando o componente diretamente</a> realizar a alteração do mesmo foi muito simples.</p>
<p>O xDirectory pode ser encontrado no link abaixo, vale a pena conferir:<br />
<a href="http://www.codeproject.com/KB/files/xdirectorycopy.aspx" target="_blank">http://www.codeproject.com/KB/files/xdirectorycopy.aspx</a></p>
<p>Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/ja-salvou-meu-dia-xdirectory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Primeiro Coding Dojo do MsDev-ES</title>
		<link>http://www.heroisdati.com/primeiro-coding-dojo-do-msdev-es/</link>
		<comments>http://www.heroisdati.com/primeiro-coding-dojo-do-msdev-es/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 05:08:51 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[CSharp]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[MSDev-ES]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=309</guid>
		<description><![CDATA[Dojo

É com grande orgulho que tenho o prazer de anunciar o Primeiro Coding Dojo realizado pelo grupo MsDev-ES.

Como desenvolvedores, sempre estamos estudando assuntos diversos para melhorar nossas habilidades profissionais, porém, com o passar do tempo, acabamos viciados em algumas soluções ou práticas e, sem perceber, paramos de evoluir. O Coding Dojo é uma reunião que visa melhorar sua habilidades de programação, fazer com que você conheça gente nova e de quebra você ainda se diverte!<br/><br/><span class="readmore"><a href="http://www.heroisdati.com/primeiro-coding-dojo-do-msdev-es/" title="Primeiro Coding Dojo do MsDev-ES">Continue Reading--90 words totally</a></span>]]></description>
			<content:encoded><![CDATA[<div id="attachment_310" class="wp-caption alignleft" style="width: 310px"><a href="http://pet.inf.ufsc.br/dojo/o-que-eh-dojo/" target="_blank"><img class="size-medium wp-image-310 " title="Dojo" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/04/Dojo-300x225.jpg" alt="Dojo" width="300" height="225" /></a><p class="wp-caption-text">Dojo</p></div>
<p>É com grande orgulho que tenho o prazer de anunciar o <strong>Primeiro Coding Dojo</strong> realizado pelo grupo <strong>MsDev-ES</strong>.</p>
<p>Como desenvolvedores, sempre estamos estudando assuntos diversos para melhorar nossas habilidades profissionais, porém, com o passar do tempo, acabamos viciados em algumas soluções ou práticas e, sem perceber, paramos de evoluir. O Coding Dojo é uma reunião que visa <strong>melhorar sua habilidades de programação</strong>, fazer com que você <strong>conheça gente nova</strong> e de quebra <strong>você ainda se diverte</strong>!</p>
<p>O Coding Dojo faz você pensar fora da caixa! Você irá <a href="http://improveit.com.br/xp/praticas/programacao_par" target="_blank">programar em par</a> utilizando <a href="http://improveit.com.br/xp/praticas/tdd" target="_blank">TDD </a>para solucionar problemas que não aparecem no nosso dia-a-dia e, de quebra, aprende truques novos com pessoas que você nunca teve a oportunidade de trabalhar!</p>
<p><strong>Você não possui experiência? Não importa</strong>! O objetivo do Coding Dojo é aprendizado, ou seja, o lugar certo para qualquer pessoa que deseja aprender, independente da experiência profissional!</p>
<p>O encontro será na faculdade <a href="http://site.faesa.br/" target="_blank">Faesa </a>às <strong>10:00</strong> no sábado, <strong>24 de abril</strong>. A reunião será na<strong> Sala 10 do Bloco IV</strong>.</p>
<p>Não perca tempo! Inscreva-se e<strong> garanta sua vaga no Primeiro Coding Dojo do MsDev-ES</strong>!<br />
Preencha o<span style="color: #ff0000;"><strong> <a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032450592&#038;Culture=pt-BR" target="_blank">formulário de inscrição</a></strong></span>!</p>
<p>Quer saber mais sobre Coding Dojo? Veja o post do Uilton Campos:<br />
<a href="http://uiltoncampos.wordpress.com/2010/04/19/coding-dojo/">http://uiltoncampos.wordpress.com/2010/04/19/coding-dojo/</a></p>
<p>Não perca tempo! As vagas são limitadas! <strong><span style="color: #ff0000;"><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032450592&#038;Culture=pt-BR" target="_blank">Realize já sua inscrição</a></span></strong> e garanta sua vaga!</p>
<p>Vejo vocês lá!</p>
<p>Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/primeiro-coding-dojo-do-msdev-es/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[OFF-TOPIC] Uniempreendedor 2009</title>
		<link>http://www.heroisdati.com/off-topic-uniempreendedor-2009/</link>
		<comments>http://www.heroisdati.com/off-topic-uniempreendedor-2009/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 03:42:34 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Cases]]></category>
		<category><![CDATA[OFF-TOPIC]]></category>
		<category><![CDATA[Reflexões]]></category>
		<category><![CDATA[Empreendedorismo]]></category>
		<category><![CDATA[Velloz]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=279</guid>
		<description><![CDATA[O Concurso

No início do semestre passado eu iniciava a disciplina de empreendedorismo na Faesa. Passei boa parte do curso de sistemas de informação esperando por essa disciplina e as reflexões que ela causaria, porém, não imaginei que ela ofereceria a grande oportunidade de participar do Uniempreendedor, o concurso que é organizado anualmente pela Tecvitória para avaliar o potencial empreendedor do estudante.<br/><br/><span class="readmore"><a href="http://www.heroisdati.com/off-topic-uniempreendedor-2009/" title="[OFF-TOPIC] Uniempreendedor 2009">Continue Reading--321 words totally</a></span>]]></description>
			<content:encoded><![CDATA[<h2><a href="http://www.endeavor.org.br/" target="_blank"><img class="size-medium wp-image-282 alignleft" title="Endeavor" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/04/DSC02588-300x225.jpg" alt="DSC02588" width="300" height="225" /></a></h2>
<p><strong>O Concurso</strong></p>
<p>No início do semestre passado eu iniciava a disciplina de empreendedorismo na <a href="http://site.faesa.br/" target="_blank">Faesa</a>. Passei boa parte do curso de sistemas de informação esperando por essa disciplina e as reflexões que ela causaria, porém, não imaginei que ela ofereceria a grande oportunidade de participar do Uniempreendedor, o concurso que é organizado anualmente pela <a href="http://www.tecvitoria.com.br/" target="_blank">Tecvitória</a> para avaliar o potencial empreendedor do estudante.</p>
<p>O objetivo do concurso é avaliar dentre os projetos submetidos, qual tem a maior chance de gerar bons resultados como produto ou serviço. A faculdade seleciona os melhores projetos e envia para Tecvitória que, por sua vez, realiza uma série de avaliações até que os projetos restantes sejam apresentados para uma banca avaliadora que definirá o resultado do concurso.</p>
<p><strong>A Oportunidade</strong></p>
<p>Em paralelo à disciplina de empreendedorismo, o Sr. <a href="http://twitter.com/uiltoncampos" target="_blank">Uilton Campos</a> e Eu estávamos preparando nosso TCC. Quem já passou por essa etapa da vida sabe o esforço necessário para conclusão desse trabalho e, como nosso projeto possui uma complexidade considerável, tínhamos mais trabalho que o normal.</p>
<p>Quando o professor divulgou o concurso em sala de aula, não pensei duas vezes, marquei uma reunião e apresentei o projeto com todos os argumentos que eu tinha na manga. Ao final, não existiam razões para que o mesmo não concorresse.</p>
<p>O poder de persuasão foi exaustivamente testado pois, além de convencer o professor que projeto era viável sem possuir um protótipo, também era necessário convencer Uilton, devido ao fato de já estarmos totalmente sem tempo, graças ao TCC.</p>
<p>Uma das principais características do empreendedor é acreditar na sua idéia e conseguir fazer com que as pessoas que estão ao seu redor também acreditem ao ponto de quererem ajudá-lo. Na minha opinião, essa característica definiu essa etapa.</p>
<p>A Faesa selecionou dois projetos para o concurso: O Velloz (nosso projeto) e um Jogo on-line desenvolvido por <span><a href="http://twitter.com/Hrosko" target="_blank">Rafael Hrasko</a></span>.</p>
<p><strong>O Desenvolvimento do projeto</strong></p>
<p>A proposta que foi submetida inicialmente era muito simples. Era bascimente uma visão geral do projeto.</p>
<p>Quando chegamos à segunda fase do concurso, fomos premiados com um curso para análise de viabilidade técnica e financeira de projetos. O curso foi ministrado por Douglas Chamon, que, atendendo às minhas preces, é formado em economia e não em marketing.</p>
<p>O curso foi muito produtivo. Ganhamos argumentos para provar a viabilidade dos projetos de uma forma que não conhecíamos. Foi também nessa fase que conhecemos melhor os projetos concorrentes.</p>
<p>Todo dia após o curso tínhamos uma missão: Melhorar o nosso plano de negócios. Era muito trabalho para pouco tempo pois, logo ao final do curso, já tínhamos que entregar o documento. Uilton e Eu passamos o final de semana na <a href="http://www2.qualidata.com.br/" target="_blank">Qualidata </a>(empresa que ele trabalha) confeccionando o documento. Eu não agüentava mais olhar para ele e vice-versa. Foi extremamente cansativo.</p>
<p>O documento tinha que apresentar os detalhes da execução do projeto. Só as equipes que persistiram chegaram ao final dessa fase, pois algumas pessoas perceberam durante o curso que seus projetos não eram viáveis. Foi necessária muita força de vontade para concluir essa etapa.</p>
<p>O pior entrave dessa fase foi separar o que era plano de negócios do que era TCC. Como estávamos desenvolvendo os dois ao mesmo tempo, em alguns momentos nossas mentes não faziam essa distinção.</p>
<p>A experiência de escrita foi muito rica e muito cansativa. Basicamente tínhamos sempre que dizer indiretamente as coisas, de forma responsável e com as respectivas fontes. O documento ficou muito bom (avaliação pessoal) e até hoje, o tenho como referência para elaboração de documentos semelhantes.</p>
<p><strong>A Defesa do projeto</strong></p>
<p><img class="alignleft size-medium wp-image-295" title="DSC01997" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/04/DSC01997-300x220.jpg" alt="DSC01997" width="300" height="220" />Depois de ouvir todo tipo de rumores sobre a banca de avaliação, fiquei extremamente preocupado com os questionamentos que seriam feitos. O que aumentou minha insegurança foi que na mesma época eu havia realizado uma palestra, na qual não obtive um bom desempenho. Sendo assim, fora a pressão da avaliação, eu estava de moral baixa.</p>
<p>Devido à importância da defesa do projeto, passei o final de semana ensaiando cada parte da apresentação. Sempre me preparei para dar aulas, palestras ou dissertar sobre qualquer assunto em público, mas como estava de consciência pesada devido à minha última performance, não podia errar duas vezes consecutivamente. Até hoje me pergunto se o resultado do concurso seria diferente se eu não tivesse me preparado tanto para a defesa do projeto.</p>
<p>Quando chegamos para apresentação, outra equipe estava apresentando e por sinal sendo muito criticada (o que não quer dizer nada). Entramos, apresentamos o projeto e ao final da apresentação, ocorreu um silêncio na sala. Não sabíamos se o silêncio era bom ou ruim, mas foram alguns segundos de tensão.</p>
<p>A banca elogiou muito a apresentação e o projeto, mas o negócio que estávamos propondo era consultoria, e esse não era o melhor modelo de negócio para o concurso, pois não era tão escalável quanto os outros modelos de negócio. Saí de lá com a sensação de missão cumprida e com minha moral de volta, mas não esqueço a lição da preparação e ensaio, sempre.</p>
<p><strong>O Resultado</strong></p>
<p>Duas semanas após a apresentação o resultado foi divulgado: Ficamos em terceiro lugar. O projeto que ganhou foi o que estava sendo criticado pela banca quando chegamos para a apresentação.</p>
<p>Não gostei de ter ficado em terceiro lugar, mas entendi o motivo. Os outros projetos eram realmente bons e conseguiam ser escalados mais facilmente. Isso definiu o resultado do concurso.</p>
<p><strong>O Prêmio</strong></p>
<p style="text-align: left;">Fizemos uma viagem à São Paulo, onde finalmente pude conhecer melhor a cidade. O Sr. Vinícius, da Tecvitória fez um tour muito bacana com a gente. Visitamos alguns eventos que estavam ocorrendo e ainda conhecemos a <a href="http://www.endeavor.org.br/" target="_blank">Endeavor</a>, que particularmente, foi a parte da viagem que eu mais gostei.<a href="http://www.barbrahmasp.com/portal/" target="_blank"><img class="aligncenter size-medium wp-image-297" title="DSC02576" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/04/DSC02576-300x169.jpg" alt="DSC02576" width="300" height="169" /></a></p>
<p>Como ninguém é de ferro, aproveitamos para conhecer os principais bairros e bares da cidade. Por obra do destino, em pleno <a href="http://pt.wikipedia.org/wiki/Dia_de_S%C3%A3o_Patr%C3%ADcio" target="_blank">Saint Patrick&#8217;s Day</a> eu estava em São Paulo e, como devoto fiel, fui celebrar no <a href="http://www.barasterix.com.br/" target="_blank">Asterix </a>(sozinho, pois o pessoal não aguentou e foi dormir cedo).</p>
<p>A experiência do concurso foi muito rica, mas estar em São Paulo como turista tendo a oportunidade de trocar idéias com um empreendedor como o Vinícius da Tecvitória realmente foi muito benéfico.</p>
<p><strong>Conclusão</strong></p>
<p>O Uniempreendedor foi uma experiência única. Daquelas em que a viajem vale mais do que o destino final.</p>
<p>Apesar das noites perdidas, do trabalho e de todo o stress que passamos, eu participaria novamente.</p>
<p>Fica a dica para os empreendedores de plantão. Essa experiência e o conhecimento obtido vão me acompanhar por toda a vida.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/off-topic-uniempreendedor-2009/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Podcast: Qualidade de Software</title>
		<link>http://www.heroisdati.com/podcast-qualidade-de-software/</link>
		<comments>http://www.heroisdati.com/podcast-qualidade-de-software/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 13:30:31 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[.NET Architects]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Podcasts]]></category>
		<category><![CDATA[Qualidade]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=267</guid>
		<description><![CDATA[Apresentação do podcast com Alexandre Valente e Giovanni Bassi sobre Qualidade de Software.]]></description>
			<content:encoded><![CDATA[<div id="attachment_268" class="wp-caption alignright" style="width: 310px"><a href="http://pt.wikipedia.org/wiki/Bones_%28s%C3%A9rie%29" target="_blank"><img class="size-medium wp-image-268 " title="Bones" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/03/bones_esp_12-300x180.jpg" alt="Reunião" width="300" height="180" /></a><p class="wp-caption-text">Reunião</p></div>
<p>Há algum tempo houve uma discussão no Grupo <a href="http://www.dotnetarchitects.net/" target="_blank">.Net Architects</a> sobre a definição de qualidade de software e quais são as formas de alcançá-la. A discussão foi muito produtiva e apresentou idéias e conceitos que todo profissional de desenvolvimento deveria conhecer, segue o link da discussão:</p>
<p><a href="http://groups.google.com.br/group/dotnetarchitects/browse_thread/thread/5fa2232863570de9/b89ff8398fe8297b?lnk=gst&amp;q=Qualidade#b89ff8398fe8297b" target="_blank">Link da thread no grupo</a></p>
<p>Algum tempo depois surgiu a idéia de gravar um podcast sobre o tema onde tivemos a oportunidade de participar juntamente com <a href="http://agvalente.wordpress.com/" target="_blank">Alexandre Valente</a> e <a href="http://unplugged.giggio.net/" target="_blank">Giovanni Bassi</a>, o resultado final agradou muito:</p>
<p><a href="http://podcast.dotnetarchitects.net/2010/02/podcast-10-qualidade-de-software/" target="_blank">Link do podcast Qualidade de Software</a></p>
<p>Aguardo Feedbacks.</p>
<p>Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/podcast-qualidade-de-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como você define qualidade de software?</title>
		<link>http://www.heroisdati.com/como-voce-define-qualidade-de-software/</link>
		<comments>http://www.heroisdati.com/como-voce-define-qualidade-de-software/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 12:00:00 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Metodologias e processos]]></category>
		<category><![CDATA[Reflexões]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Qualidade]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=151</guid>
		<description><![CDATA[Uma definição de qualidade software baseada nas visões dos três principais stakeholders: o cliente que paga pelo software, o usuário que trabalha diretamente com o software no seu dia-a-dia e o fornecedor que constrói ou mantém o software.]]></description>
			<content:encoded><![CDATA[<div id="attachment_208" class="wp-caption alignright" style="width: 310px"><a href="http://pt.wikipedia.org/wiki/Doctor_Who" target="_blank"><img class="size-full wp-image-208 " title="Doctor Who" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/02/david-tennant-specs.jpg" alt="Doctor Who" width="300" height="291" /></a><p class="wp-caption-text">Doctor Who</p></div>
<p>Muitos profissionais da nossa área têm dificuldades em definir qualidade de software devido à quantidade de aspectos que precisam ser considerados para avaliar se um software possui ou não qualidade. Apesar do processo de avaliação da qualidade ser amplo e complexo, a definição de qualidade de software é simples de ser compreendida.</p>
<p>Para avaliar a qualidade de um computador, avaliamos separadamente a qualidade de seus componentes, como vídeo, som, capacidade de processamento e quantidade de memória. A qualidade do computador pode ser considerada uma média das avaliações individuais de seus componentes. No software, a mesma idéia pode ser aplicada, porém, ao invés de olharmos para os componentes que o formam devemos olhar para como ele atende aos seus <a href="http://pt.wikipedia.org/wiki/Stakeholder" target="_blank">stakeholders</a>: o <strong>cliente</strong> que paga pelo software, o <strong>usuário </strong>que trabalha diretamente com o software no seu dia-a-dia e o <strong>fornecedor </strong>que constrói ou mantém o software.</p>
<p>Um software que atende ao <strong>cliente </strong>é aquele que atende ao objetivo para o qual ele foi construído (atender ao objetivo é mais importante do que respeitar o escopo inicial). Outro fator importante é fazer com que o software seja construído de forma a preservar o investimento do cliente, ou seja, fazer com que o trabalho de mapeamento do domínio e de seus processos não se perca quando uma tecnologia específica precisar ser substituída (a camada de apresentação, por exemplo).</p>
<p>Um software que atende ao <strong>usuário </strong>é aquele que resolve os principais problemas do seu dia-a-dia de forma simples e objetiva e usa como base da comunicação a linguagem que o usuário domina: A linguagem de seu domínio.</p>
<p>Um software que atende ao <strong>fornecedor </strong>é aquele que visa não só a construção rápida do projeto, mas também práticas de engenharia e testes que possibilitem à equipe responsável pela manutenção do sistema tenham total autonomia na execução de suas tarefas. Usar práticas que facilitem a manutenção do software é fazer com que o investimento do cliente dure ao máximo, e todo profissional da área tem a responsabilidade de construir softwares pensando na próxima pessoa que irá manter o projeto.</p>
<p>Um software de qualidade é a base para um bom relacionamento com o <strong>cliente</strong>, com os <strong>usuários </strong>e com as <strong>equipes de desenvolvimento</strong>. Um software que não atende aos três <a href="http://pt.wikipedia.org/wiki/Stakeholder" target="_blank">stakeholders</a> terá uma vida curta e será responsável por muitas dores de cabeça.</p>
<p>Cada área de estudo citada aqui direta ou indiretamente possui métodos e processos específicos para garantia da qualidade. É dever de todo profissional de desenvolvimento conhecer essas técnicas e utilizá-las da melhor forma possível visando obter um bom resultado ao final da jornada de desenvolvimento.</p>
<p>Aguardo feedbacks!</p>
<p>Recomendações de leitura:</p>
<p>Ubiquitous Language</p>
<ul>
<li><a href="http://www.handersonfrota.com.br/ubiquitous-language/" target="_blank">http://www.handersonfrota.com.br/ubiquitous-language/</a></li>
</ul>
<p>DDD</p>
<ul>
<li><a href="http://domaindrivendesign.org/" target="_blank">http://domaindrivendesign.org/</a></li>
<li><a href="http://www.infoq.com/minibooks/domain-driven-design-quickly" target="_blank">http://www.infoq.com/minibooks/domain-driven-design-quickly</a></li>
<li><a href="http://www.infoq.com/articles/ddd-contextmapping" target="_blank">http://www.infoq.com/articles/ddd-contextmapping</a></li>
</ul>
<p>Integração contínua</p>
<ul>
<li><a href="http://blog.caelum.com.br/2008/11/04/integracao-continua/" target="_blank">http://blog.caelum.com.br/2008/11/04/integracao-continua/</a></li>
<li><a href="http://blog.caelum.com.br/2010/01/18/integracao-continua-deploys-e-aprovacoes-sem-dores-de-cabeca-para-o-cliente/" target="_blank">http://blog.caelum.com.br/2010/01/18/integracao-continua-deploys-e-aprovacoes-sem-dores-de-cabeca-para-o-cliente/</a></li>
</ul>
<p>Negociação de contratos</p>
<ul>
<li><a href="http://improveit.com.br/xp/praticas/contrato" target="_blank">http://improveit.com.br/xp/praticas/contrato</a></li>
</ul>
<p>Veja também:</p>
<ul>
<li><a href="http://www.heroisdati.com/praticas-ageis-sao-o-caminho-para-a-qualidade-de-software/" target="_blank">http://www.heroisdati.com/praticas-ageis-sao-o-caminho-para-a-qualidade-de-software/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/como-voce-define-qualidade-de-software/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Práticas ágeis são o caminho para a qualidade de software?</title>
		<link>http://www.heroisdati.com/praticas-ageis-sao-o-caminho-para-a-qualidade-de-software/</link>
		<comments>http://www.heroisdati.com/praticas-ageis-sao-o-caminho-para-a-qualidade-de-software/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 16:30:25 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Metodologias e processos]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Qualidade]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=149</guid>
		<description><![CDATA[Uma série de argumentos que mostram porquê as práticas TDD, Programação em Par e possuir um processo iterativo e incremental podem auxiliar na qualidade final do software desenvolvido.]]></description>
			<content:encoded><![CDATA[<div id="attachment_170" class="wp-caption alignleft" style="width: 291px"><img class="size-full wp-image-170" title="Pense nisso" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/02/albert_einstein.jpg" alt="Albert Einstein" width="281" height="291" /><p class="wp-caption-text">Albert Einstein</p></div>
<p>Nossa área de desenvolvimento de software é muito nova, e como consequência disso, ainda estamos aprendendo quais são as técnicas que funcionam e quais só atrapalham o dia-a-dia dos nossos projetos. É dever de todo profissional da área buscar meios para melhorar o nosso objetivo principal: Construir softwares que atendam aos clientes, aos usuários e às equipes de desenvolvimento.</p>
<p>Práticas ágeis são um meio e não um fim, não deve-se utilizar as técnias se não é evidente quais problemas elas tentam resolver, usar por usar não melhora em nada o resultado final do seu projeto. Você só deve usar essas práticas se realmente entender porquê elas são necessárias, e não porquê  estão na moda.</p>
<p>Vamos observar os benefícios de algumas técnicas utilizadas no meio ágil:</p>
<p>Com <strong> <acronym title="Test-Driven Development">TDD </acronym> </strong>o programador cria o hábito de planejar suas tarefas antes de executá-las, isso se deve ao fato de que nessa técnica você começa pela elaboração de uma lista de testes para o artefato que será desenvolvido, e só depois começa a codificá-lo. Outro benefício do <strong><acronym title="Test-Driven Development">TDD </acronym></strong>é que o programador deve usar o seu código antes de implementá-lo, apesar de parecer estranho é uma quebra de paradigma excelente começar a codificação pelo teste e tomar as decisões de design do código antes de implementá-lo, isso reduz o retrabalho pois o programador percebe no início da codificação como ficará seu código ao final dela.</p>
<p>Muitos gestores ainda não acreditam nos benefícios da <strong>programação em par,</strong> sendo um dos motivos a sensação de perda de produtividade quando dois programadores são alocados para a mesma tarefa, essa sensação é falsa, pois existem uma série de fatores que devem ser levados em consideração quando falamos de produtividade. O ritmo de desenvolvimento da dupla é garantido pela  falta de distrações que um programador sozinho teria, dificilmente durante o desenvolvimento em par o &#8220;piloto&#8221; irá desviar do foco. Outro benefício da <strong>programação em par</strong> é a revisão que o &#8220;co-piloto&#8221; faz observando a codificação do piloto, muitos problemas podem ser identificados em tempo de codificação. A comunicação constante entre os programadores faz com que cada decisão seja mais bem pensada, e ainda traz um grande benefício: Dois membros da equipe vão conhecer aquele trecho do código, isso é essencial para contornar problemas de comunicação e troca de membros da equipe durante o desenvolvimento dos projetos.  A programação em par protege o investimento do projeto pois reduz a taxa de retrabalho da equipe e gera um código de qualidade superior, afinal, duas cabeças pensam melhor do que uma.</p>
<p>Desenvolver um software de forma <strong>iterativa e incremental</strong> traz uma série de benefícios, porém, também traz uma série de problemas. Desenvolver software em ciclos de tempo fechados faz com que cada minuto seja precioso, por isso, vários impedimentos são identificados ao longo do desenvolvimento e resolvidos a medida que as entregas são realizadas no final de cada ciclo. Como o desenvolvimento acontece em ciclos, a equipe de desenvolvimento pode aprender com os problemas enfrentados no ciclo anterior, isso permite que o processo de cada equipe possa ser melhorado continuamente, e essas melhorias sempre atacam um grande impedimento do clico anterior, ou seja, não são apenas melhorias por melhorias. Processos iterativos e incrementais também auxiliam a contornar o grande vilão dos projetos de software que é a mudânça de escopo, caso o cliente descubra uma nova necessidade  a mesma poderá ser implementada no próximo ciclo, já que o ciclo em desenvolvimento não deve ter seu objetivo alterado. Caso a necessidade do cliente mude (ou melhor, quando a necessidade do cliente mudar) e o ciclo desenvolvido não for mais necessário, o cliente só &#8220;perde&#8221; aquele ciclo, ou seja, o custo da alteração de escopo fica sendo o custo do desenvolvimento do novo ciclo. Outra característica interessante é que nessa forma de desenvolvimento os feedbacks dos usuários chegam muito mais cedo do que no modelo tradicional, já que no final do ciclo a equipe entrega um parte funcional do software, e já que o software entra em produção mais cedo o cliente também começa a usufruir dos benefícios do sistema mais cedo.</p>
<p>As técnicas ágeis são um meio para solucionar alguns dos problemas mais comuns dos ambientes de desenvolvimento como conhecemos (falta de comunicação, retrabalho, escopos rígidos, custos altos, falta de testes, etc.), elas propõem uma nova forma de trabalho, que tem se mostrado muito eficiente para equipes com o perfil adequado. Essas técnicas influenciam positivamente em todas as vertentes de avaliação da qualidade de um software desde que sejam aplicadas de forma correta.</p>
<p>Quer saber mais sobre as técnicas citadas? Seguem algumas referências:</p>
<p>Sobre TDD:</p>
<ul>
<li><a href="http://pt.wikipedia.org/wiki/Test_Driven_Development" target="_blank">TDD no Wikipédia</a></li>
<li><a href="http://improveit.com.br/xp/praticas/tdd" target="_blank">Desenvolvimento orientado a teste</a> &#8211; Por <a href="http://twitter.com/viniciusteles" target="_blank">@viniciusteles</a></li>
<li><a href="http://www.testdriven.com/" target="_blank">Portal TDD</a></li>
<li><a href="http://dojofloripa.wordpress.com/2007/09/10/tudo-sobre-tdd/" target="_blank">Tudo sobre TDD</a> &#8211; Por <a href="http://twitter.com/victorhg" target="_blank">@victorhg</a></li>
<li><a href="http://www.slideshare.net/denisnferrari/tdd-completo" target="_blank">Apresentação que utilizo em treinamentos</a> &#8211; Por Fabrício Mattos</li>
<li><a href="http://podcast.dotnetarchitects.net/2010/01/tdd-nao-existe/" target="_blank">Podcast TDD não existe</a></li>
</ul>
<p>Sobre Programação em Par:</p>
<ul>
<li><a href="http://lucianofelix.wordpress.com/2009/01/21/dicas-sobre-pair-programming/" target="_blank">Dicas sobre Programação em Par</a> &#8211; Por <a href="http://twitter.com/lucianofelix" target="_blank">@lucianofelix</a></li>
<li><a href="http://en.wikipedia.org/wiki/Pair_programming" target="_blank">Par Programming no Wikipédia</a></li>
<li><a href="http://improveit.com.br/xp/praticas/programacao_par" target="_blank">Programação em Par</a> &#8211; Por <a href="http://twitter.com/viniciusteles" target="_blank">@viniciusteles</a></li>
</ul>
<p>Sobre desenvolvimento iterativo e incremental:</p>
<ul>
<li><a href="http://pt.wikipedia.org/wiki/Desenvolvimento_iterativo_e_incremental" target="_blank">Desenvolvimento iterativo e incremental no Wikipédia</a></li>
<li><a href="http://visaoagil.wordpress.com/2009/02/05/escopo-iterativo-e-incremental-para-o-gerenciamento-agil-de-requisitos/" target="_blank">Escopo Iterativo e Incremental para o gerenciamento Ágil de requisitos</a> &#8211; Por <a href="http://twitter.com/visaoagil" target="_blank">@visaoagil</a></li>
<li><a href="http://pt.wikipedia.org/wiki/Scrum" target="_blank">Scrum no Wikipédia</a></li>
<li><a href="http://improveit.com.br/scrum" target="_blank">Scrum </a>- Por <a href="http://twitter.com/viniciusteles" target="_blank">@viniciusteles</a></li>
<li><a href="http://www.scrumalliance.org/" target="_blank">Scrum Alliance</a></li>
<li><a href="http://www.scrum.org/" target="_blank">Scrum.org</a></li>
</ul>
<p>Qual a sua experiência sobre as técnicas ágeis? Você acha que elas são o caminho para aumentarmos a qualidade dos softwares que desenvolvemos?</p>
<p>Aguardo feedbacks!</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"><img src="file:///C:/Users/DENISF%7E1/AppData/Local/Temp/moz-screenshot.png" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/praticas-ageis-sao-o-caminho-para-a-qualidade-de-software/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Guia de estudo: Exame 70-536</title>
		<link>http://www.heroisdati.com/guia-de-estudo-exame-70-536/</link>
		<comments>http://www.heroisdati.com/guia-de-estudo-exame-70-536/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 11:32:37 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Reflexões]]></category>
		<category><![CDATA[Tecnologias e Ferramentas]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Certificações]]></category>
		<category><![CDATA[Guia de estudos]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=103</guid>
		<description><![CDATA[Um guia de estudo para auxiliar quem for realizar o exame 70-536 da Microsoft acompanhado de uma reflexão sobre certificações.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.themusicdude.net/viewtopic.php?f=104&amp;t=122" target="_blank"><img class="alignright size-full wp-image-118" title="Sheldon ensinando..." src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/01/sheldon-quadro.jpg" alt="Sheldon ensinando..." width="330" height="332" /></a>Como comentei no <a href="http://www.heroisdati.com/para-variar-hello-world/" target="_blank">post anterior</a> pretendo publicar todo conteúdo que tenho off-line, e o que meus alunos e colegas de trabalho mais solicitam são os resultados das pesquisas que fiz quando estava estudando para realizar as <a href="http://www.microsoft.com/BRASIL/certifique/">provas da Microsoft</a>.</p>
<p>Como já trabalhava há algum tempo com desenvolvimento, não foi tão difícil completar os skills que eram necessários para realizar a prova com segurança, mas como<span style="text-decoration: underline;"> estudar não mata ninguém</span> resolvi revisar uma série de aspectos do framework que não trabalhava com tanta frequência, foi a melhor coisa que fiz. <span style="text-decoration: underline;">Você realmente conhece o framework .net?</span> Reflita um pouco, respire fundo e olhe os assuntos abordados nas provas conceituais e técnicas, você vai se surpreender.</p>
<p><span style="text-decoration: underline;">As provas e certificações não são um fim, mas sim um meio de se obter o conhecimento necessário para dominar a plataforma ou ferramenta que você trabalha</span>, sendo assim, a postura de profissionais que acham que suas certificações os diferenciam em alguma coisa não é uma verdade absoluta, o que realmente diferencia um profissional é o fato dele saber usar corretamente o seu &#8220;<a href="http://3.bp.blogspot.com/_vGqdBPCcsTM/SGjmHQ7zwXI/AAAAAAAABIM/V9h5LHmJ-sk/s400/Utility-belt.jpg" target="_blank">cinto de utilidades</a>&#8220;, ou seja, saber aplicar corretamente o conhecimento adquirido ao longo de sua carreira. Participei de uma mesa redonda no grupo <a href="http://br.groups.yahoo.com/group/DFTestes/" target="_blank">DFTestes</a> onde vários profissionais apresentaram suas visões sobre o assunto, o resumo está disponível no site <a href="http://qualidadebr.wordpress.com/2009/11/29/certificacoes-valem-a-pena/" target="_blank">QualidadeBR</a>, invista um tempo para refletir sobre os comentários feitos lá.</p>
<p>Vamos ao que interessa, seguem os links que me ajudaram a estudar para o exame 70-536:</p>
<p><strong>Página oficial do exame</strong><br />
<a href="http://www.microsoft.com/australia/learning/exams/70-536.mspx" target="_blank">http://www.microsoft.com/australia/learning/exams/70-536.mspx</a></p>
<p><strong>E-book</strong><br />
<a href="http://www.free-ebooks-download.org/free-ebook/dotnet/MCTS%20Dumps/mcpd-70-536.php" target="_blank">http://www.free-ebooks-download.org/free-ebook/dotnet/MCTS%20Dumps/mcpd-70-536.php</a></p>
<p><strong>Links e artigos com o conteúdo da prova</strong></p>
<p>Nessa relação constam artigos do <a href="http://msdn.microsoft.com/pt-br/default.aspx" target="_blank">MSDN</a>, <a href="http://www.israelaece.com/" target="_blank">Israel Aece</a> e <a href="http://www.macoratti.net/" target="_blank">Macoratti</a>. <strong><br />
</strong></p>
<p><strong>Developing applications that use system types and collections</strong></p>
<p>Manage data in a .NET Framework application by using .NET Framework system types</p>
<p><a href="http://msdn.microsoft.com/en-us/library/s1ax56ch.aspx">Value Types (C# Reference)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx">Nullable Types (C# Programming Guide)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/490f96s2.aspx">Reference Types (C# Reference)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/z0w1kczw.aspx">Attributes (C# Programming Guide)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/0zk36dx2%28VS.80%29.aspx">Generic Type Parameters (C#)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.exception%28VS.71%29.aspx">Exception Class</a><br />
<a href="http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx">Boxing and Unboxing (C# Programming Guide)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.typeforwardedtoattribute.aspx">TypeForwardedToAttribute Class (System.Runtime.CompilerServices)</a><a href="http://en.csharp-online.net/TypeForwardedToAttribute"></a></p>
<p><a href="http://en.csharp-online.net/TypeForwardedToAttribute">TypeForwardedToAttribute at C# Online.NET (CSharp-Online.NET)</a><a href="http://www.criarweb.com/artigos/tipos-de-dados-em-net.html">Tipos de dados em .NET</a></p>
<p>Manage a group of associated data in a .NET Framework application by using collections</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.collections.bitarray.aspx">BitArray Class (System.Collections)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.collections.icollection.aspx">ICollection Interface (System.Collections)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.collections.queue.aspx">Queue Class (System.Collections)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.collections.readonlycollectionbase.aspx">ReadOnlyCollectionBase Class (System.Collections)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/he2s3bh7%28VS.80%29.aspx">LinkedList Generic Class (System.Collections.Generic)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/ms132123.aspx">EqualityComparer(T) Class (System.Collections.Generic)</a></p>
<p><a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2057&amp;pag=1">Israel Aéce &#8211; Trabalhando com Coleções &#8211; Parte 1</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2057&amp;pag=2">Israel Aéce &#8211; Trabalhando com Coleções &#8211; Parte 2</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2057&amp;pag=3">Israel Aéce &#8211; Trabalhando com Coleções &#8211; Parte 3</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2057&amp;pag=4">Israel Aéce &#8211; Trabalhando com Coleções &#8211; Parte 4</a></p>
<p>Manage data in a .NET Framework application by using specialized collections</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.collections.specialized.bitvector32.aspx">BitVector32 Structure (System.Collections.Specialized)</a></p>
<p>Implement .NET Framework interfaces to cause components to comply with standard contracts</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.icomparable.aspx">IComparable Interface (System)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.idisposable.aspx">IDisposable Interface (System)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.iconvertible.aspx">IConvertible Interface (System)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.icloneable.aspx">ICloneable Interface (System)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/ms131187.aspx">IEquatable(T) Interface (System)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.iformattable.aspx">IFormattable Interface (System)</a></p>
<p><a href="http://www.macoratti.net/vbn5_dpo.htm">Liberando os objetos de forma apropriada</a></p>
<p>Control interactions between .NET Framework application components by using events and delegates</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.delegate.aspx">Delegate Class (System)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.eventargs.aspx">EventArgs Class (System)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.eventhandler.aspx">EventHandler Delegate (System)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/900fyy8e%28VS.71%29.aspx">delegate (C#)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/ms173175%28VS.80%29.aspx">How to: Combine Delegates (Multicast Delegates)(C#)</a></p>
<p><a href="http://www.c-sharpcorner.com/UploadFile/ankithakur/Delegates06042007014105AM/Delegates.aspx">Simple and Multicast Delegates in C#.net</a><br />
<a href="http://www.linhadecodigo.com.br/ArtigoImpressao.aspx?id=1544">Linha de Código &#8211; Delegates e Eventos com C#.NET</a></p>
<p><strong>Implementing service processes, threading, and application domains in a .NET Framework application</strong></p>
<p>Implement, install, and control a service</p>
<p><a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2129">Linha de Código &#8211; Por dentro da Base Classe Library &#8211; Capítulo 11 &#8211; Criando Serviços do Windows</a></p>
<p>Develop multithreaded .NET applications</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.threading.thread.aspx">Thread Class (System.Threading)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx">ThreadPool Class (System.Threading)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.threading.waitcallback.aspx">WaitCallback Delegate (System.Threading)</a></p>
<p><a href="http://msdn.microsoft.com/en-us/library/h339syd0.aspx">Foreground and Background Threads</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=625">Linha de Código &#8211; Usando Threads e Timer em ASP.NET</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2148">Israel Aéce &#8211; Threading &#8211; Parte 1</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2148&amp;pag=2">Israel Aéce &#8211; Threading &#8211; Parte 2</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2148&amp;pag=3">Israel Aéce &#8211; Threading &#8211; Parte 3</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2148&amp;pag=4">Israel Aéce &#8211; Threading &#8211; Parte 4</a></p>
<p><strong>Embedding configuration, diagnostic, management, and installation features into a .NET Framework application</strong></p>
<p>Embed configuration management functionality into a .NET Framework application</p>
<p><a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2062">Linha de Código &#8211; Por dentro da Base Classe Library &#8211; Capitulo 3 &#8211; Utilização de Assemblies</a></p>
<dl>Manage an event log by using the System.Diagnostics namespace </dl>
<p><a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.aspx">EventLog Class (System.Diagnostics)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/0zk45zk9.aspx">How to: Create EventLog Component Instances</a><br />
<a href="http://msdn.microsoft.com/en-us/library/k6b9a7h8.aspx">How to: Read Event Log Entries</a></p>
<p><a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2072&amp;pag=1">Israel Aéce &#8211; Monitoramento e depuração de aplicações &#8211; Parte 1</a></p>
<p>Manage system processes and monitor the performance of a .NET application by using the diagnostics functionality of the .NET Framework</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx">Process Class (System.Diagnostics)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx">PerformanceCounter Class (System.Diagnostics)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecountercategory.aspx">PerformanceCounterCategory Class (System.Diagnostics)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.countercreationdata.aspx">CounterCreationData Class (System.Diagnostics)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.aspx">StackTrace Class (System.Diagnostics)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.stackframe.aspx">StackFrame Class (System.Diagnostics)</a></p>
<p><a href="http://msdn.microsoft.com/en-us/library/fd89becd.aspx">Retrieving Information About Processes</a><br />
<a href="http://msdn.microsoft.com/en-us/library/z3w4xdc9.aspx">Process.GetProcessesByName Method (String) (System.Diagnostics)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/348b2484.aspx">How to: View Running Processes</a><br />
<a href="http://msdn.microsoft.com/en-us/library/27688t9c.aspx">How to: Investigate Libraries Loaded by Processes</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2072&amp;pag=2">Israel Aéce &#8211; Monitoramento e depuração de aplicações &#8211; Parte 2</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=271">Linha de Código &#8211; Manipulando processos através da classe System.Diagnostics.Process</a><br />
<a href="http://www.csharpfriends.com/Forums/ShowPost.aspx?PostID=17937">How to get the Process Name in C#? C# Friends</a></p>
<p>Debug and trace a .NET Framework application by using the System.Diagnostics namespace</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.debug.aspx">Debug Class (System.Diagnostics)</a><br />
<a href="http://msdn.microsoft.com/pt-br/library/system.diagnostics.debugger.aspx#MtViewDropDownText">Classe Debugger (System.Diagnostics)</a><br />
<a href="http://msdn.microsoft.com/pt-br/library/system.diagnostics.trace.aspx">Classe Trace (System.Diagnostics)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.tracesource.aspx">TraceSource Class (System.Diagnostics)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.sourceswitch.aspx">SourceSwitch Class (System.Diagnostics)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.correlationmanager.aspx">CorrelationManager Class (System.Diagnostics)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.traceswitch.aspx">TraceSwitch Class (System.Diagnostics)</a></p>
<p><a href="http://www.projetando.net/Sections/ViewArticle.aspx?ArticleID=61">Israel Aéce &#8211; Criando um DebuggerVisualizer</a><br />
<a href="http://forums.sureshkumar.net/vb-asp-net-interview-technical-questions/16444-c-difference-between-debug-class-trace-class.html">What is the difference between the Debug class and Trace class? </a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2072&amp;pag=2">Israel Aéce &#8211; Monitoramento e depuração de aplicações &#8211; Parte 2</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2072&amp;pag=3">Israel Aéce &#8211; Monitoramento e depuração de aplicações &#8211; Parte 3</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2072&amp;pag=4">Israel Aéce &#8211; Monitoramento e depuração de aplicações &#8211; Parte 4</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2072&amp;pag=5">Israel Aéce &#8211; Monitoramento e depuração de aplicações &#8211; Parte 5</a><br />
<a href="http://imasters.uol.com.br/artigo/3133/dotnet/usando_tecnicas_de_trace_e_debug/">Usando técnicas de Trace e Debug &#8211; Tiago Colombo &#8211; .Net</a></p>
<p>Embed management information and events into a .NET Framework application</p>
<p><a href="http://msdn.microsoft.com/en-us/library/aa338809%28VS.71%29.aspx">Retrieving Collections of Management Objects</a><br />
<a href="http://msdn.microsoft.com/en-us/library/aa394606%28VS.85%29.aspx">WQL (SQL for WMI) (Windows)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/aa394582.aspx">Windows Management Instrumentation (Windows)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/aa394143%28VS.85%29.aspx">Win32_Environment Class (Windows)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/aa394418%28VS.85%29.aspx">Win32_Service Class (Windows)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.management.selectquery.aspx">SelectQuery Class (System.Management)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.management.managementquery.aspx">ManagementQuery Class (System.Management)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.management.managementobjectsearcher.aspx">ManagementObjectSearcher Class (System.Management)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.management.managementoperationobserver.aspx">ManagementOperationObserver Class (System.Management)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.management.completedeventhandler.aspx">CompletedEventHandler Delegate (System.Management)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.management.objectreadyeventhandler.aspx">ObjectReadyEventHandler Delegate (System.Management)</a></p>
<p><strong>Implementing serialization and input/output functionality in a .NET Framework application</strong></p>
<p>Serialize or deserialize an object or an object graph by using runtime serialization techniques</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.aspx">System.Runtime.Serialization Namespace ()</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.streamingcontext.aspx">StreamingContext Structure (System.Runtime.Serialization)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatterservices.aspx">FormatterServices Class (System.Runtime.Serialization)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatterconverter.aspx">FormatterConverter Class (System.Runtime.Serialization)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatter.aspx">Formatter Class (System.Runtime.Serialization)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.objectmanager.aspx">ObjectManager Class (System.Runtime.Serialization)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.serializationinfo.aspx">SerializationInfo Class (System.Runtime.Serialization)</a></p>
<p><a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2077">Linha de Código &#8211; Por dentro da Base Classe Library &#8211; Capítulo 6 &#8211; Serialização</a></p>
<p>Control the serialization of an object into XML format by using the System.Xml.Serialization namespace</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.xml.serialization.aspx">System.Xml.Serialization Namespace ()</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx">XmlSerializer Class (System.Xml.Serialization)</a></p>
<p>Implement custom serialization formatting by using the Serialization Formatter classes</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatters.soap.soapformatter.aspx">SoapFormatter Class (System.Runtime.Serialization.Formatters.Soap)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatters.binary.binaryformatter.aspx">BinaryFormatter Class (System.Runtime.Serialization.Formatters.Binary)</a></p>
<p>Access files and folders by using the File System classes</p>
<p><a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2073&amp;pag=1">Linha de Código &#8211; Por dentro da Base Classe Library &#8211; Capítulo 5 &#8211; Manipulando o sistema de arquivos</a></p>
<p>Manage .NET Framework application data by using Reader and Writer classes</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.io.stringreader.aspx">StringReader Class (System.IO)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.io.stringwriter.aspx">StringWriter Class (System.IO)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.io.textwriter.aspx">TextWriter Class (System.IO)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.io.textreader.aspx">TextReader Class (System.IO)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.io.streamreader.aspx">StreamReader Class (System.IO)</a><br />
<a href="http://msdn.microsoft.com/pt-br/library/system.io.streamwriter%28VS.80%29.aspx">StreamWriter Classe (System.IO)</a><br />
<a href="http://msdn.microsoft.com/pt-br/library/system.io.binarywriter.aspx">Classe BinaryWriter (System.IO)</a><br />
<a href="http://msdn.microsoft.com/pt-br/library/system.io.binaryreader%28VS.80%29.aspx">BinaryReader Classe (System.IO)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.io.aspx">System.IO Namespace ()</a></p>
<p><a href="http://www.macoratti.net/vbn_txt.htm">VB.NET -  Lendo e escrevendo em arquivo Textos</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=1502">Linha de Código &#8211; System.IO: Criando um arquivo usando Visual Studio.NET 2005</a></p>
<p>Compress or decompress stream information in a .NET Framework application and improve the security of application data by using isolated storage</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.io.compression.aspx">System.IO.Compression Namespace ()</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.io.compression.deflatestream.aspx">DeflateStream Class (System.IO.Compression)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx">GZipStream Class (System.IO.Compression)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragefilestream.aspx">IsolatedStorageFileStream Class (System.IO.IsolatedStorage)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragefile.aspx">IsolatedStorageFile Class (System.IO.IsolatedStorage)</a></p>
<p><a href="http://msdn.microsoft.com/pt-br/library/k48a6h13.aspx">Como: obter armazenamentos para o armazenamento isolado</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=700">Israel Aéce &#8211; Compressão de Arquivos no .NET</a><br />
<a href="http://www.macoratti.net/vbn5_pck.htm">Macoratti &#8211; Compactando e Descompactando arquivos</a><br />
<a href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=4424">Compactando e Descompactando Arquivos com a classe GZipStream</a></p>
<p><strong>Improving the security of .NET Framework applications by using the .NET Framework security features</strong></p>
<p>Implement access control by using the System.Security.AccessControl classes</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.aspx">System.Security.AccessControl Namespace ()</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.directorysecurity.aspx">DirectorySecurity Class (System.Security.AccessControl)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.filesecurity.aspx">FileSecurity Class (System.Security.AccessControl)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.filesystemsecurity.aspx">FileSystemSecurity Class (System.Security.AccessControl)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.registrysecurity.aspx">RegistrySecurity Class (System.Security.AccessControl)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.accessrule.aspx">AccessRule Class (System.Security.AccessControl)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.authorizationrule.aspx">AuthorizationRule Class (System.Security.AccessControl)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.authorizationrulecollection.aspx">AuthorizationRuleCollection Class (System.Security.AccessControl)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.commonace.aspx">CommonAce Class (System.Security.AccessControl)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.commonacl.aspx">CommonAcl Class (System.Security.AccessControl)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.compoundace.aspx">CompoundAce Class (System.Security.AccessControl)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.genericace.aspx">GenericAce Class (System.Security.AccessControl)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.genericacl.aspx">GenericAcl Class (System.Security.AccessControl)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.auditrule.aspx">AuditRule Class (System.Security.AccessControl)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.mutexsecurity.aspx">MutexSecurity Class (System.Security.AccessControl)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.objectsecurity.aspx">ObjectSecurity Class (System.Security.AccessControl)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.semaphoresecurity.aspx">SemaphoreSecurity Class (System.Security.AccessControl)</a></p>
<p>Implement a custom authentication scheme by using the System.Security.Authentication classes</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.security.authentication.aspx">System.Security.Authentication Namespace ()</a></p>
<p>Encrypt, decrypt, and hash data by using the System.Security.Cryptography classes</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.aspx">System.Security.Cryptography Namespace ()</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.des.aspx">DES Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.descryptoserviceprovider.aspx">DESCryptoServiceProvider Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha1cryptoserviceprovider.aspx">SHA1CryptoServiceProvider Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha1.aspx">SHA1 Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.dsacryptoserviceprovider.aspx">DSACryptoServiceProvider Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.dsa.aspx">DSA Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm.aspx">HashAlgorithm Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.tripledes.aspx">TripleDES Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.rc2cryptoserviceprovider.aspx">RC2CryptoServiceProvider Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.rc2.aspx">RC2 Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.cryptoconfig.aspx">CryptoConfig Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.cryptostream.aspx">CryptoStream Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.randomnumbergenerator.aspx">RandomNumberGenerator Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5cryptoserviceprovider.aspx">MD5CryptoServiceProvider Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5.aspx">MD5 Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.tripledescryptoserviceprovider.aspx">TripleDESCryptoServiceProvider Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.hmac.aspx">HMAC Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.cryptoapitransform.aspx">CryptoAPITransform Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.cspparameters.aspx">CspParameters Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanagedtransform.aspx">RijndaelManagedTransform Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged.aspx">RijndaelManaged Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx">ProtectedData Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.protectedmemory.aspx">ProtectedMemory Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.asymmetricalgorithm.aspx">AsymmetricAlgorithm Class (System.Security.Cryptography)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.symmetricalgorithm.aspx">SymmetricAlgorithm Class (System.Security.Cryptography)</a></p>
<p><a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2085">Linha de Código &#8211; Por dentro da Base Classe Library &#8211; Capítulo 8 &#8211; Criptografia</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2085&amp;pag=2">Linha de Código &#8211; Por dentro da Base Classe Library &#8211; Capítulo 8 &#8211; Criptografia</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2085&amp;pag=3">Linha de Código &#8211; Por dentro da Base Classe Library &#8211; Capítulo 8 &#8211; Criptografia</a></p>
<p>Control permissions for resources by using the System.Security.Permission classes</p>
<dl> </dl>
<p><a href="http://msdn.microsoft.com/en-us/library/930b76w0%28vs.71%29.aspx">Code Access Security</a><br />
<a href="http://msdn.microsoft.com/en-us/library/ka9xc0ek%28VS.80%29.aspx">Code Groups</a><br />
<a href="http://msdn.microsoft.com/en-us/library/7y5x1hcd%28VS.80%29.aspx">Evidence</a><br />
<a href="http://msdn.microsoft.com/en-us/library/4652tyx7%28VS.80%29.aspx">Named Permission Sets</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.permissions.aspx">System.Security.Permissions Namespace ()</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.permissions.securitypermission.aspx">SecurityPermission Class (System.Security.Permissions)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.permissions.principalpermission.aspx">PrincipalPermission Class (System.Security.Permissions)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.policy.evidence.aspx">Evidence Class (System.Security.Policy)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.permissions.fileiopermission.aspx">FileIOPermission Class (System.Security.Permissions)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.permissions.strongnameidentitypermission.aspx">StrongNameIdentityPermission Class (System.Security.Permissions)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.permissions.urlidentitypermission.aspx">UrlIdentityPermission Class (System.Security.Permissions)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.permissions.dataprotectionpermission.aspx">DataProtectionPermission Class (System.Security.Permissions)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.permissions.isolatedstoragefilepermission.aspx">IsolatedStorageFilePermission Class (System.Security.Permissions)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.permissions.iunrestrictedpermission.aspx">IUnrestrictedPermission Interface (System.Security.Permissions)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.permissions.siteidentitypermission.aspx">SiteIdentityPermission Class (System.Security.Permissions)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.permissions.storepermission%28VS.80%29.aspx">StorePermission Class (System.Security.Permissions)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.permissions.reflectionpermission.aspx">ReflectionPermission Class (System.Security.Permissions)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.permissions.keycontainerpermission.aspx">KeyContainerPermission Class (System.Security.Permissions)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.policy.aspx">System.Security.Policy Namespace ()</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.policy.permissionrequestevidence.aspx">PermissionRequestEvidence Class (System.Security.Policy)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.policy.applicationtrust.aspx">ApplicationTrust Class (System.Security.Policy)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.policy.applicationsecuritymanager.aspx">ApplicationSecurityManager Class (System.Security.Policy)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.policy.applicationsecurityinfo.aspx">ApplicationSecurityInfo Class (System.Security.Policy)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.policy.unioncodegroup.aspx">UnionCodeGroup Class (System.Security.Policy)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.policy.netcodegroup.aspx">NetCodeGroup Class (System.Security.Policy)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.policy.firstmatchcodegroup.aspx">FirstMatchCodeGroup Class (System.Security.Policy)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.policy.filecodegroup.aspx">FileCodeGroup Class (System.Security.Policy)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.policy.codegroup.aspx">CodeGroup Class (System.Security.Policy)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.policy.iidentitypermissionfactory.aspx">IIdentityPermissionFactory Interface (System.Security.Policy)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.policy.imembershipcondition.aspx">IMembershipCondition Interface (System.Security.Policy)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.policy.iapplicationtrustmanager.aspx">IApplicationTrustManager Interface (System.Security.Policy)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.policy.policystatement.aspx">PolicyStatement Class (System.Security.Policy)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.security.policy.policylevel.aspx">PolicyLevel Class (System.Security.Policy)</a></p>
<p><a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2115">Israel Aéce &#8211; Utilizando Code Access Security – CAS &#8211; Parte 1</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2115&amp;pag=2">Israel Aéce &#8211; Utilizando Code Access Security – CAS &#8211; Parte 2</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2115&amp;pag=3">Israel Aéce &#8211; Utilizando Code Access Security – CAS &#8211; Parte 3</a><br />
<a href="http://en.wikipedia.org/wiki/Code_Access_Security">Code Access Security &#8211; Wikipedia, the free encyclopedia</a></p>
<p><strong>Implementing interoperability, reflection, and mailing functionality in a .NET Framework application</strong></p>
<p>Expose COM components to the .NET Framework and .NET Framework components to COM</p>
<p><a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2131">Platform Invoke Data Types<br />
Linha de Código &#8211; Por dentro da Base Classe Library &#8211; Capítulo 12 &#8211; Interoperabilidade com componentes COM</a></p>
<p>Implement reflection functionality in a .NET Framework application, and create metadata, Microsoft intermediate language (MSIL), and a PE file by using the System.Reflection.Emit namespace</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.appdomain.aspx">AppDomain Class (System)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.type.aspx">Type Class (System)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.reflection.aspx">System.Reflection Namespace ()</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.reflection.emit.aspx">System.Reflection.Emit Namespace ()</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.reflection.methodinfo.aspx">MethodInfo Class (System.Reflection)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.reflection.methodbase.aspx">MethodBase Class (System.Reflection)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.reflection.methodbody.aspx">MethodBody Class (System.Reflection)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.reflection.assembly.aspx">Assembly Class (System.Reflection)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.reflection.assemblyname.aspx">AssemblyName Class (System.Reflection)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags.aspx">BindingFlags Enumeration (System.Reflection)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.reflection.binder.aspx">Binder Class (System.Reflection)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.reflection.emit.assemblybuilder.aspx">AssemblyBuilder Class (System.Reflection.Emit)</a></p>
<p><a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=264">Linha de Código &#8211; Consultando e invocando métodos dincamicamente usando Reflection</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2133">Linha de Código &#8211; Por dentro da Base Classe Library &#8211; Capítulo 13 &#8211; Reflection</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2133&amp;pag=2">Linha de Código &#8211; Por dentro da Base Classe Library &#8211; Capítulo 13 &#8211; Reflection</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2133&amp;pag=3">Linha de Código &#8211; Por dentro da Base Classe Library &#8211; Capítulo 13 &#8211; Reflection</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2133&amp;pag=4">Linha de Código &#8211; Por dentro da Base Classe Library &#8211; Capítulo 13 &#8211; Reflection</a></p>
<p>Send electronic mail to a Simple Mail Transfer Protocol (SMTP) server for delivery from a .NET Framework application</p>
<p><a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2128">Linha de Código &#8211; Por dentro da Base Classe Library &#8211; Capítulo 10 &#8211; Envio de Mensagens (E-mails)</a></p>
<p><strong>Implementing globalization, drawing, and text manipulation functionality in a .NET Framework application</strong></p>
<p>Format data based on culture information</p>
<p><a href="http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx">CultureInfo Class (System.Globalization)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.currentculture.aspx">CultureInfo.CurrentCulture Property (System.Globalization)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.globalization.compareinfo.aspx">CompareInfo Class (System.Globalization)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.globalization.regioninfo.aspx">RegionInfo Class (System.Globalization)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/system.globalization.cultureandregioninfobuilder%28VS.80%29.aspx">CultureAndRegionInfoBuilder Class (System.Globalization)</a><br />
<a href="http://msdn.microsoft.com/en-us/library/87k6sx8t.aspx">Using the CultureInfo Class</a><br />
<a href="http://msdn.microsoft.com/en-us/library/syy068tk.aspx">Formatting Numeric Data for a Specific Culture</a><br />
<a href="http://msdn.microsoft.com/en-us/library/5hh873ya.aspx">Formatting Date and Time for a Specific Culture</a><br />
<a href="http://msdn.microsoft.com/en-us/library/885e1sy1.aspx">Performing Culture-Insensitive String Comparisons</a></p>
<p><a href="http://en.csharp-online.net/Using_Custom_Cultures%E2%80%94Using_CultureAndRegionInfoBuilder">Using Custom Cultures—Using CultureAndRegionInfoBuilder at C# Online.NET (CSharp-Online.NET)</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2081&amp;pag=1">Israel Aéce &#8211; Globalização de Aplicações &#8211; Parte 1</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2081&amp;pag=2">Israel Aéce &#8211; Globalização de Aplicações &#8211; Parte 2</a><br />
<a href="http://www.linhadecodigo.com.br/Artigo.aspx?id=2081&amp;pag=3">Israel Aéce &#8211; Globalização de Aplicações &#8211; Parte 3</a></p>
<dl> </dl>
<p>Fique ligado, em breve estarão disponíveis outros guias de estudo.</p>
<dl> </dl>
<p>Abraços!</p>
<dl>
<dt> </dt>
</dl>
<dl>
<dt> </dt>
</dl>
<dl>
<dl>
<dt> </dt>
</dl>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/guia-de-estudo-exame-70-536/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Para variar, Hello World!</title>
		<link>http://www.heroisdati.com/para-variar-hello-world/</link>
		<comments>http://www.heroisdati.com/para-variar-hello-world/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 20:57:08 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Reflexões]]></category>

		<guid isPermaLink="false">http://www.heroisdati.com/?p=32</guid>
		<description><![CDATA[Considerações iniciais sobre as espectativas com esse blog e uma reflexão sobre o desenvolvimento de software.]]></description>
			<content:encoded><![CDATA[<p><a href="http://pt.wikipedia.org/wiki/The_Big_Bang_Theory" target="_blank"><img class="alignleft size-full wp-image-33" title="Heróis da T.I." src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/01/TBBT-TvGuide-cover-shoot-the-big-bang-theory-7282142-565-380.jpg" alt="Heróis da T.I." width="288" height="304" /></a>Depois da experiência com <a href="http://aprenderaspx.wordpress.com/" target="_blank">outro blog</a> no ano passado, decidi reestruturar minha linha de publicações criando um blog exclusivamente para tratar de <strong>desenvolvimento de software</strong>.</p>
<p>Este blog é a saída que encontrei para apresentar idéias sobre a área e poder divulgar pesquisas, estudos e treinamentos. Não tenho como objetivo criar conteúdos exclusivos ou fazer propaganda, o objetivo deste blog é simplesmente ajudar a comunidade com informações técnicas e reflexões sobre práticas, metodologias e manias que fazem da nossa área <a href="http://idgnow.uol.com.br/carreira/2006/05/29/idgnoticia.2006-05-29.9752415684/IDGNoticia_view/" target="_blank">uma das áreas mais interessantes para se atuar</a> (se você não gosta de ficar acomodado <img src='http://hidrotec-es.com.br/denisferrari/wiki/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ).</p>
<p>Como tenho uma série de artigos preparados e muito conteúdo off-line, grande parte das publicações terão temas técnicos sobre .net e outras plataformas, porém, não acredito que nossa área seja deficiente nesse aspecto, acredito que muitos dos nossos profissionais precisem aprender a olhar o todo independente do papel que desempenham na equipe, no projeto ou na empresa onde estão.</p>
<p>Como profissionais de desenvolvimento, precisamos conhecer sobre diversas áreas, <a href="http://pt.wikipedia.org/wiki/Engenharia_de_software" target="_blank">entender e mapear processos</a>, criar realidades nos sistemas de informação que muitas vezes funcionam melhor do que no mundo real. Ajudamos empresas a melhorar seus processos e a otimizar suas rotinas, sem falar que nosso trabalho cria vantagens competitivas e também <a href="http://softwarelivre.org/portal/geral/area-de-ti-sera-responsavel-por-retomada-da-economia-em-2010" target="_blank">reduz drasticamente custos</a>. Realmente somos heróis do mundo moderno, porém, infelizmente somos desconhecidos, <strong>somos desenvolvedores de software</strong>.</p>
<p>A partir de hoje vou usar outro twitter para publicar novidades sobre a área, irei usar o twitter do blog  <a title="Twitter do Heróis da T.I." href="http://twitter.com/heroisdati" target="_blank">@heroisdati</a>.</p>
<p>Fiquem ligados e contribuam com feedbacks.</p>
<p>Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.heroisdati.com/para-variar-hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
