Monday, June 8, 2009

Delphi Prism - Visual Studio ganha um aliado de peso

Ainda no ano passado, a Embarcadero, empresa hoje responsável pelo desenvolvimento do Delphi, anunciou um novo produto, chamado Delphi Prism. Antigamente chamado de Chrome, mais tarde Oxygene, este produto foi comprado da empresa Remote Objects, e representa uma evolução gigantesca no desenvolvimento com Delphi para o .NET. O grande "q" da questão é que o Delphi Prism não usa um IDE a parte para permitir o desenvolvimento do Delphi com .NET, mas o próprio Visual Studio 2008. Além disso, existem inúmeros novos recursos na linguagem, muitos "herdados" do C# 3.0. Ironicamente, eu costumo chamar o Delphi Prism de "D#". Agora, desenvolvedores Delphi podem desfrutar de tecnologias que antes só estavam disponíveis para quem desenvolvia com VS e C# / VB.NET, incluindo LINQ, WPF, ASP.NET AJAX e muito mais. Veja por exemplo algumas coisas interessantes que você pode fazer com Delphi agora:

method _Default.Delphi_Prism_Instanciando_Guinther();
begin
var Eu := new class (Nome := "Guinther", Idade := 31);
end;

Legal não? Só nesse código existem 7 novos recursos da linguagem.

Em um post anterior, eu comentei sobre as "diferenças" das linguagens para o .net Framework, e escrevi um mesmo método de 3 diferentes formas: C#, VB.NET e Delphi for .NET. Segue abaixo a versão para o Delphi Prism:

uses System.Data.SqlClient;
...
method _Default.Select();
begin
// posso agora declarar uma variável inline, como no C#, e já inicializar
var ConStr: string := "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True";
// posso declarar uma variável sem tipo, usando Type Inference
// veja também que objetos agora são criados com NEW, e não Create
var Con := new SqlConnection(ConStr);
// é possível usar aspas duplas em strings
var SQL := "Select * from Products";
var Cmd := new SqlCommand(SQL,Con);
Con.Open();
try
GridView1.DataSource := Cmd.ExecuteReader();
GridView1.DataBind();
finally
Con.Close();
end;
end;

Grande abraço

Guinther Pauli
MCSD.NET, MCPD
Editor Geral .net Magazine

Friday, October 31, 2008

Windows Azure

A Microsoft acabou de anunciar sua nova plataforma hoje no PDC, 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 podemos reutilizar tudo o que temos desenvolvido em .NET hoje, possa ser distribuído 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.

Guinther Pauli
Editor Geral Revista .net Magazine

Saturday, October 25, 2008

Tech-Ed Brasil 2008

No dia 14 de Outubro tivemos keynote do 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(Cloud Computing) e Experiência do Usuário.

Logo no primeiro dia tivémos 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.

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..

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á.

Grande abraço

Guinther Pauli
Editor Geral Revista .net Magazine
Rodrigo Sendin
Comissão Editorial Revista .net Magazine

Tuesday, September 30, 2008

Queries Dinâmicas com LINQ

Recentemente encontrei um pacote muito interessante para o LINQ. O LINQ Dynamic Query Library, é uma pequena biblioteca desenvolvida pelos desenvolvedores do LINQ na Microsoft.

Com essa biblioteca podemos criar consultas LINQ dinâmicas, com a passagem de parâmetros em string. Resolve aquele velho problema de criar queries em tempo de execução, de acordo com parâmetros escolhidos pelo usuário.

De forma bastante simples, o que você faz tradicionalmente com o LINQ assim:

var query =
dbcustomers.where(c => c.City == "London" && c.Orders.count >=10).
OrderBy(c=> c.CompnanyName).
Select(c=> new {c.CompanyName, c.Phone })

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

var query =
dbcustomers.where("City == @0 and Orders.Count > @1,"London", 10).
OrderBy("CompanyName").
Select("New(CompanyName,Phone)");

Você encontra o download dessa biblioteca para C# neste link: http://msdn.microsoft.com/en-us/vcsharp/bb894665.aspx.

Guinther Pauli
Editor Geral

Wednesday, June 4, 2008

LINQPad

O LINQ representa uma revolução para o .NET Framework. Ele unifica em uma só linguagem acesso a banco de dados, acesso a documentos XML e acesso a Objetos. É uma linguagem semelhante à SQL. Existe uma ferramenta que pode ajudar você a digitar suas primeiras instruções LINQ, chamada LinqPad, basta conectar no banco de dados, escolher a conexão na caixa acima e digitar o comando. Após a execução, os dados são mostrados no Grid abaixo. No exemplo utilizei o banco de dados NORTHWIND instalado no .\SQLEXPRESS (SQL SERVER EXPRESS). O código LINQ para efetuar uma busca na tabela de produtos fica da seguinte forma:

from p in Products
where p.CategoryID == 1
orderby p.ProductName
select new { p.ProductID, p.ProductName, p.UnitPrice, p.UnitsInStock }

O resultado é mostrado abaixo:



O link para baixar a ferramenta é http://www.linqpad.net

Guinther Pauli
Editor-chefe Revista .net Magazine

Tuesday, June 3, 2008

Linguagens do .NET

Recebo muitos comentários, dúvidas e críticas sobre qual a melhor linguagem para se trabalhar com o .NET. Vou comentar aqui as principais de minha preferência: C#, VB.NET ou Delphi for .NET. A minha resposta é curta: não aprenda uma linguagem, aprenda o framework. Se você souber programar corretamente com ADO.NET, por exemplo, não terá dificuldade para aplicar na prática um método que retorne um DataSet a partir de uma conexão a um banco de dados. Os objetos e classes são comuns a todas as linguagens do framework, a chamada FCL. A linguagem deixa de ser o mérito principal da questão, pois todas jogam as mesmas regras da CLR, uma especificação chamada CLS (Common Language Specification). A linguagem é apenas uma questão de semântica, conhecendo o framework, aprende uma outra linguagem em no máximo uma semana. Isso pode ser crítico se você está se candidatando a uma vaga de emprego por exemplo: jamais diga que você é desenvolvedor C#, diga que é desenvolvedor .NET. Se estiverem contratando programadores VB.NET, você pode perder uma vaga simplesmente por questão de orgulho. Além do mais, existem tradutores na Web que convertem de uma linguagem para a outra, para começar seu aprendizado. Para ter uma idéia do que estou falando, observe abaixo uma implementação nas três linguagens citadas, um método que preenche um GridView com os dados da tabela Products do Northwind:

[C#]
using System.Data.SqlClient;
...
private void SelectProducts()
{
string ConStr = @"Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True";
SqlConnection Con = new SqlConnection(ConStr);
string SQL = "select * from Products";
SqlCommand Cmd = new SqlCommand(SQL, Con);
Con.Open();
try
{
GridView1.DataSource = Cmd.ExecuteReader();
GridView1.DataBind();
}
finally
{
Con.Close();
}
}

[VB.NET]
Imports System.Data.SqlClient
...
Private Sub SelectProducts()
Dim ConStr As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
Dim Con As SqlConnection = New SqlConnection(ConStr)
Dim SQL As String = "Select * from Products"
Dim Cmd As SqlCommand = New SqlCommand(SQL, Con)
Con.Open()
Try
GridView1.DataSource = Cmd.ExecuteReader()
GridView1.DataBind()
Finally
Con.Close()
End Try
End Sub

[Delphi for .NET]
uses System.Data.SqlClient;
...
procedure TDefault.Select;
var
ConStr: string;
Con: SqlConnection;
SQL: string;
Cmd: SqlCommand;
begin
ConStr := 'Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True';
Con := SqlConnection.Create(ConStr);
SQL := 'Select * from Products';
Cmd := SqlCommand.Create(SQL,Con);
Con.Open();
try
GridView1.DataSource := Cmd.ExecuteReader();
GridView1.DataBind();
finally
Con.Close();
end;
end;

Como você pode ver, existem poquíssimas difereças na implementação. O Delphi, como um legado do Pascal, exige que as variáveis sejam declaradas na sessão var. Já o C# e VB.NET permitem um declaração no momento do uso. No C#, a delimitação de bloco de código é {}, enquanto no Pascal é begin end. Algumas linguagens usam aspas duplas para strings, outras simples. Outras usam NEW para instanciar objetos, o Delphi usa Create. Outras terminam instruções com ;. Mas o framework é o mesmo, os objetos são os mesmos, os métodos a serem chamados são os mesmos, os construtores são os mesmos, as propriedades são as mesmas, a organização do código é o mesmo, a proteção de recursos é a mesma, enfim... Se você acha que só sabe uma linguagem .NET e sente receio em aprender outra, está na hora de rever seus conceitos como desenvolvedor. O mercado está cada vez mais competitivo e saber se adaptar a ele é obrigação de todo desenvolvedor.

Guinther Pauli
Editor-chefe Revista .net Magazine

Tuesday, May 27, 2008

MultiTier Applications em .NET

Neste endereço encontrei um excelente artigo que mostra como criar aplicações distribuídas em .NET. O autor descreve as diversas formas de passar dados entre camadas, incluindo DataReaders, DataSets, XML e tipos definidos, suas vantagens e desvantagens.

Designing Data Tier Components and Passing Data Through Tiers

Guinther