<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7841108315404617323</id><updated>2011-10-02T08:10:22.810-07:00</updated><category term='coringa'/><category term='modelos web'/><category term='batman'/><category term='Microsoft'/><category term='Web Applications Test ASP.net Visual Studio 2008 Microsoft C#'/><category term='hotmail'/><category term='reporting services'/><category term='Gestão de TI'/><category term='caio azevedo'/><category term='Mundo Corporativo'/><category term='arquitetura sistemas'/><category term='configurar'/><category term='TI'/><category term='web services'/><category term='cavaleiro das trevas'/><category term='outlook 2007'/><title type='text'>Caio Azevedo</title><subtitle type='html'>&lt;i&gt; may the force be with you &lt;/i&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://caiodotnet.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://caiodotnet.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Caio Azevedo</name><uri>http://www.blogger.com/profile/10472366969109256678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_ihlCbF1y0hE/SnCbh4e6v2I/AAAAAAAAB5M/8jM9fTitlzI/S220/CIMG3955.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7841108315404617323.post-3773996956133651911</id><published>2011-07-14T05:09:00.000-07:00</published><updated>2011-07-14T06:20:53.976-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reporting services'/><category scheme='http://www.blogger.com/atom/ns#' term='caio azevedo'/><title type='text'>Reporting Services - Artigos Publicados na Revista Codificando.NET</title><content type='html'>Segue link das seis edições da revista Codificando .Net com meus artigos sobre &amp;nbsp;Reporting Services.&lt;br /&gt;Trata-se de um tutorial bem bacana sobre essa poderosa ferramenta, de sua arquitetura à codificação de relatórios.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codificandomagazine.com.br/revista/post/Edicao-11---N11.aspx"&gt;http://www.codificandomagazine.com.br/revista/post/Edicao-11---N11.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codificandomagazine.com.br/revista/post/Edicao-12---N12.aspx"&gt;http://www.codificandomagazine.com.br/revista/post/Edicao-12---N12.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codificandomagazine.com.br/revista/post/Edicao-13.aspx"&gt;http://www.codificandomagazine.com.br/revista/post/Edicao-13.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codificandomagazine.com.br/revista/post/Edicao-14.aspx"&gt;http://www.codificandomagazine.com.br/revista/post/Edicao-14.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codificandomagazine.com.br/revista/post/Edicao-15.aspx"&gt;http://www.codificandomagazine.com.br/revista/post/Edicao-15.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codificandomagazine.com.br/revista/post/Edicao-16.aspx"&gt;http://www.codificandomagazine.com.br/revista/post/Edicao-16.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Nota 1: Os artigos foram escritos e exemplificados na versão 2005 do Reporting Services, mas são perfeitamente aplicáveis para a versão 2008.&lt;br /&gt;&lt;br /&gt;Nota 2: Se preferir os arquivos referentes as revistas estão em meu google docs disponíveis em :&lt;br /&gt;&lt;a href="http://bit.ly/p25IVH"&gt;http://bit.ly/p25IVH&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enjoy them..&lt;br /&gt;Caio Azevedo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7841108315404617323-3773996956133651911?l=caiodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://caiodotnet.blogspot.com/feeds/3773996956133651911/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://caiodotnet.blogspot.com/2011/07/reporting-services-artigos-publicados.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/3773996956133651911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/3773996956133651911'/><link rel='alternate' type='text/html' href='http://caiodotnet.blogspot.com/2011/07/reporting-services-artigos-publicados.html' title='Reporting Services - Artigos Publicados na Revista Codificando.NET'/><author><name>Caio Azevedo</name><uri>http://www.blogger.com/profile/10472366969109256678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_ihlCbF1y0hE/SnCbh4e6v2I/AAAAAAAAB5M/8jM9fTitlzI/S220/CIMG3955.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7841108315404617323.post-5982551794034827747</id><published>2011-07-12T06:48:00.000-07:00</published><updated>2011-07-12T06:55:34.471-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TI'/><category scheme='http://www.blogger.com/atom/ns#' term='caio azevedo'/><category scheme='http://www.blogger.com/atom/ns#' term='Gestão de TI'/><category scheme='http://www.blogger.com/atom/ns#' term='Mundo Corporativo'/><title type='text'>Caverna do Dragão = Escritório de TI</title><content type='html'>&lt;span class="Apple-style-span" style="color: #fff2cc; font-family: Arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;img alt="http://www.elemento42.com.br/wp-content/uploads/2011/01/banner_escritorio_do_dragao.jpg" height="199" src="https://mail.google.com/mail/?ui=2&amp;amp;ik=ea5dca4354&amp;amp;view=att&amp;amp;th=1311997735e570aa&amp;amp;attid=0.6&amp;amp;disp=emb&amp;amp;realattid=7ef0db49bbe0a63f_0.1.1&amp;amp;zw" width="640" /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span style="color: yellow;"&gt;&lt;b&gt;Escritório&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #fff2cc;"&gt;&amp;nbsp;= Caverna do Dragão: Quem trabalha em São Paulo sabe disso. O escritório geralmente fica num lugar longe pra caramba,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #fff2cc;"&gt;cheio de perigos para chegar (Marginal Tietê, enchente, trânsito), onde você nunca sabe como chegou e tem que penar para sair.&lt;br /&gt;Na verdade quando você entrou nele parecia um parque de diversão, mas na verdade é o lugar onde você vai passar por todo tipo de&lt;br /&gt;perrengue antes de voltar pra casa!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif;"&gt;&lt;img alt="http://www.elemento42.com.br/wp-content/uploads/2011/01/dungeon_manager.jpg" src="https://mail.google.com/mail/?ui=2&amp;amp;ik=ea5dca4354&amp;amp;view=att&amp;amp;th=1311997735e570aa&amp;amp;attid=0.3&amp;amp;disp=emb&amp;amp;realattid=7ef0db49bbe0a63f_0.1.2&amp;amp;zw" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span style="color: yellow;"&gt;&lt;b&gt;Gerente de TI&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: yellow;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="color: #fff2cc;"&gt;= Mestre dos Magos: Responsável por te colocar nas maiores enrascadas, sempre aparece do nada,&lt;br /&gt;pergunta umas paradas nada a ver, não tem reposta para nenhuma de suas perguntas, nunca ajuda e por ele você não sai nunca da&lt;br /&gt;Caverna do Dragão. Dizem que ele tem um poder e conhecimento ilimitado, mas você nunca vai ver em utilização. Se é que é verdade mesmo…&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;img alt="http://www.elemento42.com.br/wp-content/uploads/2011/01/support_uni.jpg" src="https://mail.google.com/mail/?ui=2&amp;amp;ik=ea5dca4354&amp;amp;view=att&amp;amp;th=1311997735e570aa&amp;amp;attid=0.4&amp;amp;disp=emb&amp;amp;realattid=7ef0db49bbe0a63f_0.1.3&amp;amp;zw" /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span style="color: yellow;"&gt;&lt;b&gt;Suporte Técnico&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: yellow;"&gt;&amp;nbsp;=&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="color: #2f2f2f;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #fff2cc;"&gt;Uni: Só faz volume no grupo, não tem nenhuma habilidade especial, não sabe falar (nem escrever),&lt;br /&gt;precisa ser salva a toda hora colocando a equipe toda em perigo. Na verdade ninguém sabe porque ela está na party, e sempre tem um&lt;br /&gt;que quer se sacrificar para ajudá-la. E no final, a party nunca vai embora sem a Uni!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;img alt="http://www.elemento42.com.br/wp-content/uploads/2011/01/vingador_pmo.jpg" src="https://mail.google.com/mail/?ui=2&amp;amp;ik=ea5dca4354&amp;amp;view=att&amp;amp;th=1311997735e570aa&amp;amp;attid=0.1&amp;amp;disp=emb&amp;amp;realattid=7ef0db49bbe0a63f_0.1.4&amp;amp;zw" /&gt;&lt;span style="color: yellow;"&gt;&lt;b&gt;Gerência de Projeto (PMO)&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;span class="Apple-style-span" style="color: #fff2cc;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #fff2cc;"&gt;Vingador: Como se não bastasse o Mestre dos Magos para encher o saco, o&lt;br /&gt;Vingador (que não tem nada a ver com você ou com seus problemas) vem toda hora te torrar a paciência, aumentando suas tarefas (ou enrascadas)&lt;br /&gt;e tentando te aterrorizar com prazos e atividades que você não pode cumprir. Na verdade a função principal dele ninguém sabe direito,&lt;br /&gt;mas é um dos seres mais temidos da Caverna do Dragão, que sempre aparece na hora errada e quando aparece você sabe que vem encrenca…&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;img alt="http://www.elemento42.com.br/wp-content/uploads/2011/01/maintence_party.jpg" src="https://mail.google.com/mail/?ui=2&amp;amp;ik=ea5dca4354&amp;amp;view=att&amp;amp;th=1311997735e570aa&amp;amp;attid=0.2&amp;amp;disp=emb&amp;amp;realattid=7ef0db49bbe0a63f_0.1.5&amp;amp;zw" /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: yellow;"&gt;Equipe de Manutenção&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="color: #2f2f2f;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #fff2cc;"&gt;= Eric, Diana e Presto: Tem um que sempre quer se defender de&lt;br /&gt;tudo quanto é bucha (com o escudo) e está sempre reclamando por isso, outro que é obrigado a fazer mágica para cumprir a demanda&lt;br /&gt;(com o chapéu), e no final todo mundo acaba tendo que pular todos os processos (com o bastão) para o sistema voltar a funcionar….&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;img alt="http://www.elemento42.com.br/wp-content/uploads/2011/01/development_party.jpg" src="https://mail.google.com/mail/?ui=2&amp;amp;ik=ea5dca4354&amp;amp;view=att&amp;amp;th=1311997735e570aa&amp;amp;attid=0.7&amp;amp;disp=emb&amp;amp;realattid=7ef0db49bbe0a63f_0.1.6&amp;amp;zw" /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: yellow;"&gt;Equipe Desenvolvimento&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="color: #2f2f2f;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #fff2cc;"&gt;= Hank, Sheila e Bobby: Sempre precisa conseguir fazer qualquer&lt;br /&gt;coisa (arma, defesa, corda, rede, programa em três camadas) com apenas um arco e flecha e tem sempre um novato que vem e acaba quebrando&lt;br /&gt;tudo o que funcionava perfeitamente (com o tacape). E a Sheila? Digamos que sempre tem um que desaparece quando mais se precisa…&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;img alt="http://www.elemento42.com.br/wp-content/uploads/2011/01/tiamat_client.jpg" src="https://mail.google.com/mail/?ui=2&amp;amp;ik=ea5dca4354&amp;amp;view=att&amp;amp;th=1311997735e570aa&amp;amp;attid=0.5&amp;amp;disp=emb&amp;amp;realattid=7ef0db49bbe0a63f_0.1.7&amp;amp;zw" /&gt;&lt;span style="color: yellow;"&gt;&lt;b&gt;Cliente&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: yellow;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="color: #fff2cc;"&gt;= Tiamat: No fundo, só quer ter um pouco de sossego. É gigante e&lt;br /&gt;poderoso. A Uni (suporte) acha que ele vai&amp;nbsp; comê-la, por isso se caga de medo e perde a voz perto dele, o Vingador (PMO) que se acha o&lt;br /&gt;maioral, também treme na base e acaba cedendo a tudo o que ele pede, o Mestre dos Magos (Gerente) não ajuda em nada mesmo, só fica&lt;br /&gt;perguntando coisas sem sentido e some quando se precisa dele, e sempre sobra para a party (Manutenção e Desenvolvimento) se ferra para&lt;br /&gt;vencê-lo a qualquer custo… E depois, com todo mundo cansado e sem paciência, o Mestre dos Magos e o Vingador voltam para trazer mais um&lt;br /&gt;desafio antes de te deixar voltar para casa…&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7841108315404617323-5982551794034827747?l=caiodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://caiodotnet.blogspot.com/feeds/5982551794034827747/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://caiodotnet.blogspot.com/2011/07/caverna-do-dragao-escritorio-de-ti.html#comment-form' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/5982551794034827747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/5982551794034827747'/><link rel='alternate' type='text/html' href='http://caiodotnet.blogspot.com/2011/07/caverna-do-dragao-escritorio-de-ti.html' title='Caverna do Dragão = Escritório de TI'/><author><name>Caio Azevedo</name><uri>http://www.blogger.com/profile/10472366969109256678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_ihlCbF1y0hE/SnCbh4e6v2I/AAAAAAAAB5M/8jM9fTitlzI/S220/CIMG3955.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7841108315404617323.post-9008003755025420212</id><published>2011-07-06T19:43:00.000-07:00</published><updated>2011-07-12T07:38:16.327-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arquitetura sistemas'/><category scheme='http://www.blogger.com/atom/ns#' term='caio azevedo'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Cuidados ao selecionar as tecnologias de suas aplicações</title><content type='html'>&lt;span class="Apple-style-span" style="color: #757474; font-family: Arial, Verdana, sans-serif; font-size: 12px; line-height: 21px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Em minhas recentes atividades como arquiteto de soluções Microsoft, deparei em alguns clientes com uma situação no mínimo inusitada. Todos tinham como meta construir suas aplicações seguindo as tecnologias do momento – Multicamadas, Web Services, Orientação a Objetos, etc. E eis que, como tantos outros, insidiam nos mesmos erros – talvez por falta de experiência, maturidade ou mesmo conhecimento, o certo é que, tentar de qualquer forma e a qualquer custo inserir todas, ou pelo menos boa parte dessas tecnologias em seus modelos de aplicação, é uma prática cada vez mais comum no ambiente corporativo, e as consequências podem ser desastrosas, pondo em risco todo o projeto. &amp;nbsp;E ai já vi diversas situações, do uso excessivo e indiscriminado de uma tecnologia, à ilusão de se estar utilizado uma delas, a saber – Web Services e Orientação a Objetos respectivamente.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Problemas com modelos de aplicações não são novidades, desde os tempos da fórmula IIS * COM+ * SQL Server, a conhecida arquitetura Windows DNA – deparavamos com alguns cenários realmente assustadores, onde na maioria das vezes o grande problema era a utilização do mais velho ainda, paradigma Cliente – Servidor. A seguir temos alguns cenários que certamente estavam fadados ao fracasso:&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;01. Acesso aos dados [via ADO] diretamente nas páginas, e para piorar, sem preocupação com as propriedades de otimização dos objetos Connection, RecordSet e Command, transformando uma aplicação Web em um típico cliente / servidor com os cursores no servidor [um desastre total];&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;02. Sub utilização de componentes [Visual Basic 6.0], uma vez que nenhuma das features do COM+ [Pool de Ativação, Controle de Transações, Segurança, etc] eram utilizadas, lhes restando somente a tarefa de executar stored procedures, caracterizando mais um caso de desuso de tecnologia, ou pior a ilusão de um ambiente em 3 camadas, já que as regras de negócio, ou ao menos parte delas, estão em sua implementação.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Consequências&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Não dá outra, clientes vendo seu investimento [tempo e dinheiro] indo para o espaço, todo seu planejamento comprometido porque “o sistema não funciona”, um verdadeiro fracasso. Tecnicamente temos alguns sintomas: (para os ambientes descritos)&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;- Sobrecarga de processamento – ora no IIS [via dllhost.exe], ora no COM+ [com altíssimos tempos de ativação dos componentes]&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;- Constantes “travamentos” da aplicação, e não menos comum de todas as demais aplicações do servidor.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;- Conseqüentemente surge, como já cansei de ouvir – “soluções baseadas em COM+ não funcionam.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;No “admirável mundo novo” do ambiente Microsoft .net, as aplicações podem ser modeladas das mais variadas maneiras, bem mais que no mundo DNA [o que sendo bem pessimista, só aumenta as chances de erros], sendo assim, uma boa dica para iniciar a modelagem de uma aplicação .net, seria delimitar todo o cenário, seus pré-requisitos técnico-operacionais, funcionalidades, infra-estrutura do ambiente de produção, políticas de contingência, dentre outras variáveis que certamente induzirão arquitetos, analistas, desenvolvedores, DBAs e a equipe de infra a cometerem erros que podem comprometer todo projeto, a seguir temos alguns casos, facilmente encontrados em qualquer ambiente corporativo.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Como já dissemos um erro comum no desenvolvimento de aplicações, é a ilusão de se utilizar uma tecnologia/paradigma quando na verdade se está bem longe disso. Já demonstramos um caso quando falamos do mundo DNA 3-tiers, quando apesar dos recursos, a equipe responsável continuava com o paradigma Cliente x Servidor 2-tiers. Nos dias de hoje, o que vemos são aplicações, ditas orientada a objetos com multicamadas, onde não temos qualquer construção com herança de objetos [por exemplo, na implementação de classes proprietárias para repositório de dados - pessoa, cliente, usuário] – um desperdício dos recursos e funcionalidades que a OO disponibiliza. Dentro desse cenário ainda encontramos uma “camada de apresentação” implementada de tal forma que detalhes do banco de dados [string de conexão, nome de tabelas, atributos, etc] precisam ser conhecidas. Ora, uma aplicação multicamadas tem, dentre seus atrativos, prover um considerável nível de abstração entre as camadas o que não é o caso. Assim, em um cenário com esses “detalhes de construção”, a aplicação aparentemente OO x Multicamadas, só não pode ser considerada Estruturada, pois a ferramenta de desenvolvimento não permite [qualquer assembly .net precisa de pelo menos uma classe].&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Dentre as questões estruturais do desenvolvimento de softwares no nível arquitetural destacamos a escalabilidade [geralmente relacionada ao desempenho] – podendo ser do tipo horizontal ou vertical, e que varia basicamente em função do parque tecnológico disponível e das perspectivas de demanda para a aplicação. Imaginemos uma situação onde, a infra é definida com um pool de 4, 5 servidores potentes, configurados para implementar um Web Farm. Para que modelar uma solução distribuída, com Web Services, “desperdiçando” um ou vários desses servidores para “camada de regras de negócio”, sob o argumento que estamos diante de uma aplicação n-camadas ? Pois bem, estamos diante de um problema conceitual [sendo bem eufemista] – Aplicações multicamadas, não implicam necessariamente em aplicações distribuídas. Para piorar a situação desse cenário, a comunicação entre as “camadas” é feita com Web&amp;nbsp;Services, um exemplo típico de modismo. Uma modelagem nessa forma tem um custo absurdo e não justificável.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;A seguir tomaremos esse caso como exemplo, de qualquer forma, não seria mais interessante deixar todos os componentes de regras de negócio no modelo de deploy padrão .net, “folder” bin], assim faríamos melhor uso do ambiente descrito.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Para exemplicar essa terrível tendência, lançarei mão dos Web Services, uma poderosa tecnologia – eu diria que uma das mais importantes desde o advento da internet, no entanto seu uso sem critérios pode ser catastrófico [como no cenário acima]. Os Web Services, como toda grande idéia, prima pela simplicidade, permitindo que funcionalidades, até então restritas a um ambiente fechado [uma intranet por exemplo], estejam acessíveis para todos, em qualquer lugar, por diversos dispositivos e independente das plataformas envolvidas, sendo assim, se você resolver utilizá-los no seu modelo de aplicação antes de mais nada procure dentre esses três itens, uma justificativa para tal. Como nem tudo são flores, os Web Services tem seu custo, para realizar suas proezas ele se basea em três pilares – Serialização, XML e HTTP, o resto são conceitos e siglas, no fundo os Web Services são objetos serializados [Estruturas, DataSets, Arrays, Classes, etc], transmitidos entre as partes [através o já conhecido protocolo HTTP, livre dos firewalls], em um formato de dados que já se tornou padrão e amplamente difundido [viva o XML] e os custos ??? simples, o processo de serializar/deserializar tem seus custos de processamento [o menor de todos é bem verdade], a transmissão dos dados serializados via HTTP fatalmente acarreta um custo elevado, por concorrer com as requisições dos usuário POST/GET de páginas HTML e ASPX e principalmente pelo formato dos dados, XML, que contém um conjunto de metadados para compor as mensagens, tornando-as ainda maiores.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Sendo assim, aquele cenário “distribuído”, tendo Web Services como meio de comunicação está deveras comprometido. Uma alternativa para esse ambiente, distribuído e sobretudo interno, seria o uso de Remoting uma tecnologia, que atende a demanda [se considerarmos, a real necessidade de um ambiente distribuído], sem os custos dos web services. Essa proeza é possível pela substituição de tecnologia nos três pilares do Web Service:&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;- Serialização – No Remoting, em sua melhor configuração para performance, a serialização binária, ao invés da XML é a mais indicada, tornando os dados trafegados significativamente menores. [o remoting também suporta serialização XML]&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;- HTTP – Aqui substituímos o protocolo de transporte para TCP, em uma porta específica, o que por definição é mais eficaz que o HTTP, além de evitar a concorrência com as aplicações e suas páginas estáticas e dinâmicas.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Ao executarmos os dois cenários, percebemos através dos contadores utilizados, um sensível ganho de performance na versão Remoting, no entanto em um cenário real, onde nosso web service concorre com as demais aplicações web e sobretudo, onde o processamento do componente de negócio é considerável, essa diferença tende a aumentar, e outra, para que utilizar uma tecnologia, se temos alternativas mais elegante e performática ?? – modismo, hábito, facilidade na implementação ?, são nesses “detalhes” que distinguimos bons e maus projetos de software.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Pessoal, de maneira alguma sou contra o uso de Web Services, mas sua utilização em um ambiente intra-domínio, com dois ou mais servidores, trocando todo e qualquer tipo de mensagem – operações DML, pesquisas ao banco de dados para carregar controles, instância dos componentes de regras de negócio, entre outras, definitivamente não será bem sucedida quando a demanda atingir um patamar considerável.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Bom pessoal, eis um exemplo dentre tantos outros que encontramos em qualquer ambiente corporativo, muito cuidado com os modelos de aplicação utilizados em seus projetos, façamos uma reflexão no que já temos implementado, como poderíamos modificar, detectando pontos críticos e sugerindo mudanças em próximos projetos, o que não se podemos admitir é a incidência de erros dessa natureza passivamente.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;Nota: Se alguém estiver interesado nos códigos utilizados na demonstração, sinta-se a vontade para entrar em contato.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #757474; font-family: 'Trebuchet MS', sans-serif; line-height: 21px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="color: #757474; font-family: 'Trebuchet MS', sans-serif; line-height: 21px;"&gt;Nota 2: Esse artigo foi originalmente publicado no site TIEspecialistas do qual sou colunista.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: #757474; line-height: 18px;"&gt;Ver:&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.tiespecialistas.com.br/2011/06/cuidados-ao-selecionar-as-tecnologias-de-suas-aplicacoes/"&gt;http://www.tiespecialistas.com.br/2011/06/cuidados-ao-selecionar-as-tecnologias-de-suas-aplicacoes/&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #757474; line-height: 21px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="color: #757474; font-size: 12px; line-height: 21px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7841108315404617323-9008003755025420212?l=caiodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://caiodotnet.blogspot.com/feeds/9008003755025420212/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://caiodotnet.blogspot.com/2011/07/cuidados-ao-selecionar-as-tecnologias.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/9008003755025420212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/9008003755025420212'/><link rel='alternate' type='text/html' href='http://caiodotnet.blogspot.com/2011/07/cuidados-ao-selecionar-as-tecnologias.html' title='Cuidados ao selecionar as tecnologias de suas aplicações'/><author><name>Caio Azevedo</name><uri>http://www.blogger.com/profile/10472366969109256678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_ihlCbF1y0hE/SnCbh4e6v2I/AAAAAAAAB5M/8jM9fTitlzI/S220/CIMG3955.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7841108315404617323.post-3631036022590775560</id><published>2011-06-15T16:16:00.000-07:00</published><updated>2011-06-15T16:21:35.145-07:00</updated><title type='text'>Citações</title><content type='html'>&lt;span class="Apple-style-span" style="color: rgb(102, 102, 102); font-family: Verdana, sans-serif; font-size: 15px; font-weight: bold; line-height: 17px; "&gt;"A Utopia está lá no horizonte.&lt;br /&gt;&lt;br /&gt;Me aproximo dois passos, ela se afasta dois passos.&lt;br /&gt;&lt;br /&gt;Caminho dez passos e o horizonte corre dez passos.&lt;br /&gt;&lt;br /&gt;Por mais que eu caminhe, jamais alcançarei.&lt;br /&gt;&lt;br /&gt;Para que serve a Utopia?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 102, 102); font-family: Verdana, sans-serif; font-size: 15px; font-weight: bold; line-height: 17px; "&gt;Serve para isso: para que eu não deixe de caminhar".&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 17px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 17px;"&gt;&lt;b&gt;(Eduardo Galeano)&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 102, 102); font-family: Verdana, sans-serif; font-size: 15px; font-weight: bold; line-height: 17px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 102, 102); font-family: Verdana, sans-serif; font-size: 15px; font-weight: bold; line-height: 17px; "&gt;"A Imaginação é mais importante que o conhecimento"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 102, 102); font-family: Verdana, sans-serif; font-size: 15px; font-weight: bold; line-height: 17px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 17px;"&gt;&lt;b&gt;(Albert Einstein)&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 17px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 102, 102); font-family: Verdana, sans-serif; font-size: 15px; font-weight: bold; line-height: 17px; "&gt;"A mentira é uma verdade que se esqueceu de acontecer"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(102, 102, 102); font-family: Verdana, sans-serif; font-size: 15px; font-weight: bold; line-height: 17px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 17px; "&gt;&lt;b&gt;(Mario Quintana)&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 17px; "&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7841108315404617323-3631036022590775560?l=caiodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://caiodotnet.blogspot.com/feeds/3631036022590775560/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://caiodotnet.blogspot.com/2011/06/citacoes.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/3631036022590775560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/3631036022590775560'/><link rel='alternate' type='text/html' href='http://caiodotnet.blogspot.com/2011/06/citacoes.html' title='Citações'/><author><name>Caio Azevedo</name><uri>http://www.blogger.com/profile/10472366969109256678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_ihlCbF1y0hE/SnCbh4e6v2I/AAAAAAAAB5M/8jM9fTitlzI/S220/CIMG3955.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7841108315404617323.post-5556309741446100806</id><published>2011-06-03T09:43:00.000-07:00</published><updated>2011-06-03T09:51:45.272-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hotmail'/><category scheme='http://www.blogger.com/atom/ns#' term='configurar'/><category scheme='http://www.blogger.com/atom/ns#' term='outlook 2007'/><title type='text'>Configurar HOTMAIL para Outlook 2007</title><content type='html'>&lt;p style="color: rgb(78, 78, 78); margin-top: 0px; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 19px; "&gt;&lt;span class="Apple-style-span"  &gt;Parece piada, mas ralei um bocado para achar as informações necessárias para configurar minha conta hotmail no Outlook 2007 até que finalmente achei todas as informações necessárias que compilo aqui...&lt;/span&gt;&lt;/p&gt;&lt;p style="color: rgb(78, 78, 78); margin-top: 0px; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 19px; "&gt;&lt;span class="Apple-style-span"  &gt;Abra o Outlook 2007 e em ferramentas, Clique em configurações de conta, na próxima janela e-mail clique em novo, na próxima aba marque (Microsoft Exchange, POP3,IMAP ou HTTP) e clique em avançar.&lt;/span&gt;&lt;/p&gt;&lt;p style="color: rgb(78, 78, 78); margin-top: 0px; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 19px; "&gt;&lt;span id="more-2022" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "  &gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="color: rgb(78, 78, 78); margin-top: 0px; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 19px; "&gt;&lt;span class="Apple-style-span"  &gt;Próxima aba preencha com os dados (e-mail e senha) após preencher marque a opção (Definir manualmente as configuracoes do servidor ou tipo de servidores Adicionais) e clique em avançar.&lt;/span&gt;&lt;/p&gt;&lt;p style="color: rgb(78, 78, 78); margin-top: 0px; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 19px; "&gt;&lt;span class="Apple-style-span"  &gt;Em informações de usuário:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;Preencha com nome (teste)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;e-mail (teste@hotmail.com)&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span class="Apple-style-span"  &gt;Informações do servidor:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="color: rgb(78, 78, 78); margin-top: 0px; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 19px; "&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;Tipo de conta deixe (POP3)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;Servidor de entrada de e-mail Coloque (pop3.live.com)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;Servidor de saida de e-mail (smtp) Coloque (smtp.live.com)&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span class="Apple-style-span"  &gt;Informacoes de logon:&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="color: rgb(78, 78, 78); margin-top: 0px; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 19px; "&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;Nome de usuário (teste@hotmail.com)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;Senha (senha do e-mail)&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span class="Apple-style-span"  &gt;Clique agora em (Mais configurações)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="color: rgb(78, 78, 78); margin-top: 0px; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 19px; "&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;(Em conta de e-mail) coloque seu nome de apresentação&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;(Em organização) coloque qualquer nome,&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  &gt;(Em e-mail de resposta) coloque seu e-mail do Hotmail,&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span class="Apple-style-span"  &gt;Clique na aba (servidor de saída)&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: rgb(78, 78, 78); line-height: 19px; "  &gt;Marque a opção&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span class="Apple-style-span"  &gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="line-height: 19px;"&gt;(Meu servidor de saída (SMTP) requer autenticação)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="line-height: 19px;"&gt;na aba avançado marque a opção (este servidor requer uma conexão criptografada(SSL), na opção usar o sequinte tipo de conexão criptografado deixe em (Automatico)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="line-height: 19px;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="line-height: 19px;"  &gt;É isso ai, espero que isso sirva para facilitar sua vida.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="line-height: 19px;"  &gt;Caio Azevedo&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7841108315404617323-5556309741446100806?l=caiodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://caiodotnet.blogspot.com/feeds/5556309741446100806/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://caiodotnet.blogspot.com/2011/06/configurar-hotmail-para-outlook-2007.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/5556309741446100806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/5556309741446100806'/><link rel='alternate' type='text/html' href='http://caiodotnet.blogspot.com/2011/06/configurar-hotmail-para-outlook-2007.html' title='Configurar HOTMAIL para Outlook 2007'/><author><name>Caio Azevedo</name><uri>http://www.blogger.com/profile/10472366969109256678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_ihlCbF1y0hE/SnCbh4e6v2I/AAAAAAAAB5M/8jM9fTitlzI/S220/CIMG3955.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7841108315404617323.post-6568445767610556572</id><published>2011-04-16T15:04:00.001-07:00</published><updated>2011-07-12T11:27:05.396-07:00</updated><title type='text'>AeroLixo de São Luis - MA</title><content type='html'>&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma, sans-serif; font-size: 11px;"&gt;Sinto-me muito a vontade para falar sobre isso por ser um ludovicense que viveu até os 23 anos na capital maranhense.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;span lang="PT-BR" style="font-family: Tahoma, sans-serif; font-size: 8pt;"&gt;Moro ha pouco mais de 10 anos em São Paulo capital e nesses dias de debates absurdos sobre copa do mundo no BraZil e "problemas" com os aeroportos nas cidades sede, eis que volto à minha cidade natal para visitar minha sobrinha recém nascida e deparo com um aeroporto que prefiro chamar de aeroLixo.  Isso mesmo amigos o aerolixo da terra do Sarney é uma vergonha nacional. Desembarquei durante a madrugada e eis que deparo com o fato de ter que andar da aeronave até a "área de desembarque" onde um pobre funcionário jogava as bagagens dos passageiros literalmente no grito, a "esteira das bagagens" é uma mesa coberta com uma lona imunda, o saguão de espera são tendas e banheiros químicos nojentos são usados pelos pobres coitados que aguardam seus amigos e entes queridos - o que inclui meus queridos pais.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;span lang="PT-BR" style="font-family: Tahoma, sans-serif; font-size: 8pt;"&gt;Alguns dias depois, ao retornar deparo com uma área de embarque igualmente devastada, pobre das funcionárias, cujas expressões de desanimo resume tudo. Resumidamente trata-se de um mal cuidado galpão em condições precárias, o teto não demonstra qualquer segurança enfim, uma vergonha.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;span lang="PT-BR" style="font-family: Tahoma, sans-serif; font-size: 8pt;"&gt;Não sei exatamente o que aconteceu, mas o que apurei com meus pais é que o saguão simplesmente desabou por falta de manutenção – desse que até onde eu saiba é um aeroporto internacional, enfim.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;span lang="PT-BR" style="font-family: Tahoma, sans-serif; font-size: 8pt;"&gt;O certo é que essas foram as únicas fotos que fiz de uma cidade que um dia foi linda e um ponto turístico importante do nosso país, até porque nem isso ela é mais.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;span lang="PT-BR" style="font-family: Tahoma, sans-serif; font-size: 8pt;"&gt;Segue link com as fotos que fiz e sintam-se a vontade para publicá-las, divulgá-las em vim, como diz o Marcelo D2 vamos fazer barulho.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;span lang="PT-BR" style="font-family: Tahoma, sans-serif; font-size: 8pt;"&gt;Abraço..&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;span lang="PT-BR" style="font-family: Tahoma, sans-serif; font-size: 8pt;"&gt;&lt;span class="Apple-style-span"&gt;Caio Azevedo&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;a href="https://picasaweb.google.com/caio.aze/AeroLixoDeSaoLuis"&gt;&lt;span lang="PT-BR"&gt;https://picasaweb.google.com/caio.aze/AeroLixoDeSaoLuis#&lt;/span&gt;&lt;/a&gt;&lt;span lang="PT-BR" style="color: black; font-family: Tahoma, sans-serif; font-size: 8pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7841108315404617323-6568445767610556572?l=caiodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://caiodotnet.blogspot.com/feeds/6568445767610556572/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://caiodotnet.blogspot.com/2011/04/aerolixo-de-sao-luis-ma.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/6568445767610556572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/6568445767610556572'/><link rel='alternate' type='text/html' href='http://caiodotnet.blogspot.com/2011/04/aerolixo-de-sao-luis-ma.html' title='AeroLixo de São Luis - MA'/><author><name>Caio Azevedo</name><uri>http://www.blogger.com/profile/10472366969109256678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_ihlCbF1y0hE/SnCbh4e6v2I/AAAAAAAAB5M/8jM9fTitlzI/S220/CIMG3955.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7841108315404617323.post-8651476917250121360</id><published>2011-01-20T10:36:00.001-08:00</published><updated>2011-01-20T11:35:34.371-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Applications Test ASP.net Visual Studio 2008 Microsoft C#'/><title type='text'>Solving VS2008 record bar issue during stress test application</title><content type='html'>Hi everyone,&lt;br /&gt;&lt;br /&gt;While I was trying to perform stress test into a web application with Visual Studio 2008, I faced an issue, whereby, the recorder bar does not appear when recording a new website.&lt;br /&gt;&lt;br /&gt;My environment:&lt;br /&gt;..:: VSTS 2008 : Win7 (64 bit) [I believe, Windows Vista, has the same problem] ::..&lt;br /&gt;&lt;br /&gt;Fix:&lt;br /&gt;..:: Win7 caches the list of explorer bars you have available and the recorder bar was not included in your list. ::..&lt;br /&gt;&lt;br /&gt;The Solution:&lt;br /&gt;Force Windows to rebuild that cache.&lt;br /&gt;To do this, first make sure you have all Internet Explorer instances shut down,&lt;br /&gt;then open the 32 bit registry editor and delete the following keys:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ffff66;"&gt;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\Component Categories\{00021493-0000-0000-C000-000000000046}&lt;br /&gt;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\Component Categories\{00021494-0000-0000-C000-000000000046}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The next time you boot Internet Explorer, your explorer bar cache will be rebuilt and the recorder bar should be available.&lt;br /&gt;&lt;br /&gt;That's all folks..&lt;br /&gt;&lt;br /&gt;Any commments, mail me at &lt;a href="mailto:cazevedo@hotmail.com"&gt;cazevedo@hotmail.com&lt;/a&gt;&lt;br /&gt;see you next tip...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7841108315404617323-8651476917250121360?l=caiodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://caiodotnet.blogspot.com/feeds/8651476917250121360/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://caiodotnet.blogspot.com/2011/01/solving-vs2008-record-bar-issue.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/8651476917250121360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/8651476917250121360'/><link rel='alternate' type='text/html' href='http://caiodotnet.blogspot.com/2011/01/solving-vs2008-record-bar-issue.html' title='Solving VS2008 record bar issue during stress test application'/><author><name>Caio Azevedo</name><uri>http://www.blogger.com/profile/10472366969109256678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_ihlCbF1y0hE/SnCbh4e6v2I/AAAAAAAAB5M/8jM9fTitlzI/S220/CIMG3955.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7841108315404617323.post-6415136001840545232</id><published>2011-01-04T11:03:00.000-08:00</published><updated>2011-01-04T11:04:43.145-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cavaleiro das trevas'/><category scheme='http://www.blogger.com/atom/ns#' term='coringa'/><category scheme='http://www.blogger.com/atom/ns#' term='batman'/><title type='text'>O cavaleiro das trevas - frases</title><content type='html'>Esse 'feriadão' resolvi rever o Cavaleiro das Trevas pela n-éssima vez, além de ler A Piada Mortal, então resolvi coletar algumas frases do personagem principal das melhores fases do Batman.&lt;br /&gt;&lt;br /&gt;I believe whatever doesn’t kill you simply makes you stranger.&lt;br /&gt;&lt;br /&gt;Why so serious?&lt;br /&gt;&lt;br /&gt;A little fight in you. I like that.&lt;br /&gt;&lt;br /&gt;You let me know when you start taking things a bit more seriously.&lt;br /&gt;&lt;br /&gt;Introduce a little anarchy!&lt;br /&gt;&lt;br /&gt;This is what happens when an unstoppable force meets an immovable object.&lt;br /&gt;&lt;br /&gt;I don’t wanna kill you. You complete me.&lt;br /&gt;&lt;br /&gt;And I thought my jokes were bad…&lt;br /&gt;&lt;br /&gt;I am an agent of chaos.&lt;br /&gt;&lt;br /&gt;Madness is like gravity. All it takes is a little push.&lt;br /&gt;&lt;br /&gt;Do I look like someone who has a plan?&lt;br /&gt;&lt;br /&gt;The only sensible way to live in this world is without rules!&lt;br /&gt;&lt;br /&gt;I’m not a monster. I’m just ahead of the curve.&lt;br /&gt;&lt;br /&gt;I’m a dog chasing cars. I wouldn’t know what to do if I caught one.&lt;br /&gt;&lt;br /&gt;If you’re good at something, never do it for free.&lt;br /&gt;&lt;br /&gt;Alguém lembra de mais alguma ??? completa ai...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7841108315404617323-6415136001840545232?l=caiodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://caiodotnet.blogspot.com/feeds/6415136001840545232/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://caiodotnet.blogspot.com/2011/01/o-cavaleiro-das-trevas-frases.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/6415136001840545232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/6415136001840545232'/><link rel='alternate' type='text/html' href='http://caiodotnet.blogspot.com/2011/01/o-cavaleiro-das-trevas-frases.html' title='O cavaleiro das trevas - frases'/><author><name>Caio Azevedo</name><uri>http://www.blogger.com/profile/10472366969109256678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_ihlCbF1y0hE/SnCbh4e6v2I/AAAAAAAAB5M/8jM9fTitlzI/S220/CIMG3955.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7841108315404617323.post-2722716707348532988</id><published>2010-08-23T15:44:00.001-07:00</published><updated>2010-12-13T09:13:11.323-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reporting services'/><category scheme='http://www.blogger.com/atom/ns#' term='caio azevedo'/><title type='text'>Explorando SQL Reporting Services 2005 Parte I</title><content type='html'>&lt;div align="left"&gt;&lt;span style="font-size:85%;"&gt;Finalizada a publicação dos artigos sobre reporting services 2005 na revista da comunidade codificando .net (&lt;a href="http://www.codificandomagazine.com.br/revista/" target="blank"&gt;http://www.codificandomagazine.com.br/revista/&lt;/a&gt;), onde muita coisa é válida também para o 2008, iniciaremos a publicação aqui no blog, após um grande incentivo do nosso colega André Ferreira, bom vamos lá... &lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;div align="left"&gt;&lt;br /&gt;Olá pessoal, iniciamos aqui uma série de artigos onde faremos uma abordagem prática e teórica, dessa poderosa e pouco explorada que é o Reporting Services. Nesse primeiro momento veremos a versão do SQL 2005, por ainda ser a ferramenta padrão de banco de dados na maioria dos nossos clientes, mas em breve faremos uma explanação da versão 2008, bom divertimento. &lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;PARTE 1 – INTRODUÇÃO AO REPORTING SERVICES &lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;O Microsoft SQL Reporting Services, RS, é uma plataforma de relatórios completa. Parte integrante do framework de Business Intelligence baseada em serviços, ferramentas, APIs para desenvolvimento, publicação e gerenciamento dos relatórios, o RS foi inicialmente apresentando como um add-on do SQL Server 2000 no inicio de 2000. Atualmente, sua versão mais recente, é a do SQL 2008, mas aqui cobriremos aquela, parte integrante do SQL Server 2005, por ser a solução de banco de dados mais comumente utilizada.&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;Os relatórios do RS são baseados na linguagem RDL (Report Definition Language), que nada mais é que um dialeto XML criado pela Microsoft. E, uma vez que o ambiente do RS esta intimamente integrada à plataforma .net framework, suas ferramentas de desenvolvimento são os Visual Studio 2005 e 2008, ainda que o próprio SQL Server 2005 tenha um shell do Visual Studio 2005 chamado Business Intelligence Development Studio (BIDS).&lt;br /&gt;Com o RS é possível criar soluções de relatórios como parte de uma aplicação, os chamados Local Mode, que são similares ao modelo utilizado no Cristal Reports ou Microsoft Access, além desse, temos o modelo de relatórios remoto que operam como uma aplicação web hospedados em um Web Application Server (IIS) e acessíveis via protocolo HTTP. Finalmente temos através da ferramenta Report Builder, uma forma de disponibilizar para os usuários criar seus próprios relatórios, atendendo assim ambientes corporativos, desenvolvedores, arquitetos e usuários.&lt;/div&gt;&lt;div align="left"&gt;Com o RS é possível criar soluções de relatórios como parte de uma aplicação, os chamados Local Mode, que são similares ao modelo utilizado no Cristal Reports ou Microsoft Access, além desse, temos o modelo de relatórios remoto que operam como uma aplicação web hospedados em um Web Application Server (IIS) e acessíveis via protocolo HTTP. Finalmente temos através da ferramenta Report Builder, uma forma de disponibilizar para os usuários criar seus próprios relatórios, atendendo assim ambientes corporativos, desenvolvedores, arquitetos e usuários.&lt;/div&gt;&lt;div align="left"&gt;Para qualquer solução de relatórios que faz uso do ambiente do RS faz-se uso dos elementos apresentados na figura abaixo, sendo que a interação entre esses elementos varia conforme o modelo do relatório, mas eles sempre estarão presentes, do processo de criação ao consumo pelo usuário final. &lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://4.bp.blogspot.com/_ihlCbF1y0hE/THL-E-6YIjI/AAAAAAAADMY/nvjkUpOSoVg/s1600/figura+1.jpg" target="blank"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 228px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5508744655788319282" border="0" alt="" src="http://4.bp.blogspot.com/_ihlCbF1y0hE/THL-E-6YIjI/AAAAAAAADMY/nvjkUpOSoVg/s400/figura+1.jpg" /&gt;&lt;/a&gt; &lt;span style="font-size:78%;"&gt;Figura 1.1 – Correlação entre elementos do Reporting Services&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Na figura 1.1, temos o diagrama da relação entre os principais elementos de uma solução baseada em reporting services, relação que detalharemos a seguir:&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;RELATÓRIO&lt;br /&gt;&lt;/em&gt;Correspondem ao front-end dos dados devidamente formatados e que correspondem a uma representação gráfica, funcional e operacional de um arquivo RDL, com características especificas conforme seu tipo. Os relatórios podem ser invocados por uma aplicação cliente, seja ele uma aplicação Windows, Web, por qualquer tecnologia que consuma WebService ou mesmo pelo ambiente do próprio report ing services.&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;APLICAÇÃO CLIENTE &lt;/em&gt;&lt;br /&gt;São as aplicações capazes de implementar, gerenciar e visualizar os relatórios, sendo os principais, o Report Manager, o BIDS, Visual Studio,aplicações .net Windows e web por meio do controle ReportViewer, além do aplicativo Office-Model Report Builder. &lt;/p&gt;&lt;p&gt;ESTRUTURA DE DADOS VOLÁTIL&lt;/p&gt;&lt;p&gt;São as estruturas em memória que criamos para armazenar temporariamente o resultado das consultas que serão visualizadas nos relatórios, essas consultas são implementadas na forma de stored procedures, views, instruções T-SQL além de cubos OLAP.&lt;/p&gt;&lt;p&gt;DB ACCESS ENGINE&lt;/p&gt;&lt;p&gt;São os diversos mecanismos possíveis para acesso aos dados, corresponde às fontes de dados: de acesso ao SQL Server, Oracle, OLE DB, ODBC bem como Analysis Server Databases – OLAP. &lt;/p&gt;&lt;p&gt;REPOSITÓRIOS DE DADOS&lt;/p&gt;&lt;p&gt;São as fontes de dados das quais se extrai as informações para os relatórios criados e acessados via os DB Access Engines.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7841108315404617323-2722716707348532988?l=caiodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://caiodotnet.blogspot.com/feeds/2722716707348532988/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://caiodotnet.blogspot.com/2010/08/explorando-microsot-sql-reporting.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/2722716707348532988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/2722716707348532988'/><link rel='alternate' type='text/html' href='http://caiodotnet.blogspot.com/2010/08/explorando-microsot-sql-reporting.html' title='Explorando SQL Reporting Services 2005 Parte I'/><author><name>Caio Azevedo</name><uri>http://www.blogger.com/profile/10472366969109256678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_ihlCbF1y0hE/SnCbh4e6v2I/AAAAAAAAB5M/8jM9fTitlzI/S220/CIMG3955.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ihlCbF1y0hE/THL-E-6YIjI/AAAAAAAADMY/nvjkUpOSoVg/s72-c/figura+1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7841108315404617323.post-3056819072460492172</id><published>2009-12-16T04:53:00.000-08:00</published><updated>2009-12-16T04:56:49.426-08:00</updated><title type='text'>Novo Site da Treinando .net</title><content type='html'>Olá Pessoal.. já está no ar o novo site da treinando .net, passem por lá e vejam os cursos que oferecemos. E já estou montando o material para o treinamento de reporting services 2008 para o ano que vem....&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.treinando.net"&gt;http://www.treinando.net&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[]s,&lt;br /&gt;Caio Azevedo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7841108315404617323-3056819072460492172?l=caiodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://caiodotnet.blogspot.com/feeds/3056819072460492172/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://caiodotnet.blogspot.com/2009/12/novo-site-da-treinando-net.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/3056819072460492172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/3056819072460492172'/><link rel='alternate' type='text/html' href='http://caiodotnet.blogspot.com/2009/12/novo-site-da-treinando-net.html' title='Novo Site da Treinando .net'/><author><name>Caio Azevedo</name><uri>http://www.blogger.com/profile/10472366969109256678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_ihlCbF1y0hE/SnCbh4e6v2I/AAAAAAAAB5M/8jM9fTitlzI/S220/CIMG3955.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7841108315404617323.post-7656147322293518054</id><published>2009-10-27T07:08:00.001-07:00</published><updated>2011-07-14T05:08:50.624-07:00</updated><title type='text'>Artigo Publicado na Codificando .net Magazine</title><content type='html'>Pessoal,&lt;br /&gt;&lt;br /&gt;Saiu mais uma edição da revista da comunidade &lt;em&gt;&lt;em&gt;codificando .net&lt;/em&gt;&lt;/em&gt;, a edição #12, onde, dentre outros assuntos interessantes, podemos conferir o segundo dos meus artigos sobre reporting services 2005.&lt;br /&gt;&lt;br /&gt;A revista está disponível em :&amp;nbsp;&lt;a href="http://www.codificandomagazine.com.br/Revista/"&gt;http://www.codificandomagazine.com.br/Revista/&lt;/a&gt;&amp;nbsp;e seu acesso é livre.. &lt;br /&gt;&lt;br /&gt;Boa Leitura.&lt;br /&gt;Caio Azevedo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7841108315404617323-7656147322293518054?l=caiodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://caiodotnet.blogspot.com/feeds/7656147322293518054/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://caiodotnet.blogspot.com/2009/10/artigo-publicado-na-codificando.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/7656147322293518054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/7656147322293518054'/><link rel='alternate' type='text/html' href='http://caiodotnet.blogspot.com/2009/10/artigo-publicado-na-codificando.html' title='Artigo Publicado na Codificando .net Magazine'/><author><name>Caio Azevedo</name><uri>http://www.blogger.com/profile/10472366969109256678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_ihlCbF1y0hE/SnCbh4e6v2I/AAAAAAAAB5M/8jM9fTitlzI/S220/CIMG3955.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7841108315404617323.post-4554091124989975691</id><published>2009-10-24T07:12:00.000-07:00</published><updated>2009-11-01T20:45:05.049-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arquitetura sistemas'/><category scheme='http://www.blogger.com/atom/ns#' term='web services'/><category scheme='http://www.blogger.com/atom/ns#' term='modelos web'/><title type='text'>Problemas com Modelos de Aplicações Web</title><content type='html'>&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;Em minhas recentes atividades como arquiteto de soluções .net, deparei em alguns clientes com uma situação no mínimo inusitada. Todos tinham como meta construir suas aplicações seguindo as tecnologias do momento - multicamadas, &lt;em&gt;web services&lt;/em&gt;, orientação a objetos, etc. E eis que, como tantos outros, insidiam nos mesmos erros - talvez por falta de experiência, maturidade ou mesmo conhecimento, o certo é que, tentar de qualquer forma e a qualquer custo inserir todas, ou pelo menos boa parte dessas tecnologias em seus modelos de aplicação, é uma prática cada vez mais comum no ambiente corporativo, e as consequencias podem ser desastrosas, pondo em risco todo o projeto. Deparei com diversas situações, de uso excessivo e indiscriminado de uma tecnologia, à ilusão de se estar utilizando uma delas, a saber - web services e orientação a objetos respectivamente.&lt;br /&gt;&lt;br /&gt;Problemas com modelos de aplicações não são novidades, desde os tempos da fórmula &lt;strong&gt;IIS * COM+ * SQL Server&lt;/strong&gt;, a conhecida arquitetura Windows DNA - deparamos com alguns cenários realmente assustadores, onde na maioria das vezes o grande problema era a utilização do mais velho ainda, paradigma &lt;strong&gt;Cliente - Servidor&lt;/strong&gt;. A seguir temos alguns cenários que certamente estavam fadados ao fracasso :&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#9999ff;"&gt;01.&lt;/span&gt; Acesso aos dados [via ADO] diretamente nas páginas, e para piorar, sem preocupação com as propriedades de otimização dos objetos Connection, RecordSet e Command, transformando uma aplicação Web em um típico cliente / servidor com os cursores no servidor [um desastre total];&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#9999ff;"&gt;02.&lt;/span&gt; Sub utilização de componentes [Visual Basic 6.0], uma vez que nenhuma das features do COM+ [Pool de Ativação, Controle de Transações, Segurança, etc] eram utilizadas, lhes restando somente a tarefa de executar stored procedures, caracterizando mais um caso de desuso de tecnologia, ou pior a ilusão de um ambiente em 3 camadas, já que as regras de negócio, ou ao menos parte delas, estão em sua implementação.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Consequências &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Não dá outra pessoal, clientes vendo seu investimento [tempo e dinheiro] indo para o espaço, todo seu planejamento comprometido porque "o sistema não funciona", um verdadeiro fracasso. Tecnicamente temos alguns sintomas: (para os ambientes descritos)&lt;br /&gt;&lt;br /&gt;- Sobrecarga de processamento - ora no IIS [via dllhost.exe], ora no COM+ [com altíssimos tempos de ativação dos componentes]&lt;br /&gt;- Constantes "travamentos" da aplicação, e não menos comum de todas as demais aplicações do servidor.&lt;br /&gt;- Conseqüentemente surge como já cansei de ouvir - "soluções baseadas em COM+ &lt;strong&gt;não funcionam&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;No "admirável mundo novo" do ambiente .net, as aplicações podem ser modeladas das mais variadas maneiras, bem mais que no mundo DNA [o que sendo bem pessimista, só aumenta as chances de erros], sendo assim, uma boa dica para iniciar a modelagem de uma aplicação .net, seria delimitar todo o cenário, seus pré-requisitos técnico-operacionais, funcionalidades, infra-estrutura do ambiente de produção, políticas de contingência, dentre outras variáveis que certamente induzirão arquitetos, analistas, desenvolvedores, DBAs e a equipe de infra a cometerem erros que podem comprometer todo projeto, a seguir temos alguns casos, facilmente encontrados em qualquer ambiente corporativo.&lt;br /&gt;&lt;br /&gt;Como já dissemos, um erro comum no desenvolvimento de aplicações, é a ilusão de se utilizar uma tecnologia/paradigma quando na verdade se está bem longe disso. Já demonstramos um caso quando falamos do mundo DNA 3-tiers, quando apesar dos recursos, a equipe responsável continuava com o paradigma Cliente x Servidor 2-tiers. Nos dias de hoje, o que vemos são aplicações, ditas orientada à objetos com multicamadas, onde não temos qualquer construção com herança de objetos [por exemplo, na implementação de classes proprietárias para repositório de dados - &lt;strong&gt;pessoa, cliente, usuário&lt;/strong&gt;] - um desperdício dos recursos e funcionalidades que a OO disponibiliza. Dentro desse cenário ainda encontramos uma "camada de apresentação" implementada de tal forma que detalhes do banco de dados [string de conexão, nome de tabelas, atributos, etc] precisam ser conhecidas. Ora, uma aplicação multicamadas tem, dentre seus atrativos, prover um considerável nível de abstração entre as camadas o que não é o caso. Assim, em um cenário com esses "detalhes de construção", a aplicação aparentemente OO x Multicamadas, só não pode ser considerada Estruturada, pois a ferramenta de desenvolvimento não permite [qualquer assembly .net precisa de pelo menos uma classe].&lt;br /&gt;&lt;br /&gt;Dentre as questões estruturais do desenvolvimento de softwares no nível arquitetural destacamos a &lt;strong&gt;escalabilidade&lt;/strong&gt; [geralmente relacionada ao desempenho] - podendo ser do tipo horizontal ou vertical, e que varia basicamente em função do parque tecnológico disponível e das perspectivas de demanda para a aplicação. Imaginemos uma situação onde, a infra é definida com um pool de 4, 5 servidores potentes, configurados para implementar um Web Farm. Para que modelar uma solução distribuída, com Web Services, "desperdisando" um ou vários desses servidores para "camada de regras de negócio", sob o argumento que estamos diante de uma aplicação n-camadas ? Pois bem, estamos diante de um problema conceitual [sendo bem eufemista] - Aplicações multicamadas, não implicam necessariamente em aplicações distribuídas. Para piorar a situação desse cenário, a comunicação entre as "camadas" é feita com Web Services, um exemplo típico de modismo. Uma modelagem nessa forma tem um custo absurdo e não justificável. A seguir tomaremos esse caso como exemplo, de qualquer forma, não seria mais interessante deixar todos os componentes de regras de negócio no modelo de deploy padrão .net, "folder" \bin], assim faríamos melhor uso do ambiente descrito.&lt;br /&gt;&lt;br /&gt;Para exemplicar essa terrível tendência, lançarei mão dos Web Services, uma poderosa tecnologia - eu diria que uma das mais importantes desde o advento da internet, no entanto seu uso sem critérios pode ser catastrófico [como no cenário acima]. Os Web Services, como toda grande idéia, prima pela simplicidade, permitindo que funcionalidades, até então restritas à um ambiente fechado [uma intranet por exemplo], estejam acessíveis para todos, em qualquer lugar, por diversos dispositivos e independente das plataformas envolvidas, sendo assim, se você resolver utilizá-los no seu modelo de aplicação antes de mais nada procure dentre esses três itens, uma justificativa para tal. Como nem tudo na vida são flores, os Web Services tem seu custo, para realizar suas proezas ele se basea em três pilares - Serialização, XML e HTTP, o resto são conceitos e siglas, no fundo os Web Services são objetos serializados [Estruturas, DataSets, Arrays, Classes, etc], transmitidos entre as partes [através o já conhecido protocolo HTTP, livre dos firewalls], em um formato de dados que já se tornou padrão e amplamente difundido [viva o XML] e os custos ??? simples, o processo de serializar/deserializar tem seus custos de processamento [o menor de todos é bem verdade], a transmissão dos dados serializados via HTTP fatalmente acarreta um custo elevado, por concorrer com as requisições dos usuário POST/GET de páginas HTML e ASPX e principalmente pelo formato dos dados, XML, que contém um conjunto de metadados para compor as mensagens, tornando-as ainda maiores.&lt;br /&gt;&lt;br /&gt;Sendo assim, aquele cenário "distribuído", tendo Web Services como meio de comunicação está deveras comprometido. Uma alternativa para esse ambiente, distribuído e sobretudo interno, seria o uso de &lt;strong&gt;Remoting&lt;/strog&gt; uma tecnologia, que atende a demanda [se considerarmos, a real necessidade de um ambiente distribuído], sem os custos dos web services. Essa proeza é possível pela substituição de tecnologia nos três pilares do Web Service:&lt;br /&gt;&lt;br /&gt;- Serialização - No Remoting, em sua melhor configuração para performance, a serialização binária, ao invés da XML é a mais indicada, tornando os dados trafegados significativamente menores. [o remoting também suporta serialização XML]&lt;br /&gt;- HTTP - Aqui substituímos o protocolo de transporte para TCP, em uma porta específica, o que por definição é mais eficaz que o HTTP, além de evitar a concorrência com as aplicações e suas páginas estáticas e dinâmicas.&lt;br /&gt;&lt;br /&gt;Pessoal, de maneira alguma sou contra o uso de Web Services, mas sua utilização em um ambiente intra-domínio, com dois ou mais servidores, trocando todo e qualquer tipo de mensagem - operações DML, pesquisas ao banco de dados para carregar controles, instância dos componentes de regras de negócio, entre outras, definitivamente não será bem sucedida quando a demanda atingir um patamar considerável.&lt;br /&gt;&lt;br /&gt;A seguir, exemplificaremos dois cenários distribuídos, um como Web Services e outro com Remoting aplicável ao nosso ambiente, não entraremos em todos os detalhes da implementação dos modelos, nossa preocupação aqui é com a arquitetura [mas se precisar é só entrar em contato].&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Cenário:&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Temos um assembly, componente.dll, com a classe/método que precisamos acessar remotamente, esse método simplesmente executa uma instrução de repetição for 10000000 vezes sem qualquer operação por interação, para o acesso remoto, escreveremos uma "camada" web services e outra remoting que disponibilizarão o método para o cliente. &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;p align="justify"&gt;&lt;a href="http://4.bp.blogspot.com/_ihlCbF1y0hE/SuMQP0Pf31I/AAAAAAAACOA/kJ3anIxUvF8/s1600-h/cenario.gif"&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; WIDTH: 400px; FLOAT: left; HEIGHT: 268px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5396174642427715410" border="0" alt="" src="http://4.bp.blogspot.com/_ihlCbF1y0hE/SuMQP0Pf31I/AAAAAAAACOA/kJ3anIxUvF8/s400/cenario.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ffcc66;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffcc66;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffcc66;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffcc66;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffcc66;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffcc66;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffcc66;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffcc66;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffcc66;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffcc66;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffcc66;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffcc66;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffcc66;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffcc66;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffcc66;"&gt;Figura 1 - Cenários de aplicação distribuída.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Modelo Web Services &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Para implementação do modelo "Web Services", temos nosso componente, implementado como uma classe qualquer [código 1]. Agora precisamos de um "servidor" e assim teremos a combinação IIS [host] x Web Service [comunicação] - implementado em um arquivo .asmx [código 2] e hospedado em um diretório virtual como uma aplicação Web qualquer, que chamaremos WsRemote, [logo as mensagens trocadas concorrem com as demais aplicações]. Pronto, eis nossa porção "server" do ambiente distribuído desse cenário, onde toda complexidade [serialização, comunicação, listening], são resolvidos pelo IIS, com seu custo é claro.&lt;br /&gt;&lt;/p&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;p align="justify"&gt;&lt;a href="http://3.bp.blogspot.com/_ihlCbF1y0hE/SuMSa7bSlbI/AAAAAAAACOI/EXnWiNoJhaA/s1600-h/codigo1.JPG"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 389px; DISPLAY: block; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5396177032358041010" border="0" alt="" src="http://3.bp.blogspot.com/_ihlCbF1y0hE/SuMSa7bSlbI/AAAAAAAACOI/EXnWiNoJhaA/s400/codigo1.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;span style="color:#ffcc66;"&gt;Código 1 - Componente com "regra de negócio". &lt;/span&gt;&lt;/p&gt;&lt;div align="justify"&gt;Atente para criação do objeto e chamada ao seu método. &lt;/div&gt;&lt;div align="justify"&gt;Código 2 – Web Service.&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_ihlCbF1y0hE/SubqK32lIKI/AAAAAAAACOQ/x7K3kwm_BWs/s1600-h/codigo2.GIF"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 243px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5397258675962585250" border="0" alt="" src="http://1.bp.blogspot.com/_ihlCbF1y0hE/SubqK32lIKI/AAAAAAAACOQ/x7K3kwm_BWs/s400/codigo2.GIF" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Chamada ao componente --&gt; método&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;Preparando Cliente:&lt;br /&gt;&lt;/strong&gt;Usaremos como cliente uma aplicação console [para simplificar]. Para tal precisamos do que chamamos Proxy do Web Service, que corresponde a uma classe também com os métodos disponíveis no Web Service [muita gente não sabe da existência dessa classe, já que o Visual Studio garante a "transparência"], essa classe é gerada pelo utilitário WSDL , com a seguinte sintaxe: WSDL http://localhost/WSRemote/WebService.asmx, em seguida é só compilar a classe e utilizar o assembly gerado no cliente [código 3].&lt;br /&gt;&lt;br /&gt;Código 3 – Cliente Web Service [referência à dll proxy].&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_ihlCbF1y0hE/Subr_poP4aI/AAAAAAAACOY/Tu84ZmnDNh8/s1600-h/codigo3.GIF"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 302px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5397260682189070754" border="0" alt="" src="http://2.bp.blogspot.com/_ihlCbF1y0hE/Subr_poP4aI/AAAAAAAACOY/Tu84ZmnDNh8/s400/codigo3.GIF" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Modelo Remoting&lt;br /&gt;&lt;br /&gt;Esse modelo é um pouco mais complicado, afinal não temos o IIS para as funcionalidades mais complexas, por isso construiremos o nosso [ou pelo menos uma ferramenta similar e que atenda as funcionalidades que precisaremos].&lt;br /&gt;O princípio aqui é a ativação do objeto [marshal], onde o cliente tem uma referência do objeto remoto - no entanto, ele efetivamente é criado no servidor [código 4]. Agora precisamos do "servidor" [um elemento em estado de espera, que atenda as requisições dos clientes remotos] - e ai construiremos aquele que corresponde ao IIS [host] do cenário anterior. Nosso remoting server, é um programa executável como outro qualquer que disponibiliza um canal (endereço IP : Porta), além é claro, o nosso componente [código 5].&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_ihlCbF1y0hE/SubsbX9lfTI/AAAAAAAACOg/CXPVLxMNljE/s1600-h/codigo4.GIF"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 211px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5397261158483066162" border="0" alt="" src="http://3.bp.blogspot.com/_ihlCbF1y0hE/SubsbX9lfTI/AAAAAAAACOg/CXPVLxMNljE/s400/codigo4.GIF" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Preparando Server:&lt;br /&gt;          Para disponibilizar nosso componente basta compilá-lo, copiar a dll gerada para mesma pasta do servidor [remoteService.exe] e executá-lo - não esqueça de fazer referência à dll na compilação do servidor. &lt;br /&gt;&lt;br /&gt;Código 5 – Remoting Server. &lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_ihlCbF1y0hE/Sub5cE9pD5I/AAAAAAAACOo/p_fI0QEclhY/s1600-h/codigo5.GIF"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 246px;" src="http://2.bp.blogspot.com/_ihlCbF1y0hE/Sub5cE9pD5I/AAAAAAAACOo/p_fI0QEclhY/s400/codigo5.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5397275464214056850" /&gt;&lt;/a&gt;&lt;br /&gt; Remote Server - mantém estado de espera - listening &lt;br /&gt;&lt;br /&gt;Preparando Cliente:&lt;br /&gt;          Novamente nosso cliente é uma aplicação console. Para testá-lo copie o componente para o local do cliente [isso é necessário para referenciar o componente remoto] e o execute [código 6]. Atente que apesar da dll está fisicamente localizada no client sua ativação é realizada no server [comprovado pela execução do construtor do componente informando o número de instâncias].&lt;br /&gt;&lt;br /&gt;Código 6 – Remoting Client. &lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_ihlCbF1y0hE/Sub5siZBg6I/AAAAAAAACOw/QJnjPHdMxI0/s1600-h/codigo6.GIF"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 264px;" src="http://4.bp.blogspot.com/_ihlCbF1y0hE/Sub5siZBg6I/AAAAAAAACOw/QJnjPHdMxI0/s400/codigo6.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5397275746991440802" /&gt;&lt;/a&gt;&lt;br /&gt; Implementação do cliente - modelo remoting &lt;br /&gt;&lt;br /&gt;Ao executarmos os dois cenários, percebemos através dos contadores utilizados, um sensível ganho de performance na versão Remoting, no entanto em um cenário real, onde nosso web service concorre com as demais aplicações web e sobretudo, onde o processamento do componente de negócio é considerável, essa diferença tende a aumentar, e outra, para que utilizar uma tecnologia, se temos alternativas mais elegante e performática ?? - modismo, hábito, facilidade na implementação ?, são nesses "detalhes" que distinguimos bons e maus projetos de software. &lt;br /&gt;          Bom pessoal, eis um exemplo dentre tantos outros que encontramos em qualquer ambiente corporativo, muito cuidado com os modelos de aplicação utilizados em seus projetos, façamos uma reflexão no que já temos implementado, como poderíamos modificar, detectando pontos críticos e sugerindo mudanças em próximos projetos, o que não se podemos admitir é a incidência de erros dessa natureza pacivamente. &lt;br /&gt;&lt;br /&gt;E para finalizar, segue os &lt;a href="http://meus-artigos----download.googlegroups.com/web/WSxRemote.zip?gda=fGXnHkAAAACNcKLGaqkbLHgxKXARCRMz4XQGxwfJwiVJgs3KLo9ZRu9n5A7GgOVTCxhgWF89dEttxVPdW1gYotyj7-X7wDON"&gt;códigos exemplo&lt;/a&gt; utilizados em nosso artigo, como dito, minha maior preocupação é com as questões relacionadas à arquitetura, por isso não atentamos para detalhes da codificação, mas com certeza seu entendimento ajuda bastante, de qualquer forma sintam-se à vontade para qualquer esclarecimento/crítica/sugestão. &lt;a href="http://meus-artigos----download.googlegroups.com/web/WSxRemote.zip?gda=fGXnHkAAAACNcKLGaqkbLHgxKXARCRMz4XQGxwfJwiVJgs3KLo9ZRu9n5A7GgOVTCxhgWF89dEttxVPdW1gYotyj7-X7wDON"&gt;Projeto WSxRemote - download&lt;/a&gt;&lt;br /&gt;Até a próxima !! &lt;br /&gt;Caio Azevêdo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7841108315404617323-4554091124989975691?l=caiodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://caiodotnet.blogspot.com/feeds/4554091124989975691/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://caiodotnet.blogspot.com/2009/10/problemas-com-modelos-web.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/4554091124989975691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/4554091124989975691'/><link rel='alternate' type='text/html' href='http://caiodotnet.blogspot.com/2009/10/problemas-com-modelos-web.html' title='Problemas com Modelos de Aplicações Web'/><author><name>Caio Azevedo</name><uri>http://www.blogger.com/profile/10472366969109256678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_ihlCbF1y0hE/SnCbh4e6v2I/AAAAAAAAB5M/8jM9fTitlzI/S220/CIMG3955.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ihlCbF1y0hE/SuMQP0Pf31I/AAAAAAAACOA/kJ3anIxUvF8/s72-c/cenario.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7841108315404617323.post-8544853833913779188</id><published>2009-07-29T11:27:00.000-07:00</published><updated>2009-07-29T19:19:17.971-07:00</updated><title type='text'>Por Dentro do IL</title><content type='html'>&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;font-size:130%;color:#ffcc99;"&gt;Prefácio: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ffff99;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;Nossa proposta nesse espaço inicialmente seria de analisarmos a linguagem C#, sua sintaxe, implementações dos conceitos de orientação a objetos, etc. Para tal acredito que a implementação de programas console [aqueles que rodam no DOS], seja a melhor alternativa nesse primeiro momento, sem dúvida o Visual Studio é uma ferramenta poderosíssima, mas tentaremos não fazer uso do mesmo, para uma maior intimidade com a linguagem, o compilador, suas ferramentas e as diversas técnicas de desenvolvimento que o ambiente nos permite. Uma ressalva ao editor de programas, onde o Visual Studio tem uma interface bastante agradável (destaque para identação e visual das linhas de código), no entanto para os mais nostálgicos o uso do Edit é bem vindo.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;font-size:130%;color:#ffcc99;"&gt;Pré-requisitos:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;color:#ffff99;"&gt;Para execução de um programa .net o mínimo necessário é a instalação do Framework, disponível para download no site da Microsoft [http://msdn.microsoft.com/netframework/technologyinfo/howtoget/default.aspx]. Uma vez instalado temos disponíveis os compiladores VB e C#, para nosso caso o programa csc [digite csc /? para maiores detalhes de compilação]. Caso tenhamos apenas o framework instalado seria interessante adicionar à variável de ambiente Path, o caminho do programa csc, se tivermos o Visual Studio instalado utilize a opção Visual Studio Command Prompt, dentre as ferramentas do VS.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;font-size:130%;color:#ffcc99;"&gt;Finalmente:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffff99;"&gt;Bom pessoal, nada mais batido como primeira lição nos escritos de qualquer linguagem de programação que o conhecido “Hello Word”, pois bem, não faremos diferente, no entanto, utilizaremos desse programa para passarmos algumas informações importantes para o entendimento de qualquer programa C#. Faremos uma viagem pelo universo do MSIL, a mágica da Microsoft para que os programas sejam multiplataformas, independente de linguagem, seguros, versionados, etc. O MSIL, nada mais é que uma linguagem intermediaria gerada no processo de compilação do código fonte, assim ao final desse processo temos um código intermediário e dependente do runtime do Framework ao invés dos executáveis “independentes”, até então gerado pelos compiladores [e ainda possível nos compiladores C++, e C# em situações especiais]. Esse código é formado por um conjunto de instruções em linguagem intermediária e por metadados, conhecido como MANIFESTO, onde temos descrito informações essenciais para execução do código, tais como definição de tipos, controle de versão [e ai o fim da terrível DLL HELL, ou incompatibilidade de versões], referencia à assemblies externos, dentre outras funcionalidades.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;color:#ffff99;"&gt;Esse formato do código, com dados e metadados, permite aos assemblies uma autodescrição o que dispensa a necessidade das antigas Type Libraries ou IDLs. Assim o próprio runtime do framework, localiza e obtém as informações necessárias para executar as instruções conforme preciso, tudo junto num mesmo lugar.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;color:#ffff99;"&gt;O processo de execução inicia-se com o runtime do Framework [o conhecido CLR], que carrega do código IL e o executa, como já dissemos, o código tem é gerenciado e seguro. No entanto, antes dessa execução o CLR, garante a validade do código para só então compilá-lo, gerando um código de fato executável compatível com o processador, através do just-in-time compiler [JITter] que é cacheado, e caso haja alteração no código fonte / IL o mesmo é atualizado. Durante a execução do código gerenciado, o mesmo recebe serviços como garbage collection [responsável pela uma “limpeza” periódica na memória], interoperabilidade com códigos não gerenciados, serviço de controle de versão, segurança, etc, ou seja nosso processo fica constantemente monitorando para garantir sua qualidade em performance, segurança, gerenciamento otimizado da memória e outras funcionalidades providas pelo Framework.&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="color:#ffff99;"&gt;A seguir, analisaremos nosso programa, o compilaremos e analisaremos seu código intermediário.&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;color:#3366ff;"&gt;using System; //Referenciando namespace System&lt;br /&gt;namespace Imasters //Definindo namespace Imasters&lt;br /&gt;{&lt;br /&gt;class hello //Definindo classe hello&lt;br /&gt;{&lt;br /&gt;public static void Main() //Função principal&lt;br /&gt;{&lt;br /&gt;for(int i=0;i&lt;5;i++)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;color:#3366ff;"&gt;Console.WriteLine("\tBem-Vindo à coluna - C# e Tecnologias .NET!!!");&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;color:#3366ff;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="color:#3366ff;"&gt;&lt;span style="font-family:arial;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div align="justify"&gt;&lt;span style="font-family:arial;color:#3366ff;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="color:#ffff99;"&gt;Nada mais simples, um programa que exibe uma mensagem cinco vezes. Utilizando o velho &lt;em&gt;notepad&lt;/em&gt;, salvemos um arquivo hello.cs. e vamos para o processo de compilação:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;color:#ffff99;"&gt;Compilando:&lt;br /&gt;csc hello.cs [Será gerado um “executável”, hello.exe.]&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffff99;"&gt;Bom, como já dissemos, o código aparentemente é como outro qualquer, no entanto podemos visualizar seu IL através do utilitário &lt;strong&gt;ILDASM&lt;/strong&gt;, executado a partir do diretório onde temos nosso executável. &lt;strong&gt;&lt;em&gt;Ildasm hello.exe&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;a href="http://3.bp.blogspot.com/_ihlCbF1y0hE/SnCWF5jJXZI/AAAAAAAAB3w/mkmO-cUh0z0/s1600-h/hello1.gif"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://3.bp.blogspot.com/_ihlCbF1y0hE/SnECXMRDQ4I/AAAAAAAAB6Q/kMYBeqIbYEY/s1600-h/hello1.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5364071228627960706" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 400px; CURSOR: hand; HEIGHT: 232px" alt="" src="http://3.bp.blogspot.com/_ihlCbF1y0hE/SnECXMRDQ4I/AAAAAAAAB6Q/kMYBeqIbYEY/s400/hello1.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;"&gt;Figura 1&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;color:#ffff99;"&gt;Aqui temos claramente as seções do nosso código, acima o &lt;strong&gt;manifesto&lt;/strong&gt;, com os metadados do programa, em seguida temos o namespace [veremos em artigos posteriores] Imasters, a classe hello e abaixo as subseções, com o construtor da classe e o método principal, Main.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Trebuchet MS;color:#ffff99;"&gt;&lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/_ihlCbF1y0hE/SnCWZl03ULI/AAAAAAAAB34/fEKQeWxSyzA/s1600-h/hello2.gif"&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://4.bp.blogspot.com/_ihlCbF1y0hE/SnEB64sl1oI/AAAAAAAAB6I/RWpRofDIPx0/s1600-h/hello2.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5364070742338426498" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 400px; CURSOR: hand; HEIGHT: 220px" alt="" src="http://4.bp.blogspot.com/_ihlCbF1y0hE/SnEB64sl1oI/AAAAAAAAB6I/RWpRofDIPx0/s400/hello2.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Figura 2&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:trebuchet ms;color:#ffff99;"&gt;Na figura 2 temos os metadados dos nossos aplicativo.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="color:#ffff99;"&gt;Na linha, &lt;/span&gt;&lt;span style="color:#3366ff;"&gt;.assembly extern mscorlib&lt;/span&gt;&lt;span style="color:#ffff99;"&gt;, temos uma referencia ao assembly externo, no caso, o mscorlib [mscoree.dll, usado pelo sistema operacional para carregar o executável “intermediário”]. O compilador insere alguns parâmetros para identificação e segurança como, por exemplo, &lt;/span&gt;&lt;span style="color:#3366ff;"&gt;.publickeytoken&lt;/span&gt;&lt;span style="color:#ffff99;"&gt;, que é a identificação básica do assembly e &lt;/span&gt;&lt;span style="color:#3366ff;"&gt;.ver&lt;/span&gt; &lt;span style="color:#ffff99;"&gt;que corresponde à versão do mesmo. &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffff99;"&gt;Em seguida temos a seção &lt;/span&gt;&lt;span style="color:#3333ff;"&gt;.assembly&lt;/span&gt;&lt;span style="color:#ffff99;"&gt;, com seus parâmetros &lt;span style="color:#3333ff;"&gt;.hash&lt;/span&gt;, utilizado para garantir que o assembly referenciado não tenha sido modificado e &lt;span style="color:#3333ff;"&gt;.ver &lt;/span&gt;que representa a versão do nosso código, aqui não especificado, nas opções de compilação.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffff99;"&gt;Finalmente temos a seção &lt;span style="color:#3333ff;"&gt;.module&lt;/span&gt; que identifica nosso assembly [hello.exe], aqui temos um &lt;span style="color:#3333ff;"&gt;MVID&lt;/span&gt;, que o identifica, e é regerado a cada compilação, informações de identificação e localização do arquivo físico.&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;a href="http://3.bp.blogspot.com/_ihlCbF1y0hE/SnCWqbpTSNI/AAAAAAAAB4A/FF9KkAWm5OU/s1600-h/hello3.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5363952811917920466" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand; HEIGHT: 116px" alt="" src="http://3.bp.blogspot.com/_ihlCbF1y0hE/SnCWqbpTSNI/AAAAAAAAB4A/FF9KkAWm5OU/s320/hello3.gif" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;Figura 3&lt;br /&gt;&lt;/span&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="font-family:trebuchet ms;color:#ffff99;"&gt;Aqui já vemos nossos primeiros códigos MSIL, estamos diante do construtor de nossa classe, que a principio é executado para cada classe, podendo ou não ser modificado [maiores detalhes em artigos posteriores], interessante ressaltarmos a primeira linha, onde o atributo &lt;span style="color:#3333ff;"&gt;cil managed&lt;/span&gt;, o define como código gerenciável. As linhas &lt;span style="color:#3333ff;"&gt;IL_9999&lt;/span&gt;: são identificadores de instruções assembly, onde a primeira utiliza o opcode &lt;span style="color:#3333ff;"&gt;ldarg&lt;/span&gt; que carrega um argumento para pilha de execução, 0, indica o operador &lt;em&gt;this&lt;/em&gt;, ou seja a própria classe, em seguida é feito uma chamada ao método System.Object e assim o controle é retornado ao método que o chamou.&lt;/span&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_ihlCbF1y0hE/SnCW9Zs1v-I/AAAAAAAAB4I/5NBVJc1oYeM/s1600-h/hello4.gif"&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_ihlCbF1y0hE/SnCW9Zs1v-I/AAAAAAAAB4I/5NBVJc1oYeM/s1600-h/hello4.gif"&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_ihlCbF1y0hE/SnCW9Zs1v-I/AAAAAAAAB4I/5NBVJc1oYeM/s1600-h/hello4.gif"&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_ihlCbF1y0hE/SnCW9Zs1v-I/AAAAAAAAB4I/5NBVJc1oYeM/s1600-h/hello4.gif"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_ihlCbF1y0hE/SnCXeZo-SKI/AAAAAAAAB4Q/4clo4VmNDbQ/s1600-h/hello4.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5363953704732870818" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand; HEIGHT: 214px" alt="" src="http://2.bp.blogspot.com/_ihlCbF1y0hE/SnCXeZo-SKI/AAAAAAAAB4Q/4clo4VmNDbQ/s320/hello4.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;a href="http://1.bp.blogspot.com/_ihlCbF1y0hE/SnCW9Zs1v-I/AAAAAAAAB4I/5NBVJc1oYeM/s1600-h/hello4.gif"&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_ihlCbF1y0hE/SnCW9Zs1v-I/AAAAAAAAB4I/5NBVJc1oYeM/s1600-h/hello4.gif"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Figura 4&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ffff99;"&gt;Finalmente chegamos em nosso código propriamente dito. Mais uma vez vemos que o método é gerenciado pelo atributo&lt;/span&gt; &lt;span style="color:#3333ff;"&gt;cil managed&lt;/span&gt;&lt;span style="color:#ffff99;"&gt;. Aqui destaque para algumas diretivas: &lt;/span&gt;&lt;span style="color:#3333ff;"&gt;.entrypoint&lt;/span&gt;&lt;span style="color:#ffff99;"&gt;, que especifica Main como ponto de entrada do programa. A diretiva&lt;/span&gt; &lt;span style="color:#3333ff;"&gt;.maxstack&lt;/span&gt; &lt;span style="color:#ffff99;"&gt;que especifica o tamanho máximo na pilha para o método. Em seguida temos os códigos com as instruções do programa, destaque para &lt;/span&gt;&lt;span style="color:#3333ff;"&gt;ldstr&lt;/span&gt; &lt;span style="color:#ffff99;"&gt;que carrega uma string na pilha de execução, &lt;/span&gt;&lt;span style="color:#3333ff;"&gt;br.s&lt;/span&gt;&lt;span style="color:#ffff99;"&gt;, que desvia a seqüência de execução e &lt;/span&gt;&lt;span style="color:#3333ff;"&gt;blt.s&lt;/span&gt;&lt;span style="color:#ffff99;"&gt;, que desvia seqüência condicionalmente, &lt;/span&gt;&lt;span style="color:#3333ff;"&gt;call&lt;/span&gt; &lt;span style="color:#ffff99;"&gt;que faz uma chamada ao método estático &lt;em&gt;System.ConsoleWriteLine&lt;/em&gt; e por fim o retorno ao método que iniciou o processo [no caso &lt;em&gt;_CorExeMain &lt;/em&gt;da mscoree.dll]. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;É isso ai pessoal, temos uma referencia enorme de opcodes IL, que na verdade dificilmente precisaremos manipular [não que seja impossível], ainda assim acho válido entendermos o funcionamento dos nossos assemblies, e o interessante é que tudo no .NET funciona assim, seja uma o code-behind de uma página ASPX, um WebService, uma DLL no COM+, um aplicativo console, qualquer coisa [opa, menos os programas não gerenciados, que com ojá dissemos, podem ser codificados em C++, ou mesmo no nosso C#].&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Segue um guia de referencia interessante sobre o conjunto de instruções MSIL.&lt;br /&gt;&lt;br /&gt;Ate a próxima,&lt;br /&gt;Caio Azevedo. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7841108315404617323-8544853833913779188?l=caiodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://caiodotnet.blogspot.com/feeds/8544853833913779188/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://caiodotnet.blogspot.com/2009/07/por-dentro-do-il.html#comment-form' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/8544853833913779188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/8544853833913779188'/><link rel='alternate' type='text/html' href='http://caiodotnet.blogspot.com/2009/07/por-dentro-do-il.html' title='Por Dentro do IL'/><author><name>Caio Azevedo</name><uri>http://www.blogger.com/profile/10472366969109256678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_ihlCbF1y0hE/SnCbh4e6v2I/AAAAAAAAB5M/8jM9fTitlzI/S220/CIMG3955.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ihlCbF1y0hE/SnECXMRDQ4I/AAAAAAAAB6Q/kMYBeqIbYEY/s72-c/hello1.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7841108315404617323.post-7665658325748494337</id><published>2009-02-07T05:59:00.000-08:00</published><updated>2009-02-07T06:08:46.219-08:00</updated><title type='text'>Apresentação</title><content type='html'>Olá Pessoal.... após resistir por muito e muito tempo, finalmente sucumbi ao mundo dos blogs.&lt;br /&gt;Meu principal objetivo é trocar informações sobre tecnologia, especialmente Microsoft.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7841108315404617323-7665658325748494337?l=caiodotnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://caiodotnet.blogspot.com/feeds/7665658325748494337/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://caiodotnet.blogspot.com/2009/02/long-time-ago.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/7665658325748494337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7841108315404617323/posts/default/7665658325748494337'/><link rel='alternate' type='text/html' href='http://caiodotnet.blogspot.com/2009/02/long-time-ago.html' title='Apresentação'/><author><name>Caio Azevedo</name><uri>http://www.blogger.com/profile/10472366969109256678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://4.bp.blogspot.com/_ihlCbF1y0hE/SnCbh4e6v2I/AAAAAAAAB5M/8jM9fTitlzI/S220/CIMG3955.JPG'/></author><thr:total>0</thr:total></entry></feed>
