POWERED BY CODIFICANDO.

NET

e-magazine
E D I Ç Ã O 7 N Ú M E R O 7 A N O 2

Codificando Net

2 0 0 8

Editorial
Fala Galera, espero que esse tempo sem termos publicado a revista tenha deixado vocês entusiasmados e ansiosos para que saísse uma nova edição... Depois de longos quatro meses saiu do forno a nova publicação. Como dissemos na edição anterior, está cada vez mais difícil conseguir colaboradores que consigam montar conteúdo para publicarmos. Então novamente deixamos o convite para quem tiver interesse em colaborar com a revista, fique a vontade para entrar em contato conosco e alinharmos uma maneira de publicar o material. Porém nesses meses de espera, nós não ficamos parados, nós montamos um novo projeto para difundir o conhecimento com vocês. Montamos mais uma frente, agora com gravações de PodCasts sobre tecnologias Microsoft. Já gravamos e publicamos diversos arquivos sobre Visual Studio 2008, SQL Server 2008, Windows Server 2008, e vários outros assuntos que podem ser baixados gratuitamente em www.codificandomagazine.net/podcast. Pessoal, quem tiver interesse e conhecimento para compartilhar, entre em contato conosco para fazermos algo juntos. Pensem nisso. :) Diego Nogare site@codificandomagazine.net

Equipe
Editor: Alexandre Tarifa Emerson Facunte Diego Nogare Sergio Gonçalves Fernando Borges (Capa) Colaboradores: Adriano Bertucci Adriano Luciano Bruno Gabriel Equime LMS (Unicamp) Juliana Uchôa Juliano Schimiguel Rodolfo Roim

3

A comunidade e os MVPs
Não há como falar de desenvolvimento de tecnologia, sem falar de comunidades. Na realidade, não há como falar de compartilhamento de conhecimento, sem mencionar as comunidades, não somente na indústria de tecnologia, mas em qualquer situação. As comunidades, segunda a sociologia, é um conjunto de pessoas que habitam o mesmo espaço com interesses mútuos, regidos por uma norma comum. Em se tratando de tecnologia da informação, as comunidades são fundamentais para a disseminação do conhecimento entre seus usuários, por abordar problemas do mundo real e tratar dos problemas com soluções efetivamente testadas. Empresas que produzem tecnologia, como a Microsoft, oferecem suporte aos usuários, criando portais repletos de conteúdo e tutoriais, conseguindo alcançar muitas pessoas. Entretanto, a comunidade técnica Microsoft do Brasil tem papel fundamental na disseminação desse conteúdo, levando-o para todos os cantos do Brasil, através dos seus líderes.

Independente das particularidades das comunidades e de como elas entregam a mensagem para os usuários, todas elas são de fundamental importância na disseminação do conhecimento, eu diria mais, diria que são complementares nessa função, já que elas atuam em ambientes diferentes. O conteúdo entregue ás comunidades pelos seus líderes, e pelos próprios membros, são suportados pela Microsoft, através dos portais para desenvolvedores (MSDN) e IT Pros (TechNet). Dentre o conteúdo dos portais, o profissional pode encontrar artigos técnicos produzidos pela comunidade, tutoriais, Webcasts (palestras online ministradas diariamente) e vídeos da séria Experience.

4

A comunidade e os MVPs
Outras comunidades preferem entregar seus conteúdos diversificando os meios, como é o caso da comunidade Codificando.NET, que agora está gravando entrevistas com MVPs em formato Podcast, disponibilizando-os gratuitamente no site da comunidade. Já o Mutex, comunidade do MVP Ramon Durães abriu o canal TV.Mutex para publicação de vídeos-aula, onde ele fala sobre gerenciamento do processo de desenvolvimento de software, utilizando plataforma Microsoft, além de entrevistas com outros MVPs. Já entrando no campo dos MVPs, em toda comunidade – seja ela qual for, seja o seu condomínio, o clube que você freqüenta, ou ainda a sua sala de aula – existe uma pessoa – ou algumas – que se destacam por ter um conhecimento técnico mais apurado, iniciativas de liderança. São essas pessoas que buscam a organização de eventos e encontros entre a comunidade, para que os usuários possam ter contato direto com a tecnologia. São essas pessoas, por esse papel que desempenha na comunidade técnica, de maneira voluntária que a Microsoft atribui o título de MVP (Most Valuable Professional). Trata-se de um prêmio, um reconhecimento, pelo árduo trabalho desempenhado por esses profissionais junto aos grupos de usuário, com o intuito de disseminar a tecnologia Microsoft e compartilhar voluntariamente o conhecimento detido por eles. Com isso, caro leitor, convido-os a participar das comunidades de tecnologia Microsoft, visitar os sites da Microsoft criados e mantidos especificamente para a audiência de desenvolvedores e IT Pros, e conhecer um pouco mais as atividades que estão sendo realizadas.

Referências: MSDN Webcasts http://www.microsoft.com/brasil/msdn/eventos/webcasts.mspx MSDN Experience http://www.microsoft.com/brasil/msdn/experience/default.mspx TechNet Experience http://www.microsoft.com/brasil/technet/experience/windowsserver2008/default.mspx TechNet Webcasts http://www.microsoft.com/brasil/technet/eventos/webcasts/default.mspx

Rodolfo Alves Roim é formado em Ciência da Computação, fez mestrado em Engenharia de Software na Unicamp e é pós-graduado em Administração de Empresas pela Fundação Getúlio Vargas. Trabalhou como consultor de SharePoint em uma Microsoft Gold Certified Partner por 6 anos, antes de se juntar ao time da Microsoft, executando e gerenciado projetos de implantação e configuração do SharePoint em clientes de grande porte como Itau, Grupo Votorantim, Andrade Gutierrez, entre outros. Possui a certificação Microsoft Certified Technical Specialist (074-132) Designing Portal Solution with Microsoft SharePoint Products.

5

Dados Espaciais no SQL Server 2008

Algumas das novidades mais esperadas no SQL Server 2008 são os dados espaciais, que abrangem dados Geométricos e Geográficos e ambos são voltados para trabalhar com GeoProcessamento. Os dados geométricos são utilizados para a criação de áreas pré-definidas como polígonos (com 3 ou mais pontos), retas e pontos. Já os dados geográficos são utilizados para trabalhar com um determinado ponto baseado nas coordenadas de latitude (linhas paralelas ao meridiano de greenwich, na vertical) e longitude (linhas paralelas à linha do equador, na horizontal). Exemplos que podem ser usados de um dado geográfico seria uma praça, um predio, um ponto de encontro. Já exemplos de dados geométricos são delimitações como cidades, estados, países, e até mesmo traçado de ruas ou rodovias. Para criar um exemplo utilizando os novos tipos de dados, duas tabelas precisam ser criadas, uma para estados e uma para ruas. Ambas tabelas utilizarão um tipo de dado geometry, que é para dados geométricos, e neste caso armazenarão poligonos e linhas.

CREATE TABLE tblEstado (estCodigo int identity(1,1), estNome varchar(50), estGeometrico geometry) CREATE TABLE tblRua (ruaCodigo int identity(1,1), ruaNome varchar(50), ruaGeometrico geometry)

Depois da criação destas tabelas, foram mapeadas(com pontos ficticios) os estados de São Paulo e Rio de Janeiro. Vejam as marcar que serão utilizadas para criar os dados no SQL Server 2008 na Figura 1.

INSERT INTO tblEstado(estNome, estGeometrico) values ('São Paulo', geometry::STGeomFromText ('POLYGON ((0 25,25 50, 55 48, 70 23, 85 25, 55 0, 30 23, 0 25))', 0)) INSERT INTO tblEstado(estNome, estGeometrico) values ('Rio de Janeiro', geometry::STGeomFromText ('POLYGON ((80 29,95 35, 100 40, 110 38, 105 23, 83 20, 80 29))', 0))

Figura 1. Pontos de São Paulo (amarelo) e Rio de Janeiro (vermelho).

6

Dados Espaciais no SQL Server 2008

Para inserir dados destes pontos na tabela estado, vale lembrar que o poligono necessita iniciar em um ponto e terminar neste mesmo ponto. Caso isso não aconteça o SQL Server gera um erro semelhante a este, que informa o motivo do erro. O motivo está sublinhado e em negrito. Msg 6522, Level 16, State 1, Line 1 A .NET Framework error occurred during execution of user-defined routine or aggregate "geometry": System.FormatException: 24306: The Polygon input is not valid because the start and end points of the ring are not the same. Each ring of a polygon must have the same start and end points. System.FormatException: em Microsoft.SqlServer.Types.Validator.Execute(Transition transition) em Microsoft.SqlServer.Types.Validator.EndFigure() em Microsoft.SqlServer.Types.ForwardingGeoDataSink.EndFigure() em Microsoft.SqlServer.Types.OpenGisWktReader.ParseLineStringText() em Microsoft.SqlServer.Types.OpenGisWktReader.ParsePolygonText() em Microsoft.SqlServer.Types.OpenGisWktReader.ParseTaggedText(OpenGisType type) em Microsoft.SqlServer.Types.OpenGisWktReader.Read(OpenGisType type, Int32 srid) em Microsoft.SqlServer.Types.SqlGeometry.GeometryFromText(OpenGisType type, SqlChars text, Int32 srid) em Microsoft.SqlServer.Types.SqlGeometry.STGeomFromText(SqlChars geometryTaggedText, Int32 srid)

Agora que já temos dados de estados armazenados, podemos inserir dois novos registros na tabela de ruas, que na verdade são de rodovias. Veja na Figura 2 os pontos de duas rodovias, uma que vai de São Paulo até o Rio de Janeiro e outra que vai do Rio de Janeiro até Minas Gerais. Para inserir estes dados, vamos utilizar uma linha começando em um ponto e terminando em outro, reparem que neste exemplo não é necessário iniciar e terminar no mesmo ponto.

INSERT INTO tblRua(ruaNome, ruaGeometrico) values ('São Paulo - Rio', geometry::STGeomFromText ('LINESTRING (45 5, 63 18, 82 27, 93 23)', 0)); INSERT INTO tblRua(ruaNome, ruaGeometrico) values ('Rio - Minas', geometry::STGeomFromText ('LINESTRING (93 23, 95 29, 87 38, 86 48)', 0));

Figura 2. Estrada de São Paulo, Rio de Janeiro e Minas Gerais.

7

Dados Espaciais no SQL Server 2008

Agora já existem os dados na tabela de Estados e Ruas. Se realizar um SELECT nestas duas tabelas, os dados estarão lá, mas não é tão simples de se interpretar. Os dados geométricos são armazenados como Binary. Mas para provar que os dados realmente existem e funcionam, uma consulta retornando a intersecção entre as ruas e os estados é realizado, e seus retornos provam o que existe em banco. SELECT ruaNome, estNome FROM estado e, rua r WHERE r.ruaGeometrico.STIntersects(estGeometrico) = 1 ORDER BY ruaNome Um método de intersecção baseado na rua, verifica os dados dos pontos criados pelos polígonos e retorna “1” para quando os dados são válidos. Repare que o resultado somente mostra os dados das ruas que passam pelos estados que foram criados anteriormente. ruaNome ------------------------Rio - Minas São Paulo - Rio São Paulo - Rio (3 row(s) affected) estNome ------------------------------------Rio de Janeiro São Paulo Rio de Janeiro

Com isso, é possível ver a pequena ponta o ice-berg que temos em mãos agora. Com o SQL Server 2008 será possível integrar os dados geográficos com serviços de mapas como o Virtual Earth. Assim que possível monto um artigo abordando esta integração. Por enquanto, vão estudando estas interecções. Até o próximo artigo. Diego Nogare (diego.nogare@hotmail.com) é graduado em Ciência da Computação e Pós-Graduado em Engenharia de Computação com ênfase em Desenvolvimento Web com .NET, Colaborador do Portal Linha de Código, co-Líder do grupo de usuários Codificando .NET, co-Líder dos Microsoft Student Partners (MSP) de São Paulo e Microsoft Most Valuable Professional (MVP) em SQL Server, possui certificações MCP e MCTS em SQL Server 2005, é palestrante em eventos da Microsoft, Codificando .NET e INETA BR, mantém o site: www.diegonogare.net.

8

Usabilidade Web: Diretrizes e Tendências
Atualmente, grande parte dos trabalhos de pesquisa e desenvolvimento na área de computação e informática são focados sobre aspectos funcionais de sistemas. Assim são poucos os grupos de pesquisa e empresas que atuam na área de Interface Humano-Computador (IHC) no Brasil, e que busquem por soluções de design e avaliação de interfaces, sejam interfaces desktop ou para internet. Entre os grupos de pesquisa que atuam nessa linha, podemos citar o Instituto de Computação da UNICAMP, a UFSCar, a Poli-USP, a PUC-RIO, a UFSC, a PUC-RS, etc. Entre as empresas, podemos destacar a Simples Consultoria, Usability, Mercedes Sanchez usabilidade, etc. A ênfase deste artigo será sobre a Usabilidade Web, particularmente considerando-se um dos “papas” da área, Jakob Nielsen. Podemos destacar alguns livros, entre eles: 1 – Nielsen, J.. Projetando Websites, Editora Campus, 2 – Nielsen, J., Loranger, H.. Projetando Websites com Usabilidade, Editora Campus, etc. Além destes, podemos destacar o livro “Design e Avaliação de Interfaces Humano-Computador”, de Heloisa Vieira da Rocha e Maria Cecília Calani Baranauskas, Editora da Unicamp, livro este o qual fui revisor, e trata-se de uma referência interessante :) . Ainda, no livro “Tecnologia da Informação e Educação: Pesquisas e Aplicações”, da Andross Editora, que tem como organizadores Carlos Fernando de Araújo Jr e Ismar Frango Silveira, tive um capítulo sobre “Interfaces Não-Convencionais”. Vale a pensa conferir :) . Em se tratando de usabilidade web, um dos fatores primordiais a ser considerado é a simplicidade. Conforme salienta Nielsen, “aprecie a simplicidade e concentre-se nos objetivos do usuário em vez de um design ostensivo”. De nada adianta um website ser repleto de recursos funcionais e elementos de conteúdo, se ele não é simples, e se ele não permite ao usuário atingir seu objetivo com facilidade. È importante destacar que os usuários da web são pessoas extremamente direcionadas a objetivos. Segundo Nielsen, as quatro razões para que os usuários voltem ao seu site são: (i) conteúdo de alta qualidade, (ii) atualizações constantes, (iii) tempo de download mínimo e (iv) facilidade de uso. Podemos considerar que a Web é um grande meio de comunicação, muitas empresas nasceram e se mantém no mercado, graças ao desenvolvimento da Internet e da WWW. Para melhor veicular a informação e o conteúdo disponibilizados em um portal, a escrita (e também a leitura) da informação deve se ajustar a espaços de informação nãolineares, ou seja, os designers (escritores) devem escrever utilizando hipertextos, e os usuários (leitores) devem ler sem a segurança de precisar apenas virar a página. Considerando-se o design web, as páginas devem ser dominadas pelo conteúdo de interesse do usuário. Uma questão importante é que o espaço em branco contido em uma página não é necessariamente inútil. Por exemplo, ao invés de utilizar uma linha para separar itens de conteúdo (além disso, uma linha consome processamento de máquina para sua colocação na tela), muitas vezes é melhor usar espaço em branco. Segundo Nielsen, a cada três bytes economizados em recursos, temos um ganho de um milisegundo. Uma área que está recebendo bastante destaque ultimamente, é a questão sobre acessibilidade. A acessibilidade trata dos critérios para o desenvolvimento de sistemas computacionais (seja desktop ou web) para pessoas com características especiais, como cegos, definição motora, etc. O W3C Consortium (http://www.w3.org/) possui critérios bem definidos para o desenvolvimento de aplicações web acessíveis. Atualmente, no Brasil, está ocorrendo um

9

Usabilidade Web: Diretrizes e Tendências
movimento para que os portais governamentais tornem-se web acessíveis. Não podemos ter a impressão de que um website por si só, pode suprir todos os problemas e necessidades de um usuário que por exemplo tenha uma deficiência visual; é necessário que esteja instalado um software leitor de tela, como o Virtual Vision, o DosVox, etc. A partir do momento em que um desses softwares esteja instalado, o website precisa ter sido concebido sob alguns critérios, descritos a seguir. O uso de imagens em websites é um dos grandes problemas para pessoas com deficiência visual, isso porque o software leitor não consegue ler o conteúdo de imagens, ou seja, nesse caso o designer deveria oferecer mais de uma forma de acesso ao conteúdo, não somente através da imagem, mas também através de textos, tabelas, etc. O uso do atributo ALT, na programação HTML para as imagens, é fortemente recomendado, pois o leitor de tela consegue captar a informação contida nesse atributo ALT e veicular para o usuário com a deficiência visual. Quando nos referimos à criação de links (também chamados de hiperlink ou hipertexto) para um website, alguns critérios devem ser considerados. O nome dos links não deve ser longo, além disso, deve-se evitar ao máximo usar links do tipo “CLIQUE AQUI”. Em vez de colocar o título “CLIQUE AQUI”, o usuário deveria colocar como nome do link, algo relacionado ao conteúdo pertinente àquele link (usar nome significativo). Um cuidado que precisamos ter com relação aos links é na escolha das cores. O browser (Internet Explorer, Mozilla ou outro) geralmente já possui um padrão de cores prédefinido, para links, links visitados, links pressionados. Se alterarmos o esquema de cores definido para links pelo browser, podemos dificultar a utilização do sistema pelo usuário final. Em se tratanto da escrita para a internet, devemos disponibilizar conteúdos com correção gramatical, entretanto, a apresentação do conteúdo de forma atraente é fator crucial. Segundo Nielsen, não podemos escrever na web mais do que 50% do texto que escreveríamos em uma publicação impressa. Ainda, segundo Nielsen, devemos escrever tendo em vista a facilidade de leitura (usando blocos de texto pequenos, parágrafos curtos, subtítulos, listas com bullets – marcadores, etc) e usando hipertexto para fragmentar as informações. Ainda, na escrita para web, devemos ter em mente que usuários web não tem tempo para ler muito material, neste caso, para chamar a atenção do usuário, deve-se iniciar o conteúdo de cada página pela “conclusão”, deve-se abordar uma idéia por parágrafo; e para aqueles designers que costumam utilizar o humor sem restrições, cuidado!!! Ele deve ser utilizado moderamente. Quando definimos o título de uma página, devemos ter uma atenção especial; eles são utilizados como a principal referência às páginas. O título é um conteúdo muito importante (é um microconteúdo segundo Nielsen), pois é uma das informações primárias detectadas por sistemas de busca. Ainda, segundo Nielsen, temos de quarenta a sessenta caracteres para especificar um título, além disso, páginas diferentes devem ter títulos diferentes. Precisamos ter em mente, que quando o usuário tem interesse pelo nosso site, ele pode anotá-lo em seus bookmarks, dessa forma, o título deve ter sido concebido com um nome significativo, e que tenha haver com o negócio, conteúdo ou produto oferecido no portal. Para prover a legibilidade do website, devemos utilizar cores com alto contraste entre o texto e o fundo, além disso, precisamos usar fundo com cores lisas ou padrões sutis (elementos gráficos no fundo podem interferir na leitura). Os designers precisam usar fontes de tamanho suficiente para que os usuários consigam ler, e as fontes recomendadas para leitura na web são aquelas que não possuam serifa (por exemplo, times new roman), como o arial, verdana, etc.

10

Usabilidade Web: Diretrizes e Tendências
Ainda, segundo Nielsen, devemos evitar o uso de maiúsculas, pois são dez por cento mais lentas na leitura. Quando falamos sobre o design das páginas, a homepage merece cuidado especial, pois trata-se da porta de entrada do portal. Ela deve ter um design diferente das páginas restantes e não deve ter um botão Home. Deve estar claro na home as seguintes metas: onde estou? e o que faz esse site? Ainda, a home deve possuir um (i) detalhamento com as principais áreas de conteúdo do site, (ii) um resumo das notícias e promoções do site e (iii) algum recurso de busca. Em síntese, a usabilidade tem papel fundamental no desenvolvimento de aplicações, e ganhou mais destaque com o advento da Internet e da WWW. Como o usuário da Internet é um usuário diversificado, devemos promover simplicidade, aliada à gama de recursos, conteúdos e funcionalidades disponibilizados. Além disso, como a internet oferece um espaço de informação para acesso aos conteúdos, de maneira não-linear, o esquema de navegação deve ser planejado e estruturado de maneira a tornar mais fácil o acesso do usuário, aos objetivos e tarefas propostos.

Referências Araújo Jr, C.F. de, Silveira, I.F. (2007). Tecnologia da Informação e Educação: Pesquisas e Aplicações, Andross Editora. Nielsen, J. (2000). Projetando Websites, ed. Campus. Nielsen, J., Loranger, H. (2007). Projetando Websites com Usabilidade, ed. Campus. Rocha, H.V. da, Baranauskas, M.C.C. (2003). Design e Avaliação de Interfaces Humano-Computador, ed. da Unicamp.

Juliano Schimiguel (juliano.schimiguel@unicsul.br) é Doutor em Ciência da Computação pelo Instituto de Computação da UNICAMP, Professor Adjunto I da UNICSUL – Universidade Cruzeiro do Sul, Coordenador do NUTTEC – Núcleo de Treinamento em Tecnologia da UNICSUL e atua junto ao Curso de Pós-Graduação de Engenharia de Websites com ênfase em .NET da UNICSUL

11

C# 3.0 Novidades

Propriedades Automáticas (Automatic Properties) Nesta série iremos abordar algumas novidades incluídas na versão 3.0 do Visual C#. Para iniciarmos iremos falar sobre o recurso Automatic Properties(Propriedades Automáticas). Nas versões anteriores ao Visual C# 3.0, quando precisamos criar propriedades dentro de uma classe C#, sempre precisamos declarar o método GET e o método SET, além claro de um FIELD para armazenar o valor da propriedade. Vendo como ficaria, segue um exemplo de classe usando propriedades codificadas em C# 2.0:

using System; namespace PropertiesAutomatics { public class Computador { private string _Marca; private string _Processador; private string _HD; private string _Memoria; public string Marca { get { return _Marca;} set {_Marca = value;} } public string Processador { get { return _Processador; } set { _Processador = value; } } public string HD { get { return _HD; } set { _HD = value; } } public string Memoria { get { return _Memoria; } set { _Memoria = value; } } } }

Analisando a classe ao lado, conseguimos identificar o trabalho e “dificuldade” em declarar suas propriedades utilizando para isso a estrutura do Visual C# 2.0, sendo assim a Microsoft anunciou para o Visual C# 3.0 o recurso “Automatic Properties”, – Propriedades Automáticas – recurso que permite aos desenvolvedores omitir a declaração do FIELD correspondente bem como as operações feitas pelos métodos GET e SET. Utilizando Visual C# 3.0, nossa classe fica da seguinte forma:

using System; namespace PropertiesAutomatics { public class Computador { public string Marca { get; set; } public string Processador { get; set; } public string HD { get; set; } public string Memoria { get; set; } } }

12

C# 3.0 Novidades

Como podemos notar a classe fica mais clara e com menos código, sem dúvida aumentando a produtividade do desenvolvedor. Para conferir o trabalho feito pelo Visual C# 3.0 ao inicializar os objetos da classe vamos criar um projeto e analisarmos seu código IL com o IL DASM. Usando o modelo do Visual C# 2.0(primeiro exemplo) podemos verificar que todos os FIELDS estão criados.

Já utilizando o modelo do Visual C# 3.0, podemos verificar que ele também cria os FIELDS, porém de maneira automática. Vendo este recurso sem dúvidas será um dos mais utilizados pelos desenvolvedores no Visual C# 3.0, porque alem de proporcionar mais praticidade na hora de codificar, ele deixa o código mais enxuto evitando assim erros.

Extension Methods (Métodos de Extensão) Dando continuidade a nossa série, vamos falar de um dos novos recursos com maior expressão na linguagem e no .NET 3.5, a possibilidade de criar métodos de extensão (extension methods). Extension Methods, são métodos estáticos que podemos utilizar para estender funcionalidades de classes especificas do .NET. Declarando um Extension Method Para declararmos novos métodos de extensão, primeiro precisamos saber que o funcionamento dos métodos é semelhante aos métodos estáticos, portanto, você só pode declará-los em classes estáticas. Segundo, sempre que formos declarar um extension method, vamos especificar a palavra-chave this como primeiro parâmetro do método. Vamos ver um exemplo:

13

C# 3.0 Novidades

namespace ExtensionMethods { public static class ExtMethods { //Static Method - Maneira tradicional public static int ConvertInt32Static(string s) { return Int32.Parse(s); } //Extension Method - Nova funcionalidade public static int ConvertInt32Ext(this string s) { return Int32.Parse(s); } } class Program { static void Main(string[] args) { //Valor string Valor = "9"; //Executando um extension method int ExtMethod = Valor.ConvertInt32Ext(); //Excutando um Static Method int StaticMethod = ExtMethods.ConvertInt32Static(Valor); //Exibe os valores Console.WriteLine("Extension Method: " + ExtMethod); Console.WriteLine("Static Method: " + StaticMethod); Console.ReadLine(); } } }

Podemos notar no exemplo a diferença de comportamento entre um método estático e o novo extension method. Repare que devido a declaração da palavra this antes do parâmetro do método de extensão, o .NET Framework “incorporou” o método à classe string. Podemos notar a presença mais exata do método extensivo na classe através IntelliSense, com mostrado abaixo: Agora vamos enumerar as diferenças entre os métodos estáticos (Static Methods) e os métodos de extensão (Extension Methods):

 Para declaração de métodos de extensão (Extension Methods) precisamos declarar antes do primeiro parâmetro a palavra-chave this. Já para os métodos estáticos (Static Methods) não temos a palavra.

 Quando consumimos um método de extensão, o parâmetro declarado no método é omitido, como podemos notar no primeiro exemplo. No método estático precisamos especificar o valor como parâmetro.  Métodos de Extensão só podem ser declarados em classes estáticas, o que não é exigência para métodos estáticos.

14

C# 3.0 Novidades

Trabalhando por dentro do IL

Se formos olhar e analisar o IL gerado pela aplicação mostrada no exemplo 1 temos a seguinte informação:

Abaixo temos o código IL do método de extensão o ConvertInt32Ext.

Podemos notar no código grifado de vermelho a presença do atributo no método declarando-o como extension method.

.method public hidebysig static int32 ConvertInt32Ext(string s) cil managed { .custom instance void [System.Core] System.Runtime.CompilerServices.ExtensionAttribute::.ctor() = ( 01 00 00 00 ) // Code size 12 (0xc) .maxstack 1 .locals init ([0] int32 CS$1$0000) IL_0000: nop IL_0001: ldarg.0 IL_0002: call int32 [mscorlib]System.Int32::Parse(string) IL_0007: stloc.0 IL_0008: br.s IL_000a IL_000a: ldloc.0 IL_000b: ret } // end of method ExtMethods::ConvertInt32Ext

15

C# 3.0 Novidades

E agora o código IL do método estático ConvertInt32Static. .method public hidebysig static int32 ConvertInt32Static(string s) cil managed { // Code size 12 (0xc) .maxstack 1 .locals init ([0] int32 CS$1$0000) IL_0000: nop IL_0001: ldarg.0 IL_0002: call int32 [mscorlib]System.Int32::Parse(string) IL_0007: stloc.0 IL_0008: br.s IL_000a IL_000a: ldloc.0 IL_000b: ret } // end of method ExtMethods::ConvertInt32Static

Porque usar Extension Methods? Bom, depois de tudo isso você pode estar se perguntando... Porque usar os métodos de extensão? Simples, por absoluta conveniência. Vamos explicar melhor , suponha que você tenha passado anos desenvolvendo um Framework com funções usuais no dia a dia e que você quis disponibilizar a classe para uso externo. Quando alguém quiser consumir alguma função dela o desenvolvedor necessitará conhecer o nome da classe completo para poder executar o método estático desejado, algo como no exemplo abaixo: Varivel = MeuFramework. Neste ponto teremos o IntelliSense que lhe fornecerá todas as funções disponíveis, bastando você escolher a sua e fornecer os parâmetros necessários. Varivel = MeuFramework.FuncaoDesejada(Valor); Os extension methods nasce como um novo mecanismo para invocar métodos estáticos em objetos instanciados.

Até o próximo.

Adriano Bertucci (adriano@bertucci.com.br ) é Microsoft MVP em Visual C#, vem trabalhando com Arquitetura e desenvolvimento de softwares a oito anos, sendo que .NET desde 2002. Líder do grupo Build Brasil. Atualmente trabalha como líder de desenvolvimento em soluções para plataforma Microsoft. Membro do Board INETA, responsável pelo grupos no estado de SP, vem trabalhando a três anos na disseminação da plataforma .NET, através de treinamentos, palestras e reuniões, as quais já atingiram cerca de 8000 pessoas em todo Brasil. Speaker INETA Brasil e Culminis, Colunista do Portal Linha de Código, IMaster e MSDN Brasil. Blog: www.adrianobertucci.com

16
Babilônia – 2500 A.C. Todos falam a mesma língua. Maravilha! "Vamos construir uma torre alta o suficiente para chegar aos céus". Sim, alguém teve essa idéia brilhante... Lógico que Deus não gostou: "Espertões! Assim perde toda graça de ir pro céu. Para entrar aqui tem de fazer um monte de coisas que não tem nada a ver com esse artigo! Vai cada um pra um canto e todo mundo vai falar uma língua diferente!". Desde então, é só atravessar um rio um pouco mais largo que já não entendemos mais nada do que estão falando.

Campinas – 2008 D.C. Um tal de Alan Turing veio e disse: "Faça-se o computador". Foi um pouco mais difícil que no caso de Deus. O Turing, coitado, não terminou em 7 dias com direito a descanso. Ele, como todo computeiro depois dele, teve de passar várias noites em claro até que desse certo. Depois dele veio um monte de gente, mas o problema já tinha sido criado há mais de 4500 anos: ninguém se entende, muito menos os computadores. Criaram-se vários idiomas para eles e, em geral, muito pouco do que um entende, o outro entende do mesmo jeito – quando entende alguma coisa. Independente de você estar interagindo com sistemas de um parceiro, acessando dados de um mainframe, conectando-se a aplicativos escritos em diferentes linguagens de programação ou tentando fazer o logon em sistemas múltiplos, a integração entre tecnologias heterogêneas, simultânea à redução dos custos, é atualmente uma dor de cabeça constante pra quem trabalha com TI. Depois de bater um pouco a cabeça (que já doía), descobriu-se que não havia uma maneira mágica de resover esse problema. As camadas de middleware não funcionam bem; compatibilidade, a nível de código, é inviável e é até difícil achar um adjetivo para o quão difícil seria tornar os sistemas intercambiáveis. A solução, como uma aspirina, foi óbvia. Deram para ela o nome feio de interoperabilidade. Ela segue a idéia básica do porquê da internet funcionar em várias plataformas: protocolos. Com o conhecimento comum de protocolos básicos, os diferentes softwares podem interagir consistentemente, com pouco ou nenhum conhecimento dos demais. Esse compromisso com comunicação entre programas vem sendo exigido de empresas que produzem software e a "interoperabilidade por design" vem se tornando essencial para lidar com a heterogeneidade do mercado. Afinal, descobrimos que construir pontes é mais seguro do que fazer torres.

Equipe LMS: Raul Kist, Henrique Baggio, Bruno Plantas disponíveis em http://www.codeplex.com/LMSU.

Melo

e

Daniele

dos

Santos

construtores

de

pontes.

17

Introdução ao WPF
WPF-(Windows Presentation Foundation)foi um recurso inserido na versão do framework .NET 3.0 e possibilita que o designer e o desenvolvedor possam em uma mesma tecnologia atuar em conjunto. Sendo assim se proporciona uma estabilidade para a criação de aplicações ricas em termos de funcionalidades gráficas ao usuário e como também a total da separação da interface do usuário das regras de negócio. Possue características que fazem com que se possa visualizar que a criação de interfaces mais dinâmicas em aplicações windows é possível e viável e que muitas vezes não se precisa criar algo web para ter uma aplicação que interaja com o usuário. E abaixo apresento características que são elementares para a compreensão do funcionamento interno do WPF. • Incorpora todas as funções do .NET 2.0, acrescentando às interfaces novos recursos como 3D, animações, gráficos vetoriais, reconhecimento de voz, layouts avançados, entre outros; • Leva para o desktop o conceito já existente na Web de separação entre o design e o código, permitindo que a interface seja criada por um designer e o código por um programador especializado, de maneira independente; • Usa os recursos do sistema operacional, de maneira a otimizar a performance da interface para o hardware do usuário; • Os controles podem ser personalizados a qualquer nível que se queira, por exemplo, podemos criar um botão não retangular que contém uma animação 3D, sem a necessidade de escrever código para isso. • é independente de plataforma; o mesmo código-fonte funciona tanto na web quanto para desktop e, no futuro poderá ser distribuído até em sistemas como Mac, Linux e celulares, usando o WPF/E (WPF Everywhere, que está em desenvolvimento). Para se desenvolver em WPF utilizamos XAML(eXtended Aplication Markup Language, pronuncia-se “zémel”), e um código para .NET (que pode ser escrito em qualquer linguagem compatível, VB.net, C#, etc). Em um arquivo XAML contém as diretrizes de interface, podendo ser comparado ao XHTML em relação ao ASP.NET Um arquivo em XAML funciona da seguinte forma quando se cria uma tag de abertura se há a necessidade de fechá-la.deve possuir um ROOT por conter informações relativas a todos os elementos existentes em WPF. Através de dois exemplos poderemos verificar a aplicação dos conceitos explanados acima. <grid> <label/> <button/> </grid> <grid> <label/> <button/> </grid> <Label x:Name="Label"> <Label.Content> Alô, Mundo </Label.Content> </label> Requisitos de Instalação do WPF Necessário Windows XP SP 2,Windows server 2003 ou Vista. O .NET 3.0 instalado caso você não possua o Visual Studio 2008 instalado em sua máquina Placa de vídeo de no mínimo de 128 bits para melhor visualização dos recursos gráficos a serem desenvolvidos. Funcionamento interno do WPF

Esta figura ilustra que o WPF possue acima do .net framework que são chamadas de windows base,presentation framework e presentation core e outras abaixo do .NET Framework e próximas ao sistema operacional que são chamadas de USER32.DLL,MILCORE.DLL,DIRECTX. Explicarei abaixo o funcionamento de cada uma camadas existentes no WPF:       Windows base é responsável pelo gerenciamento de serviços próximos ao sistema operacional ou seja o seu uso exclusivo do wpf. Presentation framework gerenciar os controles,suportes a estilos e templates Presentation core gerencia a criação de gráficos,animações e transformações. USER32.DLL responsável pela alocação e posicionamento de janelas e comunica os inputs realizados pelos usuários nas janelas. MILCORE.DLL responsável pela integração de código gerenciado e não gerenciado DIRECTX responsável pelo desenho da interface dos elementos gráficos da interface.

18

Introdução ao WPF
O Diagrama a seguir explanar que a maioria das classes existentes está sob o namespace system.windows e mostra as principais classes existentes no WPF. Podemos perceber que a maioria das classes do WPF herdaram de forma direta ou indireta da classe abstrata da DispatcherObject.Pois ela é uma classe abstrata que oferece as suas classes derivadas o suporte básico ao controle de concorrência e execução. Dentro do sistema de threads do WPF se usa o modelo de STA(Single Thread Affinity)onde cada thread lógica pertence a uma única thread do sistema operacional. Porque quando um aplicativo entra em execução em WPF duas threads que são usadas para o tratamento de imagens,comunicação com o aplicativo,tratamento de eventos,execução do código e estas ações necessárias para podermos ter desempenho em uma aplicação WPF. Depois de já termos explanado conceitos introdutórios de WPF.Agora vamos realizar a construção de um componente WPF para fixarmos os conceitos elementares dessa tecnologia. Criando um componente WPF Com o Visual Studio 2005 (utilizamos a versão Standard neste artigo), ou CTP do Visual Studio Orcas, o .Net Framework 3.0 e as extensões do WPF & WCF para Visual Studio 2005 instaladas, surge na tela New Project, uma outra classe de projetos, que corresponde a projetos do .Net Framework 3.0, como mostra a figura abaixo.

Fig. 1: Nova categoria de Projetos: NET Framework 3.0

19

Introdução ao WPF
Os novos tipos de projetos disponíveis são: - Windows Application (WPF): cria uma aplicação WPF; - XAML Browser Application (WPF): cria uma página web que utiliza WPF; - Custom Control Library (WPF): cria um User Control WPF; - WCF Service Library: cria um serviço WCF. Como queremos criar um controle WPF, precisamos selecionar o tipo de projeto “Custom Control Library (WPF)”. Ao criarmos o projeto, temos que estender uma área para construir nosso User Control. Estenda a área, adicione 2 TextBoxes e um Button de forma que a tela fique parecida com a tela abaixo. Caso você prefira, utilize o código XAML abaixo, que representa o layout do nosso User Control. [XAML] <UserControl x:Class="LibraryWPFDemo.UserControl1" xmlns="http://schemas.microsoft.com/ winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/ winfx/2006/xaml" Height="224" Width="297"> <Grid> <TextBox Height="26" Margin="32,33,52,0" Name="textBox1" VerticalAlignment="Top"> </TextBox> <Button Height="23" Margin="32,67,53,0" Name="button1" VerticalAlignment="Top">Button</Button> <TextBox Margin="33,95,54,51" Name="textBox2" Text="Exemplo WPF Dot Net Raptors"></TextBox> </Grid> </UserControl>

Fig. 2: Layout do User Control

Para nosso User Control ter alguma funcionalidade, precisamos criar um Event Handler para o botão. A idéia é que, ao clicarmos no botão, o texto do textBox2 seja alterado para o seu próprio texto mais o texto que estiver digitado no textBox1. Vamos então criar o método que irá tratar esse evento no Code Behind do User Control (que é o arquivo de extensão .cs ou .vb que fica abaixo do arquivo XAML na tela Solution Explorer):

[VB] Private Sub cliqueDoBotao(ByVal sender As System.Object, ByVal e As System.EventArgs) TextBox2.Text = TextBox2.Text + " " + TextBox1.Text End Sub

[C#] public void cliqueDoBotao(object sender, EventArgs e) { textBox2.Text = textBox2.Text + " " + textBox1.Text; }

20

Introdução ao WPF

Para completar nosso User Control, precisamos associar o evento Click do button1 com o Event Handler criado. Para isso, modificamos a linha que representa o botão no código XAML, adicionando a instrução de tratamento do Click: [XAML] <Button Height="23" Margin="32,67,53,0" Name="button1" VerticalAlignment="Top" Click="cliqueDoBotao">Button</Button> Feito isso, temos nosso User Control pronto. Vamos partir agora para a criação da nossa Windows Forms Application que conterá esse User Control criado. Conclusão Este artigo teve como objetivo ilustrar que o WPF é uma tecnologia que desde que foi criada rompeu com paradigmas significativos na criação de aplicações windows. Pois sabemos que com o uso desta tecnologia podemos realizar a criação de aplicações dinâmicas e interativas sem a necessidade de ferramentas web para tal feito. Porque o XAML é a sintaxe básica usada nessa tecnologia e juntamente com isso podemos intercambiar o uso do WPF em outras tecnologias como por exemplo:WPF no Microsoft Blend. Existem muitas pessoas que ainda confundem o Silverlight com o WPF.Porém devemos que o WPF é uma tecnologia que visa melhorar e aprimorar o layout e a inserção de vídeos em aplicações windows e o Silverlight é uma tecnologia que seria um mini-WPF que voltado para o padrão animação vetorial e é a proxima geração de conteudo multimídia e interatividade para internet. Sua instalação é feita através de um pequeno plug-in com menos de 2 MB feita sob demanda, ou seja, não se assuste se de repente aquele seu site favorito que você acessa diariamente de repente solicitar para que seja realizada a instalação deste plug-in para que você possa aproveitar todo o conteúdo multimídia disponível. Espero que este artigo seja útil a vocês para poderem experimentar e inovar com o WPF. Juliana Prado Uchôa é MSP (Microsoft Student Partner) e Líder do grupo CHANNEL TI

RECORDAR É VIVER!

22

O que é uma Célula Acadêmica da Microsoft?
Atualmente, várias empresas na área de Tecnologia da Informação disponibilizam programas e oportunidades para estreitar o relacionamento com a comunidade acadêmica, especialmente os alunos. Podemos citar exemplos da Microsoft, que possui diversos programas acadêmicos como “Células Acadêmicas e Imagine Cup”, cujo o objetivo é difundir as tecnologias. No nosso caso, Células Acadêmicas Microsoft, os alunos montam grupos de estudo, criam um cronograma e realizam reuniões semanais/ quinzenais para estudo, discussão e desenvolvimento de projetos, focando as tecnologias Microsoft. A Microsoft disponibiliza materiais online, para que os alunos possam ter acesso para seus estudos. Na célula, geralmente temos um líder, um vice-lider e vários outros membros chamados de flutuantes. Com iniciativas semelhantes à uma Célula Acadêmica Microsoft, os alunos tem o seu conhecimento técnico incrementado, contribuindo com a formação que eles possuem no curso de graduação regular. Através da iniciativa de uma Célula Acadêmica, os alunos podem participar do Imagine Cup, tendo a possibilidade inclusive de participar da final mundial. Uma das grandes possibilidades para os alunos que participam de Células Acadêmicas Microsoft, é que ser tornem MSP’s – Microsoft Student Partner. Os MSP’s tem como finalidade difundir a tecnologia Microsoft através de eventos, palestras, semanas de curso, nas instituições de ensino. Já os MVP’s são aqueles profissionais que são reconhecidos, confiáveis e acessíveis, com experiência em alguma tecnologia Microsoft e que participam ativamente em comunidades relacionadas, afim de compartilhar seus conhecimentos com outros membros. Este título é atribuído a estes profissionais geralmente por merecimento, resultado de seus conhecimentos e de sua participação positiva na comunidade. Ainda, as Células Acadêmicas Microsoft tratam-se de um grupo de estudos com material oferecido pela própria Microsoft, que possibilita a muitos jovens em toda a América Latina um melhor preparo para o mercado de trabalho, colocando-os em vantagem competitiva. Este artigo demonstra a importância da inserção de grupos de estudo avançados nas universidades, particularmente com ênfase nas Células Acadêmicas Microsoft, além disso, descrevemos as atividades da atual Célula Acadêmica na área de Dev – desenvolvimento, do campus Anália Franco da Unicsul. Metodologia Através de um workshop promovido na universidade onde fazemos graduação (UNICSUL), tivemos conhecimento deste projeto da Microsoft e nos interessamos bastante; pois atualmente os cursos preparatórios para Certificação Microsoft que existem, são investimentos em uma faixa de valores que não são acessíveis a todos os universitários, e, dentre outros motivos, iniciamos o desenvolvimento desta Célula Acadêmica. A ênfase de nossa Célula Acadêmica Microsoft foi em Dev - desenvolvimento, também existe a possibilidade de montar Células nas áreas de Infra – infraestrutura, XNA – voltada para jogos, etc. Como nossos horários eram escassos, devido á carga de trabalho, atividade de estágio, e claro, os estudos acadêmicos regulares, as reuniões geralmente acontecem aos finais de semana, de sábados a tarde, na própria universidade, e contando com o apoio da equipe (professores e funcionários), os quais nos proporcionam um ambiente favorável, com máquinas de boa qualidade e com as ferramentas necessárias previamente instaladas. Nossa base de estudos foi um projeto que a própria universidade propôs, como atividade de uma de nossas disciplinas, para uma aplicação voltada para um e-commerce. Então, com o auxilio de um dos integrantes da Célula, que por sua vez é um profissional certificado Microsoft, usamos o material que é disponibilizado no portal das Células Academicas. A seguir, na Figura 1, temos uma representação do portal que a Célula Acadêmica tem acesso.

23

O que é uma Célula Acadêmica da Microsoft?
Assim que os membros da célula tornaram -ativa- a Célula Acadêmica, os mesmos começaram a participar ativamente da comunidade, e, além disso, agregamos o objetivo principal da célula (estudos), com o objetivo do projeto, e assim desenvolvemos a aplicação web proposta no projeto, o que nos proporcionou uma ótima noção tanto na linguagem de programação, como na lógica matemática, possibilitando entender o processo de criação, manutenção e identificação de necessidades que um projeto possui, para que possa ser concebido. Pudemos desenvolver as aplicações propostas, usando-se a ferramenta de desenvolvimento Visual Studio, na qual a universidade, sendo parceira da Microsoft no projeto MSDN AA, disponibilizou-nos, tanto em um de seus laboratórios, como fornecendo licenças dos mesmos para instalarmos em nossas máquinas pessoais. Ainda, contamos durante o processo de estudos, com os fóruns e artigos do portal MSDN, que é um dos principais portais sobre tecnologias Microsoft existentes na América Latina, com nossas dúvidas sendo respondidas e reportadas por profissionais qualificados, certificados, por MSP’s e MVP’s da Microsoft, ou mesmo por outros usuários com nível de conhecimentos diferenciados. A célula, inicialmente possuía 6 membros, dentre alunos de 2 cursos de Tecnologia da universidade (Análise e Desenvolvimento de Sistemas e também Sistemas para Internet), além da participação e o auxílio de professores e de MSP da Microsoft. Resultados Depois de cerca de 3 meses de reuniões, por volta de 8 reuniões, nosso projeto se concluiu, de forma que obedecesse todos os requisitos que foram solicitados pelos professores responsáveis pela matéria e exigiram, todos sendo criados com o máximo que pudermos aproveitar das tecnologias da plataforma dotNet, e conseguimos alcançar o conceito máximo nas disciplinas. Discussão Com base nesta experiência, pudemos chegar à conclusão de que conhecimento e crescimento técnico e profissional, depende apenas da vontade dos alunos de irem atrás destas oportunidades, os meios existem e são acessíveis, apenas esperando serem alcançados, e esta conclusão foi confirmada depois que dois membros da Célula conseguiram estágio na área de desenvolvimento, para trabalharem em projetos desenvolvidos com tecnologia .Net. Conclusões Esperamos que com este artigo, tenhamos deixado claro e mais popular as funções das Células Acadêmicas Microsoft, e os benefícios que elas podem nos proporcionar. Bruno Gabriel (brunofgabriel@hotmail.com) está cursando Tecnólogo em Análise e Desenvolvimento de Sistemas, Líder de Célula Acadêmica da Microsoft com ênfase em Desenvolvimento .Net, Desenvolvedor ASP e .Net para aplicações web e windows.

24

Visão geral do WCF – (Windows Communication Foundation)

Definição: O Windows Communication Foundation, mais conhecido como WCF, representa um conjunto de tecnologias .NET para construir e executar sistemas conectados, conforme definição da própria Microsoft. É uma infraestrutura de comuniçação de aplicação que foi construída com base na arquitetura dos Web Services, sendo projetada para construir aplicações distribuídas no modelo orientado a serviço e sendo apresentada também como a plataforma da Microsoft para o SOA (Service Oriented Architecture). O WCF consolida um pouco mais a evolução da programação como temos vivido nos últimos tempos, onde antes utilizamos várias tecnologias distintas para satisfazer diferentes cenários de aplicações distribuídas como COM+, Remoting, WSE (Web Service Enhancemnts), Web Service e Messaging, sendo que o WCF visa consolidar todas estas tecnologias, se apresentando como a evolução destas, afim de tratar cenários de aplicações distribuídas de forma mais simples, mais objetiva e em um modelo unificado. A vantagem disto tudo, é que cada vez mais gastaremos menos tempo com as decisões de implementação técnica em si e aplicaremos mais tempo na solução de business. Porém, isto não indica que não precisamos mais definir uma solução técnica, significa apenas que com um modelo unficado ficará mais facil trabalhar na implementação da solução. Apenas uma consideração: a definição para os conceitos de design do SOA é independente de tecnologia e visa criar serviços direcionados no negócio, permitindo a utilização destes serviços sem qualquer conhecimento da implementação destes. Em resumo, não basta apenas eu publicar um web service na internet ou intranet para dizer que tenho uma aplicação totalmente aderente ao SOA, já que esta arquitetura é muito mais abragente do que parece, portanto tenha cuidado.

Arquitetura Geral: A concepção da solução de negocio dentro do WCF se encontra na forma de serviços, onde a estrutura destes serviços é composta de : Host (Service Host): Fornece o ambiente onde o serviço WCF é executado. Contrato (Service Contract): É uma interface que define as operações definindo como o processo de comunicação troca mensagens. Classes do .NET Framework: Permite usar alguns atributos do WCF para determinar características do serviço como sessões, tempo de vida, entre outros. As aplicações clientes enviam mensagens e recebem respostas através de endpoints que conectam nos serviços WCF, normalmente o cliente usa um objeto proxy que esconde a complexidade do canal de comunicação e faz o serviço remoto parecer um componente local. Este tipo de recurso sempre foi muito utilizado na chamada dos XML Web Services do .NET.

25

Visão geral do WCF – (Windows Communication Foundation)

O serviço do WCF utiliza um objeto dispatcher para converter as mensagens recebidas do cliente em chamadas de métodos do serviço. Um serviço WCF pode esperar por mensagens (chamadas) em um ou mais endpoints. Para ficar mais simples segue algumas definições: Um serviço WCF é um programa que expoem diversos endpoints. Cada endpoint é uma forma de comunicação deste serviço com o cliente. Um cliente é um programa que troca mensagens com um ou mais endpoints de serviços WCF.

Um serviço WCF pode ter mais de um endpoint onde, cada um destes endpoints são compostos de três elementos: Address, Binding e Contract. Onde:    Address: Representa o endereço de rede onde o serviço reside, exemplo: http://localhost:8001/PostalService Binding: Define como o serviço se comunica com o mundo, incluindo qual o transporte de comunicação (TCP, HTTP, etc), enconding (Texto, binário) e segurança (SSL, SOAP security). Contract: Especifica o que o serviço comunica e basicamente é um coleção de mensagens organizadas em operações, ou para ficar mais simples, a interface do serviço.

Portanto imaginem um cenário simplista onde eu tenha que atender a uma necessidade específica de negócio (por exemplo, cálculo de frete, códigos postais, fechamento de pedido de compra, etc) e que a solução será consumida por aplicações clientes síncrona através da WEB e de aplicações assincronas em um ambiente de rede local. Para a solução, poderíamos criar um único serviço WCF que expoem operações para tratar a solução de negócio sem me preocupar fortemente com as necessidades de comunicação das aplicações clientes. Porém na hora de expor este serviço, eu poderia simplesmente criar um endpoint que atenderia requisições em um endereço de internet, através do protocolo HTTP, usando SSL e utilizando minha interface do serviço como contrato. Para as aplicações clientes assincronas eu poderia utilizar um endereço na rede local, usando um binding MSMQ e usando a mesma interface do serviço como contrato.

26

Visão geral do WCF – (Windows Communication Foundation)

Desta forma a implementação do serviço poderia ser feita sem se preocupar exclusivamente com o cenário de comunicação onde ele será utilizado. É claro que o conhecimento dos cenários é importante no momento da implentação, pois algumas questões técnicas podem afetar a forma de distribuição do serviço, como por exemplo os tipos de dados retornados pelas operações, os quais podem ter limitações em alguns protocolos utilizados no binding do endpoint, mas de fato a relevância da comunicação em relação a complexidade de implementação cai bastante. Conclusão Como vimos, a proposta do WCF é bem simplista, muito objetiva e aparentemente efetiva: unificar em um modelo a forma como construímos as soluções de aplicações distribuídas. Vejo que o grande destaque, esta na forma como podemos expor um mesmo serviço de formas diferentes, sem ter que reescreve-los com convenções específicas. Isto irá permitir que os desenvolvedores utilizem a tecnologia da melhor forma possível. A curva de aprendizado para a construção deste tipo de aplicação deve melhorar também, já que não será mais necessário aprender diversas tecnologias para conseguir criar as soluções. Outro ponto a citar é a melhora na produtividade, pois o WCF simplificou muitas das atividades de desenvolvimento para os serviços.

Adriano Luciano Candido (adriano.luciano@gmail.com) é Pós-graduado no MBA em Gestão Projetos da FGV, certificado nos títulos da Microsoft em MCPD, MCDBA, MCSD .NET, MCSD, MCAD, MCSA . Instrutor oficial Microsoft e consultor especializado em tecnologia Microsoft e em Gestão de Projeto, atuando a mais de 10 anos no mercado de tecnologia. Palestrante e professor de pós-graduação em diversas universidades de São Paulo.

2 7 Novos datatypes para Data e Hora – SQL Server 2008
Continuando com as novidades do SQL Server 2008, este artigo apresentará os novos tipos de dados para controlar Datas e Horas. Estes novos tipos integram as novidades do SQL Server 2008 e trazem um ganho de performance, já que quanto menos dados desnecessários forem armazenados, mais rápidos os dados retornam para quem os solicitou. Para se ter uma idéia de onde se pode utilizar estes novos tipos de dados, imagine o seguinte cenário em que é necessário armazenar o tempo de uma determinada quantidade de ações em seu sistema. Na versão 2005 não é possível armazenar um datatype de Hora, o mais próximo seria Smalldatetime que armazena a data e a hora sem os milisegundos. Neste cenário a Data seria desnecessária, porque o objetivo é o armazenamento das horas. Outro cenário, agora armazenando somente a Data, seria na Data de Nascimento de um cliente no qual a hora é desnecessária e estaria ocupando espaço nas páginas do banco de dados. Fazendo um breve comparativo entre os datatypes existentes na versão 2005 e 2008, pode-se ver que surgiram 4 novos tipos na nova versão: Datetime2, Datetimeoffset, Date e por fim Time. E foram mantidos os tipos já existentes na versão 2005 como Smalldatetime, Datetime e Timestamp. Consultando o Books On-Line, é possível chegar a estas descrições para cada ítem: Datetime2: É parecido com o Datetime existente, e pode ser utilizado como um complemento a ele. Datetimeoffset: Representa uma data e hora completa (24Hs) e os dados de fuso-horário. Date: Define a representação de uma data. Time: Representa as horas no formato de 24Hs e sem utilizar fuso-horário. SELECT name FROM sys.systypes WHERE name like '%date%' or name like '%time%' name -------------datetime smalldatetime timestamp Abrindo o SQL Server Management Studio é possível consultar o Database Engine e ver os resultados dos datatypes existentes para Data e Hora. Veja na listagem 1 a consulta e os resultados na versão 2005, e na listagem 2 a mesma consulta e os novos resultados Listagem 1. Consulta e resultado na versão 2005. quando é executado na versão 2008.

SELECT name FROM sys.systypes WHERE name like '%date%' or name like '%time%' name -------------date datetime datetime2 datetimeoffset smalldatetime time timestamp Listagem 2. Consulta e resultado na versão 2008.

2 8 Novos datatypes para Data e Hora – SQL Server 2008
Esta busca consulta todos os DataTypes existentes no SQL Server, veja que na Listagem 2 (2008) aparecem todos os tipos existentes no 2005 e mais os novos tipos do 2008. Agora que já temos os novos tipos de dados do SQL Server 2008, podemos criar uma tabela com esses dados e inserir uma linha e ver como estes dados são armazenados. Acompanhe na Listagem 3 esta criação. CREATE TABLE tbNovosTipos(campoDate Date, campoTime Time, campoOffSet Datetimeoffset, campoDatetime2 Datetime2) INSERT INTO tbNovosTipos VALUES (getDate(), getDate(), getDate(), getDate()) campoDate campoTime campoDatetime2 ---------- ---------------------------------2008-07-09 09:58:28.5700000 2008-07-09 09:58:28.57 campoOffSet ---------------------------------2008-07-09 09:58:28.5700000 +00:00 Listagem 3. Criação da tabela, inserção de dados e resultado. Para provar o desempenho, vamos analisar o resultado utilizando o DBCC ShowContig, já apresentado anteriormente em outra edição da revista. (Veja a edição de Agosto/2007). Primeiro será criado todo o processo no SQL Server 2005 e depois no 2008. A listagem 4 contém os códigos para a versão 2005. create table tbData (data datetime) create table tbhora (hora datetime) insert into tbData values ('2008-01-01') insert into tbHora values ('19:00:00') go 450 select top 1 * from tbData select top 1 * from tbHora dbcc showcontig data ----------------------2008-08-07 00:00:00.000 hora ----------------------1900-01-01 12:28:00.000 --Veja que neste exemplo de código em SQL Server 2008, os novos tipos de dados são armazenados conforme descritos anteriormente. A primeira coluna armazena somente a data, a segunda somente a hora, a terceira e quarta armazenam respectivamente a data e hora completa com e sem fuso-horário.

Listagem 4. Criação de tabela, inserção de dados e resultado.

2 9 Novos datatypes para Data e Hora – SQL Server 2008

DBCC SHOWCONTIG scanning 'tbData' table... Table: 'tbData' (2089058478); index ID: 0, database ID: 6 TABLE level scan performed. - Pages Scanned................................: 1 - Extents Scanned..............................: 1 - Extent Switches..............................: 0 - Avg. Pages per Extent........................: 1.0 - Scan Density [Best Count:Actual Count].......: 100.00% [1:1] - Extent Scan Fragmentation ...................: 0.00% - Avg. Bytes Free per Page.....................: 446.0 - Avg. Page Density (full).....................: 94.49% DBCC SHOWCONTIG scanning 'tbhora' table... Table: 'tbhora' (2105058535); index ID: 0, database ID: 6 TABLE level scan performed. - Pages Scanned................................: 1 - Extents Scanned..............................: 1 - Extent Switches..............................: 0 - Avg. Pages per Extent........................: 1.0 - Scan Density [Best Count:Actual Count].......: 100.00% [1:1] - Extent Scan Fragmentation ...................: 0.00% - Avg. Bytes Free per Page.....................: 446.0 - Avg. Page Density (full).....................: 94.49% Listagem 4. Continuação... create table tbData (data date) create table tbhora (hora time) insert into tbData values ('2008-01-01') insert into tbHora values ('19:00:00') go 450 select top 1 * from tbData select top 1 * from tbHora dbcc showcontig data ---------2008-01-01 hora ---------------19:00:00.0000000

Na listagem 4 foram criadas duas tabelas, uma chamada tbData e outra tbHora, ambas com um único campo do tipo Datetime. Após a criação foram inseridas 450 linhas em cada tabela, na tabela tbData foi inserida a data 01/01/2008 e na tabela tbHora foi inserida a hora 19h00. Veja que em ambas tabelas o resultado apresenta data e hora no campo, e não é esse nosso objetivo, em cada tabela deveria ter sido armazenado um tipo de dado específico. Agora, trabalhando com o SQL Server 2008, vamos ver o quanto é possível ganhar de espaço com a utilização dos dados específicos para cada tipo de armazenamento. Acompanhe o código na listagem 5.

Listagem 5. Criação de tabela, inserção de dados e resultado.

3 0 Novos datatypes para Data e Hora – SQL Server 2008

DBCC SHOWCONTIG scanning 'tbhora' table... Table: 'tbhora' (5575058); index ID: 0, database TABLE level scan performed. - Pages Scanned................................: - Extents Scanned..............................: - Extent Switches..............................: - Avg. Pages per Extent........................: - Scan Density [Best Count:Actual Count].......: - Extent Scan Fragmentation ...................: - Avg. Bytes Free per Page.....................: - Avg. Page Density (full).....................:

ID: 6 1 1 0 1.0 100.00% [1:1] 0.00% 1796.0 77.81%

DBCC SHOWCONTIG scanning 'tbData' table... Table: 'tbData' (2137058649); index ID: 0, database ID: 6 TABLE level scan performed. - Pages Scanned................................: 1 - Extents Scanned..............................: 1 - Extent Switches..............................: 0 - Avg. Pages per Extent........................: 1.0 - Scan Density [Best Count:Actual Count].......: 100.00% [1:1] - Extent Scan Fragmentation ...................: 0.00% - Avg. Bytes Free per Page.....................: 2696.0 - Avg. Page Density (full).....................: 66.69% Listagem 5. Continuação...

É possível concluir que, quando utilizamos o tipo de dado correto, diminuímos aproximadamente 17% na tabela tbHora e na tabela tbHora 28%, analisando a densidade média de cada página. E como sabemos que no SQL Server o custo é calculado com base na quantidade de páginas retornadas, utilizar o tipo de dado correto nos faz ganhar dinheiro. rs Até o próximo artigo. Diego Nogare (diego.nogare@hotmail.com) é graduado em Ciência da Computação e Pós-Graduado em Engenharia de Computação com ênfase em Desenvolvimento Web com .NET, Colaborador do Portal Linha de Código, co-Líder do grupo de usuários Codificando .NET, co-Líder dos Microsoft Student Partners (MSP) de São Paulo e Microsoft Most Valuable Professional (MVP) em SQL Server, possui certificações MCP e MCTS em SQL Server 2005, é palestrante em eventos da Microsoft, Codificando .NET e INETA BR, mantém o site: www.diegonogare.net.

32

Cinema
Bons filmes irão tirá-lo da frente do computador neste mágico mês de julho. Nosso crítico de cinema Emerson Facunte sacrificou-se por vocês e foi assistir aos filmes recomendados pela “Crítica VIP de Cinema”. Com vocês, as análises de nosso crítico. Boa leitura, ou melhor, bons filmes. Hancock Para quem procura diversão, Hancock é a melhor pedida. Will Smith faz o papel de um superherói (ou antiherói) totalmente depressivo, bêbado e atrapalhado. A população fica revoltada com suas últimas ações e a imprensa resolve dar um empurrãozinho pra baixo. Claro que pra ficar bacana, surge uma boa alma para dar uma força ao herói falastrão. Boas cenas de ação, comédia e também um pouco de drama, são os ingredientes desse divertido filme.

Homem de Ferro Se você ainda não assistiu no cinema, ainda dá tempo. Não dá pra ficar esperando esta jóia rara sair em DVD para você assistir no conforte de seu lar. Corra para o cinema e aproveite cada minuto desse incansável filme de ação. Tony Stark, o famoso cientista e engenheiro de automação, aproveita a boa vida de playboy curtindo com seus carrões (palmas para o Audi R8) e belas mulheres. O filme conta a história do “nascimento” do Homem de Ferro. Com piadas inteligentes, excelentes locações e muita ação, fazem desta primeira e plausível adaptação dos quadrinhos, um dos melhores filmes da família Marvel.

33

Cinema
Batman O melhor Batman (filme) de todos os tempos, merecia um Curinga a altura. Para mim, o filme deveria se chamar “Curinga, o vilão das multidões” . Falar que Heath Ledger interpretou brilhantemente o papel do Coringa, seria óbvio demais por conta de toda a exaltação da imprensa internacional. O Curinga tomou conta do corpo e da alma de Ledger, com sarcasmo hilário e competência de um grande vilão, o vilão das multidões. O filme não é só o Curinga, acreditem, tem também o excelente promotor Harvey Dent, interpretado por Aaron Eckhart, aclamado e invejado pelo herói do filme, Batman.

E por falar em Batman (sim, podemos falar um pouquinho dele, embora seja o “coadjuvante”), o ator Christian Bale fez direitinho a lição de casa, assumindo seu lugar no filme. Com algumas boas tiradas, conduzidas pelo fiel Mordomo Alfred (o consagrado Michael Cane) e também Morgan Freeman, seu designer bélico, Batman comanda o ataque aos vilões do filme com maestria e muita displicência.

Bem jovens mancebos da mancebolândia: “mágica do lápis” para os “larápios de colarinho branco”. Boa diversão. Emerson Facunte

34

Blogs, Foruns e Links

Blogs:
Alexandre Tarifa: http://blogs.vstsrocks.com.br/alexandretarifa/default.aspx Emerson Facunte: http://www.facunte.com.br Diego Nogare: http://www.diegonogare.net Time do SQL Brasil: http://blogs.technet.com/sqlserverbrasil/default.aspx

Fórum (Endereços para Entrar no Grupo):
Codificando .NET: codificandodotnet-subscribe@yahoogrupos.com.br XNA-BR: xna-br-subscribe@yahoogrupos.com.br

Sites Recomendados:
Visual Studio 2008: http://msdn2.microsoft.com/en-us/vstudio/aa700830.aspx SQL Server CTP: http://www.microsoft.com/sqlserver/2008/en/us/trial-software.aspx

PodCast
Codificando .NET: http://www.codificandomagazine.net/PodCast

35
Dynamic Data Controls

.Close()
Uma novidade muito boa do service Pack 1 do Asp.Net 3.5 são os Dynamic Data Controls. Resumindo em pouquíssimas palavras, é um recurso utiliza a modelagem do LINQ to SQL ou LINQ to Entities para geração automática de uma aplicação baseada em dados (cadastros, sistemas simples, etc). O grande pronto é que é uma tecnologia muito fácil de ser reutilizada e customizada. Basta somente alterar uma linha no Global.aspx (figura 1) e toda implementação está pronta.

É possível customizar todos os controles utilizados, por exemplo, alterar um controle de calendário simples do ASP.Net para um controle utilizando AJAX, etc. As páginas também são customizáveis e pode ser customizada individualmente para uma tabela específica. Veja muito mais em: http://www.asp.net/learn/3.5-SP1/

Alexandre Tarifa é MVP Visual Developer Visual Basic .Net, bacharel/pós graduado em Ciência da Computação, trabalha em diversos projetos. Tem participado de diversos projetos que começam como Web e terminam com Smart Client. Especialista .Net e Líder de Projetos na ITGROUP (www.itgroup.com.br), editor da revista Codificando e-Magazine e fanático torcedor do São Paulo Futebol Clube. Blog: www.vstsrocks.com.br/alexandretarifa.

Sign up to vote on this title
UsefulNot useful