<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">André Nobre</title><subtitle type="html">ASP.NET MVC, Architecture, Debugging, Commerce Server, WinDBG...</subtitle><id>http://weblogs.asp.net/andrenobre/atom.aspx</id><link rel="alternate" type="text/html" href="http://weblogs.asp.net/andrenobre/default.aspx" /><link rel="self" type="application/atom+xml" href="http://weblogs.asp.net/andrenobre/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20510.895">Community Server</generator><updated>2010-03-21T23:54:01Z</updated><entry><title>Adeus ano bom – bem vindo, melhor ainda.</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/andrenobre/archive/2010/12/31/adeus-ano-bom-bem-vindo-melhor-ainda.aspx" /><id>http://weblogs.asp.net/andrenobre/archive/2010/12/31/adeus-ano-bom-bem-vindo-melhor-ainda.aspx</id><published>2010-12-31T19:10:02Z</published><updated>2010-12-31T19:10:02Z</updated><content type="html">&lt;p&gt;Olá pessoal!&lt;/p&gt;  &lt;p&gt;Este ano de 2010 foi realmente muito bom. A &lt;a href="http://www.facebook.com/pages/NBR/137836669605122" target="_blank"&gt;NBR&lt;/a&gt; cresceu consideravelmente, eu tive algumas mudanças no meu trabalho, me casei, comprei um apartamento e tudo mais.     &lt;br /&gt;Definitivamente, este ano ficará marcado para sempre.&lt;/p&gt;  &lt;p&gt;Fiz diversos amigos, dentro da comunidade Microsoft também.&lt;/p&gt;  &lt;p&gt;O melhor ainda é que as perspectivas para 2011 são ainda mais positivas. E pelo que estou vendo, este sentimento é comum a muitos amigos por aí, o que me deixa mais feliz ainda.&lt;/p&gt;  &lt;p&gt;Sem mais, desejo a todos um feliz ano de 2011, que muitos objetivos e conquistas sejam alcançados. Indepentende de tecnologias, linguagens ou religiões, que cada um faça o seu melhor, para garantir o melhor a sua volta. &lt;/p&gt;  &lt;p&gt;Espero que todos sigam duas palavras: MUDANÇAS e EMPREENDEDORISMO.&lt;/p&gt;  &lt;p&gt;Um forte abraço a todos e até ano que vem!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7671425" width="1" height="1"&gt;</content><author><name>anobre</name><uri>http://weblogs.asp.net/members/anobre.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/andrenobre/archive/tags/C_2300_/default.aspx" /></entry><entry><title>E a qualidade por trás?</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/andrenobre/archive/2010/12/21/e-a-qualidade-por-tr-225-s.aspx" /><id>http://weblogs.asp.net/andrenobre/archive/2010/12/21/e-a-qualidade-por-tr-225-s.aspx</id><published>2010-12-22T01:15:37Z</published><updated>2010-12-22T01:15:37Z</updated><content type="html">&lt;p&gt;Olá pessoal!&lt;/p&gt;  &lt;p&gt;Hoje o assunto não é código, mas sim a qualidade dele.    &lt;br /&gt;Recentemente aqui na &lt;a href="http://www.facebook.com/pages/NBR/137836669605122" target="_blank"&gt;NBR&lt;/a&gt; começamos com um cliente um contrato de manutenção e migração de 2 projetos existentes.    &lt;br /&gt;A nossa surpresa aconteceu quando tivemos acesso ao código-fonte dos projetos. E aí entra o assunto deste post…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Quão importante é a qualidade do código-fonte nos projetos?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A grande questão aqui neste caso específico é a seguinte: o layout é aceitável, planejado, onde pudemos perceber certa preocupação. Mas e o código por trás? Entre GoTo, banco de dados em Access, MySql e SQL Server no mesmo projeto (sem necessidade), abordagem 100% procedural, sem reutilização de código e ambientes dinâmicos, este post é mais um desabafo e uma preocupação do que qualquer coisa.&lt;/p&gt;  &lt;p&gt;Nós como desenvolvedores natos temos que ter uma preocupação básica: estou fazendo meu trabalho corretamente ou estou me livrando dele? &lt;/p&gt;  &lt;p&gt;Muitos clientes não analisam o código por trás dos seus projetos. Basta a interface cumprir o que foi prometido (ou quase cumprir) que está tudo certo.    &lt;br /&gt;E qual é o preço de um código mal feito?     &lt;br /&gt;A manutenção é tão importante quando o desenvolvimento de um novo projeto. O ponto mestre é defender isto para os possíveis clientes e provar, para os já clientes, que isto tem valor.&lt;/p&gt;  &lt;p&gt;No nosso dia-a-dia tentamos apresentar aos clientes (quando eles estão interessados) que nosso código é bem feito. E isto não depende do projeto, do cliente ou do desenvolvedor: uma interface bem feita é tão importante quanto seu código. Qualquer um dos dois pode acabar com seu projeto. &lt;/p&gt;  &lt;p&gt;Mas confesso que o mais dificil nisto tudo é defender que a qualidade tem preço e a sua importancia, para aqueles clientes que acham que não é necessário.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Como você defende este ponto de vista?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Vamos deixar claro: software bem feito não é barato! E definitivamente não existe a opção “sem qualidade”.&lt;/p&gt;  &lt;p&gt;Abraços!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7665657" width="1" height="1"&gt;</content><author><name>anobre</name><uri>http://weblogs.asp.net/members/anobre.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx" /><category term="Qualidade" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Qualidade/default.aspx" /></entry><entry><title>Commerce Server: Portal de Compra Coletiva</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/andrenobre/archive/2010/11/18/commerce-server-portal-de-compra-coletiva.aspx" /><id>http://weblogs.asp.net/andrenobre/archive/2010/11/18/commerce-server-portal-de-compra-coletiva.aspx</id><published>2010-11-19T01:16:28Z</published><updated>2010-11-19T01:16:28Z</updated><content type="html">&lt;p&gt;Olá pessoal!&lt;/p&gt;  &lt;p&gt;Hoje meu post é voltado para o produto Microsoft Commerce Server. Se você não sabe o que é, acesse &lt;a href="http://www.microsoft.com/commerceserver"&gt;http://www.microsoft.com/commerceserver&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Portais de Compra Coletiva estão na moda. O principal conceito deste tipo de negócio é a união de diversos compradores com o objetivo de atingir um mínimo esperado para usufruir de descontos em diversos produtos e serviços. Temos como exemplos o &lt;a href="http://www.peixeurbano.com.br"&gt;Peixe Urbano&lt;/a&gt; e o &lt;a href="http://www.cidadeoferta.com.br"&gt;Cidade Oferta&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;A questão é que, como estes modelos estão em alta, será que podemos adotar um produto robusto para aguentar a demanda crescente de acessos, com facilidade de manutenção e ferramentas de monitoramento?&lt;/p&gt;  &lt;p&gt;O Microsoft Commerce Server se baseia, resumidamente, em quatro pilares, os básicos de qualquer e-commerce: Marketing, Pedidos, Clientes e Catálogo de Produtos.&lt;/p&gt;  &lt;p&gt;A utilização do produto para Compra Coletiva poderia ser feita de diversas maneiras.&lt;/p&gt;  &lt;h3&gt;1. Cadastro de Produtos ou Serviços para Ofertas&lt;/h3&gt;  &lt;p&gt;O cadastro de produtos ou serviços para ofertas podem ser cadastrados utilizando o Catalog Manager, dentro de categorias pré-determinadas. No exemplo abaixo, foi criado um catálogo chamado “Compra Coletiva”, com uma categoria “Gastronomia” e o produto/oferta “Jantar Especial de Natal”. Nesta sugestão, seria possível cadastrar inúmeras ofertas, separadas por categorias, e depois ativá-las utilizando o Marketing Manager.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/image_7155FB4D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/andrenobre/image_thumb_5F3991F3.png" width="244" height="139" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/image_22C11D49.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/andrenobre/image_thumb_5176B01E.png" width="244" height="179" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A imagem abaixo demonstra a criação de variantes, para os casos onde a oferta pode conter variação de definição.    &lt;br /&gt;Por exemplo: imagine que uma determinada oferta pode oferecer em um modelo completo e um modelo simples. Seria possível criar uma oferta apenas, mas o usuário poderia selecionar qual modelo da oferta gostaria de comprar:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/image_61364522.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/andrenobre/image_thumb_43944456.png" width="244" height="176" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Algo muito importante é a definição do estoque. É possível editar um estoque por variant, o que nos ajuda a controlar o máximo e mínimo de vendas possíveis da oferta.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/image_7A21EF9A.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/andrenobre/image_thumb_4C5426D5.png" width="244" height="182" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;2. Divulgação das ofertas em tempo pré-determinado&lt;/h3&gt;  &lt;p&gt;A divulgação da oferta poderia ser através do Marketing Manager. Para isto, poderiamos criar uma definição de anúncio, e configurar sua propriedades para a data de publicação, tipo de anúncio, tamanho, imagens e cliques.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/image_34D972A4.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/andrenobre/image_thumb_7A01A400.png" width="244" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/image_6286EFCF.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/andrenobre/image_thumb_559C73E4.png" width="244" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/image_537F751B.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/andrenobre/image_thumb_3CCD0107.png" width="244" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;3. Integração com Formas de Pagamento&lt;/h3&gt;  &lt;p&gt;A forma de pagamento pode ser configurada através do Customers and Orders Manager. Poderíamos criar uma forma de pagamento PagSeguro, que teria uma pipeline para ser executado e que pudesse realizar a integração com o gateway.&lt;/p&gt;              &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/image_1231202A.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/andrenobre/image_thumb_6603FD6B.png" width="244" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/image_1CFDDBA5.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/andrenobre/image_thumb_1CEDB5D8.png" width="244" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;Conclusão&lt;/h3&gt;  &lt;p&gt;Fica claro que a ferramenta possibilita diversas abordagens para as Compras Coletivas. Esta é apenas uma sugestão para demonstração do potencial da ferramenta. &lt;/p&gt;  &lt;p&gt;Conheça mais sobre os recursos do Commerce Server, sobre o potencial de um application server como este, sua API, as questões de segurança, monitoramento e integração com outros produtos da Microsoft.&lt;/p&gt;  &lt;p&gt;Acesse: &lt;a href="http://www.commerceserver.com.br"&gt;www.commerceserver.com.br&lt;/a&gt; e &lt;a href="http://www.microsoft.com/commerceserver"&gt;www.microsoft.com/commerceserver&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Abraços!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7646799" width="1" height="1"&gt;</content><author><name>anobre</name><uri>http://weblogs.asp.net/members/anobre.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx" /><category term="Commerce Server" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Commerce+Server/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/andrenobre/archive/tags/C_2300_/default.aspx" /><category term="Compra Coletiva" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Compra+Coletiva/default.aspx" /></entry><entry><title>Windows 7: C# e Localização</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/andrenobre/archive/2010/11/02/windows-7-c-e-localiza-231-227-o.aspx" /><id>http://weblogs.asp.net/andrenobre/archive/2010/11/02/windows-7-c-e-localiza-231-227-o.aspx</id><published>2010-11-03T00:26:58Z</published><updated>2010-11-03T00:26:58Z</updated><content type="html">&lt;p&gt;A linguagem C# 4 apresenta um novo namespace capaz de interagir com a localização do computador, obtida através de recursos como GPS, Wi-fi, etc. A API é extremamente simples, e possibilita facilmente a criação de qualquer aplicação que trabalhe com estes recursos.&lt;/p&gt;  &lt;p&gt;No Windows 7, um aplicativo como &lt;a href="http://www.geosenseforwindows.com/"&gt;Geosense&lt;/a&gt; pode fazer este trabalho informativo.&lt;/p&gt;  &lt;h3&gt;Sobre a API&lt;/h3&gt;  &lt;p&gt;O namespace &lt;a href="http://msdn.microsoft.com/en-us/library/system.device.location.aspx"&gt;&lt;em&gt;System.Device.Location&lt;/em&gt;&lt;/a&gt; é o ponto inicial. A classe GeoCoordinateWatcher é a responsável por obter as informações de localização:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;        static void &lt;/span&gt;Main(&lt;span style="color: blue"&gt;string&lt;/span&gt;[] args)
        {
            &lt;span style="color: blue"&gt;var &lt;/span&gt;wacther = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;GeoCoordinateWatcher&lt;/span&gt;();
            wacther.Start();

            &lt;span style="color: blue"&gt;while &lt;/span&gt;(wacther.Status == &lt;span style="color: #2b91af"&gt;GeoPositionStatus&lt;/span&gt;.NoData)
            {
                &lt;span style="color: #2b91af"&gt;Thread&lt;/span&gt;.Sleep(10000);
                wacther.Start();
            }

            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(wacther.Position.Location.Latitude);
            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(wacther.Position.Location.Longitude);            

            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.ReadLine();
        }&lt;/pre&gt;


&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;É interessante notar que qualquer interação com o sensor de localização dentro do Windows 7 é registrada. O primeiro ícone mostra que houve interação, e serve de link para a visualização do log de atividades:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/image_146A9EBA.png"&gt;&lt;img style="border-bottom: ; border-left: ; margin: ; padding-left: ; padding-right: ; display: inline; border-top: ; border-right: ; padding-top: " title="image" alt="image" src="http://weblogs.asp.net/blogs/andrenobre/image_thumb_6AA723C6.png" width="198" height="67" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/image_2C7DE348.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/andrenobre/image_thumb_64AC3493.png" width="244" height="146" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;



&lt;p&gt;Abraços!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7635946" width="1" height="1"&gt;</content><author><name>anobre</name><uri>http://weblogs.asp.net/members/anobre.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/andrenobre/archive/tags/C_2300_/default.aspx" /></entry><entry><title>PagSeguro: Guia de Utilização com ASP.NET MVC</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/andrenobre/archive/2010/10/23/pagseguro-guia-de-utiliza-231-227-o-com-asp-net-mvc.aspx" /><id>http://weblogs.asp.net/andrenobre/archive/2010/10/23/pagseguro-guia-de-utiliza-231-227-o-com-asp-net-mvc.aspx</id><published>2010-10-23T18:50:41Z</published><updated>2010-10-23T18:50:41Z</updated><content type="html">&lt;p&gt;Olá pessoal! &lt;br&gt;Depois de bastante tempo sem publicar por aqui – afinal tive meu casamento, lua de mel, projetos indo pro ar, etc, etc – resolvi fazer um post sobre algo que utilizamos em um projeto recente da NBR.&lt;/p&gt; &lt;p&gt;Para&amp;nbsp; aqueles que estão pensando em utilizar uma solução de pagamento online, o &lt;a href="https://pagseguro.uol.com.br/"&gt;PagSeguro&lt;/a&gt; é uma ótima opção. Porém, sua documentação para integração com ASP.NET MVC, ou qualquer outra linguagem, não é 100%. &lt;br&gt;Por este motivo, este post servirá como guia para utilização com ASP.NET MVC, mas poderá servir de base para utilização em qualquer outra plataforma.&lt;/p&gt; &lt;h6&gt;Como o objetivo aqui não é apresentar o PagSeguro, acesse seu site para conhecer o funcionamento.&lt;/h6&gt; &lt;h3&gt;1. Qual é o fluxo do PagSeguro?&lt;/h3&gt; &lt;p&gt;O fluxo do PagSeguro é simples. O site que está vendendo algum produto ou serviço deverá enviar ao PagSeguro as informações da compra, como quantidade, produto, frete, etc. Este “envio” pode ser realizado como um post para um endereço do PagSeguro. A partir deste ponto o usuário estará no ambiente da UOL, onde deverá realizar um rápido cadastro, selecionar a forma de pagamento e concluir o processo. Neste momento, o PagSeguro pode ser configurado para retornar para uma URL específica do seu site, e consequentemente apresentar uma mensagem específica de retorno para o usuário.&lt;/p&gt; &lt;p&gt;Portanto, resumidamente podemos colocar:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Seu site obtém as informações de compra, monta um formulário e envia-o para a URL do PagSeguro;  &lt;li&gt;O PagSeguro inicia o processo de pagamento, requisitando o cadastro do usuário (não é o mesmo cadastro do seu site);  &lt;li&gt;O cliente, já no ambiente do PagSeguro, solicita a forma de pagamento desejada;  &lt;li&gt;O usuário insere as informações e conclui o processo;  &lt;li&gt;O PagSeguro retorna para o seu site através da URL de retorno configurada no PagSeguro pelo administrador da conta;  &lt;li&gt;Em um outro momento, que não exatamente no retorno para a sua URL configurada, o PagSeguro chama a mesma URL passando informações via POST sobre o status da compra. &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Em muitas conversas encontro dúvidas no passo 6. A mais comum delas é se o PagSeguro, ao retorna para a sua URL de retorno no fluxo do cliente, já envia as informações sobre o status da compra. Neste caso não, pois ele executa o verbo GET na sua URL. Quando, para esta mesma URL, ele executar o verbo POST, estará passando as informações da compra.&lt;/p&gt; &lt;h3&gt;2. Como realizar sua implementação no ASP.NET MVC?&lt;/h3&gt; &lt;p&gt;Portanto, se através da mesma URL configurada no PagSeguro, teremos o retorno da navegação do cliente no processo de compra e o recebimento das informações do status da compra, no ASP.NET MVC basta criarmos duas actions em um controller, uma configurada para GET e outra para POST. &lt;/p&gt; &lt;blockquote&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; ActionResult Retorno()&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="rem"&gt;// ...&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;[HttpPost]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; ActionResult Retorno(FormCollection form)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="rem"&gt;// ...&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&amp;nbsp;&lt;/div&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/blockquote&gt;


&lt;p&gt;O primeiro método deverá retornar uma tela informativa ao cliente, informando, por exemplo, o status da compra dele. &lt;br&gt;O segundo método deverá obter as informações do FormCollection e tratá-las no sistema, para atualização do status do pedido. É importante destacar que a cada alteração do status do pedido dentro do PagSeguro, uma requisição para a URL de retorno através de POST será realizada.&lt;/p&gt;
&lt;p&gt;É muito importante também citar que apenas a requisição ao GET é síncrona, dentro do fluxo de navegação do cliente. Já para a outra requisição não podemos determinar quando será realizada.&lt;br&gt;Porém, no projeto que utilizamos a solução, o retorno via POST do pagseguro é extremamente rápida, e em alguns momentos o retorno do GET já apresenta um status atualizado para o cliente.&lt;/p&gt;
&lt;h3&gt;3. Como testar localmente?&lt;/h3&gt;


&lt;p&gt;Um grande problema deste esquema é a dificuldade de testes. No projeto que publicamos, realizamos dois tipos de teste para&amp;nbsp; o PagSeguro. Em um, no período de desenvolvimento, o nosso fluxo de compra não chega ao PagSeguro, paramos no momento em que a compra é registrada no sistema com o status “Registrado”. Neste ponto, ativamos um HTML simples nosso, que simula o retorno do PagSeguro à nossa action Retorno configurada como POST, passando as informações necessárias.&lt;/p&gt;
&lt;p&gt;Em produção, toda comunicação de retorno com o PagSeguro é logada no banco de dados. Gravamos todas as chaves/valores que chegam via POST para análise da comunicação.&lt;/p&gt;
&lt;h3&gt;Conclusão&lt;/h3&gt;
&lt;p&gt;O PagSeguro é uma ferramente excelente. Sua documentação e ambiente de teste não estão OK, mas seu funcionamento e agilidade compensam tudo isso. &lt;/p&gt;
&lt;p&gt;Abraços.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7631552" width="1" height="1"&gt;</content><author><name>anobre</name><uri>http://weblogs.asp.net/members/anobre.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/andrenobre/archive/tags/C_2300_/default.aspx" /><category term="PagSeguro" scheme="http://weblogs.asp.net/andrenobre/archive/tags/PagSeguro/default.aspx" /></entry><entry><title>O poder das redes sociais</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/andrenobre/archive/2010/08/30/o-poder-das-redes-sociais.aspx" /><id>http://weblogs.asp.net/andrenobre/archive/2010/08/30/o-poder-das-redes-sociais.aspx</id><published>2010-08-30T20:08:33Z</published><updated>2010-08-30T20:08:33Z</updated><content type="html">&lt;p&gt;Neste último mês estive envolvido com um evento de grande porte em Londrina e Maringá, voltado ao público jovem. No geral, nossa estimativa era receber 4500 pessoas, divididas em 3 dias, sendo o primeiro em Maringá e os outros dois em Londrina. &lt;/p&gt;  &lt;p&gt;Eis que surge, em uma decisão arriscada e corajosa, o motivo deste post: &lt;strong&gt;a divulgação deste evento foi 80% focada na web&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;A estratégia foi simples: atingir o público-alvo deste evento onde ele mais se encontrava: orkut, facebook, portais e twitter.&amp;#160; &lt;/p&gt;  &lt;p&gt;Cito que a decisão é arriscada e corajosa pois decidir por utilizá-lo somente, sem associar televisão + rádio + outdoor + etc é muito complicado. Defender a idéia e mudar a nossa cultura não é tão simples como “o twitter tá bombando, põe lá”. &lt;/p&gt;  &lt;p&gt;Você arriscaria a divulgação deste evento só nas redes sociais?&lt;/p&gt;  &lt;p&gt;Talvez se você for um frequentador assíduo destes canais não deva estar espantado. Porém, eu estou.    &lt;br /&gt;&lt;strong&gt;Qual é o futuro das mídias?&lt;/strong&gt; Será que temos, neste exato momento e em alguns nichos, a inversão completa dos papéis, quando nos referimos aos veículos de divulgação? E para todos os públicos, &lt;strong&gt;será este um caminho inevitável&lt;/strong&gt;?&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;O que você acha?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Para termos um comparativo, este mesmo evento foi realizado no ano anterior, com a realização de rádio + televisão. E aqui está o dado interessante: as vendas deste ano foram mais rápidas, com um “bum” maior.&lt;/p&gt;  &lt;p&gt;Ah, a conclusão do evento: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;4.555 ingressos vendidos (100%)&lt;/li&gt;    &lt;li&gt;Vendas encerradas 5 dias antes do previsto&lt;/li&gt;    &lt;li&gt;Impacto nas vendas facilmente percebido pela divulgação via Twitter&lt;/li&gt;    &lt;li&gt;Procura de ingressos até o início do evento&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Abraços!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7602201" width="1" height="1"&gt;</content><author><name>anobre</name><uri>http://weblogs.asp.net/members/anobre.aspx</uri></author><category term="Redes Sociais" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Redes+Sociais/default.aspx" /><category term="Mídia Social" scheme="http://weblogs.asp.net/andrenobre/archive/tags/M_ED00_dia+Social/default.aspx" /></entry><entry><title>Agile Brazil 2010: Eu fui!</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/andrenobre/archive/2010/06/28/agile-brazil-2010-eu-fui.aspx" /><id>http://weblogs.asp.net/andrenobre/archive/2010/06/28/agile-brazil-2010-eu-fui.aspx</id><published>2010-06-28T03:44:49Z</published><updated>2010-06-28T03:44:49Z</updated><content type="html">&lt;p&gt;Nos dias 24/06 e 25/06 fui, junto com o &lt;a href="http://www.carloscds.com.br"&gt;Carlos dos Santos&lt;/a&gt;, a Porto Alegre participar do Agile Brazil 2010, conferência brasileira de métodos ágeis em desenvolvimento de software.&lt;/p&gt;  &lt;p&gt;Direto ao assunto: o evento foi &lt;strong&gt;&lt;u&gt;bom&lt;/u&gt;&lt;/strong&gt;. Só não foi muito bom pois vários palestrantes não souberam conduzir da melhor forma a apresentação do seu conteúdo, não sei se por falta de experiência ou nervosismo…&lt;/p&gt;  &lt;p&gt;Destaco no evento os keynotes de abertura e fechamento, por Martin Fowler e Klaus Wuestefeld, respectivamente. O mais interessante é que a essência do evento teve como foco saber o porque aplicar algumas metodologias, quando aplicá-las e se aplicá-las realmente terá um ótimo efeito. Isto vem de encontro aos termos da moda e sua aplicação incorreta nos projetos.&lt;/p&gt;  &lt;p&gt;De qualquer maneira, deixo aqui meu aviso: não percam o próximo evento Agile Brazil. Definitivamente deve fazer parte do calendário de todos aqueles que estão envolvidos com desenvolvimento de software (e outras coisas também, por que não?).&lt;/p&gt;  &lt;p&gt;Abraços a todos.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7546225" width="1" height="1"&gt;</content><author><name>anobre</name><uri>http://weblogs.asp.net/members/anobre.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx" /><category term="Palestras" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Palestras/default.aspx" /><category term="Eventos" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Eventos/default.aspx" /><category term="Agile Brazil" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Agile+Brazil/default.aspx" /></entry><entry><title>O movimento NoSQL</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/andrenobre/archive/2010/06/23/o-movimento-nosql.aspx" /><id>http://weblogs.asp.net/andrenobre/archive/2010/06/23/o-movimento-nosql.aspx</id><published>2010-06-23T20:10:35Z</published><updated>2010-06-23T20:10:35Z</updated><content type="html">&lt;p&gt;É fato que o Banco de Dados relacional é um mundo próprio quando utilizado em aplicações orientadas a objetos. Você já deve ter ficado cansado de fazer o velho mapeamento de um banco de dados de alguma maneira para dentro do sistema. Além disso, com os ambientes incertos de projetos de software, a mudança da estrutura das informações pode ocorrer inúmeras vezes. Se você já teve que mudar uma estrutura de banco de dados em produção sabe que não é tão simples quando alterar o design de seu código.&lt;/p&gt;  &lt;p&gt;É extremamente comum encontrarmos necessidades que não se encaixam perfeitamente no conjunto relacional tabela-linhas-colunas. Para estes casos o movimento noSQL cai como uma luva.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;NoSQL DEFINITION&lt;/strong&gt;: Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontal scalable. The original intention has been modern web-scale databases. The movement began early 2009 and is growing rapidly. Often more characteristics apply as: schema-free, easy replication support, simple API, eventually consistent / BASE (not ACID), and more. So the misleading term &amp;quot;nosql&amp;quot; (the community now translates it mostly with &amp;quot;not only sql&amp;quot;) should be seen as an alias to something like the definition above&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Este movimento tem aumentado muito nos ultimos meses, e grandes soluções já estão surgindo no mercado. A Microsoft vem atendendo esta demanda através do &lt;a href="http://msdn.microsoft.com/en-us/library/dd179423.aspx"&gt;Azure&lt;/a&gt;. Alias, a utilização de cloud services neste cenário é muito comum.&lt;/p&gt;  &lt;p&gt;Leia alguns artigos e conheça as características deste movimento, assim como os produtos disponíveis. Fique atendo para selecionar a melhor opção para sua aplicação.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/magazine/ee310029.aspx" href="http://msdn.microsoft.com/en-us/magazine/ee310029.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/ee310029.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blog.caelum.com.br/2009/10/30/bancos-de-dados-nao-relacionais-e-o-movimento-nosql/" href="http://blog.caelum.com.br/2009/10/30/bancos-de-dados-nao-relacionais-e-o-movimento-nosql/"&gt;http://blog.caelum.com.br/2009/10/30/bancos-de-dados-nao-relacionais-e-o-movimento-nosql/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.itweb.com.br/noticias/index.asp?cod=69390" href="http://www.itweb.com.br/noticias/index.asp?cod=69390"&gt;http://www.itweb.com.br/noticias/index.asp?cod=69390&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://nosql-database.org/" href="http://nosql-database.org/"&gt;http://nosql-database.org/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Abraços!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7541048" width="1" height="1"&gt;</content><author><name>anobre</name><uri>http://weblogs.asp.net/members/anobre.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx" /><category term="Azure" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Azure/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/andrenobre/archive/tags/C_2300_/default.aspx" /></entry><entry><title>Caching no .NET Framework 4.0</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/andrenobre/archive/2010/04/14/caching-no-net-framework-4-0.aspx" /><id>http://weblogs.asp.net/andrenobre/archive/2010/04/14/caching-no-net-framework-4-0.aspx</id><published>2010-04-14T17:01:00Z</published><updated>2010-04-14T17:01:00Z</updated><content type="html">&lt;P&gt;Olá pessoal, como estão? &lt;BR&gt;Hoje vou apresentar uma mudança interessante sobre caching, em comparação com versões anteriores.&lt;/P&gt;
&lt;H3&gt;&lt;/H3&gt;
&lt;H3&gt;Introdução&lt;/H3&gt;
&lt;P&gt;A versão 4.0 da plataforma .NET trouxe uma mudança estrutural esperada para os recursos de Cache. Nas versão 3.5 (até SP1), a plataforma fornecia uma implementação do Cache através do namespace &lt;EM&gt;System.Web.Caching&lt;/EM&gt;. Nas versões anteriores o cache estava disponível no namespace &lt;EM&gt;System.Web&lt;/EM&gt;, o que criada uma dependência com as classes do ASP.NET.&lt;/P&gt;
&lt;P&gt;Neste novo framework, o namespace &lt;EM&gt;System.Runtime.Caching&lt;/EM&gt; reúne toda a API necessária para criar todas as tarefas comuns ao ASP.NET Caching de versões anteriores.&lt;/P&gt;
&lt;H3&gt;System.Runtime.Caching e MemoryCache&lt;/H3&gt;
&lt;P&gt;Tudo que precisamos para trabalhar com cache, em aplicações Web ou não, está reunido no namespace &lt;EM&gt;System.Runtime.Caching&lt;/EM&gt;. A unidade básica de trabalho é a classe abstrata &lt;EM&gt;ObjectCache&lt;/EM&gt;, que fornece a base para criar implementações customizadas de cache.&lt;/P&gt;
&lt;P&gt;E como é de se esperar, a classe &lt;EM&gt;MemoryCache&lt;/EM&gt; é a implementação da classe abstrata &lt;EM&gt;ObjectCache&lt;/EM&gt; para armazenamento das informações em memória. &lt;/P&gt;&lt;PRE&gt;public class MemoryCache : ObjectCache, 
	IEnumerable, IDisposable&lt;/PRE&gt;
&lt;P&gt;A utilização do cache é muito simples, bem parecida com o modelo anterior:&lt;/P&gt;&lt;PRE class=csharpcode&gt;    ObjectCache cache = MemoryCache.Default;
&lt;SPAN class=kwrd&gt;    string&lt;/SPAN&gt; fileContents = cache[&lt;SPAN class=str&gt;"filecontents"&lt;/SPAN&gt;] &lt;SPAN class=kwrd&gt;as&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;;

    &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (fileContents == &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
    {
        CacheItemPolicy policy = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; CacheItemPolicy();
        
        List&amp;lt;&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;&amp;gt; filePaths = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; List&amp;lt;&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;&amp;gt;();
        filePaths.Add(&lt;SPAN class=str&gt;"c:\\cache\\example.txt"&lt;/SPAN&gt;);

        policy.ChangeMonitors.Add(&lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; 
        HostFileChangeMonitor(filePaths));

        &lt;SPAN class=rem&gt;// Fetch the file contents.&lt;/SPAN&gt;
        fileContents = 
            File.ReadAllText(&lt;SPAN class=str&gt;"c:\\cache\\example.txt"&lt;/SPAN&gt;);
        
        cache.Set(&lt;SPAN class=str&gt;"filecontents"&lt;/SPAN&gt;, fileContents, policy);
    }

    Label1.Text = fileContents;&lt;/PRE&gt;
&lt;H3&gt;Extendendo o Cache&lt;/H3&gt;
&lt;P&gt;É possível customizar todo mecanismo de cache através de várias abordagens. &lt;A href="http://weblogs.asp.net/scottgu" target=_blank mce_href="http://weblogs.asp.net/scottgu"&gt;ScottGu&lt;/A&gt; escreveu sobre isto, que você pode acessar através &lt;A href="http://weblogs.asp.net/scottgu/archive/2010/01/27/extensible-output-caching-with-asp-net-4-vs-2010-and-net-4-0-series.aspx" target=_blank mce_href="http://weblogs.asp.net/scottgu/archive/2010/01/27/extensible-output-caching-with-asp-net-4-vs-2010-and-net-4-0-series.aspx"&gt;deste&lt;/A&gt; link.&lt;/P&gt;
&lt;H3&gt;Conclusão&lt;/H3&gt;
&lt;P&gt;Algo muito esperado em versões anteriores, finalmente o cache está disponível sem criar relacionamento com assemblies exclusivamente Web. Perfeito para quem desenvolve outros tipos de aplicação, usufruindo deste recurso sem carregar código desnecessário.&lt;/P&gt;
&lt;P&gt;Abraços!&lt;/P&gt;
&lt;SCRIPT type=text/javascript src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"&gt;&lt;/SCRIPT&gt;

&lt;SCRIPT type=text/javascript&gt;
$(function(){
$("iframe").css("display", "none");
});
&lt;/SCRIPT&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7443984" width="1" height="1"&gt;</content><author><name>anobre</name><uri>http://weblogs.asp.net/members/anobre.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/andrenobre/archive/tags/C_2300_/default.aspx" /></entry><entry><title>Evento: Lançamento do Visual Studio 2010 e .NET 4</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/andrenobre/archive/2010/04/14/evento-lan-231-amento-do-visual-studio-2010-e-net-4.aspx" /><id>http://weblogs.asp.net/andrenobre/archive/2010/04/14/evento-lan-231-amento-do-visual-studio-2010-e-net-4.aspx</id><published>2010-04-14T16:45:20Z</published><updated>2010-04-14T16:45:20Z</updated><content type="html">&lt;p&gt;Olá pessoal!&lt;/p&gt;  &lt;p&gt;Ontem fizemos mais um evento, desta vez de lançamento do Visual Studio 2010 e .NET 4, com palestras de Entity Framework e Silverlight também.&lt;/p&gt;  &lt;p&gt;As fotos estão &lt;a href="http://www.flickr.com/photos/nbrtec/sets/72157623853883234/" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Abraços a todos.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7443959" width="1" height="1"&gt;</content><author><name>anobre</name><uri>http://weblogs.asp.net/members/anobre.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx" /><category term="Palestras" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Palestras/default.aspx" /><category term="Grupos" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Grupos/default.aspx" /><category term="Eventos" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Eventos/default.aspx" /></entry><entry><title>Maringá Techday</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/andrenobre/archive/2010/04/12/maring-225-techday.aspx" /><id>http://weblogs.asp.net/andrenobre/archive/2010/04/12/maring-225-techday.aspx</id><published>2010-04-12T12:44:30Z</published><updated>2010-04-12T12:44:30Z</updated><content type="html">&lt;p&gt;Olá pessoal!&lt;/p&gt;  &lt;p&gt;Neste último sábado realizamos um evento em Maringá, chamado Maringá TechDay, com palestras sobre .NET 4, Siverlight e Entity Framework.&lt;/p&gt;  &lt;p&gt;O Carlos dos Santos (um dos palestrantes) acabou de publicar um post completo sobre o evento, com fotos e tudo mais.&lt;/p&gt;  &lt;p&gt;Acesse &lt;a href="http://www.carloscds.net/post/2010/04/11/Maringa-Techday.aspx" target="_blank"&gt;este link&lt;/a&gt; para ver o resultado.&lt;/p&gt;  &lt;p&gt;Abraços!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7440706" width="1" height="1"&gt;</content><author><name>anobre</name><uri>http://weblogs.asp.net/members/anobre.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx" /><category term="Treinamentos" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Treinamentos/default.aspx" /><category term="Palestras" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Palestras/default.aspx" /><category term="Grupos" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Grupos/default.aspx" /><category term="Eventos" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Eventos/default.aspx" /></entry><entry><title>Programação paralela no .NET Framework 4 – Parte II</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/andrenobre/archive/2010/04/04/programa-231-227-o-paralela-no-net-framework-4-parte-ii.aspx" /><id>http://weblogs.asp.net/andrenobre/archive/2010/04/04/programa-231-227-o-paralela-no-net-framework-4-parte-ii.aspx</id><published>2010-04-04T18:22:27Z</published><updated>2010-04-04T18:22:27Z</updated><content type="html">&lt;p&gt;Olá pessoal, tudo bem?&lt;/p&gt;  &lt;p&gt;Este post é uma continuação da série iniciada &lt;a href="http://weblogs.asp.net/andrenobre/archive/2010/04/03/programa-231-227-o-paralela-no-net-framework-4-parte-i.aspx" target="_blank"&gt;neste outro post&lt;/a&gt;, sobre programação paralela.     &lt;br /&gt;Meu objetivo hoje é apresentar o PLINQ, algo que poderá ser utilizado imediatamente nos projetos de vocês.&lt;/p&gt;  &lt;h3&gt;Parallel LINQ (PLINQ)&lt;/h3&gt;  &lt;p&gt;PLINQ nada mais é que uma implementação de programação paralela ao nosso famoso &lt;a href="http://msdn.microsoft.com/en-us/library/bb397926(v=VS.100).aspx" target="_blank"&gt;LINQ&lt;/a&gt;, através de &lt;a href="http://msdn.microsoft.com/en-us/library/bb383977.aspx" target="_blank"&gt;métodos de extensão&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;O LINQ foi lançado com a versão 3.0 na plataforma .NET, apresentando uma maneira muito mais fácil e segura de manipular coleções &lt;em&gt;IEnumerable&lt;/em&gt; ou &lt;em&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/em&gt;. O que veremos hoje é a “alteração” do LINQ to Objects, que é direcionado a coleções de objetos em memória. &lt;/p&gt;  &lt;p&gt;A principal diferença entre o LINQ to Objects “normal” e o paralelo é que na segunda opção o processamento é realizado tentando utilizar todos os recursos disponíveis para tal, obtendo uma melhora significante de performance.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;CUIDADO&lt;/strong&gt;: Nem todas as operações ficam mais rápidas utilizando recursos de paralelismo. Não deixe de ler a seção “Performance” abaixo.&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;ParallelEnumerable&lt;/h4&gt;  &lt;p&gt;Tudo que a gente precisa para este post está organizado na classe &lt;em&gt;ParallelEnumerable&lt;/em&gt;. Esta classe contém os métodos que iremos utilizar neste post, e muito mais:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;AsParallel &lt;/li&gt;    &lt;li&gt;AsSequential &lt;/li&gt;    &lt;li&gt;AsOrdered &lt;/li&gt;    &lt;li&gt;AsUnordered &lt;/li&gt;    &lt;li&gt;WithCancellation &lt;/li&gt;    &lt;li&gt;WithDegreeOfParallelism &lt;/li&gt;    &lt;li&gt;WithMergeOptions &lt;/li&gt;    &lt;li&gt;WithExecutionMode &lt;/li&gt;    &lt;li&gt;ForAll &lt;/li&gt;    &lt;li&gt;… &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;O exemplo mais básico de como executar um código PLINQ é utilizando o métodos AsParallel, como o exemplo:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;var source = Enumerable.Range(1, 10000);

var evenNums = from num &lt;span class="kwrd"&gt;in&lt;/span&gt; source.AsParallel()
               &lt;span class="kwrd"&gt;where&lt;/span&gt; Compute(num) &amp;gt; 0
               select num;&lt;/pre&gt;

&lt;p&gt;Algo tão interessante quanto esta facilidade é que o PLINQ não executa &lt;u&gt;sempre&lt;/u&gt; de forma paralela. Dependendo da situação e da análise de alguns itens no cenário de execução, talvez seja mais adequado executar o código de forma sequencial – e nativamente o próprio PLINQ faz esta escolha.&amp;#160; É possível forçar a execução para sempre utilizar o paralelismo, caso seja necessário. Utilize o método &lt;em&gt;WithExecutionMode&lt;/em&gt; no seu código PLINQ.&lt;/p&gt;

&lt;p&gt;Um teste muito simples onde podemos visualizar a diferença é demonstrado abaixo:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
        {
            IEnumerable&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; numbers = Enumerable.Range(1, 1000);

            IEnumerable&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; results = from n &lt;span class="kwrd"&gt;in&lt;/span&gt; numbers.AsParallel()
                                       &lt;span class="kwrd"&gt;where&lt;/span&gt; IsDivisibleByFive(n)
                                       select n;

            Stopwatch sw = Stopwatch.StartNew();
            IList&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt; resultsList = results.ToList();
            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;{0} itens&amp;quot;&lt;/span&gt;, resultsList.Count());
            sw.Stop();

            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Tempo de execução: {0} ms&amp;quot;&lt;/span&gt;, sw.ElapsedMilliseconds);

            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Fim...&amp;quot;&lt;/span&gt;);
            Console.ReadKey(&lt;span class="kwrd"&gt;true&lt;/span&gt;);
        }

        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsDivisibleByFive(&lt;span class="kwrd"&gt;int&lt;/span&gt; i)
        {
            Thread.SpinWait(2000000);

            &lt;span class="kwrd"&gt;return&lt;/span&gt; i % 5 == 0;
        }&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Basta remover o &lt;em&gt;AsParallel&lt;/em&gt; da instrução LINQ que você terá uma noção prática da diferença de performance.&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/image_4252B9DF.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/andrenobre/image_thumb_4CC36832.png" width="244" height="125" /&gt;&lt;/a&gt; 

  &lt;br /&gt;&lt;/p&gt;

&lt;h6 align="center"&gt;1. Instrução utilizando AsParallel&lt;/h6&gt;

&lt;p align="center"&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/image_43F35FE6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/andrenobre/image_thumb_2795F7F9.png" width="244" height="125" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;&lt;/p&gt;

&lt;h6 align="center"&gt;2. Instrução sem utilizar paralelismo&lt;/h6&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h3&gt;Performance&lt;/h3&gt;

&lt;p&gt;Apesar de todos os benefícios, não podemos utilizar PLINQ sem conhecer todos os seus detalhes. Lembre-se de fazer as perguntas básicas:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Eu tenho trabalho suficiente que justifique utilizar paralelismo? &lt;/li&gt;

  &lt;li&gt;Mesmo com o overhead do PLINQ, vamos ter algum benefício? &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Por este motivo, visite &lt;a href="http://msdn.microsoft.com/en-us/library/dd997399(v=VS.100).aspx" target="_blank"&gt;este link&lt;/a&gt; e conheça todos os aspectos, antes de utilizar os recursos disponíveis.&lt;/p&gt;

&lt;h3&gt;Conclusão&lt;/h3&gt;

&lt;p&gt;Utilizar recursos de paralelismo é ótimo, aumenta a performance, utiliza o investimento realizado em hardware – tudo isso sem custo de produtividade. Porém, não podemos usufruir de qualquer tipo de tecnologia sem conhece-la a fundo antes. Portanto, faça bom uso, mas não esqueça de manter o conhecimento a frente da empolgação.&lt;/p&gt;

&lt;p&gt;Abraços.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7430135" width="1" height="1"&gt;</content><author><name>anobre</name><uri>http://weblogs.asp.net/members/anobre.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/andrenobre/archive/tags/C_2300_/default.aspx" /></entry><entry><title>Programação paralela no .NET Framework 4 – Parte I</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/andrenobre/archive/2010/04/03/programa-231-227-o-paralela-no-net-framework-4-parte-i.aspx" /><id>http://weblogs.asp.net/andrenobre/archive/2010/04/03/programa-231-227-o-paralela-no-net-framework-4-parte-i.aspx</id><published>2010-04-03T20:29:19Z</published><updated>2010-04-03T20:29:19Z</updated><content type="html">&lt;h3&gt;Introdução&lt;/h3&gt;  &lt;p&gt;O avanço de tecnologia nos últimos anos forneceu, a baixo custo, acesso&amp;#160; a workstations com inúmeros CPUs. Facilmente encontramos hoje máquinas clientes com 2, 4 e até 8 núcleos, sem considerar os “super-servidores” com até 36 processadores :)&lt;/p&gt;  &lt;p&gt;Da &lt;a href="http://pt.wikipedia.org/wiki/Unidade_central_de_processamento" target="_blank"&gt;wikipedia&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;A &lt;b&gt;Unidade central de processamento&lt;/b&gt; (&lt;b&gt;CPU&lt;/b&gt;, de acordo com as iniciais em inglês) ou o &lt;b&gt;processador&lt;/b&gt; é a parte de um sistema de computador que executa as instruções de um &lt;/em&gt;&lt;a href="http://pt.wikipedia.org/wiki/Programa_de_computador"&gt;&lt;em&gt;programa de computador&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, e é o elemento primordial na execução das funções de um computador. Este termo tem sido usado na indústria de computadores pelo menos desde o início dos anos 1960&lt;sup&gt;&lt;a href="http://pt.wikipedia.org/#cite_note-weik1961-0"&gt;[1]&lt;/a&gt;&lt;/sup&gt;. A forma, desenho e implementação de CPUs têm mudado dramaticamente desde os primeiros exemplos, mas o seu funcionamento fundamental permanece o mesmo.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Fazendo uma analogia, seria muito interessante delegarmos tarefas no mundo real que podem ser executadas independentemente a pessoas diferentes, atingindo desta forma uma&amp;#160; maior performance / produtividade na sua execução.&lt;/p&gt;  &lt;p&gt;A computação paralela se baseia na idéia que um problema maior pode ser dividido em problemas menores, sendo resolvidos de forma paralela. Este pensamento é utilizado há algum tempo por HPC (High-performance computing), e através das facilidades dos últimos anos, assim como a preocupação com consumo de energia, tornaram esta idéia mais atrativa e de fácil acesso a qualquer ambiente.&lt;/p&gt;  &lt;h3&gt;No .NET Framework&lt;/h3&gt;  &lt;p&gt;A plataforma .NET apresenta um runtime, bibliotecas e ferramentas para fornecer uma base de acesso fácil e rápido à programação paralela, sem trabalhar diretamente com threads e thread pool.&lt;/p&gt;  &lt;p&gt;Esta série de posts irá apresentar todos os recursos disponíveis, iniciando os estudos pela TPL, ou Task Parallel Library.&lt;/p&gt;  &lt;h3&gt;Task Parallel Library&lt;/h3&gt;  &lt;p&gt;A TPL é um conjunto de tipos localizados no namespace System.Threading e System.Threading.Tasks, a partir da versão 4 do framework.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;A partir da versão 4 do framework, o TPL é a maneira recomendada para escrever código paralelo e multithreaded. &lt;/em&gt;&lt;/p&gt;    &lt;h6&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/dd460717(v=VS.100).aspx" href="http://msdn.microsoft.com/en-us/library/dd460717(v=VS.100).aspx"&gt;http://msdn.microsoft.com/en-us/library/dd460717(v=VS.100).aspx&lt;/a&gt;&lt;/h6&gt; &lt;/blockquote&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h4&gt;Task Parallelism&lt;/h4&gt;  &lt;p&gt;O termo “task parallelism”, ou em uma tradução live paralelismo de tarefas, se refere a uma ou mais tarefas sendo executadas de forma simultanea.&lt;/p&gt;  &lt;p&gt;Considere uma tarefa como um método. A maneira mais fácil de executar tarefas de forma paralela é o código abaixo:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;strong&gt;Parallel.Invoke(() =&amp;gt; TrabalhoInicial(), () =&amp;gt; TrabalhoSeguinte());&lt;/strong&gt;&lt;/pre&gt;

&lt;h5&gt;O que acontece de verdade?&lt;/h5&gt;

&lt;p&gt;Por trás nos panos, esta instrução instancia de forma implícita objetos do tipo &lt;em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v=VS.100).aspx" target="_blank"&gt;Task&lt;/a&gt;&lt;/em&gt;, responsável por representar uma operação &lt;strong&gt;assíncrona&lt;/strong&gt;, não exatamente paralela:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Task : IAsyncResult, IDisposable&lt;/pre&gt;

&lt;p&gt;É possível instanciar &lt;em&gt;Tasks&lt;/em&gt; de forma explícita, sendo uma alternativa mais complexa ao &lt;em&gt;Parallel.Invoke&lt;/em&gt;. &lt;/p&gt;

&lt;pre class="csharpcode"&gt;var task = &lt;span class="kwrd"&gt;new&lt;/span&gt; Task(() =&amp;gt; TrabalhoInicial());
task.Start();&lt;/pre&gt;

&lt;p&gt;Outra opção de instanciar uma Task e já executar sua tarefa é:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;var t = Task&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt;.Factory.StartNew(() =&amp;gt; TrabalhoInicialComValor());&lt;br /&gt;var t2 = Task&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt;.Factory.StartNew(() =&amp;gt; TrabalhoSeguinteComValor());&lt;/pre&gt;

&lt;p&gt;A diferença básica entre as duas abordagens é que a primeira tem início conhecido, mais utilizado quando não queremos que a instanciação e o agendamento da execução ocorra em uma só operação, como na segunda abordagem.&lt;/p&gt;

&lt;h3&gt;Data Parallelism&lt;/h3&gt;

&lt;p&gt;Ainda parte da TPL, o &lt;em&gt;Data Parallelism&lt;/em&gt; se refere a cenários onde a mesma operação deva ser executada paralelamente em elementos de uma coleção ou array, através de instruções paralelas &lt;em&gt;For &lt;/em&gt;e &lt;em&gt;ForEach&lt;/em&gt;. A idéia básica é pegar cada elemento da coleção (ou array) e trabalhar com diversas threads concomitantemente. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;A classe-chave para este cenário é a System.Threading.Tasks.Parallel&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// Sequential version            &lt;/span&gt;
&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var item &lt;span class="kwrd"&gt;in&lt;/span&gt; sourceCollection)
{
    Process(item);
}

&lt;span class="rem"&gt;// Parallel equivalent&lt;/span&gt;
Parallel.ForEach(sourceCollection, item =&amp;gt; Process(item));&lt;/pre&gt;

&lt;p&gt;Complicado né? :)&lt;/p&gt;

&lt;h3&gt;Demonstração&lt;/h3&gt;

&lt;p&gt;Acesse &lt;a href="http://www.nbrtecnologia.com.br/downloads/Parallel.wmv" target="_blank"&gt;aqui&lt;/a&gt; um vídeo com exemplos (screencast).&lt;/p&gt;

&lt;h3&gt;Cuidado!&lt;/h3&gt;

&lt;p&gt;Apesar da imensa vontade de sair codificando, tome cuidado com alguns problemas básicos de paralelismo. &lt;a href="http://msdn.microsoft.com/en-us/library/dd997392(v=VS.100).aspx" target="_blank"&gt;Neste link&lt;/a&gt; é possível conhecer algumas situações.&lt;/p&gt;

&lt;p&gt;Abraços.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7429079" width="1" height="1"&gt;</content><author><name>anobre</name><uri>http://weblogs.asp.net/members/anobre.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx" /><category term="C#" scheme="http://weblogs.asp.net/andrenobre/archive/tags/C_2300_/default.aspx" /></entry><entry><title>Roadshow Microsoft – Primeira Parada: Londrina, PR</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/andrenobre/archive/2010/03/24/roadshow-microsoft-primeira-parada-londrina-pr.aspx" /><id>http://weblogs.asp.net/andrenobre/archive/2010/03/24/roadshow-microsoft-primeira-parada-londrina-pr.aspx</id><published>2010-03-24T15:03:46Z</published><updated>2010-03-24T15:03:46Z</updated><content type="html">&lt;p&gt;Hoje (23/03) tivemos aqui em Londrina a primeira parada do Roadshow Microsoft, com apresentação de diversos produtos com aplicação em cenários técnicos.&lt;/p&gt;  &lt;p&gt;Como já é de costume, o evento reuniu alguns dos melhores profissionais de DEV e INFRA, com informações extremamente úteis sobre .NET Framework 4, Entity Framework, Exchange, Sharepoint, entre outras tecnologias e produtos.&lt;/p&gt;  &lt;p&gt;Na minha visão, o evento conseguiu atender a expectativa dos participantes, através dos cenários técnicos criados para a ficticia Adventure Works (acho que eu conheço esta empresa… :). Através da participação ativa de todos, as tracks de DEV e INFRA tiveram o sucesso aparente no comentário do pessoal nos intervalos e almoço. &lt;/p&gt;  &lt;p&gt;Depois das palestras, lá por 19h, tivemos um jantar com o pessoal da Microsoft e influenciadores da região, onde, até as 21h, discutimos muita coisa (até Commerce Server!). Esta aproximação com o time de comunidades da Microsoft, além de alguns “penetras” como o próprio Alex disse, é extremamente importante e útil, visto que passamos conhecemos a fundo as intenções e futuras ações da Microsoft visando as comunidades locais.&lt;/p&gt;  &lt;p&gt;Para concluir, algo que sempre digo: participe de alguma comunidade técnica da sua região. Entre em contato com influenciadores, conheça os grupos de usuários perto de você e não perca tempo. Ter o conhecimento perto de você, contribuir e crescer profissionalmente não tem preço. &lt;/p&gt;  &lt;p&gt;Obrigado novamente a todo time, em especial a Fabio Hara, Rodrigo Dias, Alex Schulz, Alvaro Rezende, Murilo e Renato Haddad. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/DSC00515_5C8FFECC.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DSC00515" border="0" alt="DSC00515" src="http://weblogs.asp.net/blogs/andrenobre/DSC00515_thumb_73029D53.jpg" width="244" height="139" /&gt;&lt;/a&gt; &lt;a href="http://weblogs.asp.net/blogs/andrenobre/DSC00520_2349720A.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DSC00520" border="0" alt="DSC00520" src="http://weblogs.asp.net/blogs/andrenobre/DSC00520_thumb_596AEA59.jpg" width="244" height="139" /&gt;&lt;/a&gt; &lt;a href="http://weblogs.asp.net/blogs/andrenobre/DSC00528_735EAA7B.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DSC00528" border="0" alt="DSC00528" src="http://weblogs.asp.net/blogs/andrenobre/DSC00528_thumb_50BA6C00.jpg" width="244" height="139" /&gt;&lt;/a&gt; &lt;a href="http://weblogs.asp.net/blogs/andrenobre/DSC00531_68057071.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DSC00531" border="0" alt="DSC00531" src="http://weblogs.asp.net/blogs/andrenobre/DSC00531_thumb_1054A2C6.jpg" width="244" height="139" /&gt;&lt;/a&gt; &lt;a href="http://weblogs.asp.net/blogs/andrenobre/DSC00541_4A636FA5.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DSC00541" border="0" alt="DSC00541" src="http://weblogs.asp.net/blogs/andrenobre/DSC00541_thumb_72466F04.jpg" width="244" height="139" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Abraços.&lt;/p&gt;  &lt;p&gt;OBS.: Lembre-se: em Londrina e região, procure o &lt;a href="http://www.sharpcode.com.br" target="_blank"&gt;Sharpcode&lt;/a&gt;! :)     &lt;br /&gt;OBS. 2: Se você é de Londrina e não participou, não perca mais oportunidades. Alias, se o seu chefe não deixa você ir, se você tem que participar de sorteio para ter uma chance de ir, ou se a sua empresa nem fica sabendo de eventos como este, acho que tá na hora de você pensar em outros opções né? :)     &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7407611" width="1" height="1"&gt;</content><author><name>anobre</name><uri>http://weblogs.asp.net/members/anobre.aspx</uri></author><category term=".NET" scheme="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx" /><category term="Palestras" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Palestras/default.aspx" /><category term="Grupos" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Grupos/default.aspx" /><category term="Eventos" scheme="http://weblogs.asp.net/andrenobre/archive/tags/Eventos/default.aspx" /></entry><entry><title>Community Launch: Londrina</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/andrenobre/archive/2010/03/21/community-launch-londrina.aspx" /><id>http://weblogs.asp.net/andrenobre/archive/2010/03/21/community-launch-londrina.aspx</id><published>2010-03-22T01:54:01Z</published><updated>2010-03-22T01:54:01Z</updated><content type="html">&lt;p&gt;Hoje (20/03/2010) fizemos o evento Community Launch em Londrina.    &lt;br /&gt;O dia começou às 09:00h com abertura online realizada pela Microsoft (Rodrigo Dias, Fabio Hara e Rogério Cordeiro), apresentando a &lt;a href="http://www.talentosmicrosoft.com.br" target="_blank"&gt;Copa Microsoft de Talentos&lt;/a&gt;, informações sobre o Road Show &amp;lt;LINK&amp;gt; e produtos Microsoft que estarão no foco deste ano. &lt;/p&gt;  &lt;p&gt;Após a abertura, alguns influenciadores Microsoft da região apresentaram algumas palestras técnicas, mais voltadas a DEV, sobre os assuntos:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;As Novidades da Plataforma .NET (André Nobre) - &lt;a href="http://cid-61fb6dc74e0e0743.skydrive.live.com/self.aspx/P%c3%bablico/Apresenta%c3%a7%c3%b5es/NET%20Framework%204.pptx" target="_blank"&gt;Download&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Entity Framework 4 (Carlos dos Santos) &lt;/li&gt;    &lt;li&gt;Silverlight 4 (Marcio Althmann) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;A minha apresentação foi focada em 3 novidades que podem ser aplicadas no dia-a-dia dos participantes, algo bem pontual, envolvendo web forms, paralelismo e Dynamic Language Runtime. &lt;/p&gt;  &lt;p&gt;O destaque (IMHO) fica para o paralelismo, algo totalmente aplicável nas aplicações, que nos dá um resultado incrível. Apesar de já existir anteriormente, o fato de estar embutido na&amp;#160; plataforma incentiva a rápida adoção da tecnologia.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/DSC00487_53293DCF.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DSC00487" border="0" alt="DSC00487" src="http://weblogs.asp.net/blogs/andrenobre/DSC00487_thumb_679E6780.jpg" width="244" height="139" /&gt;&lt;/a&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/DSC00504_581B55B1.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DSC00504" border="0" alt="DSC00504" src="http://weblogs.asp.net/blogs/andrenobre/DSC00504_thumb_15C83D6E.jpg" width="244" height="139" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/DSC00509_0D646817.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DSC00509" border="0" alt="DSC00509" src="http://weblogs.asp.net/blogs/andrenobre/DSC00509_thumb_2AF64316.jpg" width="244" height="139" /&gt;&lt;/a&gt; &lt;a href="http://weblogs.asp.net/blogs/andrenobre/DSC00510_774DD6B7.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DSC00510" border="0" alt="DSC00510" src="http://weblogs.asp.net/blogs/andrenobre/DSC00510_thumb_1F9D090C.jpg" width="244" height="139" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Apenas para formalizar, nos próximos dias vamos lançar localmente as reuniões presenciais para discussões técnicas do grupo &lt;a href="http://www.sharpcode.com.br" target="_blank"&gt;Sharpcode&lt;/a&gt;. Se você tem interesse, e está na região de Londrina, participe!&lt;/p&gt;  &lt;p&gt;&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-61fb6dc74e0e0743.skydrive.live.com/embedicon.aspx/P%c3%bablico/Apresenta%c3%a7%c3%b5es/NET%20Framework%204.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Abraços!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7393429" width="1" height="1"&gt;</content><author><name>anobre</name><uri>http://weblogs.asp.net/members/anobre.aspx</uri></author></entry></feed>
