<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>André Nobre</title><link>http://weblogs.asp.net/andrenobre/default.aspx</link><description>ASP.NET MVC, Architecture, Debugging, Commerce Server, WinDBG...</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Série de Posts sobre MongoDB</title><link>http://weblogs.asp.net/andrenobre/archive/2012/05/08/s-233-rie-de-posts-sobre-mongodb.aspx</link><pubDate>Tue, 08 May 2012 02:59:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:8450659</guid><dc:creator>anobre</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/rsscomments.aspx?PostID=8450659</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/commentapi.aspx?PostID=8450659</wfw:comment><comments>http://weblogs.asp.net/andrenobre/archive/2012/05/08/s-233-rie-de-posts-sobre-mongodb.aspx#comments</comments><description>Pessoal,
estou escrevendo uma série de posts sobre MongoDB, no meu novo blog em http://anobre.net/.

Leia, participe, visite!

Abraços!&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=8450659" width="1" height="1"&gt;</description></item><item><title>O Grande Problema da Produtividade</title><link>http://weblogs.asp.net/andrenobre/archive/2012/05/03/o-grande-problema-da-produtividade.aspx</link><pubDate>Fri, 04 May 2012 01:06:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:8436697</guid><dc:creator>anobre</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/rsscomments.aspx?PostID=8436697</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/commentapi.aspx?PostID=8436697</wfw:comment><comments>http://weblogs.asp.net/andrenobre/archive/2012/05/03/o-grande-problema-da-produtividade.aspx#comments</comments><description>http://anobre.net/?p=64&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=8436697" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Produtividade/default.aspx">Produtividade</category></item><item><title>Utilizando MongoDB com .NET em E-Commerce</title><link>http://weblogs.asp.net/andrenobre/archive/2012/04/29/utilizando-mongodb-com-net-em-e-commerce.aspx</link><pubDate>Sun, 29 Apr 2012 22:59:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:8421530</guid><dc:creator>anobre</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/rsscomments.aspx?PostID=8421530</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/commentapi.aspx?PostID=8421530</wfw:comment><comments>http://weblogs.asp.net/andrenobre/archive/2012/04/29/utilizando-mongodb-com-net-em-e-commerce.aspx#comments</comments><description>&lt;p&gt;Estamos trabalhando em um projeto, aqui na &lt;a href="http://www.nbr.com.br"&gt;NBR&lt;/a&gt;, para criar uma plataforma de comércio eletrônico. Um dos pré-requisitos essenciais é a performance de toda a aplicação, mas principalmente das vitrines e detalhes de produtos, que normalmente contam com uma exigência maior de performance dado o alto número de visitantes. &lt;/p&gt;  &lt;p&gt;Por outras experiências sabemos que o catálogo, com toda sua complexidade de descontos, promoções, campanhas e outros fatores, torna qualquer consulta algo crítico quando inserido em um cenário de stress. Sabendo disto, tentamos criar neste projeto algo baseado em uma estrutura de dados que favorecesse a estrutura real das características do catálogo, já formatado de uma maneira mais direta para o nosso e-commerce.&lt;/p&gt;  &lt;p&gt;Para isto, realizamos algumas pesquisas e benchmarking sobre algum produto baseado em NoSQL, pois é exatamente esta abordagem que precisamos.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Como chegamos à conclusão de utilizar NoSQL?&lt;/strong&gt;     &lt;br /&gt;No início de todo projeto aqui na empresa, que exige certa preocupação com volume de acesso e/ou uma estrutura que diferente do modelo tradicional relacional, temos uma tarefa de definição da estratégia de persistência de dados. Assumimos que não são todos os casos que base de dados relacional é o ideal. Para isto, discutimos abertamente entre a equipe qual seria o adequado para os pontos em que inicialmente identificamos algo &amp;quot;diferente&amp;quot;. &lt;/p&gt;  &lt;p&gt;Neste projeto, em todas as telas de navegação teremos inúmeros filtros que estarão disponíveis 100% do tempo, e seus resultados serão apresentados através de ajax. Isto nos levantou um ponto importante: por não ter post-back e pela combinação de filtros não ter limitação, enfrentaremos muito mais consultas do que o usual. E consultas com filtros aplicados é igual a busca, e busca exige atenção. Além disto, as páginas de detalhe de produto são muito acessadas. &lt;/p&gt;  &lt;p&gt;Então por que não disponibilizar o catálogo de produtos de uma forma melhor estruturada do que aquelas inúmeras tabelas convencionais, além de fornecer uma performance melhor de consulta? Esta foi a pergunta que fizemos, e estas abaixo são as respostas.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Qual produto a utilizar?&lt;/strong&gt;     &lt;br /&gt;Baseado neste análise inicial, começamos o processo de pesquisa para qual produto utilizar. Decidimos pelo MongoDB, por unir as seguintes características:&lt;/p&gt;  &lt;p&gt;- Schema Free;    &lt;br /&gt;- Possibilidade de replicar os dados em servidores &amp;quot;slaves&amp;quot;;     &lt;br /&gt;- Baseado no modelo key-value;     &lt;br /&gt;- Alta performance nos nossos PoCs realizados;     &lt;br /&gt;- Facilidade de desenvolvimento e deploy (maturidade da ferramenta);     &lt;br /&gt;- Cases apresentados;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Como foram realizados os primeiros testes?&lt;/strong&gt;     &lt;br /&gt;Os primeiros testes realizados para comprovar nossa escolha foram os mais básicos possíveis. Através de um catálogo muito similar, criamos as bases de dados e as consultas mais simples via Entity Framework Code First. Pegamos o mesmo catálogo, criamos a estrutura e inserimos os dados no MongoDB, em uma base específica para este teste. &lt;/p&gt;  &lt;p&gt;A nossa idéia era executar um conjunto de buscas e analisar o tempo de resposta de cada um deles. Em resumo, nos cenários abaixo (que é onde utilizaremos), o MongoDB foi inúmeras vezes mais rápido do que o SQL Server:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Iniciar Conexão, realizar consulta simples e fechar a conexão&lt;/li&gt;    &lt;li&gt;Iniciar conexão, realizar consulta baseada em campo indexado e fechar a conexão&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Observações Importantes:&lt;/strong&gt;     &lt;br /&gt;Alguns de vocês devem estar se perguntando: vocês não vão incluir cache na aplicação? E Akamai?    &lt;br /&gt;    &lt;br /&gt;Normalmente no nosso dia-a-dia incluímos o cache na aplicação, e neste caso não será diferente. Os resultados das consultas no MongoDB serão cacheadas, o que nos trará ainda mais performance. Sobre Akamai, no nosso desenvolvimento não consideramos que temos esta ferramenta, pois nunca se sabe quando o cliente optará por outra ou nenhuma ferramenta neste sentido.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;E o que mais será utilizado na persistência do catálogo?      &lt;br /&gt;&lt;/strong&gt;Independente desta solução baseada no MongoDB, não iremos descartar o SQL Server. O fluxo é o seguinte: as informações de catálogo chegarão por integração até a base SQL Server. Um serviço disponível fará o tratamento das informações, análise promocional, descontos e formas de pagamento e irá inserir as informações no MongoDB, exatamente no formato desejado para trabalharmos as telas de navegação e detalhe de produtos. Todas as alterações de catálogo que possam vir a existir antes da próxima integração será realizada no SQL Server e replicada apenas no registro equivalente no MongoDB.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Como será realizado o deploy?      &lt;br /&gt;&lt;/strong&gt;Como o projeto será publicado em um Web Farm, a nossa preocupação era sobre a replicação das informações do MongoDB através dos servidores. Porém, o MongoDB oferece replicação, onde um servidor pode trabalhar como principal (master) e os dados são replicados para outros servidores (slaves). Veja mais em &lt;a title="http://www.mongodb.org/display/DOCS/Replication" href="http://www.mongodb.org/display/DOCS/Replication"&gt;http://www.mongodb.org/display/DOCS/Replication&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Na nossa experiência real com MongoDB, ficamos extremamente satisfeitos com os resultados. Até o momento, nosso objetivo de aumentar performance e criar um ambiente livre de schemas tem se mostrado atingido. &lt;/p&gt;  &lt;p&gt;Abraços!&lt;/p&gt;

&lt;a href="https://twitter.com/avnobre" class="twitter-follow-button" data-show-count="false" data-lang="pt" data-size="large"&gt;Seguir @avnobre&lt;/a&gt;
&lt;script&gt;!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="http://weblogs.asp.net//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");&lt;/script&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=8421530" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Testes/default.aspx">Testes</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/MongoDB/default.aspx">MongoDB</category></item><item><title>Melhoria de Performance no .NET 4.5: Multicore Just-in-Time (JIT).</title><link>http://weblogs.asp.net/andrenobre/archive/2012/04/05/melhoria-de-performance-no-net-4-5-multicore-just-in-time-jit.aspx</link><pubDate>Thu, 05 Apr 2012 04:08:13 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:8376612</guid><dc:creator>anobre</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/rsscomments.aspx?PostID=8376612</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/commentapi.aspx?PostID=8376612</wfw:comment><comments>http://weblogs.asp.net/andrenobre/archive/2012/04/05/melhoria-de-performance-no-net-4-5-multicore-just-in-time-jit.aspx#comments</comments><description>&lt;p&gt;Olá pessoal!&lt;/p&gt;  &lt;p&gt;Dando uma lida nas &lt;a href="http://msdn.microsoft.com/en-us/magazine/hh882452.aspx"&gt;melhorias de performance da plataforma .NET 4.5&lt;/a&gt;, me deparei com algo extremamente interessante: Multicore Just-in-Time (JIT). &lt;/p&gt;  &lt;p&gt;A teoria é muito simples: por que não utilizar vários núcleos para a compilação JIT? Além disto, será que seria possível compilar os métodos em uma determinada ordem, onde os primeiros fossem aqueles com maior probabilidade de execução?&lt;/p&gt;  &lt;p&gt;Isto parece meio loucura mas é o que o Multicore Just-in-Time (JIT) faz. E o melhor de tudo, de uma forma extremamente simples. &lt;/p&gt;  &lt;p&gt;As aplicações ASP.NET 4.5 já o fazem por default. Em outras ocasiões, basta executar duas linhas de código: uma indicando a pasta onde o arquivo que armazenará o &lt;em&gt;profile&lt;/em&gt; ficará, e a outra para iniciar o procedimento. Este &lt;em&gt;profile&lt;/em&gt; é o arquivo responsável por armazenar a ordem de compilação dos métodos, para que aqueles com maior chance de serem executados mais cedo sejam compilados antes.&lt;/p&gt;  &lt;p&gt;Código para este processo:&lt;/p&gt;    &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;ProfileOptimization.SetProfileRoot(&lt;span class="str"&gt;@&amp;quot;C:\ProfileRoot&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;ProfileOptimization.StartProfile(&lt;span class="str"&gt;&amp;quot;profile&amp;quot;&lt;/span&gt;);&lt;/pre&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;p&gt;Esta otimização na compilação só será notada após a criação do profile. Portanto, na primeira vez nada será percebido. &lt;/p&gt;

&lt;p&gt;Ao final do processo, um arquivo com o nome escolhido (no caso &lt;em&gt;profile&lt;/em&gt;) será criado, na pasta indicada como &lt;em&gt;root&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/andrenobre/image_73B85D78.png"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://weblogs.asp.net/blogs/andrenobre/image_thumb_63AC1F72.png" width="527" height="132" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fica a dica!&lt;/p&gt;

&lt;p&gt;Abraços!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=8376612" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Adeus ano bom – bem vindo, melhor ainda.</title><link>http://weblogs.asp.net/andrenobre/archive/2010/12/31/adeus-ano-bom-bem-vindo-melhor-ainda.aspx</link><pubDate>Fri, 31 Dec 2010 19:10:02 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7671425</guid><dc:creator>anobre</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/rsscomments.aspx?PostID=7671425</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/commentapi.aspx?PostID=7671425</wfw:comment><comments>http://weblogs.asp.net/andrenobre/archive/2010/12/31/adeus-ano-bom-bem-vindo-melhor-ainda.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>E a qualidade por trás?</title><link>http://weblogs.asp.net/andrenobre/archive/2010/12/21/e-a-qualidade-por-tr-225-s.aspx</link><pubDate>Wed, 22 Dec 2010 01:15:37 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7665657</guid><dc:creator>anobre</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/rsscomments.aspx?PostID=7665657</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/commentapi.aspx?PostID=7665657</wfw:comment><comments>http://weblogs.asp.net/andrenobre/archive/2010/12/21/e-a-qualidade-por-tr-225-s.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Qualidade/default.aspx">Qualidade</category></item><item><title>Commerce Server: Portal de Compra Coletiva</title><link>http://weblogs.asp.net/andrenobre/archive/2010/11/18/commerce-server-portal-de-compra-coletiva.aspx</link><pubDate>Fri, 19 Nov 2010 01:16:28 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7646799</guid><dc:creator>anobre</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/rsscomments.aspx?PostID=7646799</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/commentapi.aspx?PostID=7646799</wfw:comment><comments>http://weblogs.asp.net/andrenobre/archive/2010/11/18/commerce-server-portal-de-compra-coletiva.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Commerce+Server/default.aspx">Commerce Server</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Compra+Coletiva/default.aspx">Compra Coletiva</category></item><item><title>Windows 7: C# e Localização</title><link>http://weblogs.asp.net/andrenobre/archive/2010/11/02/windows-7-c-e-localiza-231-227-o.aspx</link><pubDate>Wed, 03 Nov 2010 00:26:58 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7635946</guid><dc:creator>anobre</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/rsscomments.aspx?PostID=7635946</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/commentapi.aspx?PostID=7635946</wfw:comment><comments>http://weblogs.asp.net/andrenobre/archive/2010/11/02/windows-7-c-e-localiza-231-227-o.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>PagSeguro: Guia de Utilização com ASP.NET MVC</title><link>http://weblogs.asp.net/andrenobre/archive/2010/10/23/pagseguro-guia-de-utiliza-231-227-o-com-asp-net-mvc.aspx</link><pubDate>Sat, 23 Oct 2010 18:50:41 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7631552</guid><dc:creator>anobre</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/rsscomments.aspx?PostID=7631552</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/commentapi.aspx?PostID=7631552</wfw:comment><comments>http://weblogs.asp.net/andrenobre/archive/2010/10/23/pagseguro-guia-de-utiliza-231-227-o-com-asp-net-mvc.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/PagSeguro/default.aspx">PagSeguro</category></item><item><title>O poder das redes sociais</title><link>http://weblogs.asp.net/andrenobre/archive/2010/08/30/o-poder-das-redes-sociais.aspx</link><pubDate>Mon, 30 Aug 2010 20:08:33 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7602201</guid><dc:creator>anobre</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/rsscomments.aspx?PostID=7602201</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/commentapi.aspx?PostID=7602201</wfw:comment><comments>http://weblogs.asp.net/andrenobre/archive/2010/08/30/o-poder-das-redes-sociais.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Redes+Sociais/default.aspx">Redes Sociais</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/M_ED00_dia+Social/default.aspx">Mídia Social</category></item><item><title>Agile Brazil 2010: Eu fui!</title><link>http://weblogs.asp.net/andrenobre/archive/2010/06/28/agile-brazil-2010-eu-fui.aspx</link><pubDate>Mon, 28 Jun 2010 03:44:49 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7546225</guid><dc:creator>anobre</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/rsscomments.aspx?PostID=7546225</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/commentapi.aspx?PostID=7546225</wfw:comment><comments>http://weblogs.asp.net/andrenobre/archive/2010/06/28/agile-brazil-2010-eu-fui.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Palestras/default.aspx">Palestras</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Eventos/default.aspx">Eventos</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Agile+Brazil/default.aspx">Agile Brazil</category></item><item><title>O movimento NoSQL</title><link>http://weblogs.asp.net/andrenobre/archive/2010/06/23/o-movimento-nosql.aspx</link><pubDate>Wed, 23 Jun 2010 20:10:35 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7541048</guid><dc:creator>anobre</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/rsscomments.aspx?PostID=7541048</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/commentapi.aspx?PostID=7541048</wfw:comment><comments>http://weblogs.asp.net/andrenobre/archive/2010/06/23/o-movimento-nosql.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Azure/default.aspx">Azure</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Caching no .NET Framework 4.0</title><link>http://weblogs.asp.net/andrenobre/archive/2010/04/14/caching-no-net-framework-4-0.aspx</link><pubDate>Wed, 14 Apr 2010 17:01:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7443984</guid><dc:creator>anobre</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/rsscomments.aspx?PostID=7443984</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/commentapi.aspx?PostID=7443984</wfw:comment><comments>http://weblogs.asp.net/andrenobre/archive/2010/04/14/caching-no-net-framework-4-0.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Evento: Lançamento do Visual Studio 2010 e .NET 4</title><link>http://weblogs.asp.net/andrenobre/archive/2010/04/14/evento-lan-231-amento-do-visual-studio-2010-e-net-4.aspx</link><pubDate>Wed, 14 Apr 2010 16:45:20 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7443959</guid><dc:creator>anobre</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/rsscomments.aspx?PostID=7443959</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/commentapi.aspx?PostID=7443959</wfw:comment><comments>http://weblogs.asp.net/andrenobre/archive/2010/04/14/evento-lan-231-amento-do-visual-studio-2010-e-net-4.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Palestras/default.aspx">Palestras</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Grupos/default.aspx">Grupos</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Eventos/default.aspx">Eventos</category></item><item><title>Maringá Techday</title><link>http://weblogs.asp.net/andrenobre/archive/2010/04/12/maring-225-techday.aspx</link><pubDate>Mon, 12 Apr 2010 12:44:30 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7440706</guid><dc:creator>anobre</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/rsscomments.aspx?PostID=7440706</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrenobre/commentapi.aspx?PostID=7440706</wfw:comment><comments>http://weblogs.asp.net/andrenobre/archive/2010/04/12/maring-225-techday.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/andrenobre/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Treinamentos/default.aspx">Treinamentos</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Palestras/default.aspx">Palestras</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Grupos/default.aspx">Grupos</category><category domain="http://weblogs.asp.net/andrenobre/archive/tags/Eventos/default.aspx">Eventos</category></item></channel></rss>