More servicesWindows Live
HomeHotmailSpacesOneCare
 
MSN
Sign in
 
 
Spaces home  Renato GuimarãesProfileFriendsBlogMore Tools Explore the Spaces community

Blog

August 28

[PAC.NET]: Vídeo sobre criação de query dinâmica com LINQ

 

image

Olá amigos,

Há alguns dias publiquei os dois vídeos abaixo com explicando o conceito de árvores de expressão com objetivo prover as informações importantes para o entendimento deste vídeo de hoje. Durante a criação de uma expressão dinâmica é importante conhecer os métodos da classe Expression e as classes derivadas desta.

[PAC.NET]: Como criar a expressão x => x - 2 dinamicamente?

[PAC.NET]: Vídeo sobre árvores de expressão (expression trees, classe Expression)

Outra coisa importante, pense na sua query como uma árvore que será formada por vários nós, onde cada nó representa um expressão.

Abaixo segue o link para o vídeo onde explico o exemplo abaixo:

[PAC.NET]: Vídeo sobre criação de query dinâmica com LINQ

  
Video: [PAC.NET]: Vídeo sobre criação de query dinâmica com LINQ

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;

namespace RenatoGuimaraes.Pac.Net.ExemploQueriesDinamicas
{
    //Exemplo mostra como trabalhar com queries dinâmicas no LINQ to Objects. 
    //A query retornará o c cujo o modelo é um Fusca ou nome do modelo tem mais de 6 letras
    public class QueriesDinamicas
    {
        static void Main(string[] args)
        {
            string[] carros = new string[] { 
                 "Monza",  "Escort", "Belina", "Fusca", "Brasília", 
                "Chevette", "Corcel I"};

            //Query Expression
            var queryExp = from c in carros
                          where c.ToLower() == "fusca" || c.Length >= 6
                          orderby c
                          select c;

            //Query Methods
            var queryMethods = carros.
                Where(c => c.ToLower() == "fusca" || c.Length >= 6).
                OrderBy(c => c);

            //PASSO 1: Obtém a fonte de dados do IQueryable do provider 
            //         LINQ da coleção
            IQueryable<string> provider = carros.AsQueryable<string>();

            //PASSO 2: Definição do parâmetro "c" da expressão: 
            //         c => c.ToLower() == "fusca" || c.Length >= 6
            ParameterExpression param = 
                Expression.Parameter(typeof(string), "c");

            //PASSO 3: Cria os nós esquerdo e direito da expressão 
            //         c => c.ToLower() == "fusca"
            Expression opEsquerdo = 
                Expression.Call(param, 
                    typeof(string).GetMethod("ToLower", 
                        System.Type.EmptyTypes));

            Expression opDireito = Expression.Constant("fusca");

            //PASSO 4: Conclui a construção da primeira expressão 
            //         c.ToLower() == "fusca" com o operador ==
            BinaryExpression expParte1 = 
                Expression.Equal(opEsquerdo, opDireito);

            //PASSO 5: Cria a segunda parte da expressão: c.Length >= 6
            opEsquerdo = Expression.Property(param, "Length");
            opDireito = Expression.Constant(6);

            //PASSO 6: Conclui a construção da segunda expressão 
            //         c.Length >= 6 com o operador >=
            BinaryExpression expParte2 = 
                Expression.GreaterThanOrEqual(opEsquerdo, opDireito);
 
            //PASSO 7: Conclui a expressão completa 
            //         c => c.ToLower() == "fusca" || c.Length >= 6 com 
            //         o operador ||
            Expression expCompleta = Expression.OrElse(expParte1, expParte2);

            //PASSO 8: Cria a expressão que representa uma 
            //         chamada ao método Where do provider
            MethodCallExpression expWhere = Expression.Call(
                       typeof(Queryable), 
                       "Where", //Nome método
                       new Type[] { provider.ElementType }, 
                       provider.Expression, 
                       Expression.Lambda<Func<string, bool>>(
                            expCompleta, new ParameterExpression[] { param })
                     );

            //PASSO 9: Cria a expressão que representa uma 
            //         chamada ao método OrderyBy do provider
            MethodCallExpression expOrderBy = Expression.Call(
                       typeof(Queryable), 
                       "OrderBy", 
                       new Type[]{provider.ElementType, provider.ElementType},
                       expWhere, 
                       Expression.Lambda<Func<string, string>>(
                            param, new ParameterExpression[]{param}));

            //PASSO 10: Cria a query completa
            IQueryable<String> query = 
                provider.Provider.CreateQuery<String>(expOrderBy);

            //Executa e lista os itens resultantes da query
            foreach (string item in query)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }
    }
}

Abraço,

Renato Guimarães, MS MVP Visual C#

August 25

[OFF-TOPIC]: Oportunidades para TI em Fortaleza

Olá amigos,

        Não é um post falando sobre algo específico relacionado a C# ou .NET, mas é do interesse da galera que trabalha com TI, especialmente, com .NET :-). E como tem C# no meio, então resolvi divulgar também :-) Peguei esta informação de um e-mail enviado por um colega. Não tenho detalhes das vagas e para mais informações recomendo navegar nos links abaixo.

         De uma coisa eu tenho certeza, Fortaleza é uma cidade maravilhosa, mesmo ainda não ter vivido a experiência de morar lá. Já estive lá outro dia fazendo palestras sobre .NET...

A BRQ, uma das principais fornecedoras de Serviços de TI do país, certificada CMMI 5, anuncia a abertura de 116 vagas de emprego na área de Tecnologia da Informação em Fortaleza. As ofertas estão disponíveis conforme tabela abaixo e são para contratação imediata. Os interessados devem cadastrar o currículo no site http://www.brq.com/recursos-humanos/vagas-fortaleza.

As principais tecnologias utilizadas pela BRQ são Java, J2EE, MVC, EJB, .Net, ASP, VB6.0, C#, SAP, PL/SQL, Mainframe, Websphere,C, C++, WebLogic, UML, HTML, Javascript, Webserver, Lótus Notes, PL/1, Cobol. Banco de Dados - Oracle, DB2 Metodologia - RUP/UML. Sistema Operacional: Unix, Linux, Windows, MVS, VM.

A BRQ atingiu faturamento de R$ 150 milhões em 2007, um crescimento superior a 40% ao ano desde a sua fundação em 1993 e tem como meta faturar R$ 1 bilhão em 2012. A BRQ conta com mais de 2.000 profissionais que desenvolvem e perfeiçoam soluções para diferentes áreas de negócios.

Gerente de Projetos: 10 vagas
Líder de Configuração e Mudanças: 2 vagas
Arquiteto de Software Powerbuilder: 2 vagas
Analista de Sistemas Powerbuilder: 8 vagas
Arquiteto de Software .NET: 3 vagas
Arquiteto de Software Visual Basic e ASP: 3 vagas
Analista de Sistemas .Net, Visual Basic ou ASP: 12 vagas
Analista de Testes: 5 vagas
Testador de Software: 15 vagas
Desenvolvedor .Net, Visual Basic ou ASP: 30 vagas
Especialista em Suporte Técnico IBM DB2: 2 vagas
Especialista em Suporte Técnico IBM Rational: 2 vagas
Especialista em Suporte Técnico IBM Websphere: 2 vagas

abraço,

Renato Guimarães, MS MVP Visual C#

August 23

[PAC.NET]: Como criar a expressão x => x - 2 dinamicamente?

Olá amigos,

        Segue mais um vídeo sobre árvore de expressão. No primeiro vídeo sobre árvore de expressão fiz uma breve introdução do conceito e depois fiz um exemplo onde desmembrei a expressão x => x > 10.  Nesta segunda parte, o objetivo deste vídeo é mostrar como criar uma expressão lambda dinamicamente, por exemplo, a expressão x => x - 2. Este exemplo será a base para o vídeo onde explicarei como criar queries dinamicamente no LINQ.

        A expressão deve ser vista como um nó da árvore, onde o corpo (um BinaryExpression que representa o menos) tem seus operandos o parâmetro x (um ParameterExpression) e a constante 2 (um ConstantExpression).

[PAC.NET]: Como criar a express�o x = x - 2 dinamicamente?

  
Video: [PAC.NET]: Como criar a express�o x = x - 2 dinamicamente?

        Abaixo segue o exemplo do código que foi mostrado no vídeo.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Linq.Expressions;

//ASSUNTO DE HOJE: ÁRVORES DE EXPRESSÃO
namespace RenatoGuimaraes.Videos.Pac.Net.VideoArvoreDeExpressao
{
    //Expression é código em formato de dados
    //O dado é armazenado numa estrutura de árvore
    //Cada nó da árvore representa uma expressão.
    public class Program {
        static void Main(string[] args){
           // x => x - 2 

            //Preparação do parãmetro da expressão
            ParameterExpression paramExp = Expression.Parameter(typeof(double), "x");
            //Definição da constante
            ConstantExpression consExp = Expression.Constant(2d);

            //Criação da expressao binária que representa o operador -
            BinaryExpression expMenos = Expression.Subtract(paramExp, consExp);

            //Criação da expressão lambda
            Expression<Func<double, double>> expLambda = Expression.Lambda<Func<double, double>>(expMenos, new ParameterExpression[] { paramExp });

            //Compilação da expressão.
            Func<double, double> del = expLambda.Compile();

            Console.WriteLine(del(10));

            Console.ReadLine();
        }
    }
}

Abraço,

Renato Guimarães, MS MVP Visual C#

[PAC.NET]: Vídeo sobre árvores de expressão (expression trees, classe Expression)

Olá amigos,

       Entre os vários recursos do C# 3.0, um dos que mais gosto é possibilidade de criação de queries dinamicamente. Sem falar a capacidade de você estender o LINQ e criar seu próprio provider, por exemplo, hoje já temos LINQ to Amazon, LINQ to LDAP, LINQ to SQL, LINQ to XML, LINQ to Entities...

       Antes de explicar sobre criação de queries dinâmicas, vou falar sobre um assunto que é a base de tudo: árvores de expressão, ou Expression Trees. Uma expressão é uma forma de representar código em formato de dados. Este dado é armazenado numa estrutura de árvore e cada nó representa uma expressão, ou seja, uma instância de algumas das classes derivadas da classe System.Linq.Expressions.Expression.

        Alguns exemplos de classes de expressão são:

  • System.Linq.Expressions.ParameterExpression
  • System.Linq.Expressions.ConstantExpression
  • System.Linq.Expressions.BinaryExpression
  • System.Linq.Expressions.LambdaExpression

 

      O código abaixo mostra o desmembramento da expressão x => x > 10, que pode ser lida da seguinte forma:

image 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Linq.Expressions;

//ASSUNTO DE HOJE: ÁRVORES DE EXPRESSÃO
namespace RenatoGuimaraes.Videos.Pac.Net.VideoArvoreDeExpressao
{
    //Expression é código em formato de dados
    //O dado é armazenado numa estrutura de árvore
    //Cada nó da árvore representa uma expressão.
  
public class Program
  
{
        static void Main(string[] args)
        {
            Func<double, bool> del = x => x > 10;
            Console.WriteLine(del(30));

            Expression<Func<double, bool>> exp = x => x > 10;

            BinaryExpression corpo = (BinaryExpression)exp.Body;
            ParameterExpression param = exp.Parameters[0];
            ParameterExpression opEsquerdo = (ParameterExpression)corpo.Left;
            ConstantExpression opDireito = (ConstantExpression)corpo.Right;

            Console.WriteLine("{0} => {1} {2} {3}", param.Name, opEsquerdo.Name, corpo.NodeType, opDireito.Value);

            Func<double, bool> lambda = exp.Compile();

            Console.WriteLine(lambda(10));
            Console.ReadLine();
        }
    }
}

Abraço,

Renato Guimarães, MS MVP Visual C#

August 22

[PAC.NET]: Vídeo sobre propriedades automáticas com Visual C# 3.0

Olá amigos,

Segue mais um vídeo da série de vídeos do Pac.nET. Neste vídeo de 4 minutos, explico o recurso de propriedades automáticas do Visual C# 3.0. Este recurso permite que você definda em uma linha de código uma propriedade com get e set, sem se preocupar em criar um campo privado e sem ter que digitar o corpo do get e set.

Quando você precisa ter um método set que executa alguma lógica de validação, por exemplo, não dá para usar este recurso. Além disso, imagine que você quer colocar algum atributo no campo privado da propriedade.. Também naõ será possível pois o campo é gerado pelo próprio compilador, um campo anônimo.  

 

Por exemplo, veja o código da classe abaixo:

class Cliente {
    public String Nome { get; set; }
    public String Cpf { get; set; }
}

É equivalente ao código, com exceção dos nomes dos campos privados, que da forma acima são nomes gerados pelo próprio compilador:

class Cliente {
    private String _nome;

    public String Nome {
        get { return _nome; }
        set { _nome = value;}
    }

    private String _cpf;

    public String Cpf
    {
        get { return _cpf; }
        set { _cpf = value; }
    }
}

Se você analisar o código gerado pelo compilador com propriedades automáticas, temos:

internal class Cliente
{
    // Fields
    [CompilerGenerated]
    private string <Cpf>k__BackingField;
    [CompilerGenerated]
    private string <Nome>k__BackingField;

    // Properties
    public string Cpf
    {
        [CompilerGenerated]
        get
        {
            return this.<Cpf>k__BackingField;
        }
        [CompilerGenerated]
        set
        {
            this.<Cpf>k__BackingField = value;
        }
    }

    public string Nome
    {
        [CompilerGenerated]
        get
        {
            return this.<Nome>k__BackingField;
        }
        [CompilerGenerated]
        set
        {
            this.<Nome>k__BackingField = value;
        }
    }
}

abraço,

Renato Guimarães, MS MVP Visual C#

August 20

[LINK]: Um aliado na caça a duplicação de código: Clone Detective for Visual Studio.

Olá,

        Para você que se preocupa com a qualidade do seu código, gostaria de recomendar este projeto do Codeplex: Clone Detective for Visual Studio. Como em alguns casos o Copy-And-Paste pode ser o mais fácil e rápido, mas tem o seu lado ruim. Utilize esta ferramenta para melhorar a qualidade do seu código...

        Embora seja o primeiro release e ainda bem recente, acredito que vale a pena umas poucas horas para testá-lo. Abaixo segue uma figura de exemplo da interface da ferramenta, bem interessante. Para fazer download, clique aqui. Ainda não testei mas dei uma olhada no vídeo que tem uma boa explicação do que é a ferramenta e como ela funciona.

ScreenshotSmall.png

abraço,

Renato Guimarães, MS MVP Visual C#

August 19

[PAC.NET]: Vídeo sobre delegates, métodos anônimos, lambda expression e LINQ

Olá amigos,

     Retomando a minha série de vídeos do PAC.NET, hoje estou publicando um vídeo onde explico o código abaixo. O meu objetivo é mostrar como filtrar os números pares de uma coleção usando desde o Foreach até o LINQ. Ao mesmo, tempo aproveito para explicar a utilização de delegates, métodos anônimos (anonymous methods), expressões lambda (lambda expressions) e algumas queries em LINQ usando Where e Groupby, por exemplo.

PAC.NET: Usando m�todos an�nimos, delegates, lambda expression...

  
Video: PAC.NET: Usando m�todos an�nimos, delegates, lambda expression...

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace RenatoGuimaraes.Videos.Pac.Net
{
    //Usando do Foreach até o LINQ
    class Program
    {
        static void Main(string[] args)
        {
            List<int> numeros = new List<int> { 12, 24, 45, 56, 67, 98, 78, 67, 54, 90, 76};
            List<int> pares = new List<int>();

            //Usando a instrução Foreach
            foreach (int n in numeros) {
                if (n % 2 == 0)
                    pares.Add(n);
            }
            Console.WriteLine("Usando Foreach");
            Imprime(pares);

            //Usando o FindAll e o delegate Predicate
            Predicate<int> param = new Predicate<int>(IsPar);
            pares = numeros.FindAll(param);
            Console.WriteLine("Usando Delegate Predicate com Método");
            Imprime(pares);
            
            //Usando o método anôniomo
            pares = numeros.FindAll(delegate(int n) {
                return (n % 2 == 0);  
            });

            Console.WriteLine("Usando Método Anônimo do C# 2.0");
            Imprime(pares);

            //Usando Lambda Expression
            pares = numeros.FindAll(n => n % 2 == 0 );

            Console.WriteLine("Usando Lamba Expression");
            Imprime(pares);

            //Usando LINQ
            var query = from n in numeros
                        where n % 2 == 0
                        orderby n 
                        select n;

            pares = query.ToList<int>();
            Console.WriteLine("Usando LINQ");
            Imprime(pares);

            var query2 = from n in numeros
                         group n by n % 2 into grupo
                         where grupo.Count() >= 1
                         orderby grupo.Key
                         select grupo;

            foreach (var item in query2)
            {
                Console.WriteLine("Grupo: {0}: ",item.Key );

                foreach (var n in item)
                {
                    Console.WriteLine(n);
                }
            }

            Console.ReadLine();
        }

        static bool IsPar(int n) { 
            return (n % 2 == 0);
        }

        static void Imprime(List<int> colecao) {
            foreach (int n in colecao)
            {
                Console.WriteLine(n);
            }
        }
    }
}

     Há alguns dias publiquei outros posts onde falava sobre ossuntos relacionados a este vídeo:

[PAC.NET]: Delegate => Func, Action e Predicate

[PAC.NET]: Ainda sobre "var"... Expressões para criação de arrays

[PAC.NET]: Estender um tipo sem usar herança? Como?

[PAC.NET]: Não é "variant" e nem "late binding": A palavra-chave "var"

[PAC.NET]: Métodos Anônimos

     Embora seja um vídeo bem simples, acredito que dá para dar uma boa introdução para quem está começando no assunto. Tenhos planos de publicar outros vídeos sobre o assunto...

Abraço,

Renato Guimarães, MS MVP Visual C#

August 13

[OFF-TOPIC]: Beginner's All-purpose Symbolic Instruction Code

 

Pessoal,

           Pura bobagem, mas só hoje eu soube o significado da palavra "Basic" do Visual Basic. Eu já sabia que a linguagem teve suas bases e premissas no BASIC, que eu, erradamente, pensava que estava relacionada a palavra "básico" do português. Mas... Na verdade o BASIC é uma sigla que significa Beginner's All-purpose Symbolic Instruction Code, o que tem tudo a ver com linguagem.

           Então, pode-se dizer que o nosso Visual Basic .NET é Visual Beginner's All-purpose Symbolic Instruction Code for .NET :-):-):-):-) Desculpe-me pela bobagem.... Mas nenhum dos meus colegas que conhecem .NET, e mesmo os antigos, nunca me disseram isso. 

Abraço,

Renato Guimarães, MS MVP Visual C#.

August 11

[Download]: Visual Studio 2008 Service Pack 1 and .NET Framework 3.5 Service Pack 1

 

Olá pessoal,

Para quem ainda não baixou, já está disponível a versão RTM do VS .NET 2008 SP 1 e .NET Framework Service Pack 1. Abaixo estão os links para o download e fique atento as instruções de instalação:

Visual Studio 2008 SP 1

.NET Framework 3.5 SP 1

From: http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx

Overview

.NET-based Windows application development benefits from increased Windows Presentation Foundation (WPF) designer performance and updated components for Visual Basic and Visual C++ (including a MFC-based Office 2007 Ribbon).  Web development improvements include enhanced the client-side script tooling (JavaScript IntelliSense). In addition to IDE performance improvements SP1 fully supports SQL Server 2008 and the ADO.NET Entity Framework.

The .NET Framework 3.5 Service Pack 1 (SP1) delivers more controls, a streamlined setup, improved start-up performance, and powerful new graphics features for client development and rich data scaffolding, improved AJAX support, and other improvements for Web development. Additionally it introduces support for the ADO.NET Entity Framework and ADO.NET Data Services, which simplify data access code in applications by providing an extensible, conceptual model for data from any data source and enabling this model to closely reflect business requirements.

Visual Studio 2008 SP1 delivers:

  • Improved WPF designers
  • SQL Server 2008 support
  • ADO.NET Entity Designer
  • Visual Basic and Visual C++ components and tools (including an MFC-based Office 2007 style ‘Ribbon’)
  • Visual Studio Team System Team Foundation Server (TFS) addresses customer feedback on version control usability and performance, email integration with work item tracking and full support for hosting on SQL Server 2008
  • Richer JavaScript support, enhanced AJAX and data tools, and Web site deployment improvements

The .NET Framework 3.5 SP1 delivers:

  • Performance increases between 20-45% for WPF-based applications – without having to change any code
  • WCF improvements that give developers more control over the way they access data and services
  • Streamlined installation experience for client applications
  • Improvements in the area of data platform, such as the ADO.NET Entity Framework, ADO.NET Data Services and support for SQL Server 2008’s new features

...

abraço,

Renato.

[LINK]: LINQ Framework Design Guidelines. Muito bom!

 

Tão bons quantos os guidelines do .NET Framework Design Guidelines, também estão os guidelines do LINQ Framework Design Guidelines.  Para você que já está usando o LINQ nos projetos de software, vale a pena conferir as recomendações deste blog. É comum algumas empresas adotarem padrões de codificação e com este guia você pode criar mais um tópico no guia da sua empresa, assim garantirá que os programadores começarão certo...

Basicamente, o post começa com uma visão geral do LINQ, seguido por recomendações para extension methods, estendendo o LINQ, estendendo as interfaces IEnumerable<> e IQueryable<>, finalizando com a implementação do Padrão Queryable. Cada item classificado como DO, DO NOT, CONSIDER e AVOID.

Se sobrar um tempinho a mais para leitura, não deixe de visitar este blog Krzysztof Cwalina (um dia aprender a pronunciar o nome dele) :-). É um fera no assunto...

abraço,

Renato Guimarães, MS MVP Visual C#

July 09

[SEGURANÇA]: Descubra falhas de SQL Injection com Scrawlr, da HP

 

          Dando uma lida no Blog de Segurança da Microsoft e no Blog de Segurança da HP, vi que a HP tem uma ferramenta que pode ajudar na detecção de falhas de SQL Injection. Aproveite e leia também: SQL Injection Attack e Microsoft Security Advisory (954462).Vale a pena dar uma lida neste post para entender porque as duas empresas reforçam a importante de mitigar este tipo de falha.

          Para baixá-la, basta acessar o site e preencher um formulário bem simples. Para dúvidas ou mais informações, acessar o fórum do Scrawler. Se quiser saber mais sobre segurança, só acessar o site Application Security da HP.

abraço,

Renato Guimarães, MS MVP Visual C#

July 01

[MVP] MVP Award em Visual C#: 2008-2009 (só alegria)

Amigos,

           Mais uma vez tive a felicidade de receber o MVP Award em Visual C# (2008-2009). Há um ano, exatamente no dia 02 de Julho de 2007 eu publiquei um post ( manifestando minha felicidade por mais um ano. Impressionante que a felicidade foi tão grande quanto a primeira vez.

           Só tenho a agradecer a todos da comunidade que de uma forma ou de outra me ajudaram com mais este título. A todos que confiaram em mim e me deram oportunidade de contribuir em eventos, palestras etc.

           E vai meu agradecimento especial a Microsoft que a cada ano vem mostrando total seriedade e compromisso com a comunidade. É de impressionar! A dedicação deles é nossa motivação para contribuir cada vez mais e mais...

           Ainda não consultei a lista de todos os que renovaram ou que receberam a titulação pela primeira vez, mas gostaria de dar meus parabéns a um grande brother: Rodrigo Kono. Kono, de coração, meus parabéns pelo seu título. Com certeza, você é uma pessoa que agrega muito valor a comunidade e mereceu demais este reconhecimento. Continue assim. Também fica meus parabéns a todos que também renovaram...

Abração,

Renato Guimarães (Feliz que só a p...), MS  MVP Visual C#

June 07

[DOWNLOADS MICROSOFT]: Parallel Extensions to .NET Framework 3.5 June 2008 CTP

Olá amigos,

        Há poucos dias a Microsoft liberou o CTP de Junho 2008 (já tem um CTP em Dezembro de 2007) do Parallel Extensions para o .NET Framework 3.5 2008, também conhecido com PLINQ (Parallel Language Integrated Query). Para fazer o download, clique aqui.  Basicamente, o Parallel Extensions é um modelo de programação gerenciado para paralelismo de dados, tarefas e coordenação de trabalho paralelo executado por vários hardwares unificados por um agendador de trabalho. Como minha máquina tem dois núcleos, então vou mandar bala nos testes. Assim que eu der uma estudada publicarei minha experiência com ele.

        Eu já tive a oportunidade de ver uma demonstração deste framework no MVP Summit de 2007. Sensacional! Naquela época ainda não tinha qualquer CTP disponível. Pelo que vi, ele torna muito mais fácil a tarefa de escrever programas que escalam para tirar proveito do harware paralelo garantindo performance a medida que o número de processadores e núcloes aumentam. O melhor de tudo é que toda complexidade de modelo de programação concorrente é abstraído pra você.

        Como é um CTP, uma versão somente de testes, então vá com calma antes de pensar em adotá-lo em algum ambiente de produção, sabe-se que funcionalidades e características podem ser modificadas até a liberação da versão final.

        Para estudar mais sobre o assunto, vou dar uma lida nestes dois artigos: MSDN Magazine Article: Parallel LINQ: Running Queries on Multi-Core Processors e MSDN Magazine Article: Parallel Performance: Optimize Managed Code for Multi-Core Machines. Além disso, também tem o Microsoft Parallel Computing Developer Center.

Abraço,

Renato Guimarães, MS MVP Visual C#

June 06

[EVENTO]: CIAB/FEBRABAN 2008: Tecnologia e Informação. HP SOA Governance, HP SOA Quality e HP SOA Management

 

Olá amigos,

      Para quem for participar do evento CIAB/FEBRABAN 2008, além das várias atrações deste super evento, gostaria de convidá-los a visitar o stand INTEL/HP. Entre as várias soluções e produtos da HP, gostaria de destacar as soluções SOA que eu e mais dois colegas (Osvaldo Daibert e Erik Etsushi) iremos apresentar: Governança, qualidade e testes para ambiente SOA.

image

Começa na próxima quarta-feira, dia 11, o XIII Ciab Febraban, o maior congresso e exposição de Tecnologia da Informação (TI) do setor financeiro da América Latina. O evento já tem, confirmadas, as participações de 138 painelistas, que se apresentarão em 28 sessões, nos auditórios Febraban, Linha de Negócios e Eficiência Operacional. O tema central desta edição é “Tecnologia e Segurança”.

Os ministros do Desenvolvimento, Indústria e Comércio, Miguel Jorge, e da Justiça, Tarso Genro, já confirmaram participação. Além deles, deverão participar, também, os ex-ministros da Fazenda Antonio Palocci e Delfim Netto. Outros destaques do evento deverão ser o consultor da Peppers and Rogers, Don Peppers, o presidenta da Febraban, Fabio C. Barbosa, os presidentes da Oi, Luiz Eduardo Falco, e da CPM Braxis, Jair Ribeiro, o futurólogo brasileiro Jean Paul Jacob e a presidente da Caixa Econômica Federal, Maria Fernanda Ramos Coelho.

O evento terá início às 08h30 do próximo dia 11 (quarta-feira) e vai até o dia 13. Serão 138 painelistas, que se apresentarão em 28 sessões, nos auditórios Febraban, Linha de Negócios e Eficiência Operacional. O tema central desta edição é “Tecnologia e Segurança”.

Entre as personalidades presentes estão ministros de estado do Brasil, presidentes de bancos, diretores de tecnologia (CIOs), diretores de segurança (CSOs), presidentes de corporações de vários setores da economia e de tecnologia, jornalistas, consultores e conferencistas internacionais.

       Vocês terão oportunidade de conhecer o Business Technology Optimization (BTO) para SOA. E o que é isso? Uma solução completa e integrada para preencher o gap entre a área de TI e de negócios ajudando a: acelerar a adoção SOA, reduzir os riscos de entrega do SOA, e suportar todos os desafios do Ciclo de Vida do Serviço.

       Tecnologia da Informação - TI? Para HP não é só TI, e sim Business Technology - BT. Isso mesmo: Tecnologia do Negócio. TI é tão importante para o negócio que não deve ser chamado somente de Tecnologia da Informação. Como o negócio não vive sem TI, um banco por exemplo, então os resultados da área de TI são medidos com base nos resultados do negócio. Se TI não funciona, o banco (o negócio) não funciona. Resumindo, TI é tudo para o negócio.

        A HP dispõe de um completo portfólio de produtos e serviços que podem ajudá-los a obter os benefícios (agilidade e baixo custo) prometidos pela adoção de uma arquitetura orientada a serviços. Por meio da governança, qualidade, testes e gerenciamento a HP ajuda na transformação do seu ambiente SOA. E por que HP? Só dar uma olhada no quadrante mágico do Gartner. Também pode verificar no SearchSOA.com, Products of the year 2007, veja quem foi o campeão :-):-):-):-) Why HP for SOA?

image

         Em especial, você terá oportunidade de ouvir um pouco sobre os produtos da HP para governança, qualidade/testes de gerenciamento de ambiente SOA (Arquitetura Orientada a Serviços): HP SOA Governance, HP Quality e HP SOA Management.  Quer mais informações, então assita este vídeo na internet:

image

Governança SOA

         Governaça SOA? Sim. Pode-se dizer que é o conjunto de práticas e atividades que você utiliza para controlar os serviços de forma a garantir que tudo experado e com certo nível de qualidade.

          SOA também traz riscos (complexidade), nem tudo é só agilidade, como é prometido. Quando se fala em SOA pensamos logo em uma modelo projetado para suportar mudanças, flexível, rápido time to market, e de baixo custo de implementação (considerando que teremos reuso etc). Por outro lado temos os riscos devido a complexidade (é amigo, não é fácil): duplicidade de código, falta de visibilidade dos serviços, pouco reuso, instabilidade, ninguém sabe onde tem serviços e o que fazem, serviços duplicados etc.

          Em HP BTO definimos o ciclo de vida do serviço em Planejar, Entregar e Operar. Ou seja, com base nas necessidades do negócio você planeja o que será construído; depois você constrói para entregá-lo para uso; por final, opera o serviço para garantir que funcione conforme planejado e esperado pelos consumidores. E para controlar o ciclo de vida do serviço, a HP oferece as soluções ( e também serviços profissionais) necessárias para você controlar todo o ciclo de vida de forma integrada e transparente: HP SOA Governance, HP Quality e