sexta-feira, 26 de dezembro de 2008

SQL Injection

Na edição 57 da .NET Magazine, na coluna Quick Update eu falei um pouco sobre SQL Injection. Como esse é um dos grandes problemas de segurança em aplicações Web, vou falar sobre isso aqui no Blog também.


A melhor forma de entender o mau que o SQL Injection causa, é na prática. Sendo assim, crie um database de testes no seu SQL Server, e adicione uma tabela chamada Usuarios nele, como mostra o script SQL abaixo. (Em hipótese alguma faça esse exemplo em uma aplicação em Produção).


Em seguida inclua um Usuário qualquer nesta tabela para fazermos um teste de Login. Agora abra o Visual Studio, crie um WebSite qualquer e na página Default.aspx desenhe uma interface de Login simples, como mostra a figura abaixo.



No evento Click do Button, inclua o código que você encontra logo abaixo. Possivelmente você terá que fazer alguns ajustes, principalmente quanto à ConnectionString e os nomes dos controles.


Veja que este é um código bastante simples, e irá executar um comando SELECT para verificar a existência do usuário através do Login e Senha que foram informados nos TextBoxes. O resultado do comando é verificado e uma mensagem é exibida. Faça um teste simples para verificar se este código está funcionando. Veja se está autenticando corretamente os usuários cadastrados.

Agora que você sabe que este trecho de código funciona, como mostra a figura abaixo, informe no campo Login a seguinte string: ' or 1=1 -- e clique em Login.




Isso é SQL Injection! A forma como criamos o comando SELECT, através de concatenação de strings, permite este tipo de aberração. O comando que é executado neste caso é o seguinte:

Veja que esta pequena string informada no lugar do nome do usuário transforma completamente o comando SELECT. Esta parte da string: ' or 1=1 torna a condição WHERE sempre verdadeira, e os dois sinais de subtração ( -- ) tornam o restante do comando um simples comentário. O resultado é que temos um invasor autenticado no sistema.

Este é um exemplo simples do que é o SQL Injection, e do grande mal que ele pode causar nas suas aplicações. A solução para este problema é bastante simples, temos que fazer uso dos Paramêtros! Veja na Listagem abaixo como deve ficar o código de autenticação com os parâmetros.

Refaça os testes com o uso dos parâmetros, você verá que neste caso estamos salvos do SQL Injection.

Grande Abraço!

sábado, 13 de dezembro de 2008

NHibernate e ActiveWriter

Uma ferramenta Open Source de Mapeamento Objeto/Relacional (O/RM) muito popular no mundo JAVA é o Hibernate. Para .NET o pessoal do Hibernate criou o NHibernate, que faz o mapeamento entre classes modeladas no .NET com tabelas de bancos de dados relacionais.

São dois grandes benefícios que temos ao usar o NHibernate: 1. Com ele não precisamos criar os comandos SQL, pois eles são criados em tempo de execução. 2. Temos a possibilidade de criar aplicações que sejam compatíveis com N bancos de dados.

O problema do NHibernate é o aumento significativo de trabalho que temos, pois além da modelagem das classes, é necessário criar um arquivo XML de mapeamento para cada classe X tabela.

O ADO.NET Entity Framework (EF) da Microsoft veio esse ano como principal concorrente do NHibernate, e com o grande diferencial da produtividade, já que os mapeamentos podem ser feitos por uma ferramenta visual.

O problema é que o EF tem se mostrado uma ferramenta “não-madura”, basta ver as cartas de sugestões de melhorias, voto de desconfiança (
http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/), anuncio de nova versão com .NET 4.0, e o prematuro “falecimento” do LINQ to SQL. Tudo isso tem pesado muito na hora de escolher que ferramenta de O/RM utilizar.

Um ponto positivo para o NHibernate são algumas ferramentas “satélites” desenvolvidas pela própria comunidade. Uma que merece destaque é o ActiveWriter (
http://using.castleproject.org/display/Contrib/ActiveWriter).

O ActiveWriter é uma ferramenta que ao instalada permite que façamos a criação das classes e arquivos XML de mapeamento para NHibernate de forma visual. Além disso ele têm a capacidade de gerar as classes apenas arrastando as tabelas da Server Explorer, assim como fazemos com os Datasets tipados.

Se você está a procura de uma ferramenta de mapeamento, leve em conta o NHibernate com o ActiveWriter, você não vai se arrepender. Em breve será publicado um artigo meu na .NET Magazine explicando detalhadamente como utilizar o ActiveWriter com o NHibernate.

Grande Abraço!

terça-feira, 11 de novembro de 2008

E o LINQ to SQL ??

A noticia do momento é o futuro do LINQ to SQL, ou a falta de futuro dele (rsrsrs). Dia 29 de outubro foi anunciado no Blog do time de desenvolvimento do ADO.NET, que a Microsoft reconhece que o LINQ to SQL e o Entity Framework são tecnologias compatíveis, e que vai dar maior atenção ao Entity Framework.

Leia na integra:

Esse é o anuncio oficial, mas muita gente já interpreta isso como o fim o LINQ to SQL. Eu ainda vou esperar para ver o que acontece. Mas pra você ter uma idéia do alvoroço, é só ler os comentários do post acima, ou alguns outros Blogs que geraram polemica em cima disso:


Desde quando surgiram os primeiros releases do Entity Framework, surgiu também uma dúvida sobre o futuro do LINQ to SQL. Afinal, porque a Microsoft iria manter duas ferramentas que praticamente fazem a mesma coisa?

O problema é que o LINQ to SQL veio em release final no .NET 3.5/VS2008 (RTM - Pronto para o Mercado) e muita gente comprou a idéia, inclusive eu! Aplicações foram feitas, livros foram publicados, aulas foram dadas, artigos foram escritos, etc, etc.

O LINQ to SQL apareceu no Visual Studio 2008 praticamente como o "porta-voz" da linguagem LINQ. A maioria dos artigos que falava a respeito de LINQ usou o LINQ to SQL como ferramenta de exemplo. Tanto que muita gente achou (ou ainda acha) que a linguagem LINQ e o LINQ to SQL são a mesma coisa.

Por isso não confunda LINQ to SQL com LINQ! LINQ é a linguagem e LINQ to SQL é o "provider" para usar a linguagem LINQ no acesso a bancos de dados do SQL Server.

É claro que o LINQ to SQL não vai parar de funcionar de um dia para o outro, nem a Microsoft vai parar de dar suporte. Mas tudo indica que na próxima versão da Framework (4.0) ele já não exista mais. Há uma esperança de que o projeto continue, provavelmente como Open Source no CodePlex. Vamos esperar para ver.

Enquanto isso, se você vai começar um projeto novo, não use o LINQ to SQL. Considere o Entity Framework e o NHibernate para aplicações em camadas e com possibilidade de acesso à varios databases. Ou para aplicações mais simples com database no SQL Server, eu fico é com o bom e velho Dataset Tipado que continua firme e forte, e agora compatível com o LINQ (LINQ to DataSet).

Grande Abraço!

segunda-feira, 27 de outubro de 2008

PDC 2008: Windows Azure Services

A Microsoft acabou de anunciar sua nova plataforma hoje no PDC em Los Angeles, o Windows Azure Services (http://www.microsoft.com/azure/default.mspx)

A princípio é uma plataforma on-line (ou nas nuvens) onde podemos utilizar serviços e distribuir nossas próprias aplicações. Em uma das demos, foi mostrado um novo template do Visual Studio, onde a aplicação ASP.NET foi publicada em um “pacote” que posteriormente foi distribuída no Azure.

Estamos falando em serviços e aplicações online. É a própria Microsoft colocando em prática o “Software+Services” que tanto tem sido falado nos últimos meses. O Windows Azure ou “Windows nas Nuvens” é o conjunto destes serviços online que aos poucos estão aparecendo: SQL Data Services, Live Services, SharePoint Services, entre outros.

Um em específico me chamou muito a atenção: o .NET Services, que a principio foi anunciado como um subset online do ”.NET Framework”, ganhando inclusive um novo logotipo. Será que o .NET vai para as nuvens também?

Tudo foi anunciado com o comprometimento de que as aplicações .NET que temos desenvolvidas, possam ser reaproveitadas no Azure.

Enfim, o Azure está em CTP, e você pode baixar as ferramentas para testá-lo através do link acima.

Ainda é cedo pra falar de detalhes ou nos preocupar com como isso vai nos afetar. De qualquer forma foi um grande anúncio. Isso é grande, e vai ter muita repercussão. Como o próprio Bob Muglia falou no KeyNote, “o Windows Azure é uma nova plataforma!”, comparando este PDC com o PDC onde o Windows NT foi lançado.

Mais noticias do PDC 2008 em breve!

Grande Abraço!

domingo, 26 de outubro de 2008

PDC 2008

Amanhã começa o PDC (Professional Developers Conference) 2008 em Los Angeles (http://www.microsoftpdc.com/). Diferente do Tech-Ed que ocorre todo ano, o PDC é um evento que só acontece quando a Microsoft tem grandes anúncios a serem feitos.

O último PDC foi em 2005 e nele foi dado destaque ao Visual Studio 2005, .NET Framework e Windows VISTA. No PDC deste ano está previsto a abordagem de temas como: Visual Studio 2010, .NET Framework 4.0, Windows 7 (a nova versão do Windows que deve suceder o VISTA), o Windows Cloud que ninguém sabe ao certo como vai funcionar, o OSLO (
http://www.microsoft.com/soa/products/oslo.aspx) que confesso não saber muito a respeito, mas pelo marketing deve ser algo que não devemos deixar de ver.

Isso é o que sabemos, o PDC é famoso pelas surpresas e portanto devemos ficar atentos ao que vai ser anunciado.

A notícia boa é que apesar de longe poderemos acompanhar de perto os Keynotes. Não sei dizer ainda como isso vai acontecer, li essa noticia aqui:
http://www.microsoftpdc.com/View.aspx?post=http://channel9.msdn.com/posts/PDCNews/Watch-PDC-Keynotes-LIVE-Online/&tag=.

Tudo indica que teremos algum link através do site para acompanhar as sessões on-line, que irão ocorrer na segunda e terça (27 e 28 de outubro), das 08:30 as 10:30 do horário padrão do pacífico. Faça as contas.

Outra noticia relacionada ao PDC que me chamou a atenção foi da Developer Express. Eles disseram que vão demonstrar algo novo no evento, e vindo deles eu tenho certeza que deve ser algo muito bom! O legal é que eles vão publicar essas novidades no site também, então fica a dica aqui:
http://tv.devexpress.com/PDCtalk01.movie

Vamos ficar atentos. Assim que eu tiver novidades coloco aqui. Grande Abraço e até a próxima!

quinta-feira, 16 de outubro de 2008

Tech-Ed Brasil 2008 – parte 2

Hoje foi o último dia da maratona de 3 dias de palestras no TechEd. Como prometido, segue mais um feedback a respeito das palestras que pude assistir.

Rogério Cordeiro (
http://blogs.msdn.com/rogerioc/) apresentou uma ótima palestra sobre como integrar suas aplicações com o Windows Live. Estamos falando de coisas como incluir no seu site funcionalidades como: Chat com um controle do MSN Messenger para Web, Search, acesso ao Microsoft Virtual Earth, como utilizar o Agent do MSN para programar um BOT que irá responder por você, as perguntas que lhe fizerem em um WebMessenger. Enfim, são muitas as possibilidades que temos ao integrar nossas aplicações Web ou Windows com o Live. Quer aprender como? Comece por aqui: http://dev.live.com/

Carlos Hulot e Marcelo Fornazin falaram sobre paralelismo. Parece um assunto um pouco fora de contexto, mas é de grande importância. Hoje em dia a maioria dos computadores estão saindo com processadores com 2 ou até mais núcleos. Você sabia que se o seu aplicativo não estiver preparado, ele não vai utilizar todo o potencial de processadores como este? Foi sobre isso que eles falaram, e nos foi mostrada as tecnologias que temos em .net para otimizar aplicações com processadores deste tipo. Quer aprender mais sobre isso? Comece aqui:
http://msdn.microsoft.com/en-us/concurrency/default.aspx

Fernando Cerqueira fez uma ótima palestra sobre ADO.NET Data Services. Essa que é mais uma tecnologia que veio no Service Pack 1 do .NET Framework 3.5, e é mais uma ferramenta que vem comprovar o rumo que a Microsoft está dando em direção ao Cloud Computing. Logo teremos mais artigos sobre ADO.NET Data Services na .NET Magazine, e mais noticias sobre ele aqui neste Blog.

Rogério Moraes falou sobre LINQ to SQL. Nesta palestra de alto nível pudemos ver que nem tudo é positivo com o LINQ to SQL. É importante dosar bem o uso que iremos fazer dessa tecnologia, pois dependendo da complexidade das queries, o Transact SQL gerado não vai ser tão performático quanto se escrevêssemos nós mesmos. Além disso, Rogério nos mostrou a vantagem que temos ao usar Table Valued Functions ao invés de Sotred Procedures, para realizar paginação com o LINQ to SQL.

Uma curiosidade interessante foi que no dia 14 de outubro (primeiro dia do TechEd Brasil 2008) foi o lançamento do Silverlight 2.0!! Pegou vários palestrantes de surpresa.. hehehe

Enfim, estas foram as Tracks que eu pude conferir e que achei mais interessante. Mais uma vez o TechEd trouxe o que temos de mais atual da plataforma .NET. É bom ficarmos atentos, pois no final deste mês vai acontecer o PDC lá nos EUA, e muita novidade será anunciada lá. É... Cochilou o Cachimbo cai!
Grande Abraço e Até a próxima!

quarta-feira, 15 de outubro de 2008

Tech-Ed Brasil 2008

Como todos sabem essa é a semana do teched Brasil, e é diretamente daqui que eu escrevo este POST.

Ontem, dia 14 / Outubro tivemos a aguardadíssima general session (ou sessão de abertura) realizada por Steve Balmer, Presidente da Microsoft. Com sua usual irreverência, Steve Balmer apresentou o que seriam as principais tendências do mercado de tecnologia, e o que a Microsoft vem fazendo para atendê-las: Virtualização, Interoperabilidade e Segurança, Software+Services e Experiência do Usuário.

Software+ Services. o que eu particularmente acredito que seja a principal tendência para o futuro do mercado de tecnologia, foi a abordagem principal da palestra de Steve Balmer. O futuro está nas nuvens! E a Microsoft vem investindo forte nisso.

Tive a oportunidade de assistir uma palestra sobre o SQL Server Data Services (SSDS), ministrada por Waldemir Cambiucci, e que resume bem o caminho que a Microsoft está trilhando para as nuvens. Nessa palestra foi mostrado o que a Microsoft está planejando para o SQL Server, uma versão On-Line. Através do SSDS poderemos criar uma “assinatura” e através dela criar nossos databases e estruturas para armazenar nossos dados na nuvem. Tá certo que isso ainda está meio nebuloso, mas dá pra ter uma idéia muito boa neste artigo do Waldemir:
http://www.microsoft.com/brasil/msdn/arquitetura/Journal/IntroducaoSQLServerDataServices_ADO.NETDataServices.mspx

Outra palestra excepcional foi a do Buck Woody, Program Manager do SQL Server. Sua palestra teve o título: Um Dia na Vida de um DBA, e de uma forma bem divertida ele mostrou algumas das novas e simples funcionalidades do SQL Server 2008 que vieram para ajudar o dia-a-dia do DBA, mas que também acabam auxiliando aos programadores. Deixo o blog dele aqui para informações adicionais:
http://blogs.msdn.com/buckwoody/

Outras duas palestras muito boas foram as do Mauro Sant’Anna e do Marcelo Negrini. Eles falaram respectivamente de Silverlight e Microsoft Blend, que são tecnologias de desenvolvimento de interfaces ricas, outra tendência apontada por Steve Balmer na General Session.

Além disso muito tem se falado de LINQ to SQL, Entity Framework, ADO.NET Data Services, WPF, WPCF, WF e muito mais. Hoje ainda é o segundo dia, e amanhã tem mais!

Aguardem mais noticias. Grande Abraço!

segunda-feira, 6 de outubro de 2008

Visual Studio 2010 e .NET Framework 4.0

No final do mês passado (Setembro/2008) a Microsoft anunciou oficialmente que está desenvolvendo a nova versão da sua plataforma de desenvolvimento, e já tem a previsão de lançá-la no ano de 2010, quando teremos o Visual Studio 2010 e o .NET Framework 4.0. Você vê o anuncio oficial neste link:
http://www.microsoft.com/presspass/press/2008/sep08/09-29VS10PR.mspx

Ainda é muito cedo para falar das novidades que estão por vir, mesmo porque ainda estamos degustando as que vieram no recém lançado Service Pack 1 do Visual Studio 2008, que não são poucas.

O fato é que já está anunciado, o que significa que dentro de 1 a 2 anos já teremos mais uma versão da plataforma. E para entendermos um pouco a velocidade com que a tecnologia está caminhando, veja abaixo uma retrospectiva das versões já lançadas da plataforma:

Visual Studio 2002 / .NET Framework 1.0
A primeira versão oficial da plataforma surgiu em fevereiro de 2002, com o .NET Framework 1.0 e Visual Studio 2002 (codinome Rainer).

Visual Studio 2003 / .NET Framework 1.1
Um ano depois, em Abril/2003 surgiu mais uma versão da plataforma, esta chamada de .NET Framework 1.1 e Visual Studio 2003 (codinome Everett).

Visual Studio 2005 / .NET Framework 2.0
Em Outubro de 2005 a Microsoft lança uma versão mais “madura” da plataforma, é o .NET Framework 2.0 com o Visual Studio 2005 (codinome Whidbey).

.NET Framework 3.0
No lançamento do Windows VISTA surgiu uma nova versão da Framework, a 3.0 (essa versão trouxe: WPF, WCF, WWF, entre outras). Apesar de não ter “saído” um novo Visual Studio, foi possível utilizar essas tecnologias através de pacotes que eram instalados na versão 2005.

Visual Studio 2008 / .NET Framework 3.5
Em Novembro de 2007 foi o lançamento do .NET Framework 3.5 e do Visual Studio 2008 (codinome Orcas). Aqui tivemos o lançamento do LINQ.

VS2008 / .NET 3.5 Service Pack 1
Menos de um ano depois, em Agosto de 2008, a Microsoft lançou o Service Pack 1 do Visual Studio 2008 e .NET Framework 3.5. Neste SP1 temos como novidade alguns dos principais temas do momento: ADO.NET Entity Framework, ADO.NET Data Services, ASP.NET Dynamic Data, etc.

Visual Studio 2010 / .NET Framework 4.0
Em Setembro/2008 a Microsoft anuncia que já prevê para 2010 o lançamento de mais uma versão da plataforma. É o .NET Framework 4.0 e o Visual Studio 2010 (codinome Hawaii).

Para uma tecnologia de seis anos, ela tem uma respeitável evolução. Analisando as datas dos lançamentos, desde 2005 que foi o lançamento da consagrada versão 2.0 da plataforma, temos praticamente uma grande atualização por ano! Isso é grande!

Muita gente esta reclamando e vai reclamar dessa velocidade, alegando que “nem dá tempo pra se acostumar com uma versão, e já saí outra!”. Mas há um pouco de comodismo ou excesso de medo nisso. Muita gente sofreu para migrar projetos feitos no antigo Visual Basic, ou do próprio VS2003 para o VS2005. E isso acaba gerando certa desconfiança quando pensamos em novas migrações.

Porém, quem migrou recentemente da versão 2005 para 2008 do Visual Studio, não teve muito que reclamar. Muito menos quem atualizou o recente Service Pack 1 (até agora não ouvi uma reclamação sequer). Isso mostra que hoje a tecnologia está mais evoluindo do que revolucionando, dando muito mais confiança para a aceitação de novas versões.

Pensando também do nosso lado de cá, quando a Microsoft lança novas versões com melhorias e novas funcionalidades, é uma chance de oferecer coisas novas aos nossos clientes. Criando novas funcionalidades em nossos produtos, ou até novos produtos. É um ciclo interessante que se for bem aproveitado, resulta sempre em mais trabalho e conseqüentemente mais receitas.

Um exemplo cabal de modelos como esse que são bem sucedidos, é o da empresa DevExpress (
www.devexpress.com) . Para quem não conhece, eles possuem um ótimo pacote de ferramentas para desenvolvedores (Delphi e .NET) Windows ou Web.

Tenho a oportunidade de utilizar estes produtos há cerca de dois anos, e pude acompanhar a velocidade com que eles entregam as atualizações e novas versões. Saí praticamente uma versão nova ou atualização a cada dois meses! É uma atualização de versão a cada 60 dias!!! E falo com absoluta segurança que nunca tive problemas nas conversões! O que tinha feito com uma versão antiga continuava funcionando bem ou até melhor, a cada nova atualização.

Esse é um modelo de distribuição de software veloz, e que é altamente proveitoso! E vejo que a Microsoft hoje tem apontado a plataforma .NET para esse mesmo caminho. E se me perguntarem se eu acho bom termos um Visual Studio 2010, é claro que a resposta é SIM! E que venham o VS 2011, 2012, 2013...

Grande Abraço e até a próxima!

domingo, 28 de setembro de 2008

Queries Dinâmicas com LINQ

Recentemente fui implementar um exemplo simples de queries dinâmicas no LINQ, e me deparei com um grande obstáculo. “Queries dinâmicas” são aquelas que criamos em tempo de execução, geralmente com a concatenação de strings.

Pense numa aplicação que o usuário escolha dinamicamente os campos que vão fazer parte do filtro da sua pesquisa. Essa é uma necessidade muito comum, e com as classes convencionais do ADO.NET e comandos SQL, essa é uma tarefa bastante simples.

Como sabemos, no LINQ criamos nossas queries no próprio código (C# / VB.NET), onde databases, tabelas e campos são objetos fortemente tipados. É consenso geral que essa é a grande benesse do LINQ, e fator principal do seu sucesso. Porém em cenários de queries dinâmicas, como o citado acima, temos um sério problema.

A primeira solução que encontrei para este problema, de cara não me agradou muito, dada a sua complexidade. A idéia é “construir” a query LINQ em Lambda Expressions, que podem ser feitas em tempo de execução, de acordo com os parâmetros definidos.

Não vou entrar em detalhes em como fazer isso, mas deixo aqui um ótimo artigo do Renato Guimarães sobre esse assunto:
http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1251.entry. E outro do Joseph Albahari: http://www.albahari.com/nutshell/predicatebuilder.aspx.

Com um pouco mais de pesquisa, encontrei uma solução bem mais adequada para o problema: O LINQ Dynamic Query Library.

Isso na verdade, é uma pequena biblioteca construída pela galera de desenvolvimento do LINQ na Microsoft, que permite a criação de queries LINQ dinâmicas, com a concatenação de strings.

Essa biblioteca é distribuída em um pacote de exemplos que você pode baixar para C#:
http://msdn.microsoft.com/en-us/vcsharp/bb894665.aspx

Ou VB.NET:
http://msdn.microsoft.com/en-us/vbasic/bb964686.aspx

Em ambos os pacotes você vai encontrar um diretório chamado DynamicQuery que contém um exemplo de como utilizar esse pacote.

Para você ter uma idéia de como funciona o LINQ Dynamic Query Library, o que você faz tradicionalmente com LINQ, assim:



Com as queries dinâmicas você pode fazer assim:


Caiu como uma luva para o problema que eu precisava resolver. Além desse pacote, nos downloads citados acima você vai encontrar uma séria de exemplos úteis para LINQ.

Confira também este post do Scott Guthrie sobre o assunto:
http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

Grande Abraço e até a próxima!

quinta-feira, 11 de setembro de 2008

Dia do Programador

Hoje é dia do Programador!


E não adianta dizer que somos Analistas, Arquitetos, Engenheiros, Desenvolvedores, Dev, etc... Nós somos Programadores, e parabéns a nós!

Tá certo que até ontem eu nem sabia da existência desse dia. Foi um amigo programador que me avisou em um e-mail. Valeu pela dica Paulo! A razão da data é óbvia (para nós), hoje é o 256º dia do ano! Aos que não se ligaram 2^8=256. Se ainda não entendeu ta na área errada (rsrsrs).

Essa é uma perfeita referência ao sistema binário, que se não fosse por ele hoje estaríamos apagando algum incêndio, prendendo algum bandido, fazendo uma traqueostomia, ou ainda pior, concorrendo a vereador para a cidade de São Paulo. Aliás, se alguém conhecer algum programador que for candidato, me avisa por favor! Com as opções que temos, ele com certeza vai ter o meu voto!

No Brasil poucos sabem e comemoram essa data. Ela é originalmente comemorada lá fora, onde nossos colegas costumam a se comportar de uma forma um tanto quanto estranha: codificando programas inúteis, jogando games antigos, brincando com velhos computadores, etc.

Não adianta, profissional de TI é estranho em qualquer lugar mesmo, não é privilégio nosso não. Quer a prova, assista ao seriado “The IT Crowd” (
http://www.channel4.com/entertainment/tv/microsites/I/itcrowd/). Indicação do meu grande amigo Rodolfo - futuro programador.

Mas como disse um outro amigo programador: “essa comemoração deles é meio gay, você não acha?”. Concordo com você Luciano! Prefiro comemorar a lá Brasil, no happy hour do final da tarde! Mesmo porque se meu chefe me pegar jogando space invaders, nessa altura do projeto, tô na roça!

Mas como essa lei seca ta pegando forte, o negócio é comemorar em casa mesmo. Uma dica são as cervejas importadas, uma benção do Deus Marduk, que estão disponíveis a preços módicos no supermercado mais próximo! A dica é do meu amigo Rob (antigo programador), confira aqui no blog dele:
http://vidadigitao.blogspot.com/2008/08/pare-de-sofrer.html. Nessa lista de beldades apresentada por ele eu só acrescentaria a minha favorita, Guinnes.

Só não vá se esquecer de uma coisa muito importante: Esse ano é bissexto!

Grande Abraço e até a próxima!

terça-feira, 9 de setembro de 2008

LINQPad

Recentemente, na coluna .NET Brasil que escrevo na .NET Magazine falei um pouco sobre o dilema de se escrever queries em LINQ, e como podemos nos acostumar a essa nova forma de se fazer pesquisas no banco de dados.

Se você nunca ouviu falar do LINQ, segue uma breve definição: Esta é a sigla para Language Integrated Query que é uma linguagem integrada ao C# e VB.NET para a execução de queries. A idéia é substituir o uso da linguagem SQL por uma linguagem compatível, semelhante e integrada ao código gerenciado .NET.

A partir do momento em que você vai colocando em prática o LINQ em suas aplicações, surge um dilema sério: Como nos acostumar a escrever queries em LINQ, já que estamos tão acostumados a escrever comandos em SQL?

As diferenças não são tão grandes assim, mas há uma mudança considerável na ordem em que escrevemos os comandos. O que antes escrevíamos assim:

Agora escrevemos assim (C#):



Veja que primeiro vem o FROM, em seguida o WHERE e o ORDERBY e só no final é que vem a clausula SELECT. Com essa inversão das cláusulas, ganhamos o benefício do intelisense, na hora de escolher os campos que serão retornados pela consulta.

Não é fácil para quem está começando e já é acostumado com o jeito antigo. Uma ferramenta essencial nesse momento é o LINQPad, do Joseph Albahari. É uma ferramenta gratuita que você pode baixar a partir deste link: http://www.linqpad.net/

No LINQPad podemos criar conexões com nossos databases e executar consultas utilizando a linguagem LINQ. Seria o equivalente à ferramenta de queries que temos no SQL Server Management Studio. Veja na figura abaixo um exemplo de query executada no LINQPad:


Essa é sem dúvida uma ferramenta obrigatória para quem está começando no LINQ, não deixe de baixar e utilizar!

Grande Abraço e até a próxima!

domingo, 31 de agosto de 2008

C# 3.0 : Extension Methods

A versão 3.0 da linguagem C# nos trouxe muitas melhorias, que se deram principalmente pela viabilização do LINQ (Language Integrated Query). Muitas destas novidades podem ser aproveitadas no nosso dia a dia, e neste Post eu vou falar um pouco sobre uma delas: os Extension Methods.

Os Extension Methods ou métodos de extensão são muito parecidos com os métodos estáticos, que podem ser chamados sem a necessidade de instanciarmos um objeto da classe.

Porém o objetivo de um extension method, é “adicionar” métodos a um uma classe já existente, sem a necessidade de modificarmos esta classe. Legal né?


Um exemplo: Que tal seria se tivéssemos um método ToZeroLeft em objetos da classe int? Ajudaria bastante quando precisamos colocar zeros à esquerda de um valor, e gravá-lo em uma string.


Este é apenas um exemplo, com certeza você vai achar diversas outras aplicações para os extensions methods. Chega de conversa e vamos logo ver como isso funciona.


Os seus Extension Methods devem ser criados como métodos estáticos, de preferência em uma classe destinada apenas para estes tipos de métodos. O primeiro parâmetro do método deve ser precedido do modificador this. E o seu tipo define o tipo que será “modificado”, ganhando este novo método. Veja o exemplo abaixo:


Toda vez que importarmos este namespace ExtensionMethods em qualquer outra classe, as variáveis do tipo int “ganharão” o método ToLeftZeros, veja o exemplo abaixo:


Note que a variável numero do tipo int possuí agora o extension method ToLeftZeros. Veja que no intelisense este método aparece com uma pequena seta apontando para baixo, indicando que este é um método de extensão.

Para nós, “usuários finais do C#”, a impressão é que modificamos a classe int, adicionando a ela um novo método. Porém por de trás dos panos, o compilador irá transformar isso em uma chamada ao método estático que criamos.

Como disse no começo, esta é uma funcionalidade que veio no C# 3.0 para viabilizar algumas features do LINQ. Para comprovar isso é simples, adicione uma referencia ao namespace System.Linq e veja o que acontece à suas Arrays:


Note que elas vão “ganhar” uma série de métodos relacionados à linguagem LINQ, como por exemplo o OrderBy.

Espero que faça um ótimo uso dos Extension Methods. Abaixo coloco algumas ótimas referencias sobre este tema:

Grande Abraço e até a próxima!

domingo, 24 de agosto de 2008

SQL Server 2008 Express

Neste mês de Agosto tivemos o lançamento e disponibilização do download da edição Express do SQL Server 2008.

Uma característica interessante neste release é que temos três “versões” do SQL Server 2008 Express para download.

Você pode baixar apenas o Database Engine, chamado simplesmente de Microsoft SQL Server 2008 Express, através do seguinte download:
http://www.microsoft.com/downloads/details.aspx?FamilyID=58ce885d-508b-45c8-9fd3-118edd8e6fff&DisplayLang=en

Pode baixar a versão “with Tools” através do seguinte link:
http://www.microsoft.com/downloads/details.aspx?FamilyId=7522A683-4CB2-454E-B908-E805E9BD4E28&displaylang=en. Esta edição vem com uma ferramenta chamada SQL Server Management Studio Basic, que é a ferramenta de gerenciamento dos bancos de dados, assim como tínhamos em um pacote separado no SQL Server 2005 Express.

E por fim temos a versão “with Advanced Services”, que além do Management Studio Basic, possuí o Full Text Search e o Reporting Services. Você pode realizar o download dessa versão através do seguinte link:
http://www.microsoft.com/downloads/details.aspx?FamilyId=B5D1B8C3-FDA5-4508-B0D0-1311D670E336&displaylang=en

Esta última versão é a grande novidade da edição Express do SQL Server 2008, e é o download que estou fazendo neste exato momento. Como devem imaginar ainda não tive tempo de instalar e avaliar as funcionalidades desta nova versão, já que este download foi disponibilizado no último dia 22 de agosto. Mas em breve, assim que tiver a oportunidade, estarei colocando aqui as novidades que encontrar sobre o SQL Server 2008, principalmente a respeito do seu uso com o Visual Studio.

Grande Abraço e até a próxima!

sexta-feira, 15 de agosto de 2008

VS2008 e .NET 3.5 Service Pack 1

No último dia 11 deste mês de Agosto (2008) foi lançada a versão final do Service Pack 1, do Visual Studio 2008 e do .NET Framework 3.5.

O link para o VS2008 SP1 é este aqui:

E para o .NET 3.5 SP 1 o link é este:

Este SP1 já estava disponível por algum tempo em Beta, o que não é muito recomendado para máquinas de desenvolvimento. Mas agora com a versão final podemos instalar o SP1 sem problemas. Alias, devemos instalá-lo.

Além de diversas correções, temos novidades interessantes, como o release do ASP.NET Dynamic Data, e o aumento de performance do WPF (Windows Presentation Foundation). Os três links abaixo dão uma descrição detalhada do que contempla esse Service Pack 1.

Visual Studio 2008 Service Pack 1 Readme:

Microsoft .NET Framework 3.5 Service Pack 1 Readme:

Lista de Mudanças e correções do .NET Framework 3.5 Service Pack 1

terça-feira, 12 de agosto de 2008

WPF ou Silverlight?

Já estamos as vésperas do Silverlight 2! E você já pode baixar a versão beta 2 desta segunda edição do Silverlight.

Através desse link:
http://silverlight.net/GetStarted/ você encontra o download da versão beta 2, os downloads das ferramentas e pacotes de desenvolvimento para o Silverlight 2, além de uma série de materiais que vão lhe ensinar a desenvolver aplicações com o Silverlight!

Breve eu também vou publicar na .net Magazine um artigo só sobre o Silverlight. Aguardem!

Mas você sabe qual é a diferença entre WPF e Silverlight? Muita gente me pergunta se existe diferença entre essas duas tecnologias.

A respostas é sim.

O WPF (Windows Presentation Foundation), é a sigla original da iniciativa da Microsoft para a criação de uma plataforma (daí o Foundation) para o desenvolvimento de interfaces ricas, com a utilização do padrão XML, surgindo então a sigla XAML (eXtensible Application Markup Language).

Inicialmente com o WPF é possível criar aplicações Standalone, que funcionam apenas no Windows, assim como é o velho e bom Windows Forms.

No Visual Studio 2008 podemos criar aplicações WPF Standalone (File / New / Project), basta escolher o template WPF Application Ao executarmos um projeto feito com esse template, nossa aplicação WPF será executada em uma janela do Windows.

Também é possível criar aplicações WPF que rodam no browser, conhecidas como XBAPs (XAML Browser Applications). No Visual Studio 2008, para criar uma aplicação WPF que roda no browser basta escolher o template WPF Browser Application.

Existem algumas diferenças entre aplicações WPF Standalone e as XBAPs, no que tange principalmente as questões de segurança. Porém uma aplicação feita inicialmente para rodar em Windows, pode ser facilmente adaptada para rodar no browser.

O problema é que as aplicações WPF XBAPs, apesar de rodarem no browser, funcionam apenas dentro da plataforma Microsoft. O que quer dizer que o usuário final só vai conseguir acessar a aplicação se estiver rodando em seu computador um Windows, com o .NET Framework 3.5 instalado.

É aí que surge o WPF/Everywhere, ou WPF/E, ou mais popularmente conhecido Silverlight. Com ele, nossas aplicações XAML passam a ser multiplataforma, e podem rodar em um número maior de browsers. Para o usuário final basta fazer o download do plugin, chamado convenientemente de Silverlight.

quarta-feira, 6 de agosto de 2008

Onde encontrar bom material sobre .NET

Olá Amigos!

Primeiramente gostaria de anunciar que retomo os Posts deste blog! Acabei ficando um bom tempo sem atualizá-lo, mas agora volto com força total!

Aproveito esse retorno para registrar aqui algumas referências para quem procura material instrutivo sobre a plataforma .NET Framework.

Recebo dezenas de e-mails por mês, e uma das perguntas mais freqüentes é: “Tem algum material para indicar?” A resposta é sempre SIM! Abaixo segue um resumo das minhas principais fontes de pesquisa:

O MSDN Experience é um canal da Microsoft que oferece uma enorme quantidade de vídeos voltados para a plataforma .NET. São vídeos de ótima qualidade, e estão divididos em duas áreas:

O próprio portal do MSDN é um excelente ponto de partida para quando você busca por material sobre .NET: http://msdn.microsoft.com/pt-br/default.aspx

O Portal Devmedia (http://www.devmedia.com.br) é o site da Editora DevMedia, responsável pela revista .NET Magazine, ClubeDelphi, WebMobile, Java Magazine, etc. Neste site você vai encontrar muito material escrito por autores brasileiros. Um diferencial importante deste site são as vídeo-aulas e a ótima qualidade do material. Você também confere ótimas matérias nas versões impressas (revistas citadas acima) . A Devmedia ainda conta com uma versão internacional do seu portal, o Mr. Bool: http://www.mrbool.com


O Portal da Linha de Código (http://www.linhadecodigo.com.br), Codificando.NET (http://www.codificando.net/), .NET Raptors (http://www.dotnetraptors.com.br), são mais alguns exemplos de sites que contém um ótimo material produzido por brasileiros.


O Site do meu amigo Luciano Pimenta (http://www.lucianopimenta.net/), que está começando agora, mas já tem um ótimo material. Vamos dar uma força pra ele lá!

De sites gringos os meus destaques são:

Não tem material de .NET, mas o blog do meu amigo Rob Ranches (http://vidadigitao.blogspot.com/) trata de tecnologia sob um ponto de vista excepcional, e eu não poderia deixar de citar aqui!


Estes são só alguns que eu lembrei agora. Com certeza devo ter esquecido de vários, mas prometo que vou atualizando essa lista com freqüência. E se você tiver algum link de sites com bons materiais sobre .NET me avise!

Grande Abraço e até a Próxima!