<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CEIFQ3ozeCp7ImA9WhBVEkg.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654</id><updated>2013-04-17T23:35:12.480-03:00</updated><category term="Live Streaming" /><category term="Windows Mobile" /><category term="Visual Studio" /><category term="Windows Phone 8" /><category term="Analytics" /><category term="Microsoft Expression" /><category term="MVC" /><category term="Windows 8" /><category term="Palestras" /><category term="Silverlight 5" /><category term="RTM" /><category term="Download" /><category term="Dicas" /><category term="SQL" /><category term="Binding" /><category term="Podcast" /><category term="Service Pack" /><category term="Expression Blend" /><category term="Deep Zoom" /><category term="Build" /><category term="Windows Live" /><category term="Community Zone" /><category term="Windows" /><category term="Tutorial" /><category term="Visual Studio 2010" /><category term="ASP.NET" /><category term="Windows Phone" /><category term="Steve Jobs" /><category term="MEF" /><category term="Visual Studio 2008" /><category term="Expression Web" /><category term="The Developer's Conference" /><category term="Beta" /><category term="Smartphone" /><category term="Eventos" /><category term="Código" /><category term="ReMIX Brasil" /><category term="Silverlight 3" /><category term="XAMLCast" /><category term="HTML5" /><category term="Windows 7" /><category term="LINQ" /><category term="Sketchflow" /><category term="Express Editions" /><category term="CSS" /><category term="Blend 3" /><category term="Silverlight 4" /><category term="Xbox" /><category term="Visual Studio 2012" /><category term="MVP" /><category term="Segurança" /><category term="MIX09" /><category term="Behavior" /><category term="Webcast" /><category term="TechEd" /><category term="Open Source" /><category term="MIX10" /><category term="Windows Phone 7" /><category term="Expression Gallery" /><category term="IE8" /><category term="Blend 4" /><category term="RTW" /><category term="MIX08" /><category term="Release Candidate" /><category term="IE" /><category term="WPF" /><category term="Silverlight" /><category term="MIX" /><title>Kelps' SilverBox</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.kelps.net/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.kelps.net/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>97</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/DevNewsAndOldsByKelps" /><feedburner:info uri="devnewsandoldsbykelps" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CUIBR348eip7ImA9WhNQEEw.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-1508575769127000</id><published>2012-11-15T19:02:00.001-02:00</published><updated>2012-11-15T19:05:56.072-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-15T19:05:56.072-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Xbox" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8" /><category scheme="http://www.blogger.com/atom/ns#" term="Dicas" /><title>Windows 8 + Xbox 360 + compartilhamento via charm de dispositivos</title><content type="html">&lt;p&gt;Acabei de publicar um &lt;a href="http://youtu.be/RwLMnS3G3fI" target="_blank"&gt;vídeo no Youtube mostrando um exemplo de aplicação para Windows 8 usando charm de devices para exibir vídeo no Xbox&lt;/a&gt;. No futuro vou fazer um artigo mostrando como programar seu aplicativo para Windows 8 para que suporte essa funcionalidade mas por enquanto, assistam ao vídeo e tirem proveito do recurso que já está presente em alguns aplicativos da Loja do Windows 8, como por exemplo as apps de Música, Fotos, Vídeos.&lt;/p&gt;&lt;iframe height="365" src="http://www.youtube.com/embed/RwLMnS3G3fI?rel=0" frameborder="0" width="650" allowfullscreen&gt;&lt;/iframe&gt; &lt;p&gt;Este vídeo foi feito utilizando o Surface RT e Nokia Lumia 920 com WP8 que todos os que foram ao Build 2012 ganharam.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/FwB1JvRHCEo" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=1508575769127000" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/1508575769127000?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/1508575769127000?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/FwB1JvRHCEo/win8-devices-charm-xbox.html" title="Windows 8 + Xbox 360 + compartilhamento via charm de dispositivos" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/RwLMnS3G3fI/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2012/11/win8-devices-charm-xbox.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8FQX07eip7ImA9WhJaEU0.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-3950216597536410323</id><published>2012-10-01T13:09:00.001-03:00</published><updated>2012-10-01T13:10:10.302-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-01T13:10:10.302-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MVP" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>MVP em Silverlight pelo terceiro ano seguido!</title><content type="html">&lt;p&gt;&lt;a title="MVP Profile: Kelps Leite de Sousa" href="https://mvp.support.microsoft.com/profile=10F4FD38-C58A-4232-9F7A-398EC5C12E54"&gt;&lt;img src="http://lh6.ggpht.com/-Tbz9tAZwO_w/Tojkch4L-mI/AAAAAAAAA6U/q5My8mCPltg/MVP_Horizontal_FullColor%25255B4%25255D.png?imgmax=800"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Acabei de receber o comunicado de que o meu MVP em Silverlight foi renovado pelo terceiro ano consecutivo! Quem aí quer prova maior de que o Silverlight ainda está no páreo?&lt;/p&gt; &lt;p&gt;Este ano será excepcional para todos nós, desenvolvedores XAML. Prevejo muito Silverlight, Windows Phone e Windows 8 no futuro.&lt;/p&gt; &lt;p&gt;Que comece outro ano de XAML!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/978M_z_LJQM" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=3950216597536410323" title="1 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/3950216597536410323?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/3950216597536410323?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/978M_z_LJQM/mvp-ano-3.html" title="MVP em Silverlight pelo terceiro ano seguido!" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-Tbz9tAZwO_w/Tojkch4L-mI/AAAAAAAAA6U/q5My8mCPltg/s72-c/MVP_Horizontal_FullColor%25255B4%25255D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.kelps.net/2012/10/mvp-ano-3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEMRno-fyp7ImA9WhJXGEU.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-7456011090116376617</id><published>2012-08-13T15:27:00.001-03:00</published><updated>2012-08-13T15:31:27.457-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-13T15:31:27.457-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio 2012" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio" /><title>.NET Client Profile “troll” e suas mensagens incorretas de erro de referência</title><content type="html">&lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Target Profiles dispon&amp;iacute;veis no Visual Studio 2012" border="0" alt="Target Profiles dispon&amp;iacute;veis no Visual Studio 2012" src="http://lh6.ggpht.com/-24zEIySSnC8/UClHBL74mNI/AAAAAAAABFI/t7AnZ7iZyZU/image%25255B10%25255D.png?imgmax=800" width="662" height="289"&gt;&lt;/p&gt; &lt;p&gt;Este é um pequeno erro meio troll do .NET que já me pegou desprevinido algumas vezes e hoje “atacou” outro desenvolvedor aqui da equipe.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;p&gt;A partir do .NET Framework 3.5 foi criado um novo target de compilação chamado “.NET Framework 3.5 Client Profile”, que nada mais é do que um subset do .NET completo, com objetivo de permitir criar aplicações que podem ser instaladas mais rapidamente em computadores que não tenham o .NET 3.5 instalado pois precisam de apenas uma parte dele. Em teoria a idéia é muito boa e válida para produtos que serão distribuidos pela web, mas acaba sendo desnecessário na grande maioria dos casos. Projetos feitos usando esse “&lt;a href="http://msdn.microsoft.com/en-us/library/cc656912.aspx" target="_blank"&gt;.NET Framework 4 Client Profile&lt;/a&gt;” têm as seguintes limitações:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Só podem fazer referencias a outros projetos que também sejam Client Profile&lt;/li&gt; &lt;li&gt;Não podem ter nenhuma dependencia de .ASP.NET&lt;/li&gt; &lt;li&gt;Não podem usar WCF Avançado&lt;/li&gt; &lt;li&gt;Não podem fazer uso de MSBuild em runtime&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Mas o que me faz chamar essa funcionalidade de troll é que vários templates de projeto do Visual Studio 2010 usam o Client Profile como padrão (WPF, Windows Forms, Console, Windows Service, Empty Project …). Então em nossa solution nós temos uma class library contendo todos os objetos da aplicação e mapeamento do banco de dados e outra class library com todas as regras de negócio, mas quando criamos uma aplicação Console que faria algumas rotinas batch, ela dava &lt;strong&gt;erro de compilação dizendo que não havia conseguido achar a classe da regra de negócios, apesar de a referencia estar correta e o intellisense mostrar todos os métodos&lt;/strong&gt;. Aparentemente esses templates de projeto não usam mais o “cliente profile” por padrão no Visual Studo 2012.&lt;/p&gt; &lt;p&gt;Então, se você criar um projeto não ASPNET, em .NET 3.5 ou 4.0, fizer referencia(s) a outro(s) projetos mas receber um erro de classe ou referencia não encontrado, verifique se o seu projeto não está usando o Cliente Profile. Isso pode lhe poupar bastante tempo e frustração.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/Kz_Sf1qq_xY" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=7456011090116376617" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/7456011090116376617?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/7456011090116376617?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/Kz_Sf1qq_xY/net-client-profile-troll.html" title=".NET Client Profile “troll” e suas mensagens incorretas de erro de referência" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-24zEIySSnC8/UClHBL74mNI/AAAAAAAABFI/t7AnZ7iZyZU/s72-c/image%25255B10%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2012/08/net-client-profile-troll.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMGQ346eyp7ImA9WhJXFEs.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-7410193021265639330</id><published>2012-08-08T20:06:00.001-03:00</published><updated>2012-08-08T20:10:22.013-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-08T20:10:22.013-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Eventos" /><category scheme="http://www.blogger.com/atom/ns#" term="Build" /><title>//build/ 2012 lotado em menos de 1h!</title><content type="html">&lt;p&gt;&lt;a href="http://www.buildwindows.com/" target="_blank"&gt;&lt;img title="BUILD 2012" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="BUILD 2012" src="http://lh4.ggpht.com/-LvH9nonnqQo/UCLw1VAo8RI/AAAAAAAABEw/pUU6nFALhWU/image%25255B7%25255D.png?imgmax=800" width="669" height="369"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Como eu &lt;a href="http://blog.kelps.net/2012/07/build-windows-2012.html"&gt;havia postado anteriormente&lt;/a&gt;, hoje ao meio dia a Microsoft abriu as inscrições para a conferência BUILD 2012 e, como não poderia deixar de ser, a internet no meu trabalho caiu faltando apenas 2 minutos para começarem as inscrições :S&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;p&gt;Eu sabia que, diferente de outras conferencias da Microsoft (incluindo BUILD 2011), as inscrições para esta conferencia seriam muito concorridas. Felizmente a internet voltou a funcionar por volta de 12:10 e eu consegui fazer minha inscrição, mas não em tempo para pegar o desconto dos primeiros 500 a se inscreverem. &lt;/p&gt; &lt;p&gt;O desconto acabou em aproximadamente 3 minutos e as vagas acabaram em menos de 1 hora! Isso significa que a Microsoft este ano conseguiu gerar o mesmo nível de espectativa e ansiedade que a Apple costuma gerar com seus lançamentos. Será que alguém ainda tem alguma dúvida de que este evento será fantástico e que este é de fato o ano da Microsoft? &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.buildwindows.com/" target="_blank"&gt;&lt;img title="Produtos e assuntos que ser&amp;atilde;o abordados no BUILD 2012" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Produtos e assuntos que ser&amp;atilde;o abordados no BUILD 2012" src="http://lh6.ggpht.com/-3U_jjClO2bU/UCLw2I8TNfI/AAAAAAAABE4/98ZLWvGAX6g/image%25255B11%25255D.png?imgmax=800" width="659" height="224"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;E você, também conseguiu garantir sua participação?&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/YwM96iljZXc" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=7410193021265639330" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/7410193021265639330?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/7410193021265639330?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/YwM96iljZXc/build-2012-lotado.html" title="//build/ 2012 lotado em menos de 1h!" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-LvH9nonnqQo/UCLw1VAo8RI/AAAAAAAABEw/pUU6nFALhWU/s72-c/image%25255B7%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2012/08/build-2012-lotado.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EHRng-eSp7ImA9WhJQGEk.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-2193244766968783402</id><published>2012-08-01T14:06:00.001-03:00</published><updated>2012-08-01T14:20:37.651-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-01T14:20:37.651-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="RTM" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8" /><category scheme="http://www.blogger.com/atom/ns#" term="RTW" /><title>Windows 8 atinge RTM</title><content type="html">&lt;p&gt;&lt;img title="Windows 8" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Windows 8" src="http://lh4.ggpht.com/-TOumYGFGkJY/UBliHEc6SxI/AAAAAAAABEg/TCU4PKkhjkU/image%25255B8%25255D.png?imgmax=800" width="668" height="378"&gt;Hoje a Microsoft anunciou que atingiu o milestone &lt;a href="http://windowsteamblog.com/windows/b/bloggingwindows/" target="_blank"&gt;RTM do Windows 8&lt;/a&gt; e Windows Server 2012. Isso significa que a versão final está pronta e foi disponibilizada para fabricantes de PC.&lt;/p&gt; &lt;p&gt;Para o público geral o Windows só estará disponível para compra a partir do dia 26 de outubro, mas quem tem &lt;a href="http://msdn.microsoft.com/" target="_blank"&gt;assinatura MSDN&lt;/a&gt; ou &lt;a href="http://technet.microsoft.com/" target="_blank"&gt;TechNet&lt;/a&gt; já poderá fazer download da versão final no próximo dia 15 de agosto (em exatamente 2 semanas), junto com as versões finais das ferramentas de desenvolvimento.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;p&gt;Quem comprar um computador novo com Windows 7 hoje poderá fazer upgrade para o Windows 8 Pro por apenas US$ 14,99 a partir do dia 26 de outubro. Computadores comprados antes poderão fazer o upgrade por US$ 39,99.&lt;/p&gt; &lt;p&gt;Todas essas notícias são excelentes, tanto pela disponibilidade quanto os valores. Agora é só esperar mais um pouquinho para poder começar a desfrutar da versão final. &lt;/p&gt; &lt;p&gt;Eu já estou usando a consumer preview desde de o lançamento tanto no trabalho como no meu laptop pessoal e o único problema que tive até agora foi com vídeos no laptop pois os drivers ainda não estão 100% no consumer preview. Espero que isso se resolva agora com RTM. Agora é começar a me preparar para zerar essas máquinas pois daqui duas semanas vou instalar o Windows 8 em todos os computadores que uso :)&lt;/p&gt; &lt;p&gt;PS.: Sim, naquela foto que está no meu Live Tile de Fotos está o &lt;a href="http://twitter.com/rehaddad" target="_blank"&gt;Renato Haddad&lt;/a&gt;, &lt;a href="http://twitter.com/scottgu" target="_blank"&gt;Scott Guthrie&lt;/a&gt; e eu (eles são bem altos).&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/fWLytmGTDhs" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=2193244766968783402" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/2193244766968783402?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/2193244766968783402?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/fWLytmGTDhs/windows-8-rtm.html" title="Windows 8 atinge RTM" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-TOumYGFGkJY/UBliHEc6SxI/AAAAAAAABEg/TCU4PKkhjkU/s72-c/image%25255B8%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2012/08/windows-8-rtm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QEQn07fyp7ImA9WhJQGE4.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-594711906493007279</id><published>2012-08-01T10:45:00.001-03:00</published><updated>2012-08-01T11:28:23.307-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-01T11:28:23.307-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Dicas" /><category scheme="http://www.blogger.com/atom/ns#" term="LINQ" /><title>Usando LINQ com listas não genéricas</title><content type="html">&lt;p&gt;Hoje, mais uma vez eu me deparei com um “problema” relativamente comum: Usar LINQ em uma lista, coleção ou enumerável não generic (ocorre bastante quando se lida com código legado ou de aplicações mais antigas). Isso não é possível nativamente pois o LINQ trabalha apenas com generics por causa de inferencia de tipos.&lt;/p&gt; &lt;p&gt;Para não ter que colocar loopings no código apenas para migrar de não generico para genérico há 2 Extension methods bem simples que podemos usar:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Cast&amp;lt;type&amp;gt;() – converte a coleção inteira para um IEnumerable&amp;lt;type&amp;gt; do tipo informado. Praticamente não há impacto de performance pois internamente ele simplesmente faz um cast explicito para o tipo solicitado e devolve o objeto. O único problema deste método é que se houver algum objeto na coleção sendo convertida que não seja do tipo solicitado, ocorrerá uma exceção quando seu código chegar neste ítem.  &lt;li&gt;OfType&amp;lt;type&amp;gt;() – converte a coleção para um IEnumerable&amp;lt;type&amp;gt; do tipo informado, mas contendo apenas com os ítens que são do tipo solicitado. Este é mais seguro para quando você estiver usando uma coleção que pode conter objetos de tipos diferentes mas apenas um tipo lhe interessa. Há um pequeno impacto de performance pois antes de retornar cada ítem este é testado para ver se é do tipo correto e se não for, os seguintes são testados até encontrar um que seja ou acabarem os ítens. &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Ou seja, para listas de objetos em código legado não generic mas onde o tipo é conhecido e garantido, a primeria opção é melhor. Para outros casos, use a segunda. Abaixo tem um pequeno exemplo de uso desse código:&lt;/p&gt;&lt;pre&gt;var col = new Collection();&lt;br /&gt;col.Add("text");&lt;br /&gt;col.Add("text2");&lt;br /&gt;col.Add(1);&lt;br /&gt;col.Add("text4");&lt;br /&gt;&lt;br /&gt;var keysCast = col.Cast&amp;lt;string&amp;gt;();&lt;br /&gt;var keysOfType = col.OfType&amp;lt;string&amp;gt;();&lt;br /&gt;&lt;br /&gt;var resultadoT = (from k in keysOfType &lt;br /&gt;                  select k).ToArray();&lt;br /&gt;&lt;br /&gt;var resultadoC = (from k in keysCast &lt;br /&gt;                  select k).ToArray();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Neste exemplo, o LINQ que popula resultadoT funcionará corretamente e resultadoT conterá 3 ítens, mas o LINQ de resultadoC vai gerar uma exceção ao tentar fazer cast explicito do inteiro 1 para string. Se a linha que acrescenta 1 na collection col for comentada, as duas queries LINQ funcionarão.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/jBHeCfjUmk4" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=594711906493007279" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/594711906493007279?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/594711906493007279?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/jBHeCfjUmk4/linq-non-generic-list.html" title="Usando LINQ com listas não genéricas" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2012/08/linq-non-generic-list.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQHSHg8fyp7ImA9WhJQEko.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-2908212152092108806</id><published>2012-07-25T23:34:00.000-03:00</published><updated>2012-07-25T23:38:59.677-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-25T23:38:59.677-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Eventos" /><category scheme="http://www.blogger.com/atom/ns#" term="Build" /><title>\\BUILD\ Windows 2012</title><content type="html">&lt;p&gt;&lt;a href="http://www.buildwindows.com/" target="_blank"&gt;&lt;img title="\\BUILD\ Windows 2012" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="\\BUILD\ Windows 2012" src="http://lh4.ggpht.com/-ArNNvSFlu8k/UBCtCBLXhFI/AAAAAAAABEU/TDenzRmqyUI/image%25255B19%25255D.png?imgmax=800" width="667" height="343"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hoje a &lt;a href="http://channel9.msdn.com/Blogs/Vector/Announcing-BUILD-2012" target="_blank"&gt;Microsoft finalmente anunciou a data da segunda versão do \\BUILD\&lt;/a&gt;, sua nova conferencia de desenvolvimento e design (substituta do PDC e MIX). A edição deste ano será no campus da Microsoft em Redmond, Washington de 30 de Outubro até 2 de Novembro. &lt;/p&gt; &lt;p&gt;As inscrições abrem no dia 8 de Agosto a partir das 12:00 (meio-dia) no horário de Brasília, no site &lt;a title="http://www.buildwindows.com/" href="http://www.buildwindows.com/"&gt;http://www.buildwindows.com/&lt;/a&gt;. Nesse dia começarão a ser divulgadas neste mesmo site mais informações sobre as sessões e assuntos que serão apresentados no evento.&lt;/p&gt; &lt;p&gt;Se você (assim como eu) pretende ir, eu sugiro que faça sua inscrição no dia 8 de agosto, assim que for possível pois devido às novidades e lançamentos da Microsoft este ano e ao fato de ser em Redmond eu acredito que as vagas vão esgotar bem rápido.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/S8BvAF1-O3Q" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=2908212152092108806" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/2908212152092108806?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/2908212152092108806?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/S8BvAF1-O3Q/build-windows-2012.html" title="\\BUILD\ Windows 2012" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-ArNNvSFlu8k/UBCtCBLXhFI/AAAAAAAABEU/TDenzRmqyUI/s72-c/image%25255B19%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2012/07/build-windows-2012.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIAQXc-eyp7ImA9WhJTEk0.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-8302951847317644538</id><published>2012-06-20T10:51:00.001-03:00</published><updated>2012-06-20T10:55:40.953-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-20T10:55:40.953-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><category scheme="http://www.blogger.com/atom/ns#" term="Eventos" /><category scheme="http://www.blogger.com/atom/ns#" term="Live Streaming" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 8" /><title>Assita ao Windows Phone Summit ao vivo</title><content type="html">&lt;p&gt;&lt;a href="http://lh5.ggpht.com/-pQqscILmV6M/T-HV36BICMI/AAAAAAAABD8/TBUMs-EJrQA/s1600-h/image%25255B4%25255D.png"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh3.ggpht.com/-9xnxL9dtf0M/T-HV4c7UKYI/AAAAAAAABEE/v8bXtZ8uCj8/image_thumb%25255B2%25255D.png?imgmax=800" width="397" height="154"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Hoje, às 13:00 (horário de Brasília) será transmitido ao vivo pelo Channel 9 via &lt;a href="http://channel9.msdn.com/Events/Windows-Phone/Summit" target="_blank"&gt;Live Streaming o Windows Phone Summit&lt;/a&gt;.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;p&gt;Não há muitos detalhes concretos sobre o conteúdo que será apresentado no evento, mas sabemos que finalmente teremos maiores informações sobre o Windows Phone 8.&lt;/p&gt; &lt;p&gt;Se você se interessa por desenvolvimento em XAML em geral ou simplesmente quer saber mais sobre o futuro do Windows Phone, este evento será imperdível.&lt;/p&gt; &lt;p&gt;Segue abaixo uma lista de rumores sobre o que talvez seja anunciado/explicado hoje:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Suporte a processadores com múltiplos núcleos&lt;/li&gt; &lt;li&gt;Telas HD e novas resoluções&lt;/li&gt; &lt;li&gt;Suporte a cartões de memória&lt;/li&gt; &lt;li&gt;Maior integração com Skype&lt;/li&gt; &lt;li&gt;Mais funcionalidades e personalizações no aplicativo da câmera&lt;/li&gt; &lt;li&gt;Suporte a NFC tanto para pagamentos como para compartilhamento de conteúdo e emparelhamento de dispositivos&lt;/li&gt; &lt;li&gt;Integração com Windows 8&lt;/li&gt; &lt;li&gt;IE10&lt;/li&gt; &lt;li&gt;Maior controle sobre consumo de banda de dados e monitoramento de bateria&lt;/li&gt; &lt;li&gt;Uso do mesmo núcleo do Windows 8 ou um subset dele&lt;/li&gt; &lt;li&gt;Subset das APIs e ferramentas de desenvolvimento de aplicações Metro do Windows 8 para desenvolver para Windows Phone 8&lt;/li&gt; &lt;li&gt;Possibilidade ou não de atualização dos aparelhos atuais para a nova versão do sistema operacional&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Eu vou assistir ao streaming live com certeza, e você?&lt;/p&gt; &lt;p&gt;&lt;a href="http://channel9.msdn.com/Events/Windows-Phone/Summit"&gt;http://channel9.msdn.com/Events/Windows-Phone/Summit&lt;/a&gt;&lt;/p&gt; &lt;p&gt;A hashtag que está sendo utilizada no Twitter é &lt;a href="https://twitter.com/#!/search/%23wpsummit" target="_blank"&gt;#wpsummit&lt;/a&gt;&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/fiYWwiit0Rk" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=8302951847317644538" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/8302951847317644538?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/8302951847317644538?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/fiYWwiit0Rk/windows-phone-summit.html" title="Assita ao Windows Phone Summit ao vivo" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-9xnxL9dtf0M/T-HV4c7UKYI/AAAAAAAABEE/v8bXtZ8uCj8/s72-c/image_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2012/06/windows-phone-summit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08DQno8fCp7ImA9WhJXEU0.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-4835649954557873420</id><published>2012-03-18T13:14:00.000-03:00</published><updated>2012-08-04T16:51:13.474-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-04T16:51:13.474-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 7" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 8" /><title>A importância de in-app purchases</title><content type="html">&lt;p&gt;Monetização é um assunto que tem ganhado cada vez mais importância nesse nosso mundo agora repleto de app stores. Todas as plataformas de smartphones e até SO de computadores pessoais estão começando a aderir a essa idéia de ter uma loja centralizada como principal ou até mesmo única forma de instalar aplicativos e isso traz benefícios para todos os envolvidos.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;ul&gt; &lt;li&gt;Para o &lt;strong&gt;usuário&lt;/strong&gt; é extremamente conveniente pois facilita muito a busca e instalação de novos aplicativos. Usuários com menos conhecimentos técnicos são ainda mais beneficiados pois app stores removem praticamente toda a complexidade do processo de instalação e atualização dos aplicativos.  &lt;li&gt;Para o &lt;strong&gt;desenvolvedor&lt;/strong&gt; a app store significa uma enorme oportunidade de negócios pois aumenta muito sua visibilidade e com isso as chances de seu aplicativo ser encontrado, comprado e recomendado.  &lt;li&gt;Para o &lt;strong&gt;dono da plataforma&lt;/strong&gt; há duas grandes vantagens: &lt;/li&gt;&lt;/ul&gt; &lt;ol&gt; &lt;li&gt;&lt;em&gt;Financeira&lt;/em&gt;: recebem um percentual sobre as vendas dos aplicativos  &lt;li&gt;&lt;em&gt;Estratégica&lt;/em&gt;: a partir do momento que um usuário investe uma certa quantia em aplicativos para aquela plataforma, isso acaba aumentando sua fidelidade à própria plataforma, diminuindo as chances de que ele migre para outra plataforma.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Mas eu tenho notado uma tendência últimamente. Apesar de app stores e seus valores baixos (muitas vezes contados em centavos) tornarem aquela compra impulsiva mais recorrente, mais e mais pessoas começaram a associar internet com "é de graça" e isso significa que estão menos dispostas a pagar, mesmo que pouco, por coisas que acham que podem conseguir "sem custo" na internet. O mais estranho é que isso se aplica à compra de aplicativos, mas não necessariamente à compra/assinatura de serviços ou conteúdo.&lt;/p&gt; &lt;p&gt;Um bom exemplo disso são alguns dos joginhos disponíveis no Facebook e seu modelo de micro-transações onde é necessário gastar dinheiro de verdade para comprar coisas para usar no jogo e avançar mais rápido ou ter algo que outras pessoas não têm. Tenho tias que já chegaram a gastar quantias que eu aposto que jamais teriam gasto se aquele fosse o preço para comprar e jogar.&lt;/p&gt; &lt;p&gt;Mas o que me motivou a escrever este post é que infelizmente o Marketplace do Windows Phone 7 não tem um sistema de micro-transações (também conhecidos com in-app purchases) disponível para os desenvolvedores convencionais. Há alguns jogos na categoria Xbox Live que usam micro-transações integradas à sua conta da live, mas todos são feitos pela própria Microsoft então eles meio que não contam (ex.: Beaks and Beards e Bug Village). &lt;/p&gt; &lt;p&gt;Não há nada que impeça o desenvovedor de desenvolver seu próprio esquema de micro-transações usando parecerias com cartões de crédito ou PayPal, mas a experiência para o usuário não seria a ideal nesses casos pois poucos usuários estão dispostos a disponibilizar seus dados de cobrança para qualquer aplicativo, principalmente depois de já terem feito isso com o próprio Marketplace da plataforma.&lt;/p&gt; &lt;p&gt;Outro problema que tenho notado é que, o modelo de trial do Windows Phone 7 não está surtindo o efeito que era desejado. Muitos usuários acabam nem tentando alguns aplicativos pagos com trial e partem direto para opções grátis (muitas vezes inferiores). Com isso diversos desenvolvedores passaram a publicar 2 versões de seus aplicativos, uma grátis, muitas vezes igual com anuncios e outra paga com trial onde os anuncios são desativados depois que você compra. Há também alguns desenvolvedores que estão publicando conteúdo como se fossem aplicativos. Há revistas, jornais e até quadrinhos que ao invés de ter um único aplicativo onde cada edição é apenas um conteúdo extra pelo qual você paga separadamente ou faz&amp;nbsp; uma assinatura, são publicados diversos aplicativos, um para cada edição, poluíndo o Marketplace e inflando a loja sem acrescentar novidades reais.&lt;/p&gt; &lt;p&gt;É por isso que eu fiquei muito animado ao saber que a &lt;a href="http://windows.microsoft.com/en-us/windows-8/apps" target="_blank"&gt;loja do Windows 8&lt;/a&gt; vai suportar micro-transações desde o começo. Este recurso pode ser utilizado para resolver os 2 problemas acima. Com suporte a micro-transações na plataforma, os desenvolvedores podem publicar aplicativos efetivamente grátis, mas com capacidade de ter funcionalidades desbloqueadas, anuncios removidos ou compra/assinatura de conteúdo sem que o usuário precise divulgar seus dados financeiros para o desenvolvedor. Mais uma vez é um cenário onde todos ganham pois o usuário não precisa se preocupar em confiar ou não do desenvolvedor e fornecer novamente seus dados financeiros pois a Microsoft fará a cobrança e o repasse para o desenvolvedor. O desenvolvedor não precisa se preocupar com a segurança e armazenamento de dados sigilosos de seus clientes nem com a integração com os sistemas das empresas de cartão de crédito e a Microsoft ainda garante uma renda extra, ajudando a baixar ainda mais o custo e aumentar a viabilidade da plataforma.&lt;/p&gt; &lt;p&gt;Na conferencia BUILD que ocorreu no final de 2011 houve algumas paletras que abordaram esse assunto tanto do ponto de vista estratégico como técnico, com diversos exemplos de como utilizar as apis e suas diversas possibilidades. Espero que este recurso seja trazido para a plataforma do Windows Phone também. Abaixo tem o link de duas sessions com foco na Store do Windows 8 e monetização de aplicativos:&lt;/p&gt; &lt;p&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-121T" target="_blank"&gt;Introducing the Windows Store&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-123T" target="_blank"&gt;Enabling trials and in-app offers in your Metro style app&lt;/a&gt;&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/cNDIRLYA4_A" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=4835649954557873420" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/4835649954557873420?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/4835649954557873420?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/cNDIRLYA4_A/in-app-purchases.html" title="A importância de in-app purchases" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2012/03/in-app-purchases.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcARH48fCp7ImA9WhJQGE0.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-2949083107120394248</id><published>2012-03-13T14:21:00.000-03:00</published><updated>2012-08-01T02:47:25.074-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-01T02:47:25.074-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML5" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 7" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS" /><title>Usando css media queries no Windows Phone 7</title><content type="html">&lt;p&gt;O desenvolvimento moderno de web sites tem introduzido tantos novos conceitos e abordagens que acaba sendo difícil para uma grande parte dos desenvolvedores se manterem atualizados.&lt;/p&gt; &lt;p&gt;Uma ideia que defendo com muita garra é o desenvolvimento de sites com layout fluído, capazes de identificar e se adaptarem ao dispositivo onde estão sendo exibidos. Já vi diversas tecnicas para atingir este proposito mas a maioria delas normalmente consiste em criar versões mobile do site. Eu não gosto dessa abordagem por alguns motivos:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;normalmente são hospedadas em urls diferentes da versão “normal”  &lt;li&gt;costumam requerer alguma forma de detectar que está em um dispositivo móvel para poder redirecionar para a url da versão móvel  &lt;li&gt;reaproveita pouco do desenvolvimento realizado na versão “normal”&lt;/li&gt;&lt;/ul&gt;  &lt;a name='more'&gt;&lt;/a&gt; &lt;p&gt;É aí que entra um recurso do CSS chamado media queries. Media queries foram criadas originalmente para permitir a criação de folhas de estilo css diferentes e específicas para meios distintos (exibir no monitor, impressão, etc…), mas recentemente, com os atuais avanços nas engines dos browsers modernos tanto no desktop como em smartphones este recurso evoluiu para permitir a criação ou adaptação de folhas de estilos que se adaptam à resolução da tela, entre outros aspectos.&lt;/p&gt; &lt;p&gt;Para mim esta abordagem é muito mais elegante e efetiva pois permite que um site seja construído e depois seja simplesmente adaptado para resoluções distintas, reorganizando, redimensionando ou até mesmo ocultando elementos na tela, &lt;/p&gt; &lt;p&gt;Todos os browser modernos de smartphones têm suporte em algum nível a este recurso e o Windows Phone não é diferente. A partir da versão 7.1 do Windows Phone (Mango – equivalente à versão 7.5 do SDK) o Internet Explorer passou a usar a engine do IE9 (o IE do Windows Phone 7.0 era baseado no IE7). Isso significa que praticamente tudo que é suportado nativamente no IE9 também é suportado no WP7.1 (com exceção de plugins e um ou outro recurso que não fazia sentido nesse tipo de aparelho).&lt;/p&gt; &lt;p&gt;Abaixo segue um exemplo do html necessário para que possamos tirar o máximo proveito de media queries tanto em browsers de desktop como mobile:&lt;/p&gt;&lt;pre&gt;&lt;p&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;&lt;p&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&lt;p&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&lt;p&gt;  &amp;lt;meta http-equiv="X-UA-Compatible" content="IE=Edge"/&amp;gt;&lt;br /&gt;&lt;p&gt;  &amp;lt;meta name="Viewport" content="width=device-width,user-scalable=no"/&amp;gt;&lt;br /&gt;&lt;p&gt;  &amp;lt;meta charset="utf-8" /&amp;gt;&lt;br /&gt;&lt;p&gt;  &amp;lt;title&amp;gt;Titulo da pagina&amp;lt;/title&amp;gt;&lt;br /&gt;&lt;p&gt;  &amp;lt;link href="Styles/tema1/main.css" rel="stylesheet" type="text/css" /&amp;gt;&lt;br /&gt;&lt;p&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;/p&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Neste pequeno fragmento de html já temos diversas coisas interessantes:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Doctype html, que é o doctype do html5. Em browsers modernos (no IE a partir da versão 9), este doctype faz com que a página seja renderizada seguinda o mais recente conjunto de regras definidas para html5. &lt;br /&gt;&lt;li&gt;Meta tag X-UA-Compatible faz com que versões do IE anteriores à versão 9 renderizem a página no modo de compatibilidade mais avançado que suportarem. &lt;br /&gt;&lt;li&gt;Meta tag Viewport define quais serão os limites de resolução modo de zoom utilizados pelo browser quando em dispositivos mobile. Neste caso estamos definindo que a página deve ser renderizada respeitando a largura do dispositivo e que não haverá zoom no conteúdo.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Mas isso por si só não é suficiente para termos um site adaptável. Precisamos também de uma folha de estilo capaz de adaptar o conteúdo. É aí que entra a tal da media query. No arquivo main.css referenciado acima, poderiamos ter algo assim:&lt;/p&gt;&lt;pre&gt;#header {&lt;br /&gt;  height:80px;&lt;br /&gt;  background:#000;&lt;br /&gt;  margin:0 auto;&lt;br /&gt;  width: 900px;&lt;br /&gt;  color:#fff;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@media (max-device-width:900px), (max-width:900px){&lt;br /&gt;  img{&lt;br /&gt;    max-width:100%;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  #header {&lt;br /&gt;    height:auto;&lt;br /&gt;    width: 100%;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;@media (max-device-width:474px), (max-width:474px){&lt;br /&gt;  #footer{&lt;br /&gt;    display:none;&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Notem que há duas estruturas @media que definem algumas regras. Essas estruturas são as média queries que se encarregarão de adaptar o conteúdo da página de acordo com a resolução do browser (funciona até se você redimensionar a janela do browser no computador). No exemplo acima, o css normal define algumas propriedades para o elemento com id “header”. Depois há uma instrução de media query que altera as propriedades de alguns elementos se a resolução do browser tiver até 900px de largura. Depois há uma segunda instrução que esconde o elemento com id “footer” caso a largura do browser seja até 474px. Um truque bacana que coloquei neste exemplo foi que restringi a largura de todas as imagens para a largura do browser, assim quando a página for aberta em um smartphone, por exemplo, não haverá scroll lateral por causa de alguma imagem grande que esteja no site, mas imagens pequenas não serão afetadas.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;O mais interessante desse processo todo é que se o site for bem construído não será necessário mudar nada na página para ter uma versão mobile. Além disso, se o browser não suportar media queries, ele simplesmente não vai entender o @media e vai ignorar tudo que estiver naquele bloco, o que significa que esta folha de estilo não afetará negativamente o site quando executado em browser mais antigos.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Neste momento estou trabalhando em um novo layout para este blog seguindo esta abordagem, para que fique mais confortável ler os posts a partir de smartphones. Espero conseguir arrumar tempo para finalizar este layout logo. Para ver um excelente exemplo deste método em ação, acesso o &lt;a href="http://www.hanselman.com/blog/" target="_blank"&gt;blog do Scott Hanselman&lt;/a&gt; (você pode utilizar qualquer browser e redimensionar a janela ou acessar a partir do seu smartphone).&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/INh1LaO727s" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=2949083107120394248" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/2949083107120394248?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/2949083107120394248?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/INh1LaO727s/wp7-css-media-queries.html" title="Usando css media queries no Windows Phone 7" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2012/03/wp7-css-media-queries.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UGQH4_eip7ImA9WhRWGEg.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-6364091768507549857</id><published>2012-01-06T09:58:00.001-02:00</published><updated>2012-01-06T10:00:21.042-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-06T10:00:21.042-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="HTML5" /><category scheme="http://www.blogger.com/atom/ns#" term="Dicas" /><title>Veja o suporte dos browsers às novidades de html5, css3 e javascript</title><content type="html">&lt;p&gt;Hoje eu reencontrei um site muito útil que eu já havia visto algum tempo atrás mas havia perdido o link. O site se chama “&lt;a title="tabelas de compara&amp;ccedil;&amp;atilde;o de suporte dos browsers &amp;agrave;s diversas novidades de css3, html5, svg, javascript, etc" href="http://caniuse.com/" target="_blank"&gt;When can I use…&lt;/a&gt;” e contém diversas tabelas comparativas mostrando o suporte dos principais browsers às novidades de CSS, HTML5, SVG, Javascript e outros.&lt;/p&gt; &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="When can I use rodando no IE9" border="0" alt="When can I use rodando no IE9" src="http://lh4.ggpht.com/-MNQqzsl-paU/Twbh00quejI/AAAAAAAAA9A/vZyyQ0F5bhU/image%25255B8%25255D.png?imgmax=800" width="660" height="429"&gt;&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;p&gt;Clicando nos links das funcionalidades é possível ver as tabelas comparativas de suporte dos browsers e também é possível mudar os filtros para exibir outras funcionalidades. &lt;/p&gt; &lt;p&gt;As tabelas de comparação contam também com alguns browsers de smartphone, mas o Windows Phone não consta na lista (tem apenas iOS, Android, Opera Mini e Opera Mobile). Mas isso não é um problema pois o IE do Windows Phone usa a mesma engine de renderização do desktop, com a única diferença de que não suporta plug-ins, então basta olhar a versão do IE normal na lista para ver se suporta a funcionalidade desejada. O IE do Windows Phone 7.0 (versão lançada na Europa e EUA em 2010) usa a engine do IE 7 e o Windows Phone 7.1 (Mango, lançado em 2011, inclusive no Brasil) usa a engine do IE 9.&lt;/p&gt; &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="tabelas de compara&amp;ccedil;&amp;atilde;o com filtros expandidos, permitindo filtras as funcionalidades e browsers procurados" border="0" alt="tabelas de compara&amp;ccedil;&amp;atilde;o com filtros expandidos, permitindo filtras as funcionalidades e browsers procurados" src="http://lh3.ggpht.com/--P3WBmnbNAU/Twbh2cKXkVI/AAAAAAAAA9I/RlUsoZtQX5Q/image%25255B9%25255D.png?imgmax=800" width="660" height="430"&gt;&lt;/p&gt; &lt;p&gt;Se você estiver trabalhando em um projeto usando HTML5, este site com certeza será muito útil para ajudar a identificar os pontos críticos do projeto do ponto de vista de suporte e portabilidade entre plataformas.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/i9UTtTtUwu0" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=6364091768507549857" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/6364091768507549857?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/6364091768507549857?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/i9UTtTtUwu0/lista-suporte-html5-browsers.html" title="Veja o suporte dos browsers às novidades de html5, css3 e javascript" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-MNQqzsl-paU/Twbh00quejI/AAAAAAAAA9A/vZyyQ0F5bhU/s72-c/image%25255B8%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2012/01/lista-suporte-html5-browsers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YFRno5cSp7ImA9WhRWFUw.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-3412246044089612263</id><published>2012-01-02T11:21:00.001-02:00</published><updated>2012-01-02T11:31:57.429-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-02T11:31:57.429-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="Dicas" /><title>Exibir/Ocultar caracteres ocultos no Visual Studio 2010</title><content type="html">&lt;p&gt;O Visual Studio 2010 tem diversos recursos que estão muito bem escondidos nos seus vários menus e telas de configuração, mas são acessíveis por teclas de atalho. Isso é vantajoso em diversas situações pois pode agilizar a utilização desses recursos mas também pode se tornar uma irritação ou mesmo um problema se você por acaso acionar uma dessas teclas de atalho por acidente e não souber como voltar atrás. Foi o que aconteceu com um colega no trabalho recentemente.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;p&gt;Por acidente esse colega acionou uma tecla de atalho do Visual Studio 2010 que ativa a exibição de caracteres ocultos (white space). Em outras palavras, o Visual studio passou a exibir todos os espaços e marcação de final de arquivo na tela. O resultado foi algo semelhante à imagem abaixo:&lt;/p&gt; &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Editor de c&amp;oacute;digo do Visual Studio 2010 com a op&amp;ccedil;&amp;atilde;o de exibir caracteres ocultos ativada" border="0" alt="Editor de c&amp;oacute;digo do Visual Studio 2010 com a op&amp;ccedil;&amp;atilde;o de exibir caracteres ocultos ativada" src="http://lh6.ggpht.com/-GqWNCPOCp2U/TwGvYB5spII/AAAAAAAAA8w/0Ag_OBz3W7I/image%25255B2%25255D.png?imgmax=800" width="408" height="196"&gt;&lt;/p&gt;  &lt;p&gt;Não parece ser algo muito irritante neste exemplo pois há pouco código, mas em arquivos com centenas de linhas de código e em arquivo com html esse modo de visualização é bastante irritante e chega a atrapalhar a produtividade pois polue visualmente a tela. Esse colega passou quase 2 meses trabalhando com essa configuração pois não conseguia encontrar um meio de desfazer e voltar ao modo normal de visualização. Ele chegou inclusive a reinstalar o Visual Studio mas não adiantou pois o instalador não removeu as configurações problematicas.&lt;/p&gt; &lt;p&gt;Hoje eu dei uma pesquisada um pouco mais a fundo e acabei encontrando a solução. A opção do menu para essa configuração se encontra em &lt;strong&gt;Edit &amp;gt; Advanced &amp;gt; View White Space&lt;/strong&gt; e pode ser acionada pela tecla de atalho &lt;strong&gt;Ctrl+E, S&lt;/strong&gt; (que foi o que aconteceu com meu colega).&lt;/p&gt; &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Menu do VS2010 mostrando a op&amp;ccedil;&amp;atilde;o Edit &amp;gt; Advanced &amp;gt; View White Space" border="0" alt="Menu do VS2010 mostrando a op&amp;ccedil;&amp;atilde;o Edit &amp;gt; Advanced &amp;gt; View White Space" src="http://lh6.ggpht.com/-SRj1adXBeTM/TwGvZa371jI/AAAAAAAAA84/8x8AP5CB8nA/image%25255B5%25255D.png?imgmax=800" width="625" height="469"&gt;&lt;/p&gt; &lt;p&gt;Mas existe mais um “alerta” aqui: O submenu Advanced só aparece se houver um arquivo de código aberto. Se o seu Visual Studio não estiver com um arquivo de código aberto ou estiver em modo design, esse submenu não aparece e, consequentemente fica impossível achar a configuração apenas explorando a interface do Visual Studio.&lt;/p&gt; &lt;p&gt;Portanto, tome cuidado com as combinações de teclas que usa e não saia digitando teclas aleatórias enquanto estiver pressionando as teclas &lt;strong&gt;Ctrl&lt;/strong&gt; ou &lt;strong&gt;Alt&lt;/strong&gt;, pois você pode acionar acidentalmente uma configuração oculta do Visual Studio ou mesmo executar uma ação indesejada (como fazer um check-in de código incompleto, por exemplo).&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/1oNWd4yNbU8" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=3412246044089612263" title="2 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/3412246044089612263?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/3412246044089612263?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/1oNWd4yNbU8/exibir-caracteres-ocultos-vs2010.html" title="Exibir/Ocultar caracteres ocultos no Visual Studio 2010" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-GqWNCPOCp2U/TwGvYB5spII/AAAAAAAAA8w/0Ag_OBz3W7I/s72-c/image%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.kelps.net/2012/01/exibir-caracteres-ocultos-vs2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIESH88cCp7ImA9WhRQGUo.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-7156779786176919698</id><published>2011-12-15T16:24:00.001-02:00</published><updated>2011-12-15T16:25:09.178-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-15T16:25:09.178-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IE" /><title>Atualizações automáticas silenciosas no Internet Explorer a partir de Janeiro/2012</title><content type="html">&lt;p&gt;Uma excelente notícia para quem desenvolve para Web: Hoje &lt;a href="http://windowsteamblog.com/members/rgavin/default.aspx" target="_blank"&gt;Ryan Gavin&lt;/a&gt; anunciou no &lt;a href="http://windowsteamblog.com/ie/b/ie/" target="_blank"&gt;blog oficial do Internet Explorer (em inglês)&lt;/a&gt; os &lt;a href="http://windowsteamblog.com/ie/b/ie/archive/2011/12/15/ie-to-start-automatic-upgrades-across-windows-xp-windows-vista-and-windows-7.aspx" target="_blank"&gt;planos para implementação de atualizações automáticas silenciosas no IE&lt;/a&gt;, começando já em&lt;strong&gt; janeiro de 2012&lt;/strong&gt; no &lt;strong&gt;Brasil&lt;/strong&gt; e Austrália (isso mesmo, Brasil fará parte do piloto).&lt;/p&gt; &lt;p&gt;Essas atualizações ocorrerão, como o próprio nome diz, de forma automática e silenciosa, sem necessidade de nenhuma intervenção do usuário e possivelmente (pele menos é o que esperamos) sem reiniciar o computador. Esse tipo de atualização já é comum para usuários do Google Chrome.&lt;/p&gt; &lt;p&gt;Mesmo sendo automáticas e sem intervenção, ainda será possível optar por não atualizar (há casos de empresas que têm aplicações que dependem de versões específicas do browser e não podem simplesmente atualizar), ou mesmo remover a atualização e voltar para a versão anterior, mas o padrão agora será a atualização automática para a última versão.&lt;/p&gt; &lt;p&gt;A atualização será para a última versão disponível na plataforma do usuário, ou seja, usuários do Windows XP receberão o IE8 e usuários do Vista e Windows 7 receberão o IE9 (e IE10, quando for lançado).&lt;/p&gt; &lt;p&gt;Agora é esperar que essa atualização realmente diminua de forma substancial o tamanho da base instalada de IE6 e IE7 (e talvez IE8 também, mas não tanto) para que possamos desenvolver sites e aplicações com mais tranquilidade e menos dores de cabeça, além de ajudar a convencer os clientes de que não será mais tão imprescindível suportar versões tão antigas do browser da Microsoft.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.microsoftinsidersbrasil.com.br/BlogMicrosoftBrasil.aspx?cod=346" target="_blank"&gt;versão traduzida para português do post sobre este anuncio&lt;/a&gt;&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/lqXk9uM4dnA" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=7156779786176919698" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/7156779786176919698?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/7156779786176919698?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/lqXk9uM4dnA/atualizacao-automatica-ie.html" title="Atualizações automáticas silenciosas no Internet Explorer a partir de Janeiro/2012" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2011/12/atualizacao-automatica-ie.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4AQnk4eSp7ImA9WhdUGU0.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-5719689588785231315</id><published>2011-10-05T22:18:00.000-03:00</published><updated>2011-10-06T10:15:43.731-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-06T10:15:43.731-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Steve Jobs" /><title>Steve Jobs, 1955 - 2011</title><content type="html">&lt;p&gt;Não sou um Mac, sou um PC, mas isso não muda em nada o fato de que o mundo ficou um pouco mais feio e triste hoje, com a perda de Steve Jobs para um câncer no pâncreas.&lt;/p&gt; &lt;p&gt;&lt;a title="Homenagem na Wired.com &amp;agrave; Steve Jobs" href="http://www.wired.com/" target="_blank"&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="Homenagem na Wired.com &amp;agrave; Steve Jobs" border="0" alt="Homenagem na Wired.com &amp;agrave; Steve Jobs" src="http://lh4.ggpht.com/-MmKLRWrfhYQ/To2Ge5mHxgI/AAAAAAAAA7A/6jCMwdi9-vE/s288/rip-jobs.jpg" width="313" height="226"&gt;&lt;/a&gt;&amp;nbsp;&lt;a title="Nota na Apple.com sobre o falecimento de Jobs." href="http://www.apple.com/stevejobs/" target="_blank"&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="Nota na Apple.com sobre o falecimento de Jobs." border="0" alt="Nota na Apple.com sobre o falecimento de Jobs." src="http://lh3.ggpht.com/-Ghqi_EDFxv8/To2Get4nSKI/AAAAAAAAA68/uTnu02pr5Rw/s288/rip-steve.jpg" width="297" height="226"&gt;&lt;/a&gt;&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;p&gt;Desde quando comecei minha carreira como desenvolvedor, em 2000, eu trabalho com PCs e tecnologia primariamente da Microsoft, então acho que deve ser no mínimo estranho me ver fazendo aqui um post sobre o falecimento de Steve Jobs, mas ninguém pode negar que ele revolucionou todo o mercado de tecnologia.&lt;/p&gt; &lt;p&gt;Minha carreira começou como programador web, mas eu sempre me interessei bastante em fazer as coisas de forma a serem simples para o usuário (e se possível, para o desenvolvedor também). Na época esse conceito não tinha um nome nem era muito difundido, mas hoje chamamos de UX (experiência do usuário). Em toda minha carreira eu me dediquei a criar software seguindo o que considerava a melhor experiência possível. Comecei a focar mais intensamente nessa área a partir de 2007, com o surgimento do Silverlight, inicio da difusão do HTML5 e a crescente atenção dada pela Microsoft a design e UX. Hoje, sou o especialista de UX e novas tecnologias na &lt;a href="http://www.webfoundations.com.br" target="_blank"&gt;empresa onde trabalho&lt;/a&gt; e adoro o que faço. Devo muito ao Steve, pois se há alguém responsável por UX finalmente ter se tornado um assunto importante, ele foi esse alguém.&lt;/p&gt; &lt;p&gt;O único iProduto que tenho é um iPod Touch, que foi comprado 6 meses atrás quando eu estava ajudando em um projeto para portar uma aplicação de iOS para Windows Phone 7. É um bom aparelho e não me arrependo da compra, mas uso apenas para jogar e fazer testes de desenvolvimento. &lt;/p&gt; &lt;p&gt;Apesar de eu não ser muito fã da linguagem de design dos softwares da Apple, é impossível negar o impacto que eles têm no nosso mercado atual. Steve mudou o mundo ao mostrar que a experiência do usuário é o mais importante, não a tecnologia. As coisas devem ser fáceis de usar, simples de entender, práticas e belas ao mesmo tempo. Se não tiver esses 4 requisitos, não terá o sucesso que poderia ter.&lt;/p&gt; &lt;p&gt;A morte de Steve serve também para mostrar que ele era humano, como nós. Um humano extraordinário, mas humano, o que significa que todos temos esse potencial de mudar o mundo, fazer a diferença, mas apenas poucos conseguimos.&lt;/p&gt; &lt;p&gt;Para mostrar como Steve Jobs foi importante, basta olhar para quem já fez algum pronunciamento sobre seu falecimento e prestar atenção na mensagem que cada um tentou passar: &lt;a title="Nota de Bill Gates no Twitter - &amp;quot;Para aqueles de n&amp;oacute;s sortudos o suficiente em ter trabalhado com ele, foi uma honra enorme. Sentirei falta de Steve imensamente.&amp;quot;" href="http://twitter.com/#!/BillGates/status/121746029308678145" target="_blank"&gt;Bill Gates&lt;/a&gt;, &lt;a title="Nota de Barak Obama - &amp;quot;Ele mudou a forma com cada um de n&amp;oacute;s v&amp;ecirc; o mundo&amp;quot;" href="http://www.whitehouse.gov/blog/2011/10/05/president-obama-passing-steve-jobs-he-changed-way-each-us-sees-world" target="_blank"&gt;Barak Obama&lt;/a&gt;, &lt;a title="Michael Bloomberg (prefeito de NY) - &amp;quot;Hoje a Am&amp;eacute;rica perdeu um g&amp;ecirc;nio que ser&amp;aacute; lembrado ao lado de Edison e Einstein...&amp;quot;" href="http://www.mikebloomberg.com/index.cfm?objectid=D6B0FDDF-C29C-7CA2-FB86D55317402D79" target="_blank"&gt;Michael Bloomberg&lt;/a&gt;, &lt;a title="Steve Wozniak  - &amp;quot;N&amp;oacute;s perdemos algo que jamais iremos recuperar&amp;quot;" href="http://hosted2.ap.org/APDEFAULT/f70471f764144b2fab526d39972d37b3/Article_2011-10-06-Obit-Jobs-Wozniak/id-21c4598911374e7399c08867cc3f8885" target="_blank"&gt;Steve Wozniak&lt;/a&gt;, e muitos outros que nem dá pra citar aqui.&lt;/p&gt; &lt;p&gt;Por tudo isso, obrigado Steve. O mundo ficou um pouco mais feio e triste hoje. Meus mais sinceros sentimentos a todos seus amigos e familiares. Descanse em paz.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/_4DwUqyemlY" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=5719689588785231315" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/5719689588785231315?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/5719689588785231315?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/_4DwUqyemlY/rip-steve-jobs.html" title="Steve Jobs, 1955 - 2011" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-MmKLRWrfhYQ/To2Ge5mHxgI/AAAAAAAAA7A/6jCMwdi9-vE/s72-c/rip-jobs.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2011/10/rip-steve-jobs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYGQnw4fip7ImA9WhdUFUQ.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-7879082435883768258</id><published>2011-10-02T19:01:00.001-03:00</published><updated>2011-10-02T19:05:23.236-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-02T19:05:23.236-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="TechEd" /><category scheme="http://www.blogger.com/atom/ns#" term="Download" /><category scheme="http://www.blogger.com/atom/ns#" term="Código" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight 5" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Exemplo do novo PivotViewer do Silverlight 5 apresentado no TechEd Brasil 2011</title><content type="html">&lt;p&gt;Na &lt;a href="http://blog.kelps.net/2011/08/lista-palestras-teched11.html"&gt;palestra de Silverlight 5&lt;/a&gt; que apresentei este ano com &lt;a title="Twitter: Rodrigo Kono" href="http://twitter.com/rodrigokono"&gt;Rodrigo Kono&lt;/a&gt; no &lt;a href="http://www.teched.com.br"&gt;TechEd Brasil&lt;/a&gt;, mostramos a nova versão do PivotViewer que vem no SDK do Silverlight 5.&lt;/p&gt; &lt;p&gt;Esta nova versão tem diversas melhorias, principalmente no que diz respeito à forma de montar e utilizar a coleção de dados. Nesta nova versão não é mais necessário pré-processar a coleção usando Excel ou DeepZoom Composer e praticamente tudo pode ser feito usando Binding.&lt;/p&gt; &lt;p&gt;Abaixo tem um link para fazer download do código fonte do exemplo que apresentamos. Para usar&amp;nbsp; este exemplo é necessário ter instalado o Tools do Silverlight 5 RC. Em breve vou publicar novos posts com mais detalhes sobre esta e outras novidades do Silverlight 5, mas por enquanto, aproveitem este exemplo.&lt;/p&gt; &lt;p&gt;&lt;a title="PivotViewerSample.zip" href="https://skydrive.live.com/self.aspx/Exemplos%20Blog/PivotViewerSample.zip?cid=c15a3c05f395fee5"&gt;&lt;img src="http://secure.wlxrs.com/1ZnS7zxdhAO5PBVJ5oK5JQ/images/icons/Small/Zip.png"&gt;PivotViewerSample.zip&lt;/a&gt;&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/excqvXbG96I" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=7879082435883768258" title="2 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/7879082435883768258?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/7879082435883768258?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/excqvXbG96I/pivotviewer-silverlight-5.html" title="Exemplo do novo PivotViewer do Silverlight 5 apresentado no TechEd Brasil 2011" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.kelps.net/2011/10/pivotviewer-silverlight-5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQHQnY-fyp7ImA9WhdUFUQ.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-1399288825436054613</id><published>2011-10-01T10:13:00.000-03:00</published><updated>2011-10-02T19:25:33.857-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-02T19:25:33.857-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MVP" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Fui nomeado MVP em Silverlight por mais 1 ano!</title><content type="html">&lt;p&gt;&lt;a href="https://mvp.support.microsoft.com/profile=10F4FD38-C58A-4232-9F7A-398EC5C12E54"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="MVP_Horizontal_FullColor" border="0" alt="MVP_Horizontal_FullColor" src="http://lh6.ggpht.com/-Tbz9tAZwO_w/Tojkch4L-mI/AAAAAAAAA6U/q5My8mCPltg/MVP_Horizontal_FullColor%25255B4%25255D.png?imgmax=800" width="240" height="97"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Acabei de receber o comunicado oficial da Microsoft de que fui nomeado como MVP de Silverlight pelo segundo ano consecutivo.&lt;/p&gt; &lt;p&gt;Devo esse título a todos vocês que, assim como, eu adoram essa tecnologia. Estou muito animado com todas as novidades que a Microsoft vem anunciando e com a crescente importância que o XAML está ganhando em todas suas principais plataformas de desenvolvimento. Espero continuar fazendo parte dessa comunidade por muitos anos ainda. &lt;/p&gt; &lt;p&gt;Que venha mais um ano de muito XAML para todos nós!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/TXnbz0z63Pk" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=1399288825436054613" title="2 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/1399288825436054613?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/1399288825436054613?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/TXnbz0z63Pk/mvp-silverlight-novamente.html" title="Fui nomeado MVP em Silverlight por mais 1 ano!" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-Tbz9tAZwO_w/Tojkch4L-mI/AAAAAAAAA6U/q5My8mCPltg/s72-c/MVP_Horizontal_FullColor%25255B4%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.kelps.net/2011/10/mvp-silverlight-novamente.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8MQnYzfyp7ImA9WhdQEks.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-6465022608991747822</id><published>2011-08-09T11:44:00.001-03:00</published><updated>2011-08-13T17:54:43.887-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-13T17:54:43.887-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="TechEd" /><category scheme="http://www.blogger.com/atom/ns#" term="Eventos" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 7" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight 5" /><title>Minhas palestras confirmadas para o TechEd 2011</title><content type="html">&lt;p&gt;&lt;a href="http://www.teched.com.br/"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="TechEd Brasil 2011" border="0" alt="TechEd Brasil 2011" src="http://lh6.ggpht.com/-zVZi2ka870w/TkbkklAp-CI/AAAAAAAAA54/tjV86jHNHc4/image%25255B5%25255D.png?imgmax=800" width="591" height="159"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Saiu a &lt;a href="http://www.teched.com.br/Conteudo/Palestras"&gt;lista de palestras do TechEd Brasil 2011&lt;/a&gt;. Para o evento deste ano eu tenho 2 palestras confirmadas, ambas em parceria com o amigo &lt;a title="Rodrigo Kono no Twitter" href="http://twitter.com/rodrigokono"&gt;Rodrigo Kono&lt;/a&gt;. As palestras serão:&lt;/p&gt; &lt;p&gt; &lt;h4&gt;WEB303 – Novidades do Silverlight 5&lt;/h4&gt;&lt;br&gt;Venha ver o que há de novo e emocionante no Silverlight 5. Aprenda sobre os recursos para o desenvolvimento de aplicações de negócios, visualização e jogos. Nesta sessão iremos apresentar os principais recursos do Silverlight 5 assim como as atividades futuras desta tecnologia. Esteja preparado para ser produtivo com a última versão do Silverlight.&lt;br&gt;Palestrantes : &lt;a title="Kelps no Twitter" href="http://twitter.com/kelps"&gt;Kelps Leite de Sousa&lt;/a&gt; e &lt;a title="Rodrigo Kono no Twitter" href="http://twitter.com/rodrigokono"&gt;Rodrigo Kono&lt;/a&gt;  &lt;p&gt; &lt;h4&gt;WPH305 – XAML Avançado para Windows Phone 7&lt;/h4&gt;&lt;br&gt; &lt;p&gt;Entenda o que é e como funciona o XAML e aprenda a aproveitar suas capacidades ao máximo, criando aplicações de alta padrão para Windows Phone 7. Nessa palestra serão abordados temas como Binding, Templates, Styles, Value Converters, Dependency e Attached Properties. Também será demonstrado como utilizar ferramentas como Visual Studio e Expression Blend para trabalhar com XAML de forma eficiente e como trabalhar em uma equipe composta de designers e desenvolvedores. &lt;br&gt;Palestrantes : &lt;a title="Kelps no Twitter" href="http://twitter.com/kelps"&gt;Kelps Leite de Sousa&lt;/a&gt; e &lt;a title="Rodrigo Kono no Twitter" href="http://twitter.com/rodrigokono"&gt;Rodrigo Kono&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Assim que eu tiver mais detalhes sobre as palestas (como dias e horários) publicarei aqui. Espero vocês lá!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/r6imRvOcMAM" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=6465022608991747822" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/6465022608991747822?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/6465022608991747822?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/r6imRvOcMAM/lista-palestras-teched11.html" title="Minhas palestras confirmadas para o TechEd 2011" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-zVZi2ka870w/TkbkklAp-CI/AAAAAAAAA54/tjV86jHNHc4/s72-c/image%25255B5%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2011/08/lista-palestras-teched11.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4BQ38yeCp7ImA9WhdSGUU.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-7237669375451760073</id><published>2011-07-29T20:08:00.001-03:00</published><updated>2011-07-29T20:09:12.190-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-29T20:09:12.190-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight 4" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><category scheme="http://www.blogger.com/atom/ns#" term="Expression Gallery" /><category scheme="http://www.blogger.com/atom/ns#" term="Behavior" /><title>ClickCountTrigger para Silverlight no Expression Gallery</title><content type="html">&lt;p&gt;&lt;a href="http://lh6.ggpht.com/-KGrFLZdzBmU/TjM9WlVwxWI/AAAAAAAAA5c/EdmwwJTi268/s1600-h/double-click-icon%25255B9%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="double-click-icon" border="0" alt="double-click-icon" align="left" src="http://lh6.ggpht.com/-jjQ4v65KZKY/TjM9XNtaQQI/AAAAAAAAA5g/7oaFW3VxOkU/double-click-icon_thumb%25255B7%25255D.png?imgmax=800" width="60" height="60"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; Acabei de publicar uma nova trigger no &lt;a href="http://gallery.expression.microsoft.com/site/search?f%5B0%5D.Type=User&amp;amp;f%5B0%5D.Value=Kelps%20Leite%20de%20Sousa&amp;amp;f%5B0%5D.Text=Kelps%20Leite%20de%20Sousa&amp;amp;sortBy=Date"&gt;Expression Gallery&lt;/a&gt;, chamada &lt;a href="http://gallery.expression.microsoft.com/ClickCountTrigger"&gt;ClickCountTrigger&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Esta trigger serve para simplificar nossa vida quando queremos implementar duplo click em Silverlight, já que a plataforma não fornece uma implementação nativa desse evento. Decidi fazer a trigger de forma genérica e por isso implementei como click count ao invés de double click. Sendo assim, tornei possível que essa trigger seja utilizada para adicionar cliques triplos, quaduplos ou até mais em aplicações Silverlight. Eu não consigo imaginar situações onde mais do que 3 cliques façam algum sentido, mas a minha imaginação não deve limitar a sua &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://lh6.ggpht.com/-BmNrKVoVJN4/TjM9XZdpoEI/AAAAAAAAA5k/JHOrxOqHguY/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800"&gt;.&lt;/p&gt; &lt;p&gt;Para configurar a trigger no Expression Blend, basta escolher um controle que deverá ter algum comportamento ao receber um duplo click, adicionar uma Action a ele e depois mudar a trigger padrão dessa Action para ClickCountTrigger e configurar quantos cliques disparam a ação. Abaixo temos alguns prints mostrando a trigger configurada em um botão, em conjunto com a Action &lt;a href="http://gallery.expression.microsoft.com/FullScreenAction"&gt;ToggleFullScreenAction&lt;/a&gt;. Este exemplo é do código do live sample que está na página da trigger na galeria.&lt;/p&gt; &lt;p&gt;Action aplicada no botão&lt;/p&gt; &lt;p&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="Action ToggleFullScreenAction configurada em um Button" border="0" alt="Action ToggleFullScreenAction configurada em um Button" src="http://lh4.ggpht.com/-Xr6wRUm8OyU/TjM9Xwz5VVI/AAAAAAAAA5o/5NK6U3Tzn9o/image%25255B11%25255D.png?imgmax=800" width="211" height="56"&gt;&lt;/p&gt; &lt;p&gt;Janela de propriedades da Action, mostrando sua configuração e a da trigger.&lt;/p&gt; &lt;p&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="Propriedades da trigger ClickCountTrigger e da action de fullscreen" border="0" alt="Propriedades da trigger ClickCountTrigger e da action de fullscreen" src="http://lh3.ggpht.com/-IIETR5nYYpc/TjM9YMUbNHI/AAAAAAAAA5s/O6Gsld3QlUY/image%25255B12%25255D.png?imgmax=800" width="340" height="235"&gt;&lt;/p&gt; &lt;p&gt;Configuração da trigger e action no xaml&lt;/p&gt;&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Button&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Content&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"Double-Click to Toggle Full Screen"&lt;/span&gt;&lt;span style="color: "&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;i&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Interaction.Triggers&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;cnzk&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;ClickCountTrigger&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; ClickCount&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"2"&lt;/span&gt;&lt;span style="color: "&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;cnzk&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;ToggleFullScreenAction&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;cnzk&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;ClickCountTrigger&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;i&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Interaction.Triggers&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Button&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Declaração no xaml dos namespaces necessários para utilizar tanto a trigger quanto a action:&lt;/p&gt;&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;&lt;font style="font-size: 9.8pt"&gt;xmlns&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;i&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"http://schemas.microsoft.com/expression/2010/interactivity"&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;xmlns&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;cnzk&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"http://schemas.cnzk.com.br/library"&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Se você utilizar algumas das minhas behaviors, triggers ou actions publicadas no Expression Gallery e tiver algum tipo de feedback ou bug para reportar, pode postar um comentário aqui no blog ou na &lt;a href="http://cnzklibrary.codeplex.com/"&gt;página do projeto no codeplex&lt;/a&gt;. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Espero que esta trigger seja útil para vocês, pois pra mim ela já está sendo.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/v4t__xHk0Ds" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=7237669375451760073" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/7237669375451760073?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/7237669375451760073?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/v4t__xHk0Ds/clickcount-trigger-silverlight-gallery.html" title="ClickCountTrigger para Silverlight no Expression Gallery" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-jjQ4v65KZKY/TjM9XNtaQQI/AAAAAAAAA5g/7oaFW3VxOkU/s72-c/double-click-icon_thumb%25255B7%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2011/07/clickcount-trigger-silverlight-gallery.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4MR3g6fip7ImA9WhdSGUo.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-6006587722196254028</id><published>2011-07-29T19:13:00.001-03:00</published><updated>2011-07-29T19:19:46.616-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-29T19:19:46.616-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Código" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><category scheme="http://www.blogger.com/atom/ns#" term="Dicas" /><title>Busca por controles na árvore visual de aplicações Silverlight e WPF</title><content type="html">&lt;p&gt;Ontem eu vi uma pergunta no &lt;a href="http://social.msdn.microsoft.com/Forums/pt-BR/silverlightpt/threads"&gt;fórum de Silverlight do MSDN&lt;/a&gt; sobre &lt;a href="http://social.msdn.microsoft.com/Forums/pt-BR/silverlightpt/thread/d862de91-2e02-4808-9d55-9c7157e99e26"&gt;como achar todos os campos TextBox que existem dentro de uma ChildWindow&lt;/a&gt;. Já havia algumas respostas para a pergunta mas elas eram bem pontuais para aquele problema específico e necessitavam de várias suposições sobre a estrutura da aplicação para funcionar sem problemas (por exemplo, saber quais tipos de Panel estão sendo usados). Alguns anos atrás, quando eu comecei a fazer uma das minhas primeiras behaviors para publicar na &lt;a href="http://gallery.expression.microsoft.com/site/search?f%5B0%5D.Type=User&amp;amp;f%5B0%5D.Value=Kelps%20Leite%20de%20Sousa&amp;amp;f%5B0%5D.Text=Kelps%20Leite%20de%20Sousa"&gt;galeria do Expression Blend&lt;/a&gt;, eu descobri uma classe do Silverlight (também existe no WPF) que serve justamente para permitir navergarmos na árvore visual de uma aplicação, tanto procurando controles filhos quanto pais de um determinado controle.&lt;/p&gt; &lt;p&gt;A behavior em questão é a que permitia que se fizesse &lt;a href="http://gallery.expression.microsoft.com/MouseWheelScroll"&gt;scroll com a wheel do mouse (a rodinha) em controles que apresentassem scrollbar para aplicações feitas em Silverlight 3&lt;/a&gt;. Hoje essa behavior praticamente não é mais necessárias pois o Silverlight 4 já implementa esse comportamento nativamente, mas não era esse o caso na época. Para poder implementar essa função eu precisei criar um código que fosse capaz de ler toda a hierarquia visual do controle (vasculhando todos os componentes do qual o template do controle era composto), procurando por algum ScrollViewer. Se eu o encontrasse, a behavior assinava os eventos necessários do controle para que o scroll funcionasse como esperado.&lt;/p&gt; &lt;p&gt;Para navegar pela árvore visual, a classe que utilizei foi a VisualTreeHelper. Voltando à dúvida do fórum, eu decidi criar um método genérico que fosse capaz de encontrar todos os controles de um determinado tipo em uma hierárquia utilizando essa classe, assim estaria garantindo que não precisaria ficar colocando “if”s para cada tipo de painel diferente que aparecesse na minha frente. Sem mais delongas, segue abaixo o método que eu fiz.&lt;/p&gt;&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; T[] SearchUIElements&amp;lt;T&amp;gt;(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;UIElement&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; root, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; maxlevel = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.MaxValue, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; level = 0) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;where&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; T : &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;UIElement&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; {&lt;br&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; result = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;List&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;&amp;lt;T&amp;gt;();&lt;br&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (root != &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (root &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;is&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; T) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result.Add(root &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; T);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; (level &amp;lt; maxlevel) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; childrencount = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;VisualTreeHelper&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.GetChildrenCount(root);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;DependencyObject&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; child;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; i = 0; i &amp;lt; childrencount; i++) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; child = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;VisualTreeHelper&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.GetChild(root, i);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (child &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;is&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;UIElement&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result.AddRange(SearchUIElements&amp;lt;T&amp;gt;(child &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;UIElement&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt;, maxlevel, level + 1));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; result.ToArray();&lt;br&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Como vocês podem ver o método não é grande e é bem simples. Ele aceita 3 parâmetros:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;root&lt;/strong&gt;: controle raiz a partir de onde será iniciada a busca. Por exemplo: LayoutRoot. &lt;br /&gt;&lt;li&gt;&lt;strong&gt;maxlevel&lt;/strong&gt;: número máximo de níveis que a busca irá “descer” nos descendentes. Este parâmetro é opcional e o seu valor padrão é int.MaxValue, garantindo que será lida a hierarquia inteira a partir do ponto inicial. &lt;br /&gt;&lt;li&gt;&lt;strong&gt;level&lt;/strong&gt;: nível atual da busca. Esse parâmetro é utilizado apenas pela própria função para controlar quando a busca atingirá o nível máximo solicitado pelo usuário.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;A função é genérica. O parâmetro T serve para indicar qual tipo de controle será procurado, assim como permitir que o retorno sejá tipado corretamente. A é executada de forma recursiva, chamando a si mesma para cada novo ítem na hierarquia.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;O resultado da função é sempre um array do tipo de controle solicitado. Esta função sempre retorna uma array, mesmo que seja vazio (não será retornado null). &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Abaixo temos um xaml de exemplo e algumas chamada à função com a descrição do que será encontrado em cada caso.&lt;/p&gt;&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;Name&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;"LayoutRoot"&lt;/span&gt;&lt;span style="color: "&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;TextBox&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;TextBox&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;TextBox&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;TextBox&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;TextBox&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;&lt;font style="font-size: 9.8pt"&gt;//acha TODOS os 5 campos TextBox &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; textboxes = SearchUIElements&amp;lt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;TextBox&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;&amp;gt;(LayoutRoot);&lt;br /&gt; &lt;br /&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;//acha apenas os 2 campos TextBox de LayoutRoot&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;font color="#000000"&gt;textboxes = SearchUIElements&amp;lt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;TextBox&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;&amp;gt;(LayoutRoot, 1);&lt;br /&gt; &lt;br /&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;//acha 4. Os 2 acima e os 2 que estão no primeiro Grid filho&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;font color="#000000"&gt;textboxes = SearchUIElements&amp;lt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;TextBox&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt;&amp;gt;(LayoutRoot, 2);&lt;br /&gt; &lt;br /&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;//acha TODOS os Grids a partir de LayoutRoot, inclusive ele mesmo &lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; grids = SearchUIElements&amp;lt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;(LayoutRoot);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Agora que eu já mostrei como faz, você acha que consegue fazer uma função semelhante que navegue ao contrário na hierárquia? (procurando nos pais de um controle até chegar na raíz da aplicação…). Fica o desafio. &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://lh3.ggpht.com/-LMChAXUOhI0/TjMvydL6SvI/AAAAAAAAA5U/s0i6CGl29to/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800"&gt;&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/bQJlKedM0k8" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=6006587722196254028" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/6006587722196254028?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/6006587722196254028?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/bQJlKedM0k8/busca-arvore-visual-silverlight.html" title="Busca por controles na árvore visual de aplicações Silverlight e WPF" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-LMChAXUOhI0/TjMvydL6SvI/AAAAAAAAA5U/s0i6CGl29to/s72-c/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2011/07/busca-arvore-visual-silverlight.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcMRnYzeSp7ImA9WhdSGUo.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-5995913874916916300</id><published>2011-07-28T18:19:00.000-03:00</published><updated>2011-07-29T19:21:27.881-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-29T19:21:27.881-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="Código" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight 4" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Estratégia para lidar com callbacks assíncronos em Silverlight</title><content type="html">&lt;p&gt;Recentemente, conversando com alguns desenvolvedores no trabalho e verificando algumas perguntas publicadas nos fóruns do MSDN, eu notei que ainda há uma dificuldade muito grande tanto de compreensão quanto de implementação para trabalhar com métodos assincronos. Isso se torna um problema particularmente importante em aplicações Silverlight pois todas as chamadas a web services, RIA services, web requests, etc são obrigatoriamente feitos de forma assincrona, não havendo opções para executar essas mesmas operações da forma sincrona e linear à qual a maioria dos desenvolvedores está acostumada.&lt;/p&gt; &lt;p&gt;Acontece que desenvolvimento assincrono não é difícil e, depois que você aprende e se acostuma, você acaba percebendo que suas aplicações passam a funcionar muito melhor. Sim, não vou argumentar aqui contra o fato de que é necessário se acostumar e que começo seja realmente algo estranho, mas posso garantir que demora pouco tempo para se acostumar e os benefícios são muitos.&lt;/p&gt; &lt;p&gt;Há muitas abordagens e estratégias possíveis para desenvolvimento assíncrono e eu vou apresentar aqui uma delas que é bem simples e que eu usei em praticamente todos os projetos Silverlight em dos quais participei. Essa abordagem não envolve o uso de nenhum framework ou biblioteca externa e pode ser utilizada tranquilamente também em projetos que não sejam Silverlight.&lt;/p&gt; &lt;p&gt;Digamos que você precisa obter o html de uma página web por algum motivo. Uma forma de fazer isso seria criando uma nova instância de WebClient, assinando o evento DownloadStringCompleted e depois chamando o método DownloadString passando a url. Ok, não é difícil, mas é um código repetitivo que poderia facilmente ser reaproveitado ao invés de ser copiado por toda sua aplicação em todo lugar onde você precisar fazer download de uma página. O que eu costumo fazer para esse tipo de chamada é criar um método estático em uma classe utilitária e simplesmente chamar esse método passando, nesse caso, minha url e um ponteiro de callback. É mais fácil mostrar:&lt;/p&gt;&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; HttpGet(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; url, Action&amp;lt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Exception&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;&amp;gt; callback) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (!&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.IsNullOrWhiteSpace(url)) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; client = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;WebClient&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; client.DownloadStringCompleted += (sender, e) =&amp;gt; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (callback != &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt;) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; callback(e.Result, e.Error);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; client.DownloadStringAsync(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Uri&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(url));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Quais são as vantagens desse método:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;para executá-lo não é necessário instanciar nenhuma classe &lt;br /&gt;&lt;li&gt;é facil de reutilizar &lt;br /&gt;&lt;li&gt;permite que a lógica da minha aplicação fique um pouco mais simples, já que não me obriga a assinar nenhum evento no meu código&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Para executar esse método, eu posso usar 2 abordagens.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Abordagem 1 – Delegar o retorno para outro método. Nessa abordagem eu chamo o método HttpGet passando a url desejada e o ponteiro de um método que será executado quando o request for concluído.&lt;/p&gt;&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; LoadData() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpGet(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"http://kelps.net"&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;, DataLoaded);&lt;br&gt;}&lt;br&gt; &lt;/font&gt;&lt;br&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; DataLoaded(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; data, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Exception&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; error) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (error == &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt;) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;//utiliza os dados retornados na variável "data"&lt;/font&gt;&lt;/span&gt;&lt;br&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Abordagem 2 – Utilizar uma expressão lambda para criar um método anônimo inline no meu código, ao invés de criar uma função separada apenas para processar os dados retornados.&lt;/p&gt;&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;&lt;font style="font-size: 9.8pt"&gt;HttpGet(&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;"http://twitter.com/kelps"&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;, (data, error) =&amp;gt; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (error == &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt;) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;//utiliza os dados retornados na variável "data"&lt;/font&gt;&lt;/span&gt;&lt;br&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;});&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;A única diferença de funcionamento entre as 2 abordagens acima é que na segunda seria possível utilizar variáveis que estiverem no mesmo escopo da chamada que está sendo feita, ao passo que na primeira seria necessário que essas variáveis fossem globais da classe para que isso funcione. Nos projetos em que trabalho eu costumo utilizar ambas as abordagens, de acordo com o que faz mais sentido em cada situação. Expressões lambda são bem concisas e compactas, mas são claras para qualquer desenvolvedor. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Este foi apenas um pequeno exemplo de como trabalhar com chamadas assincronas sem ficar se perdendo com assinaturas e liberação de eventos. Há outras formas mais complexas e robustas de lidar com isso mas a minha intenção hoje era simplesmente mostrar como dá pra trabalhar de forma simples com código assíncrono, mesmo sem utilizar nenhuma biblioteca externa.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/aFzapDOQINw" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=5995913874916916300" title="1 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/5995913874916916300?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/5995913874916916300?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/aFzapDOQINw/estrategia-callback-assincrono.html" title="Estratégia para lidar com callbacks assíncronos em Silverlight" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.kelps.net/2011/07/estrategia-callback-assincrono.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cFSHg5eCp7ImA9WhdREUk.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-935871383117293563</id><published>2011-07-27T20:19:00.000-03:00</published><updated>2011-07-31T16:36:59.620-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-31T16:36:59.620-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Download" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 7" /><category scheme="http://www.blogger.com/atom/ns#" term="Beta" /><title>Windows Phone SDK 7.1 Beta 2 Refresh disponível para desenvolvedores</title><content type="html">&lt;p&gt;Quem está participando do beta do Windows Phone Mango para desenvolvedores recebeu uma agradável notícia hoje: Foi disponibilizada uma atualização para os aparelhos com um build mais recente do sistema operacional.&lt;/p&gt; &lt;p&gt;O novo build é o 7712, não o 7720, que é a versão RTM. Foi necessário que usássemos essa versão anterior pois é a versão que é compativel com a atualização do SDK e do Zune que estão sendo disponibilizadas neste refresh.&lt;/p&gt; &lt;p&gt;Está previsto que até o final de agosto O Marketplace será aberto para começarmos a publicar aplicações que funcionarão apenas em aparelhos com Windows Phone 7.5, o que nos dará uma chance de testar bem nossas aplicações em vários aparelhos de desenvolvedores antes que esta versão do SO esteja disponível para o público geral. Isso é interessante pois significa que quando a nova versão do SO estiver disponível para o público já haverá várias aplicações no Marketplace tirando proveito das novas capacidades do sistema operacional. Esta atualização de agosto provavelmente virá junto com uma versão RC (Release Candidate) do SDK. &lt;/p&gt; &lt;p&gt;Se você é um desenvolvedor cadastrado no Marketplace, tem um aparelho com Windows Phone e está participando do Beta do Windows Phone Mango, vá agora mesmo ao Connect e instale este refresh, mas não se esqueça de fazer backup dos backups dos seus backups antes de fazer isso, para garantir que você conseguirá voltar o seu telefone para a versão normal quando a versão RTM estiver disponível pois não será possível ir da versão beta diretamente para a versão RTM do WP7.&lt;/p&gt; &lt;p&gt;PS.: Quando você instalar o novo SDK ele vai aparecer como sendo RC na janela de adicionar e remover programas do Windows, mas na verdade esta ainda não é a versão RC do SDK.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/xwWu7n-8ym4" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=935871383117293563" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/935871383117293563?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/935871383117293563?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/xwWu7n-8ym4/wp71-beta2-refresh.html" title="Windows Phone SDK 7.1 Beta 2 Refresh disponível para desenvolvedores" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2011/07/wp71-beta2-refresh.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEHRng-eCp7ImA9WhdREUw.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-6286997308106208899</id><published>2011-07-04T10:08:00.000-03:00</published><updated>2011-07-31T10:23:57.650-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-31T10:23:57.650-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="The Developer's Conference" /><category scheme="http://www.blogger.com/atom/ns#" term="Eventos" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight 5" /><category scheme="http://www.blogger.com/atom/ns#" term="Palestras" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Palestra sobre as novidades do Silverlight 5 no TDC2011/SP</title><content type="html">&lt;p&gt;Na próxima sexta-feira, dia 08/07 eu irei apresentar uma palestra sobre as novidades do Silverlight 5 no &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/index.html#saopaulo"&gt;TDC 2011&lt;/a&gt;. Se você não se inscreveu ainda, ainda dá tempo. &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/inscricoes#saopaulo"&gt;A inscrição no evento é feita por trilha&lt;/a&gt;, o que o torna bem mais barato. A palestra de Silverilght 5 será na trilha “.NET Client” que acontecerá no dia 08/07 e o preço do evento por trilha é R$ 60,00. &lt;/p&gt; &lt;p&gt;Para quem não sabe, o TDC (The Developer’s Conference) é uma conferencia de baixo custo sobre desenvolvimento que acontece todos os anos em várias e abrange várias tecnologias. Este ano a conferencia acontecerá em São Paulo (06/07 a 10/07), Florianópolis (20/08 e 21/08) e Goiânia (28/10 e 29/10).&lt;/p&gt; &lt;p&gt;Veja abaixo a &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/saopaulo/trilha-dot-net-client#programacao"&gt;lista de palestras da trilha .NET Client de São Paulo&lt;/a&gt;, que acontecerá no dia 08/07.&lt;/p&gt; &lt;p&gt;&lt;a title="Programa&amp;ccedil;&amp;atilde;o da trilha .NET Client no TDC2011-SP" href="http://www.thedevelopersconference.com.br/tdc/2011/saopaulo/trilha-dot-net-client#programacao"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Programa&amp;ccedil;&amp;atilde;o da trilha .NET Client no TDC2011-SP" border="0" alt="Programa&amp;ccedil;&amp;atilde;o da trilha .NET Client no TDC2011-SP" src="http://lh5.ggpht.com/-8t812jK243U/TjVXJaTebuI/AAAAAAAAA5w/tzx4Xde8NXM/image%25255B5%25255D.png?imgmax=800" width="559" height="485"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Espero vocês lá.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/lEqNiaVgbxc" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=6286997308106208899" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/6286997308106208899?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/6286997308106208899?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/lEqNiaVgbxc/palestra-silverlight5-tdc2011.html" title="Palestra sobre as novidades do Silverlight 5 no TDC2011/SP" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-8t812jK243U/TjVXJaTebuI/AAAAAAAAA5w/tzx4Xde8NXM/s72-c/image%25255B5%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2011/07/palestra-silverlight5-tdc2011.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AESH07eyp7ImA9WhdREU4.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-941597636299370030</id><published>2011-06-30T20:04:00.000-03:00</published><updated>2011-07-31T16:15:09.303-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-31T16:15:09.303-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Download" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 7" /><category scheme="http://www.blogger.com/atom/ns#" term="Beta" /><title>Windows Phone SDK 7.1 Beta 2 disponível para download</title><content type="html">&lt;p&gt;Se você está interessado no desenvolvimento para Windows Phone 7, ficará feliz em saber que está &lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=26648"&gt;disponível para download o beta2 das ferramentas de desenvolvimento para Windows Phone 7.1 (mango)&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Uma das coisas que mudou foi que agora o download se chama Windows Phone SDK, não mais Windows Phone Development Tools.&lt;/p&gt; &lt;p&gt;Para instalar esta versão é necessário primeiro remover a versão beta anterior.&lt;/p&gt; &lt;p&gt;Em conjunto com essa nova versão, a Microsoft também anunciou que TODOS os desenvolvedores cadastrados no AppHub receberão um convite por email para participar do beta do Windows Phone 7.1 no Connect. Em outras palavras, isso significa que todos os desenvolvedores cadastrados poderão atualizar os seus telefones com uma versão beta do sistema operacional que será lançado no segundo semestre. Essa é uma excelente notícia para quem já está desenvolvendo aplicações utilizando as &lt;a href="http://blog.kelps.net/2011/05/wp7-mango-tools-beta.html"&gt;ferramentas beta que foram lançadas pouco mais de 1 mês atrás&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Você já tem um Windows Phone? Vai instalar este beta nele? Eu vou &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://lh4.ggpht.com/-2EKSQ36CZ_g/TjWpnlQIfnI/AAAAAAAAA50/crTsL1hGmjA/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800"&gt;&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/b5c0UZX17Nk" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=941597636299370030" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/941597636299370030?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/941597636299370030?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/b5c0UZX17Nk/wp7-mango-beta2.html" title="Windows Phone SDK 7.1 Beta 2 disponível para download" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-2EKSQ36CZ_g/TjWpnlQIfnI/AAAAAAAAA50/crTsL1hGmjA/s72-c/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2011/06/wp7-mango-beta2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8DSHs6fCp7ImA9WhdREU4.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-527974474604732128</id><published>2011-06-01T16:52:00.000-03:00</published><updated>2011-07-31T16:01:19.514-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-31T16:01:19.514-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Eventos" /><title>Conferência BUILD</title><content type="html">&lt;p&gt;Hoje a Microsoft anunciou uma &lt;a title="Build Windows event home page" href="http://www.buildwindows.com/"&gt;nova conferência&lt;/a&gt; que acontecerá no Estados Unidos, substituindo o PDC. O nome dessa nova conferência é &lt;a href="http://www.buildwindows.com/"&gt;BUILD Windows&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Ainda não muitas informações sobre conteúdo, mas pelo próprio nome da conferência já fica bem claro que o foco será a plataforma Windows (provavelmente com bastante informação sobre o Windows 8).&lt;/p&gt; &lt;p&gt;As &lt;a href="http://www.buildwindows.com/Register"&gt;inscrições já estão abertas&lt;/a&gt;. Infelizmente eu não poderei ir, pois 2 viagens internacionais não vão caber no meu orçamento deste ano (eu fui para o MVP Summit em fevereiro). Se você puder ir, não perca essa oportunidade.&lt;/p&gt; &lt;p&gt;A conferência acontecerá entre os dias 13 e 16 de setembro deste ano, em Anaheim, Califórnia.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/M8ldTbfXjro" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=527974474604732128" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/527974474604732128?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/527974474604732128?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/M8ldTbfXjro/conferencia-build.html" title="Conferência BUILD" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2011/06/conferencia-build.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYERXY7eip7ImA9WhdREU4.&quot;"><id>tag:blogger.com,1999:blog-1102500548563078654.post-4233498729936636094</id><published>2011-05-25T15:43:00.000-03:00</published><updated>2011-07-31T15:48:24.802-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-31T15:48:24.802-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Download" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 7" /><category scheme="http://www.blogger.com/atom/ns#" term="Beta" /><title>Windows Phone 7.1 (mango) Tools beta disponível para download</title><content type="html">&lt;p&gt;Foi disponibilizado para download a primeira versão beta das ferramentas de desenvolvimento para Windows Phone 7, atualizadas para a nova versão (mango) que será lançada no segundo semestre. Esta versão conta com um emulador contendo algumas novas funcionalidades, como um simulador de GPS e acelerômetro. Nesta versão das ferramentas já é possível começar a desenvolver aplicações capazes de tirar proveito de recursos como Live Agents, Multi Tasking, Deep Linkins, multiplos live tiles, SQL CE, etc…&lt;/p&gt; &lt;p&gt;Abaixo tem alguns links:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://create.msdn.com/"&gt;Download do Windows Phone 7.1 Tools Beta&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://windowsteamblog.com/windows_phone/b/wpdev/archive/2011/05/24/developer-news-beta-mango-tools-available-today.aspx"&gt;Post no blog do time do Windows Phone, detalhando as novidades&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Esse download funciona lado a lado com a versão atual das ferramentas para Windows Phone 7.&lt;/p&gt; &lt;p&gt;Comece agora mesmo a desenvolver para a próxima versão do Windows Phone 7 e esteja preparado para o seu lançamento do Brasil no segundo semestre.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/DevNewsAndOldsByKelps/~4/uSFe-WYrFew" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1102500548563078654&amp;postID=4233498729936636094" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/4233498729936636094?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1102500548563078654/posts/default/4233498729936636094?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~3/uSFe-WYrFew/wp7-mango-tools-beta.html" title="Windows Phone 7.1 (mango) Tools beta disponível para download" /><author><name>Kelps Sousa</name><uri>https://plus.google.com/104421171256488908560</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-smsl12f8BJY/AAAAAAAAAAI/AAAAAAAABFk/T4BloRFVzcc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.kelps.net/2011/05/wp7-mango-tools-beta.html</feedburner:origLink></entry></feed>
