<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>100loop.com</title><link>http://www.100loop.com/MainFeed.aspx?GroupID=1</link><description>troque uma idéia</description><generator>Subtext Version 2.5.1.20</generator><item><title>Transformações do Web.Config Visual Studio 2010</title><link>http://www.100loop.com/andre-castro/archive/2010/09/09/transformacoes-do-web-config-visual-studio-2010.aspx</link><pubDate>Thu, 09 Sep 2010 12:52:54 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/andre-castro/archive/2010/09/09/transformacoes-do-web-config-visual-studio-2010.aspx</guid><wfw:comment>http://www.100loop.com/andre-castro/comments/245.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/andre-castro/comments/commentRss/245.aspx</wfw:commentRss><comments>http://www.100loop.com/andre-castro/archive/2010/09/09/transformacoes-do-web-config-visual-studio-2010.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://www.100loop.com/andre-castro/services/trackbacks/245.aspx</trackback:ping><source url="http://www.100loop.com/andre-castro/rss.aspx">Transformações do Web.Config Visual Studio 2010</source><description>&lt;p&gt;Olá filhotes! Hoje só para variar irei mostrar uma nova função do Visual Studio 2010, o &lt;em&gt;Web.Config Transformation&lt;/em&gt;. Agora com o Visual Studio 2010 nós podemos ter vários web.configs diferentes para cada publicação. Como assim? Bom… quando você esta no ambiente de desenvolvimento o seu banco é diferente do banco de produção, então quando você publicava o seu projeto você era obrigado á alterar o web.config, não só a string de conexão, mas qualquer outra configuração de segurança, etc… Agora nós podemos “ter” um &lt;em&gt;Web.Config&lt;/em&gt; para cada ambiente. Vamos lá:     &lt;br /&gt;
Já repararam que agora o Web.Config tem a opção de ser expandido (Se estiver usando VB você vai precisar habilitar a opção de “Ver todos os arquivos”).&lt;a href="http://www.100loop.com/images/www_100loop_com/TransformaesdoWeb.Config_8B7D/image.png"&gt;&lt;img width="199" height="57" border="0" src="http://www.100loop.com/images/www_100loop_com/TransformaesdoWeb.Config_8B7D/image_thumb.png" alt="image" title="image" style="border-width: 0px; display: inline;" /&gt;&lt;/a&gt;     &lt;br /&gt;
Por padrão nós temos o Web.Debug e o Web.Release, são os nossos &lt;strong&gt;arquivos de transformação&lt;/strong&gt;.&lt;strong&gt; &lt;/strong&gt;Um arquivo de transformação serve para informar quais atributos iremos alterar/adicionar/remover no nosso &lt;em&gt;Web.Config &lt;/em&gt;original, então na verdade nós só temos um &lt;em&gt;Web.Config&lt;/em&gt; que é transformado automaticamente para cada ambiente. Mas&lt;strong&gt; os arquivos de transformação devem ser arquivos XML válidos!&lt;/strong&gt; Dentro dos arquivos por padrão há comentários com exemplos de como substituir os nós do &lt;em&gt;Web.Config&lt;/em&gt; original, e também terá essa tag:&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;?xml version="1.0"&amp;gt; &amp;lt;configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"&amp;gt; &amp;lt;/configuration&amp;gt;&lt;/pre&gt;
&lt;p&gt;Mas o que é isso? Bom, para fazer as transformações no nosso Web.Config nós precisamos usar os atributos do namespace &lt;strong&gt;XML-Document-Transform&lt;/strong&gt;, então &lt;strong&gt;todos&lt;/strong&gt; os arquivos de transformação devem ter esse namespace registrado. O namespace &lt;strong&gt;XML-Document-Transform &lt;/strong&gt;é composto por dois atributos: &lt;strong&gt;&lt;em&gt;Locator&lt;/em&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;em&gt;Transform&lt;/em&gt;. &lt;/strong&gt;O &lt;strong&gt;&lt;em&gt;Locator&lt;/em&gt;&lt;/strong&gt; é usado para localizar o elemento que você vai modificar e o &lt;strong&gt;&lt;em&gt;Transform&lt;/em&gt;&lt;/strong&gt; determina a ação que acontecerá ao elemento ( Excluir, Alterar, Adicionar ). Deixe eu exemplificar isso, vamos dizer que eu tenho essa connection string no meu Web.Config:&lt;/p&gt;
&lt;pre class="brush: xml"&gt; &lt;connectionstrings&gt;  &lt;add providername="System.Data.SqlClient" connectionstring="data source=ServidorDeTeste;Initial Catalog=DbDesenvolvimento;Integrated Security=SSPI;" name="dbPortal"&gt;  &lt;/add&gt;&lt;/connectionstrings&gt;&lt;/pre&gt;
&lt;p&gt;Mas quando formos publicar ele para o cliente iremos usar outra &lt;strong&gt;string de conexão&lt;/strong&gt;, já que acessaremos o banco de produção. Para isso nós iremos precisar adicionar essa nova string de conexão no nosso arquivo de transformação (nesse caso, o &lt;strong&gt;web.Release&lt;/strong&gt; ):&lt;/p&gt;
&lt;pre class="brush: xml"&gt; &lt;connectionstrings&gt;  &lt;add xdt:locator="Match(name)" xdt:transform="Replace" providername="System.Data.SqlClient" connectionstring="data source=ServidorDeProducao;Initial Catalog=DbProducao;Integrated Security=SSPI;" name="dbPortal"&gt;  &lt;/add&gt;&lt;/connectionstrings&gt;&lt;/pre&gt;
&lt;p&gt;Perceberam que adicionei o &lt;strong&gt;&lt;em&gt;Locator&lt;/em&gt;&lt;/strong&gt; e o &lt;strong&gt;&lt;em&gt;Transform &lt;/em&gt;&lt;/strong&gt;?&lt;strong&gt; &lt;/strong&gt;Então, agora vamos ver o porquê dos valores: O &lt;strong&gt;&lt;em&gt;Transform&lt;/em&gt;&lt;/strong&gt; &lt;strong&gt;Replace &lt;/strong&gt;significa que iremos substituir &lt;strong&gt;todo&lt;/strong&gt; &lt;strong&gt;o nó&lt;/strong&gt;, e o &lt;strong&gt;&lt;em&gt;Locator&lt;/em&gt;&lt;/strong&gt; &lt;strong&gt;Match(name)&lt;/strong&gt; mostra que ele ira procurar pelos nós (Dentro de Configuration / ConnectionStrings / Add) cujo parâmetro (nesse caso o &lt;strong&gt;name&lt;/strong&gt;) possui o mesmo valor. Com essa linha nós substituiremos a &lt;strong&gt;string de conexão&lt;/strong&gt; &lt;strong&gt;DbPortal&lt;/strong&gt; do Web.Config pela do Release.     &lt;br /&gt;
Existem outros &lt;strong&gt;Locators&lt;/strong&gt; e &lt;strong&gt;Transforms&lt;/strong&gt;, vamos ver o que cada um faz:     &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Locators      &lt;br /&gt;
&lt;br /&gt;
Match(&lt;/strong&gt;[args]&lt;strong&gt;) – &lt;/strong&gt;Como dito antes, procura elemento(s) com o mesmo valor do argumento, sendo que você pode passar mais argumentos separando por virgula.     &lt;br /&gt;
&lt;/p&gt;
&lt;pre class="brush: xml;"&gt; &lt;add xdt:locator="Match(name,providerName)" xdt:transform="Replace" providername="System.Data.SqlClient" connectionstring="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" name="MyDB"&gt; &lt;/add&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Condition(&lt;/strong&gt;[arg]&lt;strong&gt;)  - &lt;/strong&gt;A condição será transformada em uma expressão XPath e será associada ao elemento. Acha todos os nós que “batem” com as condições. No nosso exemplo ele substituirá a connection string TempDB &lt;strong&gt;que também&lt;/strong&gt; possui como providerName &lt;em&gt;System.Data.SqlClient&lt;/em&gt; &lt;/p&gt;
&lt;pre class="brush: xml;"&gt;  &lt;connectionstrings&gt;     &lt;add xdt:locator="Condition(@name='TempDB'&amp;#xD;&amp;#xA;       and @providerName='System.Data.SqlClient')" xdt:transform="Replace" providername="System.Data.SqlClient" connectionstring="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" name="ReleaseDB"&gt;   &lt;/add&gt;  &lt;/connectionstrings&gt;&lt;/pre&gt;
&lt;br /&gt;
O XPath real fica sendo: configuration/connectionStrings[@name='TempDB' or @providerName='System.Data.SqlClient']
&lt;p&gt;&lt;strong&gt;XPath(&lt;/strong&gt;[XPath expression]&lt;strong&gt;) - &lt;/strong&gt;Ao contrario do &lt;strong&gt;Condition&lt;/strong&gt; você tem que passar toda a expressão XPath. No nosso exemplo ele &lt;strong&gt;removerá&lt;/strong&gt; a connection string &lt;em&gt;ReleaseDB&lt;/em&gt; &lt;strong&gt;e&lt;/strong&gt; todas com o Provider igual à &lt;em&gt;System.Data.SqlClient&lt;/em&gt; &lt;/p&gt;
&lt;pre class="brush: xml;"&gt;&lt;connectionstrings&gt; &lt;add xdt:locator="configuration/connectionStrings[@name='ReleaseDB' or @providerName='System.Data.SqlClient']" xdt:transform="RemoveAll"&gt; &lt;/add&gt;&lt;/connectionstrings&gt;&lt;/pre&gt;
&lt;p&gt;Como visto no ultimo exemplo, há (vários) outros &lt;strong&gt;transforms&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Replace – &lt;/strong&gt;Substitui a &lt;strong&gt;primeira &lt;/strong&gt;ocorrência do(s) nó(s) encontrados completamente, juntamente com seus filhos.&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;&lt;globalization culture="en-US" uiculture="en-US" requestencoding="ISO-8859-1" responseencoding="ISO-8859-1" fileencoding="ISO-8859-1" xdt:transform="Replace" /&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Remove&lt;/strong&gt; – Remove a &lt;strong&gt;primeira &lt;/strong&gt;ocorrência do(s) nó(s) encontrados, juntamente com seus filhos.&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;&lt;globalization culture="en-US" uiculture="en-US" requestencoding="ISO-8859-1" responseencoding="ISO-8859-1" fileencoding="ISO-8859-1" xdt:locator="Condition(@culture='es-MX')" xdt:transform="Replace" /&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;RemoveAll – &lt;/strong&gt;Remove &lt;strong&gt;todas&lt;/strong&gt; as ocorrências do(s) nó(s) encontrados, junto com os filhos.&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;&lt;globalization xdt:transform="RemoveAll" /&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Insert – &lt;/strong&gt;Insere o nó como ultimo item da configuração. &lt;/p&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;globalization culture="jp-JP" uiCulture="jp-JP" requestEncoding="ISO-8859-1" responseEncoding="ISO-8859-1" fileEncoding="ISO-8859-1"  xdt:Transform="Insert" /&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;InsertAfter(XPath)&lt;/strong&gt; – Insere o nó logo após o elemento definido pelo XPath. Ex: Vamos inserir uma chave &lt;em&gt;“EmailCopia”&lt;/em&gt; no AppSettings logo após o “&lt;em&gt;EmailUsuario”&lt;/em&gt;&lt;/p&gt;
&lt;pre class="brush: xml;"&gt; &amp;lt;appSettings&amp;gt;     &amp;lt;add key="EmailCopia" value="homologacao@100loop.com.br" xdt:Transform="InsertAfter(/configuration/appSettings/add[@key='EmailUsuario'])"/&amp;gt;   &amp;lt;/appSettings&amp;gt;  &lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;InsertBefore(XPath) – &lt;/strong&gt;Insere o nó antes do nó especificado no XPath.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SetAttributes – &lt;/strong&gt;Substitui os atributos do nó em vez do nó inteiro. Pode se passar mais de um atributo separando-o por virgula.&lt;/p&gt;
&lt;pre class="brush: xml;"&gt; &amp;lt;connectionStrings&amp;gt;     &amp;lt;add name="MyDB"       connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"         providerName="System.Data.SqlClient"       xdt:Transform="SetAttributes(connectionString)" xdt:Locator="Match(name)"/&amp;gt;   &amp;lt;/connectionStrings&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;RemoveAttributes – &lt;/strong&gt;Remove um ou mais atributos de um nó.&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;&amp;lt;compilation xdt:Transform="RemoveAttributes(debug,batch)" /&amp;gt; &lt;/pre&gt;
&lt;p&gt;   &lt;br /&gt;
Pronto. Basta você colocar cada nó que você deseja substituir no arquivo de transformação usando o &lt;strong&gt;Transform &lt;/strong&gt;e&lt;strong&gt; Locator&lt;/strong&gt; e seu Web.Config estará configurado para cada ambiente. Se você quiser também você pode copiar todo o Web.Config para o arquivo de transformação, fazendo a modificação no que você queira, e adicionando o &lt;strong&gt;Transform=&lt;/strong&gt;"Replace" no primeiro nó. Com isso você substitui todo o web.config por outro. Nesse caso não é necessário o Locator, já que substituirá todo web.config.  &lt;br /&gt;
E claro, mas como o Visual Studio sabe em qual ambiente nós queremos publicar? Basta irmos no combo &lt;em&gt;Solution Configurations&lt;/em&gt; na toolbar e alterar o tipo de ambiente em que iremos publicar.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/TransformaesdoWeb.Config_8B7D/image_3.png"&gt;&lt;img width="377" height="76" border="0" src="http://www.100loop.com/images/www_100loop_com/TransformaesdoWeb.Config_8B7D/image_thumb_3.png" alt="image" title="image" style="border-width: 0px; display: inline;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Há a possibilidade também de criar novas configurações, para isso basta ir em configuration manager, e em &lt;em&gt;Active solution configuration&lt;/em&gt; selecionar &lt;em&gt;&amp;lt;New...&amp;gt;. &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/TransformaesdoWeb.Config_8B7D/image_4.png"&gt;&lt;img width="504" height="317" border="0" src="http://www.100loop.com/images/www_100loop_com/TransformaesdoWeb.Config_8B7D/image_thumb_4.png" alt="image" title="image" style="border: 0px none; display: inline;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/TransformaesdoWeb.Config_8B7D/image_5.png"&gt;&lt;img width="440" height="235" border="0" src="http://www.100loop.com/images/www_100loop_com/TransformaesdoWeb.Config_8B7D/image_thumb_5.png" alt="image" title="image" style="border: 0px none; display: inline;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;E adicione o nome do seu novo ambiente, se quiser pode copiar as configurações de outro ambiente para esse novo. Depois de criar um novo ambiente, basta clicar com o botão direito sobre o &lt;strong&gt;Web.Config &lt;/strong&gt;e escolher &lt;em&gt;Add Config Transforms.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/TransformaesdoWeb.Config_8B7D/image_6.png"&gt;&lt;img width="411" height="484" border="0" src="http://www.100loop.com/images/www_100loop_com/TransformaesdoWeb.Config_8B7D/image_thumb_6.png" alt="image" title="image" style="border: 0px none; display: inline;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Será criado um arquivo de transformação para cada configuração nova.&lt;a href="http://www.100loop.com/images/www_100loop_com/TransformaesdoWeb.Config_8B7D/image_7.png"&gt;&lt;img width="186" height="77" border="0" src="http://www.100loop.com/images/www_100loop_com/TransformaesdoWeb.Config_8B7D/image_thumb_7.png" alt="image" title="image" style="border: 0px none; display: inline;" /&gt;&lt;/a&gt;     &lt;br /&gt;
&lt;br /&gt;
Eu sei que o grande @ivanpaulovich ira falar um pouco sobre esse assunto também na palestra dele no Tech Ed.     &lt;br /&gt;
Espero que tenham gostado! Ate mais!&lt;/p&gt;
&lt;p&gt;Fontes: &lt;a href="http://msdn.microsoft.com/en-us/library/dd465326.aspx" title="http://msdn.microsoft.com/en-us/library/dd465326.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd465326.aspx&lt;/a&gt;     &lt;br /&gt;
&lt;a href="http://blogs.msdn.com/b/webdevtools/archive/2009/05/04/web-deployment-web-config-transformation.aspx" title="http://blogs.msdn.com/b/webdevtools/archive/2009/05/04/web-deployment-web-config-transformation.aspx"&gt;http://blogs.msdn.com/b/webdevtools/archive/2009/05/04/web-deployment-web-config-transformation.aspx&lt;/a&gt;     &lt;br /&gt;
Introdução ao XPath: &lt;a href="http://www.microsoft.com/brasil/msdn/Tecnologias/visualc/XPath.mspx"&gt;http://www.microsoft.com/brasil/msdn/Tecnologias/visualc/XPath.mspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.100loop.com/andre-castro/aggbug/245.aspx" width="1" height="1" /&gt;</description><dc:creator>André Castro</dc:creator></item><item><title>Implementando aplicações extensíveis com ASP.NET MVC 2</title><link>http://www.100loop.com/ivan-paulovich/archive/2010/09/06/implementando-aplicacoes-extensiveis-com-asp-net-mvc-2.aspx</link><pubDate>Mon, 06 Sep 2010 17:03:47 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/ivan-paulovich/archive/2010/09/06/implementando-aplicacoes-extensiveis-com-asp-net-mvc-2.aspx</guid><wfw:comment>http://www.100loop.com/ivan-paulovich/comments/243.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/ivan-paulovich/comments/commentRss/243.aspx</wfw:commentRss><comments>http://www.100loop.com/ivan-paulovich/archive/2010/09/06/implementando-aplicacoes-extensiveis-com-asp-net-mvc-2.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://www.100loop.com/ivan-paulovich/services/trackbacks/243.aspx</trackback:ping><source url="http://www.100loop.com/ivan-paulovich/rss.aspx">Implementando aplicações extensíveis com ASP.NET MVC 2</source><description>&lt;p&gt;&lt;a href="http://www.teched.com.br/2010/Registration/login.aspx"&gt;&lt;img width="203" height="190" border="0" align="right" src="http://www.100loop.com/images/www_100loop_com/sdasdasd_F27A/teched.png" alt="teched" title="teched" style="border-width: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px;" /&gt;&lt;/a&gt;A Microsoft liberou hoje as inscrições para a palestra&lt;em&gt; &lt;/em&gt;&lt;a href="http://www.teched.com.br/2010/Registration/login.aspx"&gt;WEB309 - Implementando aplicações extensíveis com ASP.NET MVC 2&lt;/a&gt; no &lt;a href="http://www.teched.com.br/" title="Tech-Ed Brasil 2010"&gt;Tech-Ed Brasil 2010&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nessa palestra você irá descobrir o mundo do desenvolvimento de aplicações extensíveis com ASP.NET MVC.&lt;/p&gt;
&lt;p&gt;Partimos do pré-requisito que os pilares do MVC já estão consolidados e fazemos demonstrações que abrangem MVC Areas, Url Routing, implementações de VirtualPathProvider e especialmente ViewEngines. &lt;/p&gt;
&lt;p&gt;Voce sairá dessa palestra com o conhecimento prático em como extender sua Web Application através de plugins.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Os conceitos fundamentais dessa palestra me acompanham pelos últimos meses e essa será uma ótima oportunidade de dividir com você o que eu aprendi.&lt;/p&gt;
&lt;p&gt;Recomendo também que você assista a palestra &lt;em&gt;WEB201 - ASP.NET MVC para desenvolvedores Web Forms&lt;/em&gt; para chegar preparado e as paletra &lt;em&gt;WEB302 - ASP.NET MVC 2: O que há de Novo?&lt;/em&gt; para ficar ligado nas novidades.&lt;/p&gt;
&lt;p&gt;Entao não perca tempo e &lt;a href="http://www.teched.com.br/2010/Registration/login.aspx" title="Ajuste sua Agenda"&gt;ajuste sua agenda&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://www.100loop.com/ivan-paulovich/aggbug/243.aspx" width="1" height="1" /&gt;</description><dc:creator>Ivan Paulovich</dc:creator></item><item><title>Asp .Net MVC 3 - Preview 1</title><link>http://www.100loop.com/luciano-lima/archive/2010/09/06/Asp-Net-MVC-3-Preview-1.aspx</link><pubDate>Mon, 06 Sep 2010 12:49:34 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/luciano-lima/archive/2010/09/06/Asp-Net-MVC-3-Preview-1.aspx</guid><wfw:comment>http://www.100loop.com/luciano-lima/comments/242.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/luciano-lima/comments/commentRss/242.aspx</wfw:commentRss><comments>http://www.100loop.com/luciano-lima/archive/2010/09/06/Asp-Net-MVC-3-Preview-1.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://www.100loop.com/luciano-lima/services/trackbacks/242.aspx</trackback:ping><source url="http://www.100loop.com/luciano-lima/rss.aspx">Asp .Net MVC 3 - Preview 1</source><description>&lt;p&gt;Fala galera tudo tranks?&lt;/p&gt;
&lt;p&gt;Antes de darmos continuidade aos posts sobre WCF, gostaria de apresentar a vocês o mais novo preview do Asp Net MVC 3.&lt;/p&gt;
&lt;p&gt;Para que vocês possam acompanhar o post da melhor forma possível, abaixo segue o link para download do primeiro preview, &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=cb42f741-8fb1-4f43-a5fa-812096f8d1e8&amp;amp;displaylang=en"&gt;clique aqui&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;O Asp .NET MVC 3 será compatível com a sua versão anterior, o Asp .NET MVC 2, contudo, isso não significa que será fácil atualizar os projetos que você está escrevendo com o MVC 2 para o MVC 3 quando eles lançarem a versão final. &lt;/p&gt;
&lt;p&gt;As funcionalidades do Asp .Net MVC 3 tem como base as funcionalidades do Asp .Net MVC 1 e 2, ou seja, todo seu conhecimento adquirido em sites e livros não serão perdidos, isso porque, as funcionalidades do Asp .Net MVC 1 e 2 não se tornaram obsoletas.&lt;/p&gt;
&lt;p&gt;Ok Luciano, mas a pergunta de todos é: “Posso instalar o Asp .Net MVC 3 junto com o ASP.NET MVC 2?”, a resposta é sim, você pode, inclusive a versão preview, sem que esta impacte projetos existentes da versão do Asp .Net MVC 2 que você esteja trabalhando, eles continuarão a usar o Asp .Net MVC 2 a menos que você modifique os projetos para que estes passem a usar o Asp .Net MVC 3. &lt;/p&gt;
&lt;p&gt;Quando você instalar a versão "Preview 1", você terá um novo conjunto de templates de projeto para o Asp.Net MVC 3 que aparecerão na janela de diálogo de Novo Projeto do Visual Studio 2010. &lt;/p&gt;
&lt;p&gt;Vamos ver algumas das novas funcionalidades e capacidades do Asp .Net MVC 3. Ressalvo que tudo que fizermos aqui são funcionalidades da versão 3 do Asp Net MVC, isso não quer dizer que novas funcionalidades não possam sair em versões futuras.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font color="#333333"&gt;View&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;O Asp.Net MVC 3 "Preview 1" inclui um conjunto de melhorias específicas para a View.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;&lt;em&gt;&lt;font color="#666666"&gt;&lt;u&gt;Janela de Diálogo&lt;/u&gt;&lt;/font&gt;&lt;/em&gt;         &lt;br /&gt;
&lt;/font&gt;&lt;/strong&gt;Foi criada uma nova janela de diálogo "Add-&amp;gt;View", que torna mais fácil sua escolha quanto a sintaxe a ser utilizada. Ela permite que você selecione qualquer um dos motores de exibição disponíveis que estejam instalados na sua máquina, o que lhe dá a habilidade de usar qualquer abordagem de modelagem de visão que pareça mais natural para você.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/Asp.NetMC_D4D3/mvc3_01.jpg"&gt;&lt;img width="446" height="443" border="0" src="http://www.100loop.com/images/www_100loop_com/Asp.NetMC_D4D3/mvc3_01_thumb.jpg" alt="mvc3_01" title="mvc3_01" style="background-image: none; border-width: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px;" /&gt;&lt;/a&gt;     &lt;br /&gt;
Figura 01 – Nova janela Add View&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;u&gt;Nova Engine Razor          &lt;br /&gt;
&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt;Não irei entrar em detalhes sobre a Engine Razor, isso porque daria outro post, então, sugiro que vocês deem uma lida no post do Scott Guthrie sobre o &lt;a target="_blank" href="http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx"&gt;Razor&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#333333"&gt;&lt;strong&gt;Controller&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Assim como para a View, o Controller também ganhou algumas novidades:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;u&gt;&lt;strong&gt;Filtros Globais          &lt;br /&gt;
&lt;/strong&gt;&lt;/u&gt;&lt;/em&gt;O Asp.Net MVC 3 suporta a capacidade de aplicar de forma declarativa lógica "contínua" usando um mecanismo chamado de "filtros". Você pode especificar filtros nos controladores e métodos de ação hoje usando uma sintaxe de atributo conforma a listagem 1.&lt;/p&gt;
&lt;p&gt;Listagem 01 – Filtros&lt;/p&gt;
&lt;pre class="brush: csharp;"&gt;[HandleError]&lt;br /&gt;[LoaderOptimization(128)]&lt;br /&gt;public ActionResult Index()&lt;br /&gt;{&lt;br /&gt;    ViewModel.Message = "Aplicação Asp.Net MVC 3";&lt;br /&gt;&lt;br /&gt;    return View();&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Muitas das vezes precisamos aplicar filtros a todos os controladores de uma aplicação, com o Asp .Net MVC 3, foi adicionado um método chamado RegisterGlobalFilters que irá adicionar os filtros à coleção &lt;em&gt;GlobalFilters.&lt;/em&gt; Basta fazer a chamada no Application_Start() do seu Global.asax.&lt;/p&gt;
&lt;p&gt;Listagem 02 – Filtros Globais&lt;/p&gt;
&lt;pre class="brush: csharp;"&gt;public static void RegisterGlobalFilters( GlobalFilterCollection filters )&lt;br /&gt;{&lt;br /&gt;    filters.Add( new HandleErrorAttribute() );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected void Application_Start()&lt;br /&gt;{&lt;br /&gt;    AreaRegistration.RegisterAllAreas();&lt;br /&gt;&lt;br /&gt;    RegisterGlobalFilters( GlobalFilters.Filters );&lt;br /&gt;    RegisterRoutes( RouteTable.Routes );&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;O Asp .Net MVC 3 é flexível no que diz respeito a filtros, de modo que você pode configurar um filtro global que será aplicado condicionalmente apenas se forem respeitadas determinadas condições. Por exemplo, se a depuração estiver habilitada; se uma requisição usar um verbo http dentre outras. Os filtros também podem ser resolvidos a partir de um Conteiner.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;u&gt;ViewModel Dinâmico&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt;     &lt;br /&gt;
Os Controladores do Asp.Net MVC suportam uma propriedade "ViewData" que permite a você transmitir dados para uma View usando uma coleção (Dictionary) como na listagem 03.&lt;/p&gt;
&lt;p&gt;Listagem 03&lt;/p&gt;
&lt;pre class="brush: csharp;"&gt;ViewModel["Message"] = "Aplicação Asp.Net MVC 3";&lt;br /&gt; &lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;Já na versão 3 do MVC, foi adotada a propriedade dinâmica, dynamic, ela permite que você use o novo    &lt;br /&gt;
suporte à linguagem dinâmica tanto do VB quanto do C# para passar itens da ViewData usando uma sintaxe um pouco mais limpa do que aquela utilizada com a API de dicionário atual. Observe a figura 2, a propriedade Message só será conhecida em tempo de execução.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/Asp.NetMC_D4D3/mvc3_02.jpg"&gt;&lt;img width="367" height="139" border="0" src="http://www.100loop.com/images/www_100loop_com/Asp.NetMC_D4D3/mvc3_02_thumb.jpg" alt="mvc3_02" title="mvc3_02" style="background-image: none; border-width: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Figura 02 – Dinamismo&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font color="#333333"&gt;ActionResult&lt;/font&gt;&lt;/strong&gt;     &lt;br /&gt;
As novidades não param por ai! O Action Result também ganhou novas funcionalidades:&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;strong&gt;&lt;em&gt;HttpNotFoundResult&lt;/em&gt;&lt;/strong&gt;&lt;/u&gt; &lt;/p&gt;
&lt;p&gt;A nova classe &lt;em&gt;HttpNotFoundResult&lt;/em&gt; é usada para indicar que um recurso solicitado pela URL atual não foi encontrado. Ela retorna um código de status HTTP 404 para o cliente que realizou a chamada. Opcionalmente, você pode usar o novo método de ajuda &lt;em&gt;HttpNotFound()&lt;/em&gt; no controlador para retornar uma instância desse tipo de resultado de ação, conforme a listagem 4. &lt;/p&gt;
&lt;p&gt;Listagem 04&lt;/p&gt;
&lt;pre class="brush: csharp;"&gt;public ActionResult RecuperaProduto(int codProduto)&lt;br /&gt;{&lt;br /&gt;    var prod = new Produto.Find(codProduto);&lt;br /&gt;&lt;br /&gt;    if ( prod == null )&lt;br /&gt;        return HttpNotFound();&lt;br /&gt;&lt;br /&gt;    return View();&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;&lt;u&gt;&lt;strong&gt;&lt;em&gt;Redirecionamentos Permanentes&lt;/em&gt;&lt;/strong&gt;&lt;/u&gt; &lt;/p&gt;
&lt;p&gt;A classe &lt;em&gt;HttpRedirectResult&lt;/em&gt; tem uma nova propriedade "Permanent" do tipo booleano que é usada para indicar se um redirecionamento permanente deve ocorrer. Um redirecionamento permanente usa o código de status HTTP 301. Em conjunto com esta mudança, a classe Controller tem agora três novos métodos para realizar redirecionamentos permanentes: &lt;em&gt;RedirectPermanent(), RedirectToRoutePermanent(),&lt;/em&gt; e &lt;em&gt;RedirectToActionPermanent().&lt;/em&gt; &lt;/p&gt;
&lt;p&gt;Esses métodos retornam uma instância do tipo HttpRedirectResult com a propriedade Permanent definida com true. &lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;strong&gt;&lt;em&gt;HttpStatusCodeResult&lt;/em&gt;&lt;/strong&gt;&lt;/u&gt; &lt;/p&gt;
&lt;p&gt;A nova classe &lt;em&gt;HttpStatusCodeResult&lt;/em&gt; pode ser usada para definir um código de status e descrição de resposta de forma explícita.   &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font color="#333333"&gt;Ajax e Javascript        &lt;br /&gt;
&lt;/font&gt;&lt;/strong&gt;Dando continuidade às novidades, o Asp.Net MVC 3 inclui suporte para JSON, o que permite que os métodos recebam dados codificados no formato JSON podendo assim, vinculá-los como parâmetros dos métodos. &lt;/p&gt;
&lt;p&gt;Observe o código da listagem 5, ele define um manipulador de eventos "save" que será chamado quando um botão salvar for clicado no lado cliente. O código dentro do manipulador de eventos irá criar um objeto "produto" no código JavaScript com dois campos, cujos valores são obtidos a partir de elementos de entrada HTML. Em seguida, ele usa o método .ajax() da jQuery para postar (POST) uma requisição baseada em JSON que contém o produto para uma URL &lt;em&gt;/Store/UpdateProduct&lt;/em&gt; no servidor. &lt;/p&gt;
&lt;p&gt;Listagem 05 – método Ajax&lt;/p&gt;
&lt;pre class="brush: js;"&gt;$("#save").click(function () {&lt;br /&gt;    var prod = {&lt;br /&gt;        NomeProduto: $("#ProdName").val(),&lt;br /&gt;        Valor: $("#value").val()&lt;br /&gt;    };&lt;br /&gt;&lt;br /&gt;    $.ajax({&lt;br /&gt;        url: "/Store/UpdateProduct",&lt;br /&gt;        type: "Post",&lt;br /&gt;        data: JSON.stringify(prod),&lt;br /&gt;        dataType: "json",&lt;br /&gt;        contentType: "application/json; charset=utf-8",&lt;br /&gt;        sucess: function () { $("message").html("Produto atualizado").fadeIn() },&lt;br /&gt;        error: function () { $("message").html("Erro ao atualizar o Produto").fadeIn() }&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;    return false;&lt;br /&gt;});&lt;/pre&gt;
&lt;p&gt;No lado servidor você terá algo como na listagem 6.&lt;/p&gt;
&lt;p&gt;Listagem 06 – Atualizar Produto&lt;/p&gt;
&lt;pre class="brush: csharp;"&gt;public ActionResult UpdateProduct(Produto produto)&lt;br /&gt;{&lt;br /&gt;    //Implementar a lógica para atualização de um produto&lt;br /&gt;    return null;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h5&gt;&lt;font color="#333333"&gt;Validação do Modelo&lt;/font&gt;&lt;/h5&gt;
&lt;p&gt;No Asp.Net MVC 2, houveram algumas melhorias no que diz respeito à validação, no Asp .Net MVC 3,  este trabalho foi estendido e ainda por cima eles adicionaram suporte para vários outros novos recursos de validação e os introduziram no namespace &lt;em&gt;System.ComponentModel.DataAnnotations&lt;/em&gt; do .NET 4.&lt;em&gt;  São eles:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt; &lt;em&gt;  &lt;/em&gt;
    &lt;li&gt;&lt;em&gt;Suporte aos novos atributos de metadados – DataAnnotations, tais como DisplayAttribute. &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt; &lt;em&gt;  &lt;/em&gt;
    &lt;li&gt;&lt;em&gt;Suporta as melhorias feitas na classe ValidationAttribute no .NET 4. A classe ValidationAttribute foi melhorada no .NET 4 para suportar uma sobrecarga nova IsValid que fornece mais informações sobre o contexto de validação corrente, permitindo saber por exemplo qual é o objeto que está sendo validado. Isso permite cenários mais ricos, onde você pode validar o valor atual baseando-se em outra propriedade do modelo. &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt; &lt;em&gt;  &lt;/em&gt;
    &lt;li&gt;&lt;em&gt;Suporta à nova interface IValidatableObject introduzida no .NET 4. A interface IValidatableObject permite a execução de validação no nível do modelo, e permite que você forneça mensagens de erro de validação específicas para o estado geral do modelo, ou entre duas propriedades do modelo. &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Na listagem 7, podemos ver como utilizar a a interface IValidatableObject nativa no .NET 4 para implementar um método de validação personalizado em uma classe.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Listagem 07 – Implementando IValidatableObject&lt;/em&gt;&lt;/p&gt;
&lt;pre class="brush: csharp;"&gt;&lt;em&gt;public IEnumerable&amp;lt;ValidationResult&amp;gt; Validate(ValidationContext validationContext)&lt;br /&gt;{&lt;br /&gt;    if ( string.IsNullOrEmpty( NomeProduto ) )&lt;br /&gt;        return (IEnumerable&amp;lt;ValidationResult&amp;gt;) new ValidationResult("Você deve preencher o campo Nome do Produto");&lt;br /&gt;    return null;&lt;br /&gt;}&lt;/em&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Além da interface IValidatableObject, o Asp.Net MVC 3 também apresenta uma nova interface chamada IClientValidatable que permite descobrir em tempo de execução se um validador tem suporte para a validação no lado do cliente. Esta interface foi projetada de modo que possa ser integrada com uma variedade de frameworks de validação. &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;
&lt;h5&gt;&lt;em&gt;&lt;font color="#333333"&gt;Dependency Injection&lt;/font&gt;&lt;/em&gt;&lt;/h5&gt;
&lt;p&gt;&lt;em&gt;O Asp.Net MVC 3 nos dá um melhor suporte para aplicação de injeção de dependência (DI) e integração com Conteiners de injeção de dependência.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Para a versão "Preview 1", foram adicionados suporte para injeção de dependência nos seguintes locais:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt; &lt;em&gt;  &lt;/em&gt;
    &lt;li&gt;&lt;em&gt;Controladores &lt;em&gt;(registro e injeção de fábricas de controladores, injeção de controladores)&lt;/em&gt; &lt;/em&gt;&lt;/li&gt;
    &lt;em&gt;  &lt;/em&gt;
    &lt;li&gt;&lt;em&gt;Visões &lt;em&gt;(registro e injeção de motores de visão, injeção de dependências em páginas de visão)&lt;/em&gt; &lt;/em&gt;&lt;/li&gt;
    &lt;em&gt;  &lt;/em&gt;
    &lt;li&gt;&lt;em&gt;Filtros de Ação &lt;em&gt;(localização e injeção de filtros)&lt;/em&gt; &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Para futuras versões, poderão ser acrescentados os seguintes suporte para injeção de dependência em:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt; &lt;em&gt;  &lt;/em&gt;
    &lt;li&gt;&lt;em&gt;Model Binders - Vinculadores de Modelo &lt;em&gt;(registro &amp;amp; injeção)&lt;/em&gt; &lt;/em&gt;&lt;/li&gt;
    &lt;em&gt;  &lt;/em&gt;
    &lt;li&gt;&lt;em&gt;Value Providers - Provedores de Valor &lt;em&gt;(registro &amp;amp; injeção)&lt;/em&gt; &lt;/em&gt;&lt;/li&gt;
    &lt;em&gt;  &lt;/em&gt;
    &lt;li&gt;&lt;em&gt;Validation Providers - Provedores de Validação &lt;em&gt;(registro &amp;amp; injeção)&lt;/em&gt; &lt;/em&gt;&lt;/li&gt;
    &lt;em&gt;  &lt;/em&gt;
    &lt;li&gt;&lt;em&gt;Model metadata Providers - Provedores de Metadados de Modelo &lt;em&gt;(registro &amp;amp; injeção)&lt;/em&gt; &lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Ufa, finalmente terminei, acho que vocês não viam a hora né!!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Como podem ver, as melhorias são muitas, isso na versão Preview 1 heim!! Imagina o que vem por ai. Espero poder postar a vocês tudo que for novidades no Asp .Net MVC 3.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;É isso ai galera, até o próximo post!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Enjoy!&lt;/em&gt;&lt;/p&gt;&lt;img src="http://www.100loop.com/luciano-lima/aggbug/242.aspx" width="1" height="1" /&gt;</description><dc:creator>Luciano Lima</dc:creator></item><item><title>Aproveite o Community Zone ao máximo</title><link>http://www.100loop.com/ivan-paulovich/archive/2010/08/30/aproveite-o-community-zone-ao-maximo.aspx</link><pubDate>Mon, 30 Aug 2010 22:46:38 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/ivan-paulovich/archive/2010/08/30/aproveite-o-community-zone-ao-maximo.aspx</guid><wfw:comment>http://www.100loop.com/ivan-paulovich/comments/241.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/ivan-paulovich/comments/commentRss/241.aspx</wfw:commentRss><comments>http://www.100loop.com/ivan-paulovich/archive/2010/08/30/aproveite-o-community-zone-ao-maximo.aspx#comment</comments><slash:comments>6</slash:comments><trackback:ping>http://www.100loop.com/ivan-paulovich/services/trackbacks/241.aspx</trackback:ping><source url="http://www.100loop.com/ivan-paulovich/rss.aspx">Aproveite o Community Zone ao máximo</source><description>&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/ec0a819492bd_F5BE/image.png"&gt;&lt;img width="240" height="121" align="right" src="http://www.100loop.com/images/www_100loop_com/ec0a819492bd_F5BE/image_thumb.png" alt="" style="margin: 0px 0px 0px 10px;" /&gt;&lt;/a&gt;O guia a seguir irá ajudar os estreantes de Community Zone a aproveitarem o máximo do evento. O que você irá ler a seguir vem de experiência de 3 CZ’s e tem como único objetivo te ajudar a interagir melhor no evento.&lt;/p&gt;
&lt;h3&gt;O que é o Community Zone?&lt;/h3&gt;
&lt;p&gt;É um evento organizado pela Microsoft onde ela reúne os principais influenciadores do Brasil com os objetivos:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Colher &lt;strong&gt;feedback&lt;/strong&gt; dos participantes. &lt;/li&gt;
    &lt;li&gt;Aumentar a &lt;strong&gt;integração&lt;/strong&gt; entre os grupos e pessoas. &lt;/li&gt;
    &lt;li&gt;Formentar novas iniciativas e (HCLs, Community Launchs, Copa Microsoft de Talentos). &lt;/li&gt;
    &lt;li&gt;Capacitar os líderes de grupos. &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;O que a Microsoft espera de você?&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Que as informações e projetos iniciados no CZ sejam levados aos grupos de usuários. &lt;/li&gt;
    &lt;li&gt;Que você realize mais eventos e da &lt;strong&gt;forma correta&lt;/strong&gt;. &lt;/li&gt;
    &lt;li&gt;Que você faça mais &lt;strong&gt;webcasts&lt;/strong&gt;. &lt;/li&gt;
    &lt;li&gt;Que você participe ainda mais dos &lt;strong&gt;fóruns&lt;/strong&gt;. &lt;/li&gt;
    &lt;li&gt;Que você &lt;em&gt;recupere as energias&lt;/em&gt; e gere ainda mais informações online. &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;É a sua primera vez?&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/ec0a819492bd_F5BE/image_3.png"&gt;&lt;img width="100" height="100" align="left" src="http://www.100loop.com/images/www_100loop_com/ec0a819492bd_F5BE/image_thumb_3.png" alt="" style="margin: 0px 10px 0px 0px;" /&gt;&lt;/a&gt;Se sim. Vamos contextualizar algumas coisas. Provalvemente as pessoas te conhecem pelo seu “perfil online”. Isso mesmo, as pessoas conhecem muito bem o seu avatar e os conteúdos que você disponibiliza na internet mas dificilmente de reconheceriam na rua pessoalmente.&lt;/p&gt;
&lt;p&gt;Logo, você precisa mostrar a sua cara! Não tenha vergonha, não seja “o tímido” do grupo. O evento foi planejado para termos integração, então faça isso ora-bolas.&lt;/p&gt;
&lt;h3&gt;É um veterano de CZ’s?&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/ec0a819492bd_F5BE/image_4.png"&gt;&lt;img width="100" height="85" align="right" src="http://www.100loop.com/images/www_100loop_com/ec0a819492bd_F5BE/image_thumb_4.png" alt="" /&gt;&lt;/a&gt;Você já foi uma ou mais vezes ao Community Zone e já conhece várias pessoas, conhece o time da Microsoft, tem idéia do que esperar do evento. Logo você é a pessoa perfeita para mostrar aos estreantes como você é um cara legal. Passe um pouco da sua experiência de comunidades pra frente. É esse o verdadeiro espírito de comunidade.&lt;/p&gt;
&lt;h3&gt;Evite grupinhos, seja aberto a conhecer outras pessoas&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/ec0a819492bd_F5BE/image_5.png"&gt;&lt;img width="100" height="100" align="left" src="http://www.100loop.com/images/www_100loop_com/ec0a819492bd_F5BE/image_thumb_5.png" alt="" style="margin: 0px 10px 0px 0px;" /&gt;&lt;/a&gt;Com toda certeza você tem aqueles amigos mais próximos e que você com certeza gostaria de conversar muito e eles estarão lá no CZ.&lt;/p&gt;
&lt;p&gt;Mas fique atento a alguns detalhes: provalmente existem dezenas de pessoas com as quais você poderia iniciar um projeto, trocar experiência e se tornar mais um amigo.&lt;/p&gt;
&lt;p&gt;Logo, aumente o seu networking no Community Zone trocando idéias com várias pessoas.&lt;/p&gt;
&lt;h3&gt;Tenha o seu cartão pessoal a mãos&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/ec0a819492bd_F5BE/image_6.png"&gt;&lt;img width="100" height="60" align="right" src="http://www.100loop.com/images/www_100loop_com/ec0a819492bd_F5BE/image_thumb_6.png" alt="" /&gt;&lt;/a&gt;Você irá conhecer outras pessoas com as quais gostaria de manter contato. Então facilite as coisas, tenha a mãos alguns cartãosinhos com seu nome, MSN e twitter. Dessa forma você simplifica a troca de contatos.&lt;/p&gt;
&lt;p&gt;Isso é sério, ao final do evento você irá despedir de várias pessoas e irá querer os contatos dela. &lt;em&gt;Evite o desajeitado&lt;/em&gt; e demorado momento em que você pede para a pessoa so-le-trar o e-mail.&lt;/p&gt;
&lt;h3&gt;Converse com o time da Microsoft&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/AproveiteoCommunityZoneaomximo_73C2/image.png"&gt;&lt;img width="240" height="56" align="right" src="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/AproveiteoCommunityZoneaomximo_73C2/image_thumb.png" title="TechNet MSDN" style="margin: 0px 0px 0px 10px; display: inline;" alt="" /&gt;&lt;/a&gt;O time da Microsoft no Brasil é muito seleto. São profissionais com uma experiência gigatesca com as quais 5min de conversa equivalem a várias horas de palestras e treinamentos.&lt;/p&gt;
&lt;p&gt;Além de serem ótimas pessoas, com as quais é bem divertido tomar um coca-cola e conversar sobre os grupos de usuários, tecnologias, carreira e assuntos diversos. Não perca essa oportunidade que o CZ proporciona.&lt;/p&gt;
&lt;h3&gt;Fale com esses caras&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://twitter.com/ivanpaulovich" title="Ivan Paulovich"&gt;&lt;img width="126" height="118" href="http://twitter.com/ivanpaulovich" src="http://www.100loop.com/images/www_100loop_com/ec0a819492bd_F5BE/image15_thumb.png" alt="Ivan Paulovich" /&gt;&lt;/a&gt; &lt;a href="http://twitter.com/andrepaulovich"&gt;&lt;img width="126" height="118" src="http://www.100loop.com/images/www_100loop_com/ec0a819492bd_F5BE/image_7.png" alt="André Paulovich" /&gt;&lt;/a&gt; &lt;a href="http://twitter.com/alrcastro"&gt;&lt;img width="126" height="118" src="http://www.100loop.com/images/www_100loop_com/ec0a819492bd_F5BE/image_8.png" alt="André Castro" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://twitter.com/ivanpaulovich"&gt;@ivanpaulovich&lt;/a&gt;, &lt;a href="http://twitter.com/andrepaulovich"&gt;@andrepaulovich&lt;/a&gt; e &lt;a href="http://twitter.com/alrcastro"&gt;@alrcastro&lt;/a&gt;. Nós trabalhamos juntos aqui em Belo Horizonte e somos pessoas legais ;-)&lt;/p&gt;
&lt;h3&gt;Divirta-se&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/ec0a819492bd_F5BE/image_9.png"&gt;&lt;img width="100" height="100" align="left" src="http://www.100loop.com/images/www_100loop_com/ec0a819492bd_F5BE/image_thumb_7.png" alt="" style="margin: 0px 10px 0px 0px;" /&gt;&lt;/a&gt;O Community Zone é um evento de integração. E certamente a Microsoft irá bolar várias atividades interessantes e também nos dará um tempo livre para aproveitarmos o hotel. Logo, há tempo pra tudo. Tempo para consumir informação e tempo para se divertir com os amigos que você acabou de fazer (ou irá fazer). &lt;/p&gt;
&lt;br /&gt;
&lt;h3&gt;Considerações&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Todas essas idéias foram tiradas da minha experïência com CZ’s e somente tem o intuito de ajudar a comunidade a interagir. Se você concorda ou discorda de algum ponto fique a vontade nos comentários.&lt;/p&gt;
&lt;/blockquote&gt;&lt;img src="http://www.100loop.com/ivan-paulovich/aggbug/241.aspx" width="1" height="1" /&gt;</description><dc:creator>Ivan Paulovich</dc:creator></item><item><title>Eu vou ao Tech-Ed Brasil 2010</title><link>http://www.100loop.com/ivan-paulovich/archive/2010/08/30/eu-vou-ao-tech-ed-brasil-2010.aspx</link><pubDate>Mon, 30 Aug 2010 22:04:08 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/ivan-paulovich/archive/2010/08/30/eu-vou-ao-tech-ed-brasil-2010.aspx</guid><wfw:comment>http://www.100loop.com/ivan-paulovich/comments/240.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/ivan-paulovich/comments/commentRss/240.aspx</wfw:commentRss><comments>http://www.100loop.com/ivan-paulovich/archive/2010/08/30/eu-vou-ao-tech-ed-brasil-2010.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://www.100loop.com/ivan-paulovich/services/trackbacks/240.aspx</trackback:ping><source url="http://www.100loop.com/ivan-paulovich/rss.aspx">Eu vou ao Tech-Ed Brasil 2010</source><description>&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/sdasdasd_F27A/teched.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="teched" border="0" alt="teched" align="right" src="http://www.100loop.com/images/www_100loop_com/sdasdasd_F27A/teched.png" width="203" height="190" /&gt;&lt;/a&gt;Sou o mais novo palestrante do Tech-Ed Brasil 2010. Eu participei da concurso o &lt;a href="http://www.teched.com.br/2010/QuerPalestrar.aspx"&gt;TechEd Brasil é um Evento de Féras&lt;/a&gt; e o meu vídeo foi o escolhido como vencedor.&lt;/p&gt;  &lt;p&gt;A idéia do concurso era criar um vídeo de no máximo 2min explicando os motivos que justificariam a comissão do Tech-Ed a me convidarem a ser um dos palestrantes. Você pode conferir o &lt;a href="http://www.100loop.com/ivan-paulovich/archive/2010/08/24/tech-ed-o-evento-dos-palestrantes-feras.aspx"&gt;making of&lt;/a&gt; aqui mesmo no blog.&lt;/p&gt;  &lt;p&gt;Se você não viu a produção final vale a pena a assistir (e quem sabe rir um pouco):&lt;/p&gt; &lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/kMoZDlnWQlc?fs=1&amp;amp;hl=en_US" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;embed src="http://www.youtube.com/v/kMoZDlnWQlc?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385" /&gt;&lt;/object&gt;  &lt;p&gt;Vejo vocês no Tech-Ed Brasil 2010! (e também no &lt;a href="http://www.100loop.com/ivan-paulovich/archive/2010/08/30/aproveite-o-community-zone-ao-maximo.aspx"&gt;Community Zone&lt;/a&gt;)&lt;/p&gt;  &lt;h3&gt;Atualizações&lt;/h3&gt;  &lt;p&gt;Recebi algumas perguntinhas sobre o vídeo, e vou tentar esclarescer um pouco mais sobre a composição. Primeiro, eu havia pensado em fazer um vídeo num escritório e me aproveitar de uma lousa onde irião passar algumas imagens (semelhante a videos de previsões do tempo).&lt;/p&gt;  &lt;p&gt;Mas depois, conversei com o André Paulovich e ele achou isso bem comum e com poucos diferenciais. E então veio a idéia de gravar um video caminhando por entre alguns objetos e enquanto eu explicava os motivos para ser um palestrante.&lt;/p&gt;  &lt;p&gt;Esse modelo também não deu certo. Por que o tempo do video era de 2min, e o caminhar por entre objetos ficava curtissimo e não conseguimos passar essa ideia pra frente. Além de termos problemas com o tremedeira na cãmera. Não estava ficando legal.&lt;/p&gt;  &lt;p&gt;Tivemos então a idéia de fazer algo semelhante aos comerciais da Nextel. Vimos que o único jeito de termos um efeito parecido era fazer uma filmagem usando um carro como suporte e falando o texto bem rápido já que o tempo era curto. O resultado disso tudo é o vídeo que vocês viram nesse post.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Além disso, alguns trejeitos de comportamento, as frases corridas e os passos largos foram planejados para dar uma idéia bem direta (nextel style) de ser. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Muito obrigado aos amigos pela ajuda e apoio na divulgação do vídeo.  &lt;/p&gt;&lt;img src="http://www.100loop.com/ivan-paulovich/aggbug/240.aspx" width="1" height="1" /&gt;</description><dc:creator>Ivan Paulovich</dc:creator></item><item><title>WCF Parte II</title><link>http://www.100loop.com/luciano-lima/archive/2010/08/30/WCF_Parte_II.aspx</link><pubDate>Mon, 30 Aug 2010 14:24:16 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/luciano-lima/archive/2010/08/30/WCF_Parte_II.aspx</guid><wfw:comment>http://www.100loop.com/luciano-lima/comments/239.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/luciano-lima/comments/commentRss/239.aspx</wfw:commentRss><comments>http://www.100loop.com/luciano-lima/archive/2010/08/30/WCF_Parte_II.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://www.100loop.com/luciano-lima/services/trackbacks/239.aspx</trackback:ping><source url="http://www.100loop.com/luciano-lima/rss.aspx">WCF Parte II</source><description>&lt;p&gt;Dando continuidade ao post anterior “&lt;a target="_blank" href="http://www.lucianolima.com.br/post/2010/08/25/Iniciando-com-WCF.aspx"&gt;Iniciando com WCF&lt;/a&gt;”, vamos ver hoje um pouco sobre a arquitetura WCF.&lt;/p&gt;
&lt;p&gt;A figura 1 mostra a arquitetura principal do Windows Communication Foundation. Vamos ver cada item par que você possa começar a se familiarizar com o WCF.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/0b2f9e1888d4_8486/wcf_02.jpg"&gt;&lt;img style="BACKGROUND-IMAGE: none; BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 10px 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px" title="wcf_02" border="0" alt="wcf_02" width="383" height="451" src="http://www.100loop.com/images/www_100loop_com/0b2f9e1888d4_8486/wcf_02_thumb.jpg" /&gt;&lt;/a&gt; &lt;br /&gt;
Figura 1 – Arquitetura WCF&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Contracts &lt;br /&gt;
&lt;/strong&gt;O contrato expõe quais membros de uma classe serão visíveis. Através de interfaces podemos definir um contrato entre um serviço e as aplicações que irão consumí-lo, expondo somente os métodos desejados.&lt;/p&gt;
&lt;p&gt;O WCF conta com os seguintes tipos de contratos:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Service Contract&lt;/strong&gt; - Um contrato para um serviço. Define os detalhes do serviço, e será utilizado na interface de contrato. &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Operational Contract &lt;/strong&gt;- Define uma operação individual, e será aplicado na assinatura dos métodos da interface de contrato. &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Data Contract&lt;/strong&gt; - Define a serialização para objetos complexos. Esta propriedade necessita da inclusão do namespace &lt;strong&gt;&lt;em&gt;System.Runtime.Serialization&lt;/em&gt;&lt;/strong&gt;. &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Message Contract&lt;/strong&gt; - Este contrato descreve a mensagem SOAP completa. &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Fault Contract&lt;/strong&gt; - Utilizado para documentar erros no WCF. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Policies and Binding - Especifica as condições que serão requeridas para a comunicação, como exemplo podemos destacar os requisitos de segurança a serem utilizados na comunicação com o serviço.&lt;/p&gt;
&lt;p&gt;Os contratos do WCF são utilizados como propriedades, podendo ser atribuído a classes e interfaces. &lt;br /&gt;
&lt;/p&gt;
&lt;h5&gt;Service Runtime&lt;/h5&gt;
&lt;p&gt;Ele contém os comportamentos que ocorrem durante a execução do serviço. &lt;br /&gt;
&lt;br /&gt;
- Throttling Behavior: controla quantas mensagens são processadas. &lt;br /&gt;
- Error Behavior: especifica um erro interno ocorrido no serviço. &lt;br /&gt;
- Metadata Behavior: informa como e se os metadados estarão disponíveis. &lt;br /&gt;
- Instance Behavior: especifica quantas instâncias do serviço deverão ser criadas durante a execução do serviço. &lt;br /&gt;
- Transaction Behavior: permite a reversão de operações caso uma falha venha a ocorrer. &lt;br /&gt;
- Dispatch Behavior: controla como uma mensagem é processada pela infra-estrutura do WCF &lt;br /&gt;
&lt;/p&gt;
&lt;h5&gt;Messaging&lt;/h5&gt;
&lt;p&gt;A camada Message é composta de Canais. Canais são componentes que fazem o processamento das mensagens, por exemplo, autenticando uma mensagem.&lt;/p&gt;
&lt;p&gt;Um conjunto de Canais é conhecido como Channel Stack. Os canais são o núcleo para o envio e recebimento de mensagens para um EndPoint.&lt;/p&gt;
&lt;p&gt;Existem dois tipos de canais:&lt;/p&gt;
&lt;p&gt;- Transport Channels: realiza o envio/ recebimento de mensagens pela rede. Ex.: HTTP, TCP e MSMQ.&lt;/p&gt;
&lt;p&gt;- Protocol Channels: implementa o protocolo SOAP possibilitando a modificação da mensagem. Ex.: WS-Security e WS-Reliability. &lt;br /&gt;
&lt;/p&gt;
&lt;h5&gt;Activation and Hosting&lt;/h5&gt;
&lt;p&gt;Para que um serviço possa ser consumido ele deve estar ativado e hospedado. No caso do WCF, este pode ser hospedado de diversas formas como: &lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;IIS – Internet Information Service: provê várias vantagens como controle do serviço. Porém só pode ser utilizado o protocolo HTTP para o tráfego de informações. &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Windows Activation Service  - (WAS) &lt;br /&gt;
    É uma forma mais atual de ser ativar um serviço, foi incorporado ao IIS 7. Trabalha com os seguinte protocolos: TCP e Named Pipes. &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Self-Hosting &lt;/li&gt;
    &lt;li&gt;WCF Service pode ser hospedado também em um aplicativo do tipo Console Application, Windows Form ou aplicações gráficas WPF. &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Windows Service &lt;/li&gt;
    &lt;li&gt;WCF também pode ser hospedado em um Serviço do Windows onde você pode ter o controle do aplicativo pelo Service Control  Manager (SCM).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Como podem ver o WCF nos dá uma flexibilidade muito grande quanto a forma de hospedagem o que nos abre um enorme leque de possibilidades. &lt;br /&gt;
&lt;br /&gt;
Aguardo vocês no próximo post!! &lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;/p&gt;&lt;img src="http://www.100loop.com/luciano-lima/aggbug/239.aspx" width="1" height="1" /&gt;</description><dc:creator>Luciano Lima</dc:creator></item><item><title>Desvendando os segredos do VS - Testes de Unidade (Unit Tests)</title><link>http://www.100loop.com/andre-castro/archive/2010/08/27/desvendando-os-segredos-do-vs-testes-unitaacuterios-unit-tests.aspx</link><pubDate>Fri, 27 Aug 2010 14:35:17 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/andre-castro/archive/2010/08/27/desvendando-os-segredos-do-vs-testes-unitaacuterios-unit-tests.aspx</guid><wfw:comment>http://www.100loop.com/andre-castro/comments/238.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/andre-castro/comments/commentRss/238.aspx</wfw:commentRss><comments>http://www.100loop.com/andre-castro/archive/2010/08/27/desvendando-os-segredos-do-vs-testes-unitaacuterios-unit-tests.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://www.100loop.com/andre-castro/services/trackbacks/238.aspx</trackback:ping><source url="http://www.100loop.com/andre-castro/rss.aspx">Desvendando os segredos do VS - Testes de Unidade (Unit Tests)</source><description>&lt;p&gt;Fala Filhotes! Hoje vou mostrar mais uma utilidade dessa nossa versátil ferramenta. É a criação de Testes de unidade! Não sabe o que é um Teste de unidade? Bom… é um teste simples que tem como objetivo validar os dados de entrada e saída de um método, classe ou ate mesmo um objeto. Resumindo: É um teste para verificar que seu método ( no nosso caso ) está retornando o que ele deveria retornar.&lt;/p&gt;  &lt;p&gt;Estou usando o Visual Studio 2010 mas o 2008 também possui essa ferramenta. Vamos ao exemplo então: Tenho um projeto de nome &lt;strong&gt;BOL&lt;/strong&gt; dentro da minha &lt;em&gt;solution &lt;/em&gt;com uma classe de nome &lt;strong&gt;Employee. &lt;/strong&gt;Segue a classe abaixo:&lt;/p&gt;  &lt;pre class="brush: c-sharp"&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BOL
{

    /// &lt;summary&gt;
    /// Classe Empregado (didático)
    /// &lt;/summary&gt;
    public class Employee
    {

        #region Enums

        /// &lt;summary&gt;
        /// Enum com a função do empregado
        /// &lt;/summary&gt;
        public enum Role
        {
            Faxineiro,
            Gerente,
            Diretor
        }

        #endregion

        #region Propriedades

        public int codEmployee { get; set; }

        public string NameEmployee { get; set; }

        public Role RoleEmployee { get; set; }

        public double Salary { get; set; }

        /// &lt;summary&gt;
        /// Retorna a hora extra, que é o salario dividido por 28 vezes 1.5
        /// &lt;/summary&gt;
        public double HoraExtra
        {

            get { return (Salary / 28 * 1.5); }
        }

        #endregion

        #region Construtores

        public Employee()
        {
        }

        #endregion

        #region Metodos Estaticos
        /// &lt;summary&gt;
        /// Verifica se o salario do empregado esta adequado com o do mercado
        /// &lt;/summary&gt;
        /// &lt;returns&gt;Retorna True se esta e False se não&lt;/returns&gt;
        public static bool CheckSalary(Employee empregado)
        {
            //
            // Checa qual o emprego do empregado
            // Para verificar se o salario é compativel com o do mercado
            //
            switch (empregado.RoleEmployee)
            {
                case Role.Faxineiro:
                    if (empregado.Salary &amp;gt; 700)
                        return true;
                    break;

                case Role.Gerente:
                    if (empregado.Salary &amp;gt; 2600)
                        return true;
                    break;

                case Role.Diretor:
                    if (empregado.Salary &amp;gt; 4000)
                        return true;
                    break;
            }

            return false;

        }

        /// &lt;summary&gt;
        /// Quanto o empregado recebe em 7 dias de serviço
        /// &lt;/summary&gt;
        /// &lt;param name="empregado" /&gt;Objeto do tipo Employee
        public static double GetWeeklyPayment(Employee empregado)
        {

            var total = empregado.HoraExtra * 7;

            //
            // Retorna o valor total 
            //
            return total;
        }

        #endregion

    }

}&lt;/pre&gt;

&lt;p&gt;Como você podem ver essa é uma classe simples com 2 métodos estáticos, uma propriedade só de leitura ( &lt;em&gt;Hora Extra&lt;/em&gt; ) e o resto de propriedades normais. 

  &lt;br /&gt;Então agora nós iremos criar os testes para esses dois métodos e para nossa propriedade “Hora Extra”. 

  &lt;br /&gt;Mas como isso? Basta clicar em algum lugar dentro da classe Employee e depois em “Create Unit Tests”&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image.png"&gt;&lt;img src="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_thumb.png" width="497" height="149" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reparem que aparece uma nova tela mostrando os itens da sua classe. Nessa tela você escolhe os métodos/propriedades para quais serão criados os testes de unidade. Então vamos selecionar só os nossos métodos e nossa propriedade “Hora Extra”.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_3.png"&gt;&lt;img src="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_thumb_3.png" width="500" height="384" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Veja que no Output project você tem a opção de criar um novo projeto de testes, ou se nós tivéssemos, poderíamos usar um projeto já existente. Podemos configurar como será gerado nossa classe de testes clicando em Settings:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_4.png"&gt;&lt;img src="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_thumb_4.png" width="309" height="323" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Você pode ver que o nome do arquivo e da classe é por padrão o nome da sua classe mais a palavra Test, você pode mudar a nomenclatura da maneira que você quiser. Vamos ver o que cada opção faz:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mark all test results Inconclusive by default – &lt;/strong&gt;Se você não modificar os testes que serão gerados, eles iram retornar inconclusivo, isso é uma maneira de mostrar ao programador que ele tem que alterar o teste. (Será dado o exemplo mais abaixo)&lt;strong&gt;Enable generation warnings – &lt;/strong&gt;De acordo com o site da MSDN essa função não está ativa. 

  &lt;br /&gt;&lt;strong&gt;Globally qualify all types – &lt;/strong&gt;Gera as variáveis com o qualificador global ( &lt;em&gt;[namespace].[variável]&lt;/em&gt; ) para evitar ambigüidade entre tipos. 

  &lt;br /&gt;&lt;strong&gt;Enable documentation comments – &lt;/strong&gt;Habilita a geração dos comentários para cada método. 

  &lt;br /&gt;&lt;strong&gt;Honor InternalsVisibleTo Attribute – &lt;/strong&gt;Se você marcar essa opção, os métodos marcados como &lt;em&gt;Friend &lt;/em&gt;ou &lt;em&gt;Internal&lt;/em&gt; serão tratados como métodos públicos. 

  &lt;br /&gt;&lt;em&gt;Lembrando que se você estiver usando o Visual Studio 2008 ou 2005 as opções podem ter nomes diferentes, mas funcionalidades iguais ou parecidas. 
    &lt;br /&gt;&lt;/em&gt;

  &lt;br /&gt;Depois de escolher as opções basta apertar &lt;em&gt;OK&lt;/em&gt;. E &lt;em&gt;OK&lt;/em&gt; na tela de criar os testes. 

  &lt;br /&gt;

  &lt;br /&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_5.png"&gt;&lt;img src="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_thumb_5.png" width="335" height="118" /&gt;&lt;/a&gt;  &lt;br /&gt;Se você criou um novo projeto escolha um nome para ele e aperte em Create. 

  &lt;br /&gt;Você pode reparar que um novo projeto de testes foi criado na sua solution com uma classe com o nome que definimos mais acima. Também pode ver que ela criou os métodos de testes que você pediu. Vamos usar o método &lt;em&gt;CheckSalaryTest&lt;/em&gt;  como exemplo de como o método é:&lt;/p&gt;

&lt;pre class="brush: c-sharp"&gt;  	/// &lt;summary&gt;
        ///A test for CheckSalary
        ///&lt;/summary&gt;
        [TestMethod()]
        public void CheckSalaryTest()
        {
            Employee empregado = null; // TODO: Initialize to an appropriate value
            bool expected = false; // TODO: Initialize to an appropriate value
            bool actual;
            actual = Employee.CheckSalary(empregado);
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("Verify the correctness of this test method.");
        }&lt;/pre&gt;

&lt;p&gt;Perceba os “&lt;em&gt;//TODO &lt;/em&gt;” o visual studio já marcou isso para você saber que você tem que inicializar a variável com algum valor, perceba que por padrão a variável esta nulo. Então nós temos que substituir isso pelo valor a ser testado:&lt;/p&gt;

&lt;pre class="brush: c-sharp"&gt;Employee empregado = new Employee { NameEmployee = "Andre", Salary = 800, RoleEmployee = Employee.Role.Faxineiro };&lt;/pre&gt;

&lt;p&gt;Percebam que existe uma variável com o nome de “e&lt;em&gt;xpected“ &lt;/em&gt;no nosso&lt;em&gt; &lt;/em&gt;método de testes, o conteúdo dessa variável deve ser o valor que nós esperamos alcançar. Como assim? Bom, o método que nós vamos chamar não é o &lt;em&gt;CheckSalary&lt;/em&gt;? Lembrando, o CheckSalary checa se o meu salário é adequado com o do mercado. Então se mandarmos esse nosso objeto, ele deveria retornar &lt;strong&gt;True &lt;/strong&gt;já que o “André” é um faxineiro e ganha mais que o piso salarial (700) de acordo com o método. Então o valor da variável &lt;em&gt;expected&lt;/em&gt; será &lt;strong&gt;True&lt;/strong&gt;. Ótimo! Perceba que o resto do código é a simples execução do método e mais uma comparação do resultado obtido (&lt;em&gt;actual&lt;/em&gt;) com o esperado (&lt;em&gt;expected&lt;/em&gt;)&lt;em&gt; &lt;/em&gt;mas espere, e aquele &lt;em&gt;“Assert.Inconclusive”&lt;/em&gt; ? Lembra da configuração que fizemos mais cedo? Se você executar esse teste agora ele retornará como inconclusivo. Basta tirar essa linha e estaremos pronto para ir! Olha como ficou o nosso método depois de toda essa configuração:&lt;/p&gt;

&lt;pre class="brush: c-sharp"&gt;	/// &lt;summary&gt;
        ///A test for CheckSalary
        ///&lt;/summary&gt;
        [TestMethod()]
        public void CheckSalaryTest()
        {
            // 
            // Crio um novo empregado para fins de testes
            //
            Employee empregado = new Employee { NameEmployee = "Andre", Salary = 800, RoleEmployee = Employee.Role.Faxineiro };
            //
            // O resultado que esperamos é um true
            //
            bool expected = true; 
            bool actual;
            actual = Employee.CheckSalary(empregado);
            Assert.AreEqual(expected, actual);
        }&lt;/pre&gt;

&lt;p&gt;Beleza, mas e agora? Como executamos isso? Vários jeitos... Podemos executar um de cada vez usando esse “botãozinho” ao lado de cada método:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_6.png"&gt;&lt;img src="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_thumb_6.png" width="311" height="102" /&gt;&lt;/a&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_7.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://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_thumb_7.png" width="215" height="102" /&gt;&lt;/a&gt;  &lt;br /&gt;Ou usamos os ícones na nossa toolbar para executar todos os testes de uma vez.&lt;a href="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_8.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://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_thumb_8.png" width="146" height="30" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;E depois de executar, é só conferir o resultado&lt;u&gt;.&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_9.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" src="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_thumb_9.png" width="500" height="100" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;E se falhar:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_10.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" src="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_thumb_10.png" width="500" height="98" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Simplesmente aperte com o botão direito e “V&lt;em&gt;iew Test Results Details”&lt;/em&gt; para abrir os detalhes juntamente com a exceção que aconteceu:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_11.png"&gt;&lt;img src="http://www.100loop.com/images/www_100loop_com/DesvendandoossegredosdoVSTestesUnitriosU_CA8F/image_thumb_11.png" width="500" height="166" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Existem outras ferramentas do Visual Studio para melhorar a qualidade dos testes, maior informação dos resultados e etc… Mas não pretendo falar sobre eles agora, senão o post iria ficar muito longo e confuso. Então por hoje é isso! E claro, você pode colocar esse projeto de testes no TFS também. &lt;/p&gt;

&lt;p&gt;Então, nós vimos que graças ao Visual Studio podemos criar testes de unidade com “meia dúzia” de cliques, algo muito útil na vida de um desenvolvedor. &lt;/p&gt;

&lt;p&gt;Espero que vocês tenham gostado, já vou seguir o meu caminho, até mais.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Edit: Alterado o nome de testes unitários para testes de unidade. Dica do @&lt;a href="http://twitter.com/Camiloribeiro"&gt;Camiloribeiro&lt;/a&gt;.  Obrigado!&lt;/em&gt;&lt;/p&gt;&lt;img src="http://www.100loop.com/andre-castro/aggbug/238.aspx" width="1" height="1" /&gt;</description><dc:creator>André Castro</dc:creator></item><item><title>Iniciando com WCF</title><link>http://www.100loop.com/luciano-lima/archive/2010/08/25/Iniciando-com-WCF.aspx</link><pubDate>Thu, 26 Aug 2010 01:22:04 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/luciano-lima/archive/2010/08/25/Iniciando-com-WCF.aspx</guid><wfw:comment>http://www.100loop.com/luciano-lima/comments/237.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/luciano-lima/comments/commentRss/237.aspx</wfw:commentRss><comments>http://www.100loop.com/luciano-lima/archive/2010/08/25/Iniciando-com-WCF.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://www.100loop.com/luciano-lima/services/trackbacks/237.aspx</trackback:ping><source url="http://www.100loop.com/luciano-lima/rss.aspx">Iniciando com WCF</source><description>&lt;p&gt;Fala pessoal, tudo na paz?&lt;/p&gt;  &lt;p&gt;Bem, como ando recebendo e-mails da galera perguntando sobre WCF, resolvi escrever alguns artigos sobre ele.&lt;/p&gt;  &lt;p&gt;Nessa primeira parte vamos ver o que é o WCF e o que o compõe. Será uma introdução básica, porém, espero colocar toda informação necessária para um primeiro contato.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Primeiramente, o que é o WCF?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Windows Communication Foundation ou WCF como é mais conhecido nada mais é do que um SDK para desenvolvimento de aplicações distribuídas e orientadas a serviço, também conhecidas como (&lt;b&gt;SOA&lt;/b&gt;).&lt;/p&gt;  &lt;p&gt;O WCF surgiu no .Net Framework 3.0. Ele veio para  unificar tecnologias como COM+, .Net Remoting, Web Services e MSMQ (Microsoft Message Queue), isso porque, antes do WCF, era necessário que o desenvolvedor utilizasse tecnologias distintas para cada tipo de aplicação, um exemplo seria a criação de Web Services para disponibilizar na Internet algum serviço. Caso este serviço fosse disponibilizado na intranet, deveria ser criada uma aplicação utilizando .Net Remoting, isso porque .Net Remoting utilizava o protocolo TCP enviado arquivos binários pela rede o que tornava a aplicação muito mais rápida do que com Web Service (Http/XML). Com a criação do WCF isso deixa de existir, ele torna a vida do programador muito mais simples.&lt;/p&gt;  &lt;p&gt;Para que possamos criar, projetar e implantar serviços WCF, devemos nos ater a alguns conceitos básicos que são os EndPoints e seus componentes ( Address, Binding e Contract).&lt;/p&gt;  &lt;p&gt;Toda comunicação com o serviço se dá através dos EndPoints, são eles os responsáveis por fornecer aos clientes o acesso às funcionalidades do serviço.&lt;/p&gt;  &lt;p&gt;Calma pessoal não se assustem, vamos ver em detalhes cada pedacinho que compõe um EndPoint. Vamos lá?&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Address&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Nada mais é do que o local ou endereço onde o serviço reside. O Address possui dois pontos importantes que são a localização e o protocolo de transporte. Um Address possui o seguinte formato: &lt;/p&gt;  &lt;p&gt;&lt;em&gt;[base address]/[optional URI]&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Já o base address segue o seguinte formato:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;[transport]://[machine or domain][:optional port]&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Como transport, o WCF nos oferece os seguintes canais de comunicação:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;http, https, net.tcp, net.pipe, net.msmq e net.p2p&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Para ilustrar melhor abaixo temos alguns exemplos de Address:&lt;/p&gt;  &lt;p&gt;http://localhost:8080    &lt;br /&gt;http://localhost:8080/MeuWCFService     &lt;br /&gt;net.tcp://localhost:123/MeuWCFService     &lt;br /&gt;net.pipe://localhost/MeuWCFService     &lt;br /&gt;net.msmq://localhost/private/MeuWCFService     &lt;br /&gt;net.msmq://localhost/MeuWCFQueue     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Binding&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;É o responsável por definir como será a comunicação com o serviço (tcp, ipc, http, msmq, etc).    &lt;br /&gt;O WCF nos oferece seis tipos de binding que são:&lt;/p&gt;  &lt;p&gt;&lt;tt&gt;-  BasicHttpBinding&lt;/tt&gt;     &lt;br /&gt;&lt;tt&gt;-  NetTcpBinding&lt;/tt&gt;     &lt;br /&gt;&lt;tt&gt;-  NetNamedPipeBinding&lt;/tt&gt;     &lt;br /&gt;&lt;tt&gt;-  WSHttpBinding&lt;/tt&gt;     &lt;br /&gt;&lt;tt&gt;-  WSDualHttpBinding&lt;/tt&gt;     &lt;br /&gt;&lt;tt&gt;-  NetMsmqBinding&lt;/tt&gt;&lt;/p&gt;  &lt;p&gt;Para saber mais sobre Binding, deem uma olhada no post  &lt;a href="http://www.lucianolima.com.br/post/2010/04/05/WCF-Bindings-Dicas.aspx" target="_blank"&gt;WCF Bindings&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Contract&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;No contrato é onde definimos quais funcionalidades um serviço irá expor para os clientes.    &lt;br /&gt;Existem quatro tipos de contrato que são:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Service Contracts&lt;/em&gt;:     &lt;br /&gt;- define quais operações estarão disponíveis no serviço para o cliente., ou seja, mapeia tipos CLR para WSDL     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Data Contracts&lt;/em&gt;:     &lt;br /&gt;– define a estrutura de dados usada no serviço, ou seja, ele mapeia tipos CLR para XSD     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Fault Contracts&lt;/em&gt;:     &lt;br /&gt;- define os tipos de erros que serão lançados pelo serviço e como eles irão propagar para o cliente.     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Message Contracts:&lt;/em&gt;     &lt;br /&gt;- define a estrutura de mensagens usadas no serviço, ou seja, mapeia tipos CLR para SOAP&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Então, para que tenhamos um EndPoint precisamos ter um Address, um Binding e um Contract, estes itens são conhecidos como ABC´s EndPoint.&lt;/p&gt;  &lt;p&gt;Bem pessoal, por hoje é só!&lt;/p&gt;  &lt;p&gt;Em nossos próximos posts iremos nos aprofundar um pouco mais no WCF.&lt;/p&gt;  &lt;p&gt;Espero que tenham gostado desta primeira parte.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Enjoy!!&lt;/p&gt;&lt;img src="http://www.100loop.com/luciano-lima/aggbug/237.aspx" width="1" height="1" /&gt;</description><dc:creator>Luciano Lima</dc:creator></item><item><title>Tech-Ed, o evento dos palestrantes feras</title><link>http://www.100loop.com/ivan-paulovich/archive/2010/08/24/tech-ed-o-evento-dos-palestrantes-feras.aspx</link><pubDate>Tue, 24 Aug 2010 03:36:19 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/ivan-paulovich/archive/2010/08/24/tech-ed-o-evento-dos-palestrantes-feras.aspx</guid><wfw:comment>http://www.100loop.com/ivan-paulovich/comments/236.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/ivan-paulovich/comments/commentRss/236.aspx</wfw:commentRss><comments>http://www.100loop.com/ivan-paulovich/archive/2010/08/24/tech-ed-o-evento-dos-palestrantes-feras.aspx#comment</comments><slash:comments>9</slash:comments><trackback:ping>http://www.100loop.com/ivan-paulovich/services/trackbacks/236.aspx</trackback:ping><source url="http://www.100loop.com/ivan-paulovich/rss.aspx">Tech-Ed, o evento dos palestrantes feras</source><description>&lt;p&gt;Eu estou concorrendo a uma vaga para palestrante do &lt;a href="http://www.teched.com.br/"&gt;Tech-Ed Brasil 2010&lt;/a&gt;. E o vídeo abaixo é uma produção onde eu provo por quê eu devo ser um palestrante do Tech-Ed. Assistam o vídeo: &lt;/p&gt; &lt;object width="480" height="385"&gt;         &lt;param value="http://www.youtube.com/v/kMoZDlnWQlc?fs=1&amp;amp;hl=en_US" name="movie" /&gt;         &lt;param value="true" name="allowFullScreen" /&gt;         &lt;param value="always" name="allowscriptaccess" /&gt;         &lt;embed width="480" height="385" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash" src="http://www.youtube.com/v/kMoZDlnWQlc?fs=1&amp;amp;hl=en_US" /&gt;&lt;/object&gt;  &lt;p&gt;Nesse vídeo de apenas 2 minutos (tempo curtíssimo) eu mostro algumas características fundamentais de um palestrante. São elas:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Ter habilidade para falar em público. &lt;/li&gt;    &lt;li&gt;Possuir conhecimento teórico e experiência prática. &lt;/li&gt;    &lt;li&gt;Ser um influenciador Microsoft na sua região. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Na sequência eu defendo por quê eu (&lt;a href="http://twitter.com/ivanpaulovich"&gt;Ivan Paulovich&lt;/a&gt;) tenho essas características. Vejam o vídeo e entendam.&lt;/p&gt;  &lt;h3&gt;Making Of&lt;/h3&gt;  &lt;p&gt;Aposto que vocês devem estar imaginando que criar um vídeo desses é simples e rápido. Mas eu tenho que lhes dizer que não foi tarefa fácil. Como eu optei por fazer um vídeo a céu aberto estávamos sujeitos ao ambiente e em todos os lugares que gravamos haviam dezenas de pessoas.&lt;/p&gt;  &lt;p&gt;Com a ajuda dos meus amigos gravei vídeos em várias partes da cidade.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/72d30af03f97_13ED3/image.png"&gt;&lt;img style="margin: 0px 10px 0px 0px; display: inline" alt="" align="left" src="http://www.100loop.com/images/www_100loop_com/72d30af03f97_13ED3/image_thumb.png" width="240" height="180" /&gt;&lt;/a&gt;Gravei vídeos na &lt;a href="http://pt.wikipedia.org/wiki/Pra%C3%A7a_Israel_Pinheiro"&gt;Praça do Papa&lt;/a&gt;, depois no &lt;a href="http://www.overmundo.com.br/guia/parque-das-mangabeiras"&gt;Parque das Mangabeiras&lt;/a&gt;, fiz alguns takes na &lt;a href="http://pt.wikipedia.org/wiki/Ficheiro:IgrejaPampulha.jpg"&gt;orla da Pampulha&lt;/a&gt;, na &lt;a href="http://img66.imageshack.us/img66/7425/dsc01229kr2.jpg"&gt;Casa do Baile&lt;/a&gt; e no final optei por um vídeo numa rua deserta bem perto da minha casa ;-)  &lt;/p&gt;  &lt;p&gt;(A esquerda eu na Praça do Papa)&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/72d30af03f97_13ED3/image_3.png"&gt;&lt;img style="margin: 0px 10px 0px 0px; display: inline" alt="" align="left" src="http://www.100loop.com/images/www_100loop_com/72d30af03f97_13ED3/image_thumb_3.png" width="240" height="179" /&gt;&lt;/a&gt;Umas das coisas boas dessas filmagens foi passear pela cidade em busca de lugares legais de Belo Horizonte que pudessem compor o vídeo.&lt;/p&gt;  &lt;p&gt;(A esquerda eu no Parque das Mangabeiras)    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Gravamos várias vezes usando passinhos de ninja. Nessa técnica enquanto eu ando em direção a câmera o cinegrafista dá passos para traz. Parece súper tranquilo na teoria más na prática a imagem fica muito tremida.&lt;/p&gt;  &lt;p&gt;Tentamos várias vezes até que minha namorada (&lt;strong&gt;Contra-Regra&lt;/strong&gt;) teve a brilhante idéia de colocar o &lt;a href="http://twitter.com/andrepaulovich"&gt;André Paulovich&lt;/a&gt; (&lt;strong&gt;Cinegrafista&lt;/strong&gt;) sentado no porta-malas do carro para diminuir as trepidações do vídeo.&lt;/p&gt;  &lt;p&gt;Submetemos a idéia ao &lt;a href="http://twitter.com/andrepaulovich"&gt;André Paulovich&lt;/a&gt; (&lt;strong&gt;Diretor&lt;/strong&gt;) e ele aprovou os recursos tecnológicos e logo colocamos tudo em prática ;-)&lt;/p&gt;  &lt;p&gt;Vejam só a foto que tirei do nosso carrinho de filmagem:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/72d30af03f97_13ED3/image_4.png"&gt;&lt;img alt="" src="http://www.100loop.com/images/www_100loop_com/72d30af03f97_13ED3/image_thumb_4.png" width="500" height="375" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Na foto minha namorada e meu irmão André Paulovich estão preparados para mais uma filmagem. E dessa &lt;a href="http://www.dicionarioinformal.com.br/definicao.php?palavra=geringon%E7a&amp;amp;id=661"&gt;geringonça&lt;/a&gt; saiu o vídeo final.&lt;/p&gt;  &lt;p&gt;Agora que temos o vídeo gravado. Passamos o trabalho para o João Paulo (&lt;strong&gt;Editor de Áudio e Vídeo&lt;/strong&gt;) criar uma abertura interessante, colocar legenda, colocar alguns elementos gráficos que pudessem traduzir o que eu defendia e também tratar o áudio.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/72d30af03f97_13ED3/image_5.png"&gt;&lt;img alt="" src="http://www.100loop.com/images/www_100loop_com/72d30af03f97_13ED3/image_thumb_5.png" width="500" height="375" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Nessa foto &lt;a href="http://twitter.com/andrepaulovich"&gt;André Paulovich&lt;/a&gt; acompanha os últimos detalhes da produção enquanto o &lt;a href="http://twitter.com/joaochanged"&gt;João Paulo&lt;/a&gt; sincroniza as legendas e prepara para o “Go Live”!&lt;/p&gt;  &lt;p&gt;Temos a obrigação e o prazer de agradecer ao grupo &lt;a href="http://www.delirious.co.uk/flash/"&gt;Delirious&lt;/a&gt; por mandarem um som tão maneiro. Se você curtiu o som da abertura e de fundo do vídeo assista esse clip:&lt;/p&gt; &lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/6EHBzrJ-7gk?fs=1&amp;amp;hl=pt_BR" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;embed src="http://www.youtube.com/v/6EHBzrJ-7gk?fs=1&amp;amp;hl=pt_BR" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385" /&gt;&lt;/object&gt;  &lt;p&gt;E você, aprovou a minha candidatura ao Tech-Ed? Então tuíte o seguinte texto e eu te agradeço desde já:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;@&lt;a href="http://twitter.com/ivanpaulovich"&gt;ivanpaulovich&lt;/a&gt; &lt;a href="http://www.youtube.com/watch?v=kMoZDlnWQlc"&gt;http://www.youtube.com/watch?v=kMoZDlnWQlc&lt;/a&gt; &lt;a href="http://twitter.com/search?q=%23TechEdBR"&gt;#TechEdBR&lt;/a&gt; &lt;a href="http://twitter.com/search?q=%23EventoDeFeras"&gt;&lt;em&gt;&lt;em&gt;#EventoDeFeras&lt;/em&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Muito obrigado &lt;a href="http://twitter.com/joaochanged"&gt;João Paulo&lt;/a&gt;, &lt;a href="http://twitter.com/andrepaulovich"&gt;André Paulovich&lt;/a&gt; e Bárbara!&lt;/p&gt;  &lt;h3&gt;Alguns Retuítes da Comunidade&lt;/h3&gt;  &lt;p&gt;Update 24 de Agosto.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/TechEdoeventodospalestrantesferas_7A29/image.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/TechEdoeventodospalestrantesferas_7A29/image_thumb.png" width="244" height="135" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/TechEdoeventodospalestrantesferas_7A29/image_3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/TechEdoeventodospalestrantesferas_7A29/image_thumb_3.png" width="244" height="122" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/TechEdoeventodospalestrantesferas_7A29/image_4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/TechEdoeventodospalestrantesferas_7A29/image_thumb_4.png" width="244" height="121" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/TechEdoeventodospalestrantesferas_7A29/image_5.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/TechEdoeventodospalestrantesferas_7A29/image_thumb_5.png" width="244" height="129" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/TechEdoeventodospalestrantesferas_7A29/image_6.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/TechEdoeventodospalestrantesferas_7A29/image_thumb_6.png" width="244" height="71" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/TechEdoeventodospalestrantesferas_7A29/image_7.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/TechEdoeventodospalestrantesferas_7A29/image_thumb_7.png" width="244" height="112" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/TechEdoeventodospalestrantesferas_7A29/image_8.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/TechEdoeventodospalestrantesferas_7A29/image_thumb_8.png" width="244" height="46" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.100loop.com/ivan-paulovich/aggbug/236.aspx" width="1" height="1" /&gt;</description><dc:creator>Ivan Paulovich</dc:creator></item><item><title>Desvendando os segredos do VS - Atalhos</title><link>http://www.100loop.com/andre-castro/archive/2010/08/20/desvendando-os-segredos-do-vs-atalhos.aspx</link><pubDate>Fri, 20 Aug 2010 11:15:55 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/andre-castro/archive/2010/08/20/desvendando-os-segredos-do-vs-atalhos.aspx</guid><wfw:comment>http://www.100loop.com/andre-castro/comments/233.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/andre-castro/comments/commentRss/233.aspx</wfw:commentRss><comments>http://www.100loop.com/andre-castro/archive/2010/08/20/desvendando-os-segredos-do-vs-atalhos.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://www.100loop.com/andre-castro/services/trackbacks/233.aspx</trackback:ping><source url="http://www.100loop.com/andre-castro/rss.aspx">Desvendando os segredos do VS - Atalhos</source><description>&lt;p&gt;Faaalllaaaaaa Filhoteess! Cês tão bão?&lt;/p&gt;
&lt;p&gt;Então, hoje eu vou começar a explicar algumas funcionalidades “Ocultas” da nossa principal ferramenta, o &lt;strong&gt;Visual Studio&lt;/strong&gt;!     &lt;br /&gt;
Como vocês sabem o Visual Studio tem &lt;strike&gt;uma cassetada&lt;/strike&gt; varias funcionalidades que muitas vezes nós não usamos, não que elas sejam inúteis, longe disso, o fato é que nós não somos acostumados a usar algo mais do que o &lt;em&gt;BUILD&lt;/em&gt; ou &lt;em&gt;EXECUTE. &lt;/em&gt;&lt;em&gt;     &lt;/em&gt;Bom… vou mostrar para vocês 10 atalhos muito úteis que irão facilitar suas vidas!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;F12&lt;/strong&gt;   -   &lt;em&gt;Go to Definition      &lt;br /&gt;
&lt;/em&gt;Leva o cursor para a origem do método/variável. Muito útil para quando você quer saber o que aquele método faz ou aonde você esta declarando aquela variável.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ctrl &lt;/strong&gt;+&lt;strong&gt; “–” &lt;/strong&gt;e&lt;strong&gt; Ctrl &lt;/strong&gt;+&lt;strong&gt; Shift &lt;/strong&gt;+&lt;strong&gt; “-“    &lt;/strong&gt;-   &lt;em&gt;Backward e Forward  &lt;br /&gt;
&lt;/em&gt;Volta (Ctrl + “-”) o cursor para o ultimo lugar onde ele estava funciona igual aos botões de voltar e avançar do browser.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ctrl&lt;/strong&gt; &lt;strong&gt;+ Shift +&lt;/strong&gt; &lt;strong&gt;F9   –   &lt;/strong&gt;&lt;em&gt;Delete all Breakpoints      &lt;br /&gt;
&lt;/em&gt;Sabe quando você esta “atrás” de algum erro e enche de breakpoints o código, e quando você resolve o erro os breakpoints ainda estão lá? Então… Com esse atalho você deleta TODOS os breakpoints da solution.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ctrl + M + M   –   &lt;/strong&gt;&lt;em&gt;Collapse      &lt;br /&gt;
&lt;/em&gt;Você pode dar um &lt;em&gt;collapse &lt;/em&gt;(recolhida)&lt;em&gt; &lt;/em&gt;no método aonde você está, deixando–o  como um bloco de código que pode ser expandindo novamente usando o mesmo atalho.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alt + Enter – &lt;/strong&gt;&lt;em&gt;Open Properties      &lt;br /&gt;
&lt;/em&gt;É só clicar em um projeto e apertar Alt + Enter para abrir as propriedades do mesmo, alias isso abre a propriedade de quase tudo no windows e isso funciona ate no windows explorer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ctrl + B + T   –   &lt;/strong&gt;&lt;em&gt;Bookmark      &lt;br /&gt;
&lt;/em&gt;Adiciona / Remove a linha atual à uma espécie de “favoritos” aonde você pode navegar entre essas linhas pelos atalhos abaixo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ctrl + B + N &lt;/strong&gt;e &lt;strong&gt;Ctrl + B + P   –   &lt;/strong&gt;&lt;em&gt;Next / Previous Bookmark      &lt;br /&gt;
&lt;/em&gt;Navega entre os &lt;em&gt;bookmarks, &lt;/em&gt;ótimo para quando você tem trechos do código que você sabe que você vai acabar tendo que voltar para terminar ou adicionar algo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Shift + F12   –   &lt;/strong&gt;&lt;em&gt;Find Usages      &lt;br /&gt;
&lt;/em&gt;Esse atalho é excelente! Você usa esse atalho em cima de algum método/variável e aparece uma tela mostrando TODOS os lugares em seu código que você está invocando esse método.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ctrl + K + C &lt;/strong&gt;e &lt;strong&gt;Ctrl + K + U  -   &lt;/strong&gt;&lt;em&gt;Comment e Uncomment      &lt;br /&gt;
&lt;/em&gt;Comenta (Ctrl + K + C) e “descomenta” (Ctrl + K + U) as linhas selecionadas. Muito útil quando você acostuma.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ctrl + K + D&lt;/strong&gt;  e &lt;strong&gt;Ctrl + K + F  &lt;/strong&gt;-   &lt;em&gt;Reformat Document / Code Block      &lt;br /&gt;
&lt;/em&gt;Sabe quando o seu código vai ficando desorganizado a medida que você vai codificando? Então, seus problemas acabaram! Pois com esses atalhos você formata todo o código ( Ctrl + K + D) ou só uma parte (Ctrl + K + F) de uma vez!&lt;/p&gt;
&lt;p&gt;A sim, esses atalhos foram testados nos Visual Studio 2008 e Visual Studio 2010, e sei que vários funcionam no Visual Studio 2005 também, mas não sei são todos.&lt;/p&gt;
&lt;p&gt;Então é isso ai! Eu uso bastante esses atalhos e espero que vocês tenham encontrado algum atalho útil. Qualquer dúvida me avisem! Ate mais filhotes!&lt;/p&gt;&lt;img src="http://www.100loop.com/andre-castro/aggbug/233.aspx" width="1" height="1" /&gt;</description><dc:creator>André Castro</dc:creator></item><item><title>C# Extension Methods</title><link>http://www.100loop.com/luciano-lima/archive/2010/08/19/C-Extension-Methods.aspx</link><pubDate>Thu, 19 Aug 2010 13:36:30 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/luciano-lima/archive/2010/08/19/C-Extension-Methods.aspx</guid><wfw:comment>http://www.100loop.com/luciano-lima/comments/232.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/luciano-lima/comments/commentRss/232.aspx</wfw:commentRss><comments>http://www.100loop.com/luciano-lima/archive/2010/08/19/C-Extension-Methods.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://www.100loop.com/luciano-lima/services/trackbacks/232.aspx</trackback:ping><source url="http://www.100loop.com/luciano-lima/rss.aspx">C# Extension Methods</source><description>&lt;p&gt;Outro dia estava trabalhando em um projeto onde precisava criar alguns métodos a mais para uma dll que havia sido gerada para um outro aplicativo. Porém, como não tinha o código fonte dela estava prestes a escrever uma nova classe e implementar os métodos que estava precisando, mas antes de começar a codificar, me lembrei que a partir da versão 3.0 do Net Framework, a Microsoft incluiu uma funcionalidade muito bacana chamada Extension Methods.&lt;/p&gt;  &lt;p&gt;Mas o que são Extension Methods?&lt;/p&gt;  &lt;p&gt;Basicamente é uma forma de você “inserir” código em classes já compiladas mesmo que estas sejam seladas (sealed) como a maioria das classes do .Net Framework. Desta forma podemos incrementar nossas classes com métodos que criamos sem a necessidade de realizar uma recompilação da mesma.&lt;/p&gt;  &lt;p&gt;Mas para que isso fique mais claro, vamos ao exemplo.&lt;/p&gt;  &lt;p&gt;Crie um projeto do tipo C# -&amp;gt; Console Application, dê o nome de “ExtensionMethods”.&lt;/p&gt;  &lt;p&gt;Agora crie um novo projeto do tipo C# –&amp;gt; Class Library, e dê o nome dele de MyClass. Agora renomeie a Class1.cs para Client.cs. Seu projeto deverá estar como na figura 01.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/CExtensionMethods_E2CF/extension_01.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="extension_01" border="0" alt="extension_01" src="http://www.100loop.com/images/www_100loop_com/CExtensionMethods_E2CF/extension_01_thumb.jpg" width="260" height="257" /&gt;&lt;/a&gt;     &lt;br /&gt;Figura 01 – Solution Explorer     &lt;br /&gt;    &lt;br /&gt;Agora, abra o arquivo Client.cs e adicione o código da listagem 01.&lt;/p&gt;  &lt;p&gt;Listagem 01 – class Client.cs&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;br /&gt;namespace MyClass&lt;br /&gt;{&lt;br /&gt;    public sealed class Client&lt;br /&gt;    {&lt;br /&gt;        public string Name { get; set; }&lt;br /&gt;        public string Email { get; set; }&lt;br /&gt;&lt;br /&gt;        public bool EmailIsValid()&lt;br /&gt;        {&lt;br /&gt;            return !string.IsNullOrEmpty(Email);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;Observem que criamos duas propriedades e um método que “valida” o email do cliente.&lt;/p&gt;

&lt;p&gt;Vamos criar nossa chamada à classe Client. Abra o arquivo Program.cs e insira o código da listagem 02 no método Main da classe.&lt;/p&gt;

&lt;p&gt;Listagem 02 – chamada a classe Cliente&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;var cl = new Client&lt;br /&gt;              {&lt;br /&gt;                 Email = "lima@lucianolima.com.br",&lt;br /&gt;                 Name = "Luciano Lima"&lt;br /&gt;              };&lt;br /&gt;&lt;br /&gt;    Console.WriteLine( cl.EmailIsValid() ? "Email Válido" : "Email Inválido" );&lt;br /&gt;    Console.ReadLine();&lt;/pre&gt;

&lt;p&gt;  &lt;br /&gt;Ao executar este código ele irá apenas escrever Email Válido porque a propriedade Email está preenchida.&lt;/p&gt;

&lt;p&gt;Bem, digamos que você precise realizar a validação do Nome do Cliente, mas sem ter que mexer na classe Client, é ai que Extension Methods entra em ação.&lt;/p&gt;

&lt;p&gt;Adicione uma nova classe no projeto ExtensionMethods, dê o nome a ela de “ClientExtension.cs” e insira o código da listagem 03.&lt;/p&gt;

&lt;p&gt;Listagem 03 – class extension&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Text;&lt;br /&gt;using MyClass;&lt;br /&gt;&lt;br /&gt;namespace ExtensionMethods&lt;br /&gt;{&lt;br /&gt;    public static class ClientExtension&lt;br /&gt;    {&lt;br /&gt;        public static bool NameIsValid(this Client client)&lt;br /&gt;        {&lt;br /&gt;            return !string.IsNullOrEmpty(client.Name);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;O importante nessa classe é a forma como criamos o método, observem que o segredo para a funcionalidade de extensão é a palavra “this” que faz referencia à classe que queremos agregar operações, o restante é código puro e simples.&lt;/p&gt;

&lt;p&gt;Agora quando for utilizar a funcionalidade, o Visual Studio irá detectar que este método é uma extensão para a classe Client, conforme figura 02 e figura 03.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/CExtensionMethods_E2CF/extension_02.jpg"&gt;&lt;img alt="extension_02" src="http://www.100loop.com/images/www_100loop_com/CExtensionMethods_E2CF/extension_02_thumb.jpg" width="500" height="181" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Figura 02 – método estendido na classe Client 
  &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/CExtensionMethods_E2CF/extension_03.jpg"&gt;&lt;img alt="extension_03" src="http://www.100loop.com/images/www_100loop_com/CExtensionMethods_E2CF/extension_03_thumb.jpg" width="500" height="80" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Figura 03 – ToolTip mostrando que o método é uma extensão.&lt;/p&gt;

&lt;p&gt;Extension Methods como falei acima pode ser aplicado a todas as classes do dot Net Framework, então caso precise de um método exclusivo para trabalhar com string basta criar sua classe de extensão e implementar o método que achar necessário. Mas cuidado, a manutenção deste tipo de código pode ser um pouco árdua por isso, pense bem antes de sair criando extension methods. 
  &lt;br /&gt;

  &lt;br /&gt;

  &lt;br /&gt;Enjoy!!&lt;/p&gt;&lt;img src="http://www.100loop.com/luciano-lima/aggbug/232.aspx" width="1" height="1" /&gt;</description><dc:creator>Luciano Lima</dc:creator></item><item><title>Paulovich.Data passa os 1500 downloads</title><link>http://www.100loop.com/ivan-paulovich/archive/2010/08/19/paulovich-data-passa-os-1500-downloads.aspx</link><pubDate>Thu, 19 Aug 2010 12:36:32 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/ivan-paulovich/archive/2010/08/19/paulovich-data-passa-os-1500-downloads.aspx</guid><wfw:comment>http://www.100loop.com/ivan-paulovich/comments/231.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/ivan-paulovich/comments/commentRss/231.aspx</wfw:commentRss><comments>http://www.100loop.com/ivan-paulovich/archive/2010/08/19/paulovich-data-passa-os-1500-downloads.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://www.100loop.com/ivan-paulovich/services/trackbacks/231.aspx</trackback:ping><source url="http://www.100loop.com/ivan-paulovich/rss.aspx">Paulovich.Data passa os 1500 downloads</source><description>&lt;p&gt;&lt;a title="Paulovich.Data" href="http://paulovich.codeplex.com"&gt;Paulovich.Data&lt;/a&gt; é um framework de persistência para múltiplos datasources e fácil de usar. Você já deve ter ouvido falar muito dele aqui no blog.&lt;/p&gt;  &lt;p&gt;O que você não sabe é que o &lt;a title="Paulovich.Data" href="http://paulovich.codeplex.com"&gt;Paulovich.Data&lt;/a&gt; é um framework usado por diversas pessoas no Brasil e também no exterior. Veja o gráfico de downloads ao longo do ciclo de vida do projeto.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://paulovich.codeplex.com" href="http://paulovich.codeplex.com"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/Paulovich.Datapassaos1500downloads_812A/image.png" width="500" height="260" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Passamos dos 1500 downloads e temos aproximadamente 1 download por dia. Não é muito. Mas para um projeto que começou como um estudo de ADO.NET e se transformou em algo útil a tantas empresas e profissionais deixa todos que participam do projeto muito felizes. Obrigado!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeplex.com"&gt;&lt;img alt="Paulovich.Data" src="http://www.100loop.com/images/logo-codeplex.png" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;O Paulovich.Data é hospedado no &lt;a href="http://www.codeplex.com"&gt;Codeplex&lt;/a&gt;. A Microsoft mantém esse serviço e permite que seus usuários utilizem as melhores tecnologias para desenvolvimento de software colaborativo. Experimente você também, tenha uma idéia e divida ela com a comunidade.&lt;/p&gt;&lt;img src="http://www.100loop.com/ivan-paulovich/aggbug/231.aspx" width="1" height="1" /&gt;</description><dc:creator>Ivan Paulovich</dc:creator></item><item><title>Criando Indexadores (Indexers)</title><link>http://www.100loop.com/andre-castro/archive/2010/08/18/criando-indexadores-indexers.aspx</link><pubDate>Wed, 18 Aug 2010 13:54:13 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/andre-castro/archive/2010/08/18/criando-indexadores-indexers.aspx</guid><wfw:comment>http://www.100loop.com/andre-castro/comments/225.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/andre-castro/comments/commentRss/225.aspx</wfw:commentRss><comments>http://www.100loop.com/andre-castro/archive/2010/08/18/criando-indexadores-indexers.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://www.100loop.com/andre-castro/services/trackbacks/225.aspx</trackback:ping><source url="http://www.100loop.com/andre-castro/rss.aspx">Criando Indexadores (Indexers)</source><description>&lt;p&gt;Eai filhotes, tudo bem?  &lt;/p&gt;  &lt;p&gt;Hoje vou mostrar como se cria indexadores! Não sabe o que é um Indexador? Um indexador basicamente deixa sua classe com um comportamento semelhante ao de um &lt;em&gt;array&lt;/em&gt;, deixa eu dar um exemplo:&lt;/p&gt;  &lt;p&gt;Você consegue acessar um item de um &lt;em&gt;array&lt;/em&gt;/&lt;em&gt;collection&lt;/em&gt; apenas passando o ID/KEY:&lt;/p&gt;  &lt;pre class="brush: c-sharp"&gt; meuArray[1] = "teste"; &lt;/pre&gt;

&lt;p&gt;O Indexador deixa nossa classe com esse comportamento.  Então vamos ao que interessa!!&lt;/p&gt;

&lt;p&gt;Para criar o indexador numa classe basta você criar a seguinte propriedade:&lt;/p&gt;

&lt;pre class="brush: c-sharp"&gt;  public TIPO this[int index]
    { ... &lt;/pre&gt;

&lt;p&gt;Aonde o TIPO é o tipo do objeto/retorno, e o parâmetro pode ser qualquer tipo (&lt;em&gt;Int, String, …&lt;/em&gt;) e ate mais de um (para matrizes ou etc…) , no nosso caso usaremos um inteiro para pegar o índice. &lt;/p&gt;

&lt;p&gt;Criei duas classes para dar um exemplo:&lt;/p&gt;

&lt;pre class="brush: c-sharp"&gt;/// &lt;summary&gt;
/// Propriedades Genéricas
/// &lt;/summary&gt;
public class GenericProperty
{
    public enum DbType
    {
        Varchar,
        Int,
        Bit
    }
	public GenericProperty()
	{
	}

    public string Name { get; set; }

    public DbType Type { get; set; }

    //Faço um Override no ToString para poder mostrar o Nome do campo e o tipo na hora de invocar o ToString.
    public override string ToString()
    {
        return Name + " [" + Type + "]";
    }  
}

/// &lt;summary&gt;
/// Classe com todas as propriedades genericas
/// &lt;/summary&gt;
public class PropertyControl
{
    // Coleção com as propriedades genericas
    private Collection&amp;lt;GenericProperty&amp;gt; colProp;

    //Nosso INDEXER do tipo GenericProperty
    public GenericProperty this[int index]
    {
        get { return colProp[index]; }

        set { colProp[index] = value; }
    }

    //Método que adiciona o item à coleção
    public void AddItem(GenericProperty newProp)
    {
        colProp.Add(newProp);
    }

    // Meu construtor tbm instancia a collection
    public PropertyControl()
    {
        colProp = new Collection&amp;lt;GenericProperty&amp;gt;();
    }
}
 &lt;/pre&gt;

&lt;p&gt;E pronto… como podemos ver abaixo, usamos nossa classe como uma &lt;em&gt;array&lt;/em&gt;:&lt;/p&gt;

&lt;pre class="brush: c-sharp"&gt;	
	//Instanciamos nossa Classe
        var ObjTeste = new PropertyControl();
	
	// Adiciona os itens 
	// Usando as chaves "{" na hora de criar um novo objeto, eu posso setar as propriedades do mesmo, sem precisar de um construtor
        ObjTeste.AddItem(new GenericProperty { Name = "Nome", Type = GenericProperty.DbType.Varchar });

        ObjTeste.AddItem(new GenericProperty { Name = "Idade", Type = GenericProperty.DbType.Int });

	// Alterando o valor pelo index, como se fosse uma collection normal
        ObjTeste[0].Name = "Endereco";        

        // Jogo no label o valor do nosso objeto, que vai ser "Idade [Int]"
        labelTeste.Text = ObjTeste[1].ToString();&lt;/pre&gt;

&lt;p&gt;Muito legal… Usando os indexadores nós temos a mesma comodidade de uma &lt;em&gt;collection/array &lt;/em&gt;e&lt;em&gt; &lt;/em&gt;também evitamos expor nossa &lt;em&gt;collection&lt;/em&gt;, além de poder criar métodos de conversões no &lt;strong&gt;GET / SET &lt;/strong&gt;do Indexador. E claro os Indexadores podem ser sobrecarregados.&lt;/p&gt;

&lt;p&gt;Bom, espero que tenha ficado claro. Um bom dia para você e ate mais.&lt;/p&gt;

&lt;p&gt;E para finalizar: pretendo estar mais presente no blog a partir de agora!&lt;/p&gt;

&lt;p&gt;Fonte: &lt;a title="http://msdn.microsoft.com/en-us/library/6x16t2tx.aspx" href="http://msdn.microsoft.com/en-us/library/6x16t2tx.aspx"&gt;http://msdn.microsoft.com/en-us/library/6x16t2tx.aspx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Update: Resolvido problemas no case-sensitive.&lt;/p&gt;&lt;img src="http://www.100loop.com/andre-castro/aggbug/225.aspx" width="1" height="1" /&gt;</description><dc:creator>André Castro</dc:creator></item><item><title>Community Zone 2010: presença confirmada</title><link>http://www.100loop.com/ivan-paulovich/archive/2010/08/17/community-zone-2010-presenccedila-confirmada.aspx</link><pubDate>Tue, 17 Aug 2010 13:17:46 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/ivan-paulovich/archive/2010/08/17/community-zone-2010-presenccedila-confirmada.aspx</guid><wfw:comment>http://www.100loop.com/ivan-paulovich/comments/222.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/ivan-paulovich/comments/commentRss/222.aspx</wfw:commentRss><comments>http://www.100loop.com/ivan-paulovich/archive/2010/08/17/community-zone-2010-presenccedila-confirmada.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://www.100loop.com/ivan-paulovich/services/trackbacks/222.aspx</trackback:ping><source url="http://www.100loop.com/ivan-paulovich/rss.aspx">Community Zone 2010: presença confirmada</source><description>&lt;p&gt;&lt;a href="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/fdddf8981201_8E24/CZ.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="CZ" border="0" alt="CZ" src="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/fdddf8981201_8E24/CZ_thumb.jpg" width="500" height="126" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Acabei de receber o convite para participar do &lt;a title="Community Zone 2010" href="http://msdn.microsoft.com/pt-br/events/dd883291.aspx"&gt;Community Zone 2010&lt;/a&gt; (2º Edição!). O Community Zone é um evento onde a Microsoft reúne quem mais atua na comunidade para discussão e integração.&lt;/p&gt;  &lt;p&gt;Nessa edição do evento eu irei com alguns estreantes de CZ &lt;a title="André Paulovich" href="http://twitter.com/andrepaulovich"&gt;André Paulovich&lt;/a&gt; e &lt;a title="André Castro" href="http://twitter.com/twitdecente"&gt;André Castro&lt;/a&gt; (finalistas da &lt;a title="Copa Microsoft de Talentos" href="http://www.dotnetraptors.com.br/ivan-paulovich/archive/2010/06/14/dotnetraptors-campeatildeo-da-seleccedilatildeo-de-craques-da-copa-microsoft.aspx"&gt;Copa Microsoft de Talentos&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;O evento desse ano promete! Estamos curiosos e ansiosos pelas atividades que teremos. E se você vai no evento ou tem curiosidade sobre o que é acompanhe a hashtag &lt;a href="http://twitter.com/#search?q=%23CommunityZone"&gt;#CommunityZone&lt;/a&gt; ou siga-nos no twitter.&lt;/p&gt;  &lt;h3&gt;Atualizado em 19 de agosto&lt;/h3&gt;  &lt;p&gt;O &lt;a title="Fábio Hara" href="http://twitter.com/fabiohara"&gt;Fabio Hara&lt;/a&gt; postou em seu blog algumas informações importantes sobre o &lt;a title="Community Zone 2010" href="http://fabiohara.spaces.live.com/Blog/cns!61F254701739206!3868.entry"&gt;Community Zone 2010&lt;/a&gt;. Dê uma lida nas perguntas mais frequêntes e &lt;a title="Fábio Hara" href="http://twitter.com/fabiohara"&gt;siga-o no twitter&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://www.100loop.com/ivan-paulovich/aggbug/222.aspx" width="1" height="1" /&gt;</description><dc:creator>Ivan Paulovich</dc:creator></item><item><title>Parabéns pra mim!</title><link>http://www.100loop.com/ivan-paulovich/archive/2010/08/17/parabeacutens-pra-mim.aspx</link><pubDate>Tue, 17 Aug 2010 12:53:36 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/ivan-paulovich/archive/2010/08/17/parabeacutens-pra-mim.aspx</guid><wfw:comment>http://www.100loop.com/ivan-paulovich/comments/221.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/ivan-paulovich/comments/commentRss/221.aspx</wfw:commentRss><comments>http://www.100loop.com/ivan-paulovich/archive/2010/08/17/parabeacutens-pra-mim.aspx#comment</comments><slash:comments>5</slash:comments><trackback:ping>http://www.100loop.com/ivan-paulovich/services/trackbacks/221.aspx</trackback:ping><source url="http://www.100loop.com/ivan-paulovich/rss.aspx">Parabéns pra mim!</source><description>&lt;p&gt;&lt;a href="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/f169ab4ca7e4_82BE/eu.png"&gt;&lt;img class="wlDisabledImage" title="eu" alt="eu" src="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/f169ab4ca7e4_82BE/eu_thumb.png" width="410" height="203" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hoje comemoro 24 anos de vida e já comecei o dia muito bem com algumas excelentes surpresas. Vejam só algumas fotos da festa de aniversário que minha namorada preparou pra mim no trabalho:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/f169ab4ca7e4_82BE/100817_083101.jpg"&gt;&lt;img class="wlDisabledImage" title="100817_083101" alt="100817_083101" src="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/f169ab4ca7e4_82BE/100817_083101_thumb.jpg" width="500" height="375" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Na foto estão, &lt;a href="http://twitter.com/fernandoambh"&gt;Fernando&lt;/a&gt;, &lt;a href="http://twitter.com/ricardofscruz"&gt;Ricardo Cruz&lt;/a&gt;, Wescley, &lt;a href="http://twitter.com/renattolima"&gt;Renato Lima&lt;/a&gt;, Alex Alves, &lt;a href="http://twitter.com/ivanpaulovich/"&gt;Ivan Paulovich&lt;/a&gt; (Eu), Danielle Almeida, Giovanni, &lt;a href="http://twitter.com/andrepaulovich"&gt;André Paulovich&lt;/a&gt; e &lt;a href="http://twitter.com/joaochanged"&gt;João Paulo&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/f169ab4ca7e4_82BE/100817_083838.jpg"&gt;&lt;img class="wlDisabledImage" title="100817_083838" alt="100817_083838" src="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/f169ab4ca7e4_82BE/100817_083838_thumb.jpg" width="500" height="375" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Na foto estão, &lt;a href="http://twitter.com/ricardofscruz"&gt;Ricardo Cruz&lt;/a&gt;, &lt;a href="http://twitter.com/joaochanged"&gt;João Paulo&lt;/a&gt;, &lt;a href="http://twitter.com/fernandoambh"&gt;Fernando Miranda&lt;/a&gt;, &lt;a href="http://twitter.com/wespug"&gt;Wescley&lt;/a&gt;, &lt;a href="http://twitter.com/renattolima"&gt;Renato Lima&lt;/a&gt;, &lt;a href="http://twitter.com/twitdecente"&gt;André Castro&lt;/a&gt;, Giovanni, Danielle, &lt;a href="http://twitter.com/andrepaulovich"&gt;André Paulovich&lt;/a&gt;, e &lt;a href="http://twitter.com/LucianoLRibeiro"&gt;Luciano Lima&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Eu ainda vou comemorar meu aniversário nesse sábado. Me manda um e-mail que eu te passo detalhes do lugar e da hora. Ou então me liguem.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/f169ab4ca7e4_82BE/100817_083307.jpg"&gt;&lt;img class="wlDisabledImage" title="100817_083307" alt="100817_083307" src="http://www.100loop.com/Images/www_100loop_com/ivan-paulovich/f169ab4ca7e4_82BE/100817_083307_thumb.jpg" width="500" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.100loop.com/ivan-paulovich/aggbug/221.aspx" width="1" height="1" /&gt;</description><dc:creator>Ivan Paulovich</dc:creator></item><item><title>Lógica de programação</title><link>http://www.100loop.com/andre-paulovich/archive/2010/08/12/logica-de-programacao.aspx</link><pubDate>Thu, 12 Aug 2010 22:17:00 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/andre-paulovich/archive/2010/08/12/logica-de-programacao.aspx</guid><wfw:comment>http://www.100loop.com/andre-paulovich/comments/218.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/andre-paulovich/comments/commentRss/218.aspx</wfw:commentRss><comments>http://www.100loop.com/andre-paulovich/archive/2010/08/12/logica-de-programacao.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://www.100loop.com/andre-paulovich/services/trackbacks/218.aspx</trackback:ping><source url="http://www.100loop.com/andre-paulovich/rss.aspx">Lógica de programação</source><description>&lt;p&gt;Hoje vamos começar com o ponto fundamental de todo processo de desenvolvimento: &lt;span style="font-weight: bold;"&gt;Lógica de programação&lt;/span&gt;. Afinal, todos que esperam algum dia criar um sistema precisam desenvolver seu raciocínio lógico. Mas o que é Lógica? Bem, não é fácil definir o que é lógica sem usar um jargão ou uma destas definições de livros acadêmicos, por isso, vou usar uma definição que encontrei na wikipedia: "...a lógica é o ramo da filosofia que cuida das regras do bem pensar, ou do pensar correto, sendo, portanto, um &lt;em&gt;instrumento do pensar"&lt;/em&gt;. Viram como é difícil? Mesmo a definição da wikipedia é bastante confusa, mas podemos perceber que a lógica esta diretamente &lt;span style="font-weight: bold;"&gt;relacionada ao raciocínio&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;É justamente neste ponto que começa todo desenvolvimento de sistemas. Pois, um sistema nada mais é do que a união de várias pequenas soluções de problemas. E para resolver problemas precisamos raciocinar. Todo desenvolvedor de sistemas precisa antes de mais nada saber "lógica de programação", ou seja, precisa saber aplicar seu raciocínio na construção de algorítimos. Mas o que são algorítimos?&lt;/p&gt;
&lt;p&gt;Um algoritmo é a seqüência finita de passos que levam a execução de uma determinada tarefa. Ou seja, podemos pensar em algoritmo como uma receita ou um manual que mostra a seqüência de instruções resultam na execução desta tarefa. E não importa qual for a tarefa, até mesmo as coisas mais simples da vida cotidiana podem ser traduzidas em algorítimos. Imagine que você vá tomar um banho. Como seria o algorítimo da tarefa "Tomar banho"? Talvez seja mais ou menos assim:&lt;/p&gt;
&lt;p&gt;- Início   &lt;br /&gt;
1) Tirar a roupa.    &lt;br /&gt;
2) Ligar o chuveiro.    &lt;br /&gt;
3) Entrar na água.    &lt;br /&gt;
4) Passar sabonete.    &lt;br /&gt;
5) Enxaguar.    &lt;br /&gt;
6) Desligar o chuveiro.    &lt;br /&gt;
7) Enxugar.    &lt;br /&gt;
- Fim &lt;/p&gt;
&lt;p&gt;Mas não podemos simplesmente dizer a um computador: "Calcule meu imposto de renda" ou "Controle o meu estoque". Por isso precisamos saber escrever estes algorítimos numa língua que ele compreenda. É neste ponto que muitas pessoas se "desesperam" e pensam: "Ai caramba! Eu tento aprender a falar inglês desde que tenho 5 anos e até hoje não consigo falar nada além de '&lt;em&gt;the sky is blue&lt;/em&gt;' ou '&lt;em&gt;the book is on the table&lt;/em&gt;'... como vou aprender mais uma língua?!". Calma! Aprender uma linguagem de programação não é um bicho de sete cabeças. Como tudo na vida exige apenas um pouco de dedicação, mas não vamos entrar neste mérito, pois &lt;a href="http://www.100loop.com/andre-paulovich/archive/2010/08/12/curso-de-programacao.aspx"&gt;já discutimos estes aspectos em nosso primeiro post&lt;/a&gt;. Felizmente, para facilitar as coisas vamos utilizar um "pseudocódigos" escritos em PORTUGOL, que é uma espécie de linguagem de programação baseada em verbetes de comando em Português, e portanto de fácil compreensão.&lt;/p&gt;
&lt;p&gt;Como qualquer linguagem de programação, o PORTUGOL, que apesar de ser uma base de nosso "pseudocódigo", exige que sigamos uma série de regras na construção do nossos algorítmos. Podemos resumir rapidamente estas regras da seguinte forma:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Usar somente um verbo por frase.&lt;/li&gt;
    &lt;li&gt;Escrever o código mais simples possível.&lt;/li&gt;
    &lt;li&gt;Usar frases curtas e simples.&lt;/li&gt;
    &lt;li&gt;Ser objetivo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Então prepare-se, a partir de nosso próximo post, vamos escrever algorítimos pra valer. Um abraço a todos e bons estudos. &lt;/p&gt;&lt;img src="http://www.100loop.com/andre-paulovich/aggbug/218.aspx" width="1" height="1" /&gt;</description><dc:creator>André Paulovich</dc:creator></item><item><title>Curso de programação</title><link>http://www.100loop.com/andre-paulovich/archive/2010/08/12/curso-de-programacao.aspx</link><pubDate>Thu, 12 Aug 2010 19:40:56 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/andre-paulovich/archive/2010/08/12/curso-de-programacao.aspx</guid><wfw:comment>http://www.100loop.com/andre-paulovich/comments/217.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/andre-paulovich/comments/commentRss/217.aspx</wfw:commentRss><comments>http://www.100loop.com/andre-paulovich/archive/2010/08/12/curso-de-programacao.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://www.100loop.com/andre-paulovich/services/trackbacks/217.aspx</trackback:ping><source url="http://www.100loop.com/andre-paulovich/rss.aspx">Curso de programação</source><description>&lt;p&gt;Olá amigos, esta é a segunda vez que tentarei realizar este curso… para tentar concluir este propósito vou contar com a ajuda de algums amigos. Um deles é o &lt;a target="_blank" href="http://www.100loop.com/ricardo-cruz/"&gt;Ricardo Cruz&lt;/a&gt;, analista de sistemas e blogueiro aqui do 100loop. No futuro teremos outras pessoas escrevendo para a série de posts do curso.&lt;/p&gt;
&lt;p&gt;A razão para realizar o curso, é a que tenho conversado com alguns amigos; muitos deles até acompanham assuntos de tecnologia… são capazes de alterar um &lt;em&gt;“programinha pronto”&lt;/em&gt; em alguma linguagem de programação. Mas a grande maioria vive me perguntando como aprender a &lt;em&gt;"programar de verdade"&lt;/em&gt; para criar algo do zero, dominando os conceitos e por consequência… aprender qualquer linguagem &lt;strong&gt;mais rapidamente&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Pensando nisso, imaginei criar uma série de posts para discutir conceitos básicos de desenvolvimento; começando desde lógica, sintaxe, algorítimos e afins... para que possa servir de apoio a qualquer pessoa que se interesse por programação e não sabe por onde começar.&lt;/p&gt;
&lt;p&gt;Pensei em começar escrevendo sobre "lógica de progamação" como nosso primeiro fundamento. Mas antes gostaria de avisar a todos que forem acompanhar estes posts que nada acontece da noite para o dia... ninguém que leia este blog irá aprender a programar em poucas semanas, só porque leu alguns posts e acompanhou algumas discussões. Tudo leva tempo. Há um tempo atrás, li um artigo muito interessante do &lt;a href="http://pihisall.wordpress.com/2007/03/15/aprenda-a-programar-em-dez-anos"&gt;Peter Norvig (traduzido pelo Augusto Radtke)&lt;/a&gt; que tem o intrigante título &lt;strong&gt;"Aprenda a programar em 10 anos"&lt;/strong&gt;. A primeira vista pode parecer um texto desanimador para quem está querendo começar agora, ainda mais numa sociedade imediatista como a nossa... movida a "fast food", "fast shop"... "fast tudo", mas acredite, se você realmente quer aprender, tenha paciência, trace um objetivo e dedique-se de verdade.&lt;/p&gt;
&lt;p&gt;Uma boa dica para os iniciantes é traçar uma meta. Saiba perfeitamente onde você quer chegar. Por exemplo, se você trabalha com vendas, tente programar para um dia conseguir fazer um sistema que lhe ajude a controlar seu fluxo de caixa; ou mesmo que controle suas despesas do mês. Este pode ser o objetivo que vai lhe inspirar a continuar aprendendo. Não tenha medo de pensar algo assim, mas lembre-se do primeiro ponto deste texto... tenha paciência, pode ser que você só venha a conseguir completar este programa em 2 anos... talvez em 6 meses. Só depende de você.&lt;/p&gt;
&lt;p&gt;Outro ponto fundamental é não se enganar, conheci muitas pessoas que tem extrema dificuldade em reconhecer que não domínam determinado assunto. Não sei o quanto isso é comum em outras áreas, mas na área de tecnologia, alguns profissionais não conseguem admitir que não sabem resolver um determinado problema sozinhos e preferem não pedir ajuda. Um grande profissional da área de tecnologia exercita não apenas sua comunicação com os computadores, mas principalmente com outros profissionais. Algo parecido acontece quando, decidimos atropelar nossos estudos passando para outro assunto sem ter concluído (entenda que conclúido é "dominado") o assunto anterior. E claro, isto se encaixa perfeitamente no outro fundamento: mantenha contatos com pessoas que já programam, pois elas irão lhe ajudar a avaliar seus conhecimentos, lhe darão suporte quando você tiver dúvidas e quem sabe um dia vocês não trabalhem juntos?&lt;/p&gt;
&lt;p&gt;Tentarei participar ativamente de tudo isso que falei para aqueles que se dispuserem a participar do grupo... escreverei, postarei dicas, responderei perguntas e estarei à disposição sempre que possível. Então nos vemos em breve para iniciarmos nossos estudos... e espero poder contar com outros grandes profissionais nesta tutoria on-line. Um grande abraço a todos.&lt;/p&gt;&lt;img src="http://www.100loop.com/andre-paulovich/aggbug/217.aspx" width="1" height="1" /&gt;</description><dc:creator>André Paulovich</dc:creator></item><item><title>Leitor de RSS para ASP.NET mais simples que existe</title><link>http://www.100loop.com/ivan-paulovich/archive/2010/08/11/leitor-de-rss-para-asp-net-mais-simples-que-existe.aspx</link><pubDate>Wed, 11 Aug 2010 15:56:34 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/ivan-paulovich/archive/2010/08/11/leitor-de-rss-para-asp-net-mais-simples-que-existe.aspx</guid><wfw:comment>http://www.100loop.com/ivan-paulovich/comments/216.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/ivan-paulovich/comments/commentRss/216.aspx</wfw:commentRss><comments>http://www.100loop.com/ivan-paulovich/archive/2010/08/11/leitor-de-rss-para-asp-net-mais-simples-que-existe.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://www.100loop.com/ivan-paulovich/services/trackbacks/216.aspx</trackback:ping><source url="http://www.100loop.com/ivan-paulovich/rss.aspx">Leitor de RSS para ASP.NET mais simples que existe</source><description>&lt;p&gt;O código abaixo é um leitor de RSS para ASP.NET e você pode colocar em praticamente todo site ASP.NET que permita acrescentar User Controls.&lt;/p&gt;  &lt;pre class="brush: xml"&gt;&amp;lt;%@ Control Language="C#" AutoEventWireup="True" Inherits="System.Web.UI.UserControl" %&amp;gt;
&amp;lt;%@ OutputCache Duration="600" VaryByParam="None" VaryByControl="None" %&amp;gt;

&amp;lt;script runat="server"&amp;gt;
    public string Url
    {
        get { return Rss.DataFile; }
        set { Rss.DataFile = value; }
    }
&amp;lt;/script&amp;gt;

&amp;lt;asp:Repeater ID="List" runat="server" DataSourceID="Rss"&amp;gt;
    &amp;lt;HeaderTemplate&amp;gt;
        &amp;lt;ul&amp;gt;
    &amp;lt;/HeaderTemplate&amp;gt;
    &amp;lt;ItemTemplate&amp;gt;
        &amp;lt;li&amp;gt;
            &amp;lt;asp:HyperLink ID="title" runat="server" 
                NavigateUrl='&amp;lt;%# XPath("link") %&amp;gt;' Text='&amp;lt;%# XPath("title") %&amp;gt;'&amp;gt;&amp;lt;/asp:HyperLink&amp;gt;
        &amp;lt;/li&amp;gt;
    &amp;lt;/ItemTemplate&amp;gt;
    &amp;lt;FooterTemplate&amp;gt;
        &amp;lt;/ul&amp;gt;
    &amp;lt;/FooterTemplate&amp;gt;
&amp;lt;/asp:Repeater&amp;gt;

&amp;lt;asp:XmlDataSource CacheDuration="600" ID="Rss" 
    runat="server" XPath="/rss/channel/item"&amp;gt;
&amp;lt;/asp:XmlDataSource&amp;gt;&lt;/pre&gt;

&lt;p&gt;Para instalar no seu site basta que você insira código semelhante a esse:&lt;/p&gt;

&lt;pre class="brush: xml"&gt;&amp;lt;%@ Register TagName="RssFeed" TagPrefix="Extra" Src="~/Controls/RssFeed.ascx" %&amp;gt;&lt;/pre&gt;

&lt;p&gt;E em qualquer parte da sua página você pode usar o controle com um código assim:&lt;/p&gt;

&lt;pre class="brush: xml"&gt;&lt;extra:rssfeed id="Rssfeed1" runat="server" url="http://pipes.yahoo.com/pipes/pipe.run?_id=d02de667b61b1bd7884bb6a5acb9b895&amp;amp;_render=rss" /&gt;&lt;/pre&gt;&lt;img src="http://www.100loop.com/ivan-paulovich/aggbug/216.aspx" width="1" height="1" /&gt;</description><dc:creator>Ivan Paulovich</dc:creator></item><item><title>O perfil que realmente importa</title><link>http://www.100loop.com/andre-paulovich/archive/2010/08/10/o-perfil-que-realmente-importa.aspx</link><pubDate>Tue, 10 Aug 2010 20:06:49 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/andre-paulovich/archive/2010/08/10/o-perfil-que-realmente-importa.aspx</guid><wfw:comment>http://www.100loop.com/andre-paulovich/comments/213.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/andre-paulovich/comments/commentRss/213.aspx</wfw:commentRss><comments>http://www.100loop.com/andre-paulovich/archive/2010/08/10/o-perfil-que-realmente-importa.aspx#comment</comments><slash:comments>4</slash:comments><trackback:ping>http://www.100loop.com/andre-paulovich/services/trackbacks/213.aspx</trackback:ping><source url="http://www.100loop.com/andre-paulovich/rss.aspx">O perfil que realmente importa</source><description>&lt;p&gt;Esta semana tirei umas horinhas para atualizar meus perfis de redes sociais, e logo após a primeira meia hora de “trabalho duro”, me peguei pensando sobre a importância de manter todos estes perfis atualizados. Na verdade, quando a gente mantêm estes dados online… com uma vasta gama de informações sobre nós, existe uma razão para isso: &lt;span style="font-weight: bold;"&gt;Queremos ser vistos!&lt;/span&gt; E é neste ponto que queria “trocar uma idéia” com vocês. Eu particularmente possuo: orkut, facebook, linked-in, twitter… etc. Mas afinal, qual deles realmente importa?! &lt;/p&gt;
&lt;p&gt;É claro que todos cumprem objetivos diferentes, mas se você não tem tempo para ficar horas atualizando seus perfis online, escolha bem aquilo que você está alimentando no seu “Ego-google” (que nada mais é do que aquilo que o google diz sobre você, experimente pesquisar seu nome no google: é bem divertido). Mas voltando ao assunto, é preciso ter muito cuidado com aquilo que postamos na internet, afinal não temos muito controle daquilo que o google diz sobre nós. &lt;/p&gt;
&lt;p&gt;Mas porque estou dizendo isso? Bom, já participei de vários processos seletivos, e acho que não é segredo para ninguém que muitos dos empregadores costumam pesquisar a vida dos candidatos no google… vasculhando orkut, facebook e o que mais puder encontrar. Nada mais natural, a gente sempre procura coisas boas… trabalhos de faculdade, projetos publicados, áreas de interesse (de preferência na área pleiteada)… mas é claro que as vezes encontramos o que não queríamos… do tipo: associações com comunidades, no melhor estilo “odeio trabalhar na segunda-feira” ou “meu chefe é um pé no saco”. Não quero de forma alguma criar uma polêmica sobre o que se faz fora da empresa, mas apenas alertar sobre os perigos de manter perfis deste tipo disponíveis e abertos para TODO MUNDO ver. Afinal, a grande maioria destas redes possuem mecanismos de controle de privacidade e DEVEM ser utilizados.&lt;/p&gt;
&lt;p&gt;Veja meu “ego-google” como está neste momento…&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/Images/pub_100loop_com/andre-paulovich/fecfa9189f5f_DD74/egogoogle.jpg"&gt;&lt;img height="460" width="399" style="display: inline;" class="wlDisabledImage" title="ego-google" alt="ego-google" src="http://www.100loop.com/Images/pub_100loop_com/andre-paulovich/fecfa9189f5f_DD74/egogoogle_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;E então para minha surpresa, os dois primeiros links que o google vincula ao meu nome são justamente da rede social que eu mais gosto, o &lt;a href="http://br.linkedin.com/in/andrepaulovich" target="_blank"&gt;Linked In&lt;/a&gt;. Afinal, é a rede social mais produtiva para quem usa… pois é uma maneira simples de deixar o seu currículo disponível online para quem quizer ver, o sistema permite ainda que você se associe aos grupos de empresas, profissionais ou instituições de ensino… podendo ainda fazer o famoso QI (“quem indica”)… já que você pode recomendar ou ser recomendado por colegas de trabalho. Ou seja, um prato cheio para “head hunters”… espalhados pelo país a fora. &lt;span style="font-weight: bold;"&gt;Eles podem estar procurando por você&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Mas isso é apenas uma parte do seu “ego-google”, é sempre bom manter conteúdo de relevância sobre você ou de sua autoria. No meu caso, participar do &lt;span style="font-weight: bold;"&gt;100loop&lt;/span&gt; escrevendo artigos técnicos, participar como palestrante e divulgar eventos no &lt;span style="font-weight: bold;"&gt;DotNetRaptors &lt;/span&gt;além de ser um hobbie e trazer beneficios para a comunidade… é em contra partida, um ótimo marketing pessoal. E é aí que que todos os entusiastas da comunidade sempre batem na mesma tecla… “participe da comunidade ativamente, você vai colher frutos no futuro”. Este “futuro” pode ser muito antes do que você imagina… e este “fruto” nada mais é do que o reconhecimento merecido pelo seu trabalho, pois o MERCADO está te vendo.&lt;/p&gt;
&lt;p&gt;Você precisa apenas tornar as coisas mais fáceis para quem te procura. Acompanhe regularmente seu “ego-google”, mantenha aquilo que diz respeito apenas para os seus amigos mais íntimos, como privados (para evitar mau-entendidos)… e principalmente&lt;span style="font-weight: bold;"&gt; valorize o seu perfil profissional: é ele que realmente importa&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Daí vão algumas dicas rápidas:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Responda fóruns, escreva artigos e participe de um blog.&lt;/li&gt;
    &lt;li&gt;Tenha um perfil no linked in atualizado.&lt;/li&gt;
    &lt;li&gt;Procure manter um currículo online.&lt;/li&gt;
    &lt;li&gt;Mantenha sua vida pessoal, “privada”.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;um abraço à todos, e divirtam-se.&lt;/p&gt;&lt;img src="http://www.100loop.com/andre-paulovich/aggbug/213.aspx" width="1" height="1" /&gt;</description><dc:creator>André Paulovich</dc:creator></item><item><title>Design Pattern TSF - Telefone Sem Fio</title><link>http://www.100loop.com/luciano-lima/archive/2010/08/02/design-pattern-tsf-telefone-sem-fio.aspx</link><pubDate>Mon, 02 Aug 2010 19:29:52 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/luciano-lima/archive/2010/08/02/design-pattern-tsf-telefone-sem-fio.aspx</guid><wfw:comment>http://www.100loop.com/luciano-lima/comments/203.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/luciano-lima/comments/commentRss/203.aspx</wfw:commentRss><comments>http://www.100loop.com/luciano-lima/archive/2010/08/02/design-pattern-tsf-telefone-sem-fio.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://www.100loop.com/luciano-lima/services/trackbacks/203.aspx</trackback:ping><source url="http://www.100loop.com/luciano-lima/rss.aspx">Design Pattern TSF - Telefone Sem Fio</source><description>&lt;p&gt;&lt;img hspace="0" align="left" vspace="0" style="margin-right: 10px;" src="http://www.lucianolima.com.br/image.axd?picture=04telefone_lata.jpg" alt="" /&gt;Hoje vamos mudar um pouco nossas conversas, não vamos falar nem mostrar uma linha de código se quer. Bem, não sei nem por onde começar esta discussão, mas vou tentar colocar da melhor forma possível e depois deixo minha opinião e espero que vocês possam contribuir deixando a opinião de vocês. Aliás, para os menos avisados, NÃO EXISTE o Design Pattern TSF, na verdade estou chamando assim porque muitos, assim como eu, já brincaram de telefone sem fio quando criança e é exatamente isso que encontramos na maior parte das empresas quando se fala em desenvolvimento de software.&lt;/p&gt;
&lt;p&gt;Você deve ter ficado meio confuso com isso não é? Como uma brincadeira de criança pode estar presente numa empresa que desenvolve software? “O Luciano ficou maluco? Telefone sem fio pra desenvolver sistemas? É, realmente ele pirou de vez!!”. O que posso dizer é, esse modelo de desenvolvimento existe e é amplamente utilizado! &lt;/p&gt;
&lt;p&gt;Bom, antes de começarmos, gostaria de dizer os motivos que me levaram a escrever sobre esse assunto. O primeiro deles é porque estou estudando metodologias de desenvolvimento, o segundo é que percebi que terei mais uma vez que quebrar o paradigma para a construção de um software e o terceiro e último motivo é pelo simples prazer em compartilhar um pouco da minha experiência.&lt;/p&gt;
&lt;p&gt;Para tentar explicar o que acabei de citar acima vamos ver um exemplo, qualquer coincidência é mera realidade (rsrs), para que vocês possam entender melhor o que estou dizendo. &lt;/p&gt;
&lt;p&gt;Suponhamos que você seja o analista de uma fabrica de software e que seu mais novo projeto seja desenvolver um sistema para uma empresa de investimentos, uma corretora de valores. &lt;/p&gt;
&lt;p&gt;Tudo começa quando você  vai até o cliente e discute com ele tudo que ele precisa no novo software (Home Broker). A par do projeto e das necessidades do cliente, você irá discutir com o Analista de Negócios, pois ele, mais do que ninguém,  possui o conhecimento de todo o funcionamento de um Home Broker. De posse de toda informação e de anotações feitas durante a discussão com o Analista de Negócio e com o cliente, você dá inicio ao processo de documentação, seguindo ou não algum padrão (isso vai de empresa para empresa, de analista para analista). &lt;/p&gt;
&lt;p&gt;Findado este processo de documentação você irá validar estes documentos junto ao Analista de Negócio. Dada tal aprovação, o próximo passo é passar tudo para o Coordenador da equipe de desenvolvimento para que o mesmo possa repassar para os programadores e DBA´s suas tarefas para que os mesmos coloquem o desenvolvimento do projeto em prática. &lt;/p&gt;
&lt;p&gt;A maioria dos projetos que trabalhei e que trabalho seguem essa linha de raciocínio, e isso não é exclusividade de uma ou outra empresa, esta forma de trabalho é geral, encontrada também em grandes empresas, posso citar dentre as quais trabalhei CEF e FGV.&lt;/p&gt;
&lt;p&gt;Até ai tudo bem, não vimos nada demais só que como todo bom projeto, começam a surgir algumas dúvidas (digamos que sejam as regras de negócio, e olha que você documentou tudo heim!!) e logo um dos programadores irá até seu Coordenador tentar sanar a dúvida. Qual será a reação do Coordenador? Isso mesmo, ele irá até você (Analista de Sistemas) e, assim como ele, você irá até o Analista de Negócios tentar da melhor forma possível captar informações suficientes para sanar a dúvida do Coordenador que por sua vez irá repassar para o programador. Algo soa familiar a alguma brincadeira da sua infância? Alguma mera semelhança com o “Telefone sem Fio”? Não né!&lt;/p&gt;
&lt;p&gt;E um dos problemas que vejo nessa forma de trabalho é quando as informações começam a sofrer distorção, ou seja, nem tudo é passado de forma correta para o pessoal de desenvolvimento gerando pequenas falhas no software e quando for enviado para a equipe de testes, muitos erros serão detectados fazendo com que o software volte para ser refeito gerando atrasos não planejados e consequentemente insatisfação por parte do cliente.&lt;/p&gt;
&lt;p&gt;Os padrões de desenvolvimento de software são bons, mas como tudo que diz respeito à tecnologia, metodologias, conceitos e padrões, também precisam evoluir, e talvez um pouco mais de flexibilidade nestas comunicações seja uma forma de adicionar flexibilidade e minimizar os ruídos de comunicação.&lt;/p&gt;&lt;img src="http://www.100loop.com/luciano-lima/aggbug/203.aspx" width="1" height="1" /&gt;</description><dc:creator>Luciano Lima</dc:creator></item><item><title>SEO, ASP.Net e Paulovich.Data</title><link>http://www.100loop.com/andre-paulovich/archive/2010/08/02/seo-asp-net-e-paulovich-data.aspx</link><pubDate>Tue, 03 Aug 2010 01:32:19 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/andre-paulovich/archive/2010/08/02/seo-asp-net-e-paulovich-data.aspx</guid><wfw:comment>http://www.100loop.com/andre-paulovich/comments/204.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/andre-paulovich/comments/commentRss/204.aspx</wfw:commentRss><comments>http://www.100loop.com/andre-paulovich/archive/2010/08/02/seo-asp-net-e-paulovich-data.aspx#comment</comments><slash:comments>4</slash:comments><trackback:ping>http://www.100loop.com/andre-paulovich/services/trackbacks/204.aspx</trackback:ping><source url="http://www.100loop.com/andre-paulovich/rss.aspx">SEO, ASP.Net e Paulovich.Data</source><description>&lt;p&gt;Uma boa dica para quem esta desenvolvendo websites em ASP.Net e pretende que seu projeto esteja bem posicionado nos mecanismos de busca é utilizar técnicas de Search Engine Optimization, ou simplesmente SEO.&lt;/p&gt;
&lt;p&gt;Vou dar uma dica rápida de como você pode por exemplo, alterar um pouco a estrutura de navegação do seu projeto para ganhar muitas posições nos buscadores. Primeiramente precisamos criar um roteamento de requisições no servidor para eliminar URLs fracas semânticamente, como por exemplo: &lt;strong&gt;~/noticias.aspx?codnoticia=12&lt;/strong&gt; e converter em algo como &lt;strong&gt;~/noticias/muito-legal-programar-em-aspnet&lt;/strong&gt;. Ou seja, ao inves da URL conter apenas o código da notícia nós podemos apresentar o título da matéria e ganhar mais “relevância” nos buscadores.&lt;/p&gt;
&lt;p&gt;O meu vídeo na &lt;a href="http://www.dotnetraptors.com.br/ivan-paulovich/archive/2010/06/14/dotnetraptors-campeatildeo-da-seleccedilatildeo-de-craques-da-copa-microsoft.aspx" target="_blank"&gt;Copa Microsoft de Talentos&lt;/a&gt; foi sobre esse assunto, por isso vou deixar para vocês o link do mesmo, e não vou adentrar muito nesta etapa. ok?&lt;/p&gt;
&lt;p&gt; &lt;object height="400" width="520"&gt;
&lt;param value="true" name="allowfullscreen" /&gt;
&lt;param value="always" name="allowscriptaccess" /&gt;
&lt;param value="http://vimeo.com/moogaloop.swf?clip_id=12201036&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" name="movie" /&gt;&lt;embed height="400" width="520" allowscriptaccess="always" allowfullscreen="true" type="application/x-shockwave-flash" src="http://vimeo.com/moogaloop.swf?clip_id=12201036&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;/object&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/12201036"&gt;UrlRouting com VS2010 - André Paulovich&lt;/a&gt; from &lt;a href="http://vimeo.com/user3946213"&gt;André Paulovich&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Porém, mesmo depois que nós temos o roteamente pronto, nós ainda temos que dar um jeito de criar as URLs referentes ao conteúdo de acordo com os títulos. E é aí que entra a segunda parte da dica. Nós temos uma forma muito fácil de converter um texto cheio de caracteres especiais (que não podem ser usados em URLS), em um texto equivalente, que será compreendido tanto pelos buscadores como por nós que vamos lê-los.&lt;/p&gt;
&lt;p&gt;Digamos que nossa notícia tenha o título: &lt;span style="font-style: italic;"&gt;"É hoje o último dia da competição de pacman"&lt;/span&gt;. Nós não podemos simplesmente colocar em caixa baixa o texto e eliminar os espaços, pois os acentos, cedilhas e etc continuariam avalhando as URLs. Por isso a melhor maneira é usando a tabela ASCII. São dois passos:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Precisamos de um array com os bytes do texto original (até aqui 8bits de informação por byte):     &lt;br /&gt;
    byte[] b = &lt;span style="font-weight: bold;"&gt;Encoding.GetEncoding(1251).GetBytes(name);      &lt;/span&gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Depois, basta pegar o código ASCII de cada byte de texto:     &lt;br /&gt;
    string t =&lt;span style="font-weight: bold;"&gt; Encoding.ASCII.GetString(b);&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Resumindo, quando você tem os caracteres &lt;strong&gt;áâàã&lt;/strong&gt;, todos possuem o mesmo código ASCII e é essa a jogada. Falta agora apenas subistituir os espaços por um traço e nós podemos então criar uma função como esta:&lt;/p&gt;
&lt;pre class="brush:csharp"&gt; static public string GenarateAlias(string name)&lt;br /&gt; {   	&lt;br /&gt;        byte[] b = Encoding.GetEncoding(1251).GetBytes(name); // 8 bit characters&lt;br /&gt;        string t = Encoding.ASCII.GetString(b); // 7 bit characters  	&lt;br /&gt;        return t.Trim().Replace(" ", "-").ToLower();&lt;br /&gt; }  &lt;/pre&gt;
&lt;p&gt;Agora, para não ter que ficar chamando esta função o tempo todo, nós podemos inseri-la num evento do Paulovich.Data, onInserting e onUpdating, para que este “apelido” do título seja gerado sempre que o usuário salve uma nova notícia ou atualize uma existente. Se você ainda não conhece o ciclo de vida de uma classe Persist do Paulovich.Data &lt;a target="_blank" href="http://www.100loop.com/andre-paulovich/archive/2009/11/07/persistindo-dados-com-paulovich-data.aspx"&gt;veja neste link um exemplo rápido&lt;/a&gt;.&lt;/p&gt;
&lt;pre class="brush:csharp"&gt;protected override void OnInserting(object sender, System.ComponentModel.CancelEventArgs e) &lt;br /&gt;{ 	&lt;br /&gt;    Alias = GenarateAlias(Title); // O Alias é uma propriedade da classe Persist	&lt;br /&gt;    base.OnInserting(sender, e); &lt;br /&gt;}   &lt;br /&gt;&lt;br /&gt;protected override void OnUpdating(object sender, System.ComponentModel.CancelEventArgs e) &lt;br /&gt;{ 	&lt;br /&gt;    Alias = GenarateAlias(Title); 	&lt;br /&gt;    base.OnUpdating(sender, e); &lt;br /&gt;}  &lt;/pre&gt;
&lt;p&gt;Pronto! Você já pode utilizar o Alias da notícia para retornar a notícia desejada.&lt;/p&gt;&lt;img src="http://www.100loop.com/andre-paulovich/aggbug/204.aspx" width="1" height="1" /&gt;</description><dc:creator>André Paulovich</dc:creator></item><item><title>A webAula quer o seu talento</title><link>http://www.100loop.com/andre-paulovich/archive/2010/07/29/a-webaula-quer-o-seu-talento.aspx</link><pubDate>Thu, 29 Jul 2010 15:37:06 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/andre-paulovich/archive/2010/07/29/a-webaula-quer-o-seu-talento.aspx</guid><wfw:comment>http://www.100loop.com/andre-paulovich/comments/201.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/andre-paulovich/comments/commentRss/201.aspx</wfw:commentRss><comments>http://www.100loop.com/andre-paulovich/archive/2010/07/29/a-webaula-quer-o-seu-talento.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://www.100loop.com/andre-paulovich/services/trackbacks/201.aspx</trackback:ping><source url="http://www.100loop.com/andre-paulovich/rss.aspx">A webAula quer o seu talento</source><description>&lt;p&gt;Como todos puderam perceber, nos últimos dias estivemos publicando algumas vagas aqui no blog, afinal a gente sempre fala em todos os nosso eventos: “Os grupos como o 100loop e DotNetRaptors são pontes entre a comunidade e o mercado”. Por isso nada mais natural que as empresas nos solicitarem para publicar algumas vagas aqui, normalmente a gente repassa essas vagas diretamente para algumas pessoas selecionando o perfil dos vagas e dos profissionais. Porém, estão aparecendo muitas vagas e por isso… vamos deixar as coisas seguirem o seu fluxo. A gente publica, quem interessar, corre atrás e batalha, ok?! Só queria ressaltar que não é nossa intenção fazer do 100loop uma agência de empregos… nossa intenção é continuar sempre com bons artigos técnicos como foco principal.&lt;/p&gt;
&lt;p&gt;Quase todo mundo que posta aqui no 100loop trabalha na webAula, por isso se você está atrás de uma boa oportunidade de trabalho e “de quebra” trabalhar próximo de profissionais diferenciados e envolvidos com a comunidade técnica, essa pode ser a sua chance. Venha trabalhar conosco. A webAula S/A é pioneira e líder no mercado de e-learning brasileiro. Com unidades em Belo Horizonte, Brasília, São Paulo e Atlanta/EUA, e no momento oferece diversas oportunidades de trabalho, em vários ramos de atuação. Em especial separei três vagas que estão de acordo com o nosso público. Segura aí…&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/Images/pub_100loop_com/andre-paulovich/AwebAulaqueroseutalento_8B78/logo_par_webaula.jpg"&gt;&lt;img height="90" width="227" src="http://www.100loop.com/Images/pub_100loop_com/andre-paulovich/AwebAulaqueroseutalento_8B78/logo_par_webaula_thumb.jpg" alt="logo_par_webaula" title="logo_par_webaula" class="wlDisabledImage" style="display: inline;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analista de Sistemas .Net - Belo Horizonte (1 vaga)&lt;/strong&gt;     &lt;br /&gt;
O analista .NET tem todas as atribuições do programador .NET e também deve ter condições de analisar e criar diagramas de classes e entidade-relacionamento, utilizando as boas práticas do projeto orientado por objeto. Também deve contribuir junto ao gerente na conceituação dos produtos emitindo opiniões e validando as informações. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Programador .Net - Belo Horizonte (1 vaga)     &lt;br /&gt;
&lt;/strong&gt;O programador .NET desenvolve aplicativos baseados na tecnologia .NET. Deve ser capaz de entender especificações documentadas e solicitações verbais. Deve desenvolver sistemas inteiros ou partes deles, codificar com habilidade em client side (JavaScript) e server side (C#). Deve também realizar testes básicos nas implementações com o objetivo de minimizar o retrabalho e ter boa qualidade nas produções. O programador deve também ter condições de elaborar sentenças SQL complexas que envolvam múltiplas tabelas e construir stored procedures. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Programador ASP - Belo Horizonte (1 vaga)     &lt;br /&gt;
&lt;/strong&gt;O analista ASP tem todas as atribuições do programador ASP e também deve ter condições de analisar e criar diagramas de classes e entidade-relacionamento, utilizando as boas práticas do projeto orientado por objeto. Também deve contribuir junto ao gerente na conceituação dos produtos emitindo opiniões e validando as informações. &lt;/p&gt;
&lt;p&gt;Para ver a lista completa de oportunidades acesse: &lt;a href="http://www.webaula.com.br/pt/trabalhe-conosco"&gt;http://www.webaula.com.br/pt/trabalhe-conosco&lt;/a&gt; se você quizer se candidatar, basta mandar seu currículo para &lt;a href="mailto:lucia.mendes@webaula.com.br"&gt;lucia.mendes@webaula.com.br&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Grande abraço a todos,   &lt;br /&gt;
A gente se vê por aqui… (nenhuma referência ao slogan da rede globo, viu!)&lt;/p&gt;&lt;img src="http://www.100loop.com/andre-paulovich/aggbug/201.aspx" width="1" height="1" /&gt;</description><dc:creator>André Paulovich</dc:creator></item><item><title>Atualizando para ASP.NET 4</title><link>http://www.100loop.com/ivan-paulovich/archive/2010/07/27/atualizando-para-asp-net-4.aspx</link><pubDate>Tue, 27 Jul 2010 13:17:31 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/ivan-paulovich/archive/2010/07/27/atualizando-para-asp-net-4.aspx</guid><wfw:comment>http://www.100loop.com/ivan-paulovich/comments/199.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/ivan-paulovich/comments/commentRss/199.aspx</wfw:commentRss><comments>http://www.100loop.com/ivan-paulovich/archive/2010/07/27/atualizando-para-asp-net-4.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://www.100loop.com/ivan-paulovich/services/trackbacks/199.aspx</trackback:ping><source url="http://www.100loop.com/ivan-paulovich/rss.aspx">Atualizando para ASP.NET 4</source><description>&lt;p&gt;Voltei de uma viagem de férias ontem. E voltei animado para atualizar o blog para ASP.NET 4, então se nas próximas horas ocorrem algumas loucuras por aqui não se desesperem.&lt;/p&gt;&lt;img src="http://www.100loop.com/ivan-paulovich/aggbug/199.aspx" width="1" height="1" /&gt;</description><dc:creator>Ivan Paulovich</dc:creator></item><item><title>HTTPHandlers</title><link>http://www.100loop.com/andre-castro/archive/2010/07/14/httphandlers.aspx</link><pubDate>Wed, 14 Jul 2010 14:51:14 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/andre-castro/archive/2010/07/14/httphandlers.aspx</guid><wfw:comment>http://www.100loop.com/andre-castro/comments/196.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/andre-castro/comments/commentRss/196.aspx</wfw:commentRss><comments>http://www.100loop.com/andre-castro/archive/2010/07/14/httphandlers.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://www.100loop.com/andre-castro/services/trackbacks/196.aspx</trackback:ping><source url="http://www.100loop.com/andre-castro/rss.aspx">HTTPHandlers</source><description>&lt;p&gt;Fala Filhotes… &lt;/p&gt;  &lt;p&gt;Hoje vou mostrar um “esqueminha” que apesar de não ser novidade (nenhuma) é bastante interessante do ASP.NET, mas primeiro vamos a uma pequena explicação sobre o funcionamento de paginas web.&lt;/p&gt;  &lt;p&gt;Imagino que muitos de vocês devem ter aprendido isso na faculdade mas deixa eu fazer um resumão:&lt;/p&gt;  &lt;p&gt;Muitos anos atrás quando a internet estava engatinhando, os servidores web usavam apenas arquivos simples como .html, mas a medida que o tempo passou as necessidades também aumentaram. Os programadores precisavam estender a capacidade dos servidores web de alguma forma. Então a Microsoft criou o &lt;strong&gt;ISAPI&lt;/strong&gt; ( &lt;strong&gt;I&lt;/strong&gt;nternet &lt;strong&gt;S&lt;/strong&gt;erver &lt;strong&gt;API&lt;/strong&gt;) e graças a isso conseguimos extender varias funcionalidades do IIS ( e outros servidores web que são compatíveis com o &lt;strong&gt;ISAPI&lt;/strong&gt; ). Beleza!!! Mas e ai? Cumé qui esse trem funciona?&lt;/p&gt;  &lt;p&gt;Bom filhote, é ate bem simples… Veja bem, o ISAPI consiste basicamente de dois componentes: &lt;strong&gt;Extensões&lt;/strong&gt; e &lt;strong&gt;Filtros:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Extensões:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;As extensões ISAPI são as aplicações que realmente rodam no IIS, e possuem acesso a todas as funcionalidades do IIS. As extensões podem ser implementadas usando DLLs.&lt;/p&gt;  &lt;p&gt;As extensões ISAPI devem ser chamada para serem executadas, por exemplo, para chamar a extensão ISAPI &lt;strong&gt;usuariocadastro.dll &lt;/strong&gt;você deve chamar a seguinte URL enviando também os valores que ela precisa via query string:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.siteteste.com.br/usuariocadastro.dll?nome=Andre&amp;amp;idade=22&amp;amp;sexo=M&amp;amp;url=100loop.com.br/"&gt;http://www.siteteste.com.br/usuariocadastro.dll?nome=Andre&amp;amp;idade=22&amp;amp;sexo=M&amp;amp;url=100loop.com.br/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Filtros:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Um filtro ISAPI é um … bom… filtro, entre o servidor web e o cliente. Ao contrario das extensões ISAPI que o usuário tem que chamar a URL para escuta-las, toda requisição para o servidor passa no filtro ISAPI e o próprio servidor passa a requisição para o filtro responsável. Um filtro ISAPI pode criar um log das requisições ou mesmo tratar / modificar alguma informação.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Requisições do ASP.NET&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;As requisições do ASP.NET são feitas de forma linear, a requisição é passada por todos os módulos, aonde cada um pode realizar qualquer tipo de ação sobre ela. Depois de passar por todos os módulos ela irá para um (apenas um) HTTP handler. O handler processa a requisição e o resultado será novamente enviado a &lt;strong&gt;todos &lt;/strong&gt;os módulos.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Certo! Agora que entendemos um pouco mais sobre o funcionamento do ISAPI e ASP.NET, vamos ao que interessa!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;HTTPHandlers&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Então, como vimos um HTTPHandler é um código que executa quando uma requisição para um recurso especifico é feita pelo server. Você consegue interagir com a requisição e até enviar um novo retorno ao browser. Para criar um HTTP Handler, você precisa criar uma classe que implemente a interface &lt;em&gt;IHttpHandler&lt;/em&gt; ( para um Handler síncrono) ou  &lt;em&gt;IHttpAsyncHandler &lt;/em&gt;( para um handler assíncrono ) ou ate mesmo qualquer classe que implemente IHttpHandlerFactory. Você deve implementar a propriedade &lt;em&gt;IsReusable&lt;/em&gt; e o método &lt;em&gt;ProcessRequest &lt;/em&gt;para se usar o IHttpHandler e os métodos &lt;em&gt;BeginProcessRequest&lt;/em&gt; e &lt;em&gt;EndProcessRequest &lt;/em&gt;para o&lt;em&gt; IHttpAsyncHandler &lt;/em&gt;. A propriedade &lt;em&gt;IsReusable&lt;/em&gt; mostra quando o objeto &lt;em&gt;IHttpHandlerFactory&lt;/em&gt; ( O objeto que chama o Handler correto ) vai pôr o Handler numa &lt;em&gt;pool&lt;/em&gt; para o reutilizar depois ( aumentando a performance ) ou se vai criar uma nova instancia sempre que precisar dele de novo. O método &lt;em&gt;ProcessRequest&lt;/em&gt; é o método chave, o que faz o processamento da requisição.&lt;/p&gt;  &lt;p&gt;Beleza! Parece ser muito, muito complicado, mas na verdade é bem simples. Vamos ao exemplo!&lt;/p&gt;  &lt;p&gt;Nesse exemplo criaremos um thumbnail, que por padrão SEMPRE encolherá a imagem, quer dizer, se o usuário acessar a imagem diretamente ( 100loop.com.br/imagem.jpg ) ele também à verá encolhida. Então, como eu vejo ela no tamanho original ou aumento o tamanho do thumbnail? bom, é só mandar o tamanho dela via Query String. Estranho? Mais ou menos, dê uma olhada no código:&lt;/p&gt;  &lt;p&gt;Primeiro a nossa classe que herda do handler:&lt;/p&gt;  &lt;pre class="brush: c-sharp"&gt; using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;
using System.Configuration;
using System.Web.UI;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;


namespace HttpHandlers
{
    public class HandlerLogin : IHttpHandler
    {
        /// &lt;summary&gt;
        /// Propriedade necessaria! 
        /// &lt;/summary&gt;
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

        /// &lt;summary&gt;
        /// Metodo que cria um thumbnail de uma imagem, calculando o tamanho para não perder as proporções
        /// &lt;/summary&gt;
        /// &lt;param name="path" /&gt; Local da imagem 
        /// &lt;param name="parWidth" /&gt; Nova largura da imagem 
        /// &lt;param name="parHeight" /&gt; Nova Altura da imagem 
           public Bitmap CreateThumbnail(string path, int parWidth, int parHeight)
        {
            // Nosso Bitmap de retorno
            Bitmap bmpOutput = null;

            try
            {
                // Nova bitmap para pegar o arquivo e suas medidas
                Bitmap bitTemp = new Bitmap(path);

                ImageFormat loFormat = bitTemp.RawFormat;
                
                // Variavel para manter a proporção
                decimal ratio;

                int newWidth = 0;

                int newHeight = 0;

                // Se a Imagem for menor que o Thumbnail então retorna a imagem
                if (bitTemp.Width &amp;lt; parWidth &amp;amp;&amp;amp; bitTemp.Height &amp;lt; parHeight)

                    return bitTemp;
                // Pega a proporção dividindo a largura pela altura
                ratio = (decimal)bitTemp.Width / bitTemp.Height;

                newHeight = parHeight;
                newWidth = parWidth;
                
                // Checa qual lado é maior para manter a proporção baseado nesse lado.
                if (parHeight &amp;gt; parWidth)
                {               
                    decimal lnTemp = newHeight * ratio;

                    newWidth = (int)lnTemp;
                }
                else
                {
                    decimal lnTemp = newWidth / ratio;

                    newHeight = (int)lnTemp;
                }                              

                
                // Cria o bitmap com as nossas medidas
                bmpOutput = new Bitmap(newWidth, newHeight);

                // Criamos um objeto do tipo Graphics para podermos "desenhar" a imagem no nosso output
                Graphics newGraphic = Graphics.FromImage(bmpOutput);
                
                // Setamos o InterpolationMode para HighQualityBicubic para não perdemos (ou perdemos menos ) qualidade
                // na imagem na hora de encolhê-la. Claro, o tamanho do arquivo fica um pouco maior.
                newGraphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

                // transformamos areas transparentes dos gifs em branco.
                newGraphic.FillRectangle(Brushes.White, 0, 0, newWidth, newHeight);

                // Desenhamos a nossa imagem ( q esta no temp ) com os novos tamanhos no output
                newGraphic.DrawImage(bitTemp, 0, 0, newWidth, newHeight);
                
                // Fechamos o temp
                bitTemp.Dispose();

            }

            catch
            {

                return null;

            }


            // Retornamos a nossa imagem
            return bmpOutput;

        }

        /// &lt;summary&gt;
        /// Metodo principal que irá executar quando uma imagem for chamada (método necessario!)
        /// &lt;/summary&gt;
        /// &lt;param name="context" /&gt;
        public void ProcessRequest(HttpContext context)
        {
            try
            {

                int width;
                int height;

                //Verifica se o usuario passou a largura da figura
                if (context.Request.QueryString["width"] != null)
                {
                    width = int.Parse(context.Request.QueryString["width"]);
                }
                else
                {
                    width = 100;
                }
                //Verifica se o usuario passou a altura da figura
                if (context.Request.QueryString["height"] != null)
                {
                    height = int.Parse(context.Request.QueryString["height"]);
                }
                else
                {
                    height = 100;
                }                          

                // Pega o caminho do arquivo fisico
                string path = context.Request.PhysicalPath;
                // Pega a extensão para determinar o tipo da imagem
                string contentType = path.Substring(path.LastIndexOf(".") + 1);

                ImageFormat newFormat;

                // Altera o formato dependendo do tipo do arquivo
                switch (contentType)
                {
                    case "gif":
                        newFormat = ImageFormat.Gif;
                        break;
                    case "jpg":
                        newFormat = ImageFormat.Jpeg;
                        contentType = "jpeg";
                        break;
                    case "png":
                        newFormat = ImageFormat.Png;
                        break;
                    default:
                        newFormat = ImageFormat.Jpeg;
                        break;
                }
             
                // Arquivo Bitmap com o thumbnail ja criado
                Bitmap newThumb = CreateThumbnail(path, width, height);

                // Seta o ContentType ( image/jpeg, image/gif ... )
                context.Response.ContentType = "image/" + contentType;

                // Salva a imagem no Output que retornara ao usuario.
                newThumb.Save(context.Response.OutputStream, newFormat);
                newThumb.Dispose();
                
            }
            catch (Exception ex)
            {
                throw;
            }
          

        }
    }
}&lt;/pre&gt;

&lt;p&gt;Então blz! criamos a classe! Mas para podermos habilitar esse handler precisamos adicionar uma &lt;em&gt;tag&lt;/em&gt; a mais no web.config, dentro de &lt;strong&gt;&amp;lt;configuration&amp;gt;&amp;lt;system.web&amp;gt;&lt;/strong&gt; adicione essa &lt;em&gt;tag&lt;/em&gt;:&lt;/p&gt;

&lt;pre class="brush: xml"&gt;    &lt;httphandlers&gt;   &lt;br /&gt;    &lt;add type="HttpHandlers.HandlerLogin" verb="*" path="*.jpg"&gt; &lt;/add&gt;   &lt;br /&gt;   &lt;add type="HttpHandlers.HandlerLogin" verb="*" path="*.gif"&gt; &lt;/add&gt;   &lt;br /&gt;   &lt;add type="HttpHandlers.HandlerLogin" verb="*" path="*.png"&gt; &lt;/add&gt;     &lt;br /&gt;    &lt;/httphandlers&gt;&lt;/pre&gt;

&lt;p&gt;Mas o que é essa configuração? uma breve explicação:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Type: &lt;/strong&gt;Nome da Classe / DLL separado por virgula se for mais de um. 

  &lt;br /&gt;&lt;strong&gt;Verb: &lt;/strong&gt;A lista de verbos que seu componente utiliza, separados por virgula e entre aspas ex: (“GET,POST,HEAD”) 

  &lt;br /&gt;&lt;strong&gt;Path: &lt;/strong&gt;A URL inteira ou parte dela em que o seu Handler ira ser invocado. Ex: *.aspx ( o seu handler executara em todas paginas .aspx ) ou default.aspx (apenas nessa pagina )&lt;/p&gt;

&lt;p&gt;Obs: Isso só funciona a partir do IIS 6.0. Antes disso tinha que adicionar o Handler direto no IIS.&lt;/p&gt;

&lt;p&gt;Então é isso ai, agora é só criar uma pagina com uma imagem como eu fiz aqui, lembrando que a proporção é realizada automaticamente:&lt;/p&gt;

&lt;pre class="brush: html"&gt; &lt;img alt="" src="images/imagem.jpg?width=320" /&gt;&lt;/pre&gt;

&lt;p&gt;Você pode adicionar o método no onclick chamando a imagem com o tamanho maior.&lt;/p&gt;

&lt;p&gt;Isso foi só uma demonstração do uso de httpHandlers, há vários outro jeitos de melhorar esse nosso Thumbnail, depende da criatividade/necessidade de cada um. Uma outra coisa bacana seria fazer marca d’água em suas imagens (só em imagens em alguma pasta especifica por exemplo ).&lt;/p&gt;

&lt;p&gt;Bom Filhotes, qualquer duvida me avisem! Ate mais!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fontes:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a title="http://www.15seconds.com/issue/020417.htm" href="http://www.15seconds.com/issue/020417.htm"&gt;http://www.15seconds.com/issue/020417.htm&lt;/a&gt; 

  &lt;br /&gt;&lt;a title="http://msdn.microsoft.com/pt-br/library/7d6sws33%28VS.85%29.aspx" href="http://msdn.microsoft.com/pt-br/library/7d6sws33%28VS.85%29.aspx"&gt;http://msdn.microsoft.com/pt-br/library/7d6sws33%28VS.85%29.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.100loop.com/andre-castro/aggbug/196.aspx" width="1" height="1" /&gt;</description><dc:creator>André Castro</dc:creator></item><item><title>Como usar Windows Live Writer Beta e SubText</title><link>http://www.100loop.com/ivan-paulovich/archive/2010/07/09/como-usar-windows-live-writer-beta-e-subtext.aspx</link><pubDate>Fri, 09 Jul 2010 12:07:06 GMT</pubDate><guid isPermaLink="true">http://www.100loop.com/ivan-paulovich/archive/2010/07/09/como-usar-windows-live-writer-beta-e-subtext.aspx</guid><wfw:comment>http://www.100loop.com/ivan-paulovich/comments/193.aspx</wfw:comment><wfw:commentRss>http://www.100loop.com/ivan-paulovich/comments/commentRss/193.aspx</wfw:commentRss><comments>http://www.100loop.com/ivan-paulovich/archive/2010/07/09/como-usar-windows-live-writer-beta-e-subtext.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://www.100loop.com/ivan-paulovich/services/trackbacks/193.aspx</trackback:ping><source url="http://www.100loop.com/ivan-paulovich/rss.aspx">Como usar Windows Live Writer Beta e SubText</source><description>&lt;p&gt;Não há dúvidas que a ferramenta mais confortável para criar posts é o &lt;a title="Windows Live Writer" href="http://explore.live.com/windows-live-essentials-beta"&gt;Windows Live Writer&lt;/a&gt;. E agora temos uma nova versão cheia de novidades e facilidades disponível para download.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/ivan-paulovich/WindowsLiveWriter/Comousar_7A0C/image.png"&gt;&lt;img width="500" height="440" alt="" src="http://www.100loop.com/images/www_100loop_com/ivan-paulovich/WindowsLiveWriter/Comousar_7A0C/image_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O passao a passo abaixo irá mostrar como é simples configurar o Windows Live Writer para postar seus textos no SubText.&lt;/p&gt;
&lt;h3&gt;Como configurar&lt;/h3&gt;
&lt;p&gt;Abrar o Windows Live Writer Beta e clique em &lt;strong&gt;Add Blog Account&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/ivan-paulovich/WindowsLiveWriter/Comousar_7A0C/image_3.png"&gt;&lt;img width="498" height="192" alt="" src="http://www.100loop.com/images/www_100loop_com/ivan-paulovich/WindowsLiveWriter/Comousar_7A0C/image_thumb_3.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Selecione &lt;strong&gt;Other blog service&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/ivan-paulovich/WindowsLiveWriter/Comousar_7A0C/image_4.png"&gt;&lt;img width="462" height="398" alt="" src="http://www.100loop.com/images/www_100loop_com/ivan-paulovich/WindowsLiveWriter/Comousar_7A0C/image_thumb_4.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Digite o endereço do seu blog, no caso do 100loop nós usamos blogs agregados então digito o endereço do autor do blog e clique em &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/ivan-paulovich/WindowsLiveWriter/Comousar_7A0C/image_5.png"&gt;&lt;img width="460" height="394" alt="" src="http://www.100loop.com/images/www_100loop_com/ivan-paulovich/WindowsLiveWriter/Comousar_7A0C/image_thumb_5.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Aguarde o Windows Live Writer baixar as configurações do seu blog como tema, categorias e outras preferências. Em seguida clique em &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/ivan-paulovich/WindowsLiveWriter/Comousar_7A0C/image_6.png"&gt;&lt;img width="460" height="394" alt="" src="http://www.100loop.com/images/www_100loop_com/ivan-paulovich/WindowsLiveWriter/Comousar_7A0C/image_thumb_6.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Digite um nome para o seu blog e clique em &lt;strong&gt;Finish&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/ivan-paulovich/WindowsLiveWriter/Comousar_7A0C/image_7.png"&gt;&lt;img width="460" height="394" alt="" src="http://www.100loop.com/images/www_100loop_com/ivan-paulovich/WindowsLiveWriter/Comousar_7A0C/image_thumb_7.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pronto. Você tem agora o conforto de um editor de textos totalmente integrado aos posts do seu blog. Você pode editar os seus posts e clicar em &lt;strong&gt;Publish&lt;/strong&gt; que o texto estará no ar.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.100loop.com/images/www_100loop_com/ivan-paulovich/WindowsLiveWriter/Comousar_7A0C/image_8.png"&gt;&lt;img width="504" height="359" alt="" src="http://www.100loop.com/images/www_100loop_com/ivan-paulovich/WindowsLiveWriter/Comousar_7A0C/image_thumb_8.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.100loop.com/ivan-paulovich/aggbug/193.aspx" width="1" height="1" /&gt;</description><dc:creator>Ivan Paulovich</dc:creator></item></channel></rss>