Microsoft Live Labs: Infinite Canvas

30/04/2009 23:59

De vez em quando gosto de dar uma espiada no Live Labs para ver o que os caras andam aprontando (do Live Labs que saiu, por exemplo, o Photosynth). Hoje vi um projeto interessante chamado Infinite Canvas. É mais ou menos assim, você adiciona diversas referências de imagens e um painel navegável é criado, permitindo uma mistura de funcionalidades de Deep Zoom e slide. Segundo os autores, a idéia é a experiência de uma leitura de revista em quadrinhos na Web.

InfiniteCanvas

Microsoft Live Labs ,



EntLib (parte 4) – Como criptografar valores de configurações

30/04/2009 23:21

Essa é rápida, em dois passos:

  1. No Visual Studio, na janela Solution Explorer clique com o botão direito no arquivo *.config e escolha Edit Enterprise Library Configuration.
  2. No painel que será aberto selecione o bloco desejado e configure na janela Properties a propriedade ProtectionProvider com um dos valores possíveis: RsaProtectedConfigurationProvider ou RsaProtectedConfigurationProvider.

 

O arquivo terá os seus valores criptografados para o bloco escolhido, parecido com o exemplo abaixo:

<configuration>
  <configSections>
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </configSections>
  <dataConfiguration configProtectionProvider="DataProtectionConfigurationProvider">
    <EncryptedData>
      <CipherData>
        <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAnG4OGsLZME6zifWS77nKbwQAAAACAAAAAAADZgAAqAAAABAAAAAvCXZMbpn4GScVpZdnDewUAAAAAASAAACgAAAAEAAAADusmEwywBaRj/cosxnUjNwwAAAAU0tWH46p699zcc0Em297GCXHmQFeJNDjBW/OYYD8dhL1YQvo3kv2xEqdceYyMaN4FAAAAH8/JIj3NPW0iqGaL3ea8EJ6iTcL</CipherValue>
      </CipherData>
    </EncryptedData>
  </dataConfiguration>
  <connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
    <EncryptedData>
      <CipherData>
        <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAnG4OGsLZME6zifWS77nKbwQAAAACAAAAAAADZgAAqAAAABAAAABYRu+xiL0lzqHttNs404kBAAAAAASAAACgAAAAEAAAAMINKPGoHaeQb9sgHCDgdoMwAAAA54NHzS+SEf/FsxrhhdvEmzkaZquWXEXtkUqvOJJFAKcvetVZ/MrSlHYSwTkeK//IFAAAAMgRi2qGSQYz/thfljTdGEeOBQ6E</CipherValue>
      </CipherData>
    </EncryptedData>
  </connectionStrings>
</configuration>

Enterprise Library



EntLib (parte 3) – Instrumentação de código

29/04/2009 23:22

Dizemos que um código possui instrumentação (ou Instrumentation, do inglês) quando ele é capaz de gerar indicadores para monitorarmos ou medirmos sua performance. Tipicamente, esses indicadores auxiliam na detecção de erros relacionados a performance e podem ser utilizados, por exemplo, para visualização através do aplicativo de monitoramento de performance do Windows (acesse através da opção Run do Windows, digitando perfmon).

Com exceção do Unity, todos os demais blocos da Enterprise Library podem ser instrumentalizados. Por padrão esse recurso vem desativado, sendo necessário utilizar um arquivo bat que aplica as configurações necessárias para ativação. Caso você tenha feito a instalação padrão o arquivo bat poderá ser executado através da opção Run do Windows usando o arquivo abaixo:

C:\Program files\Microsoft Enterprise Library 4.1 - October 2008\InstallServices.bat

Para desinstalar a instrumentação basta digitar o mesmo arquivo com o parâmetro “/u”, conforme abaixo:

C:\Program files\Microsoft Enterprise Library 4.1 - October 2008\InstallServices.bat /u

Outra forma disponível para realizar as operações acima é utilizar os atalhos existentes no menu Start / All programs / Microsoft patterns & practices / Enterprise Library 4.1 - October 2008.

Uma vez instalado devemos adicionar uma referência no projeto para a seguinte biblioteca:

Microsoft.Practices.EnterpriseLibrary.Common.dll

Devemos também adicionar o seguinte namespace na classe que usará a instrumentação:

...
using Microsoft.Practices.EnterpriseLibrary.Common.Instrumentation;
...

Por último será necessário adicionarmos no arquivo de configuração do projeto (tanto faz ser Web.config ou App.config) o bloco de instrumentação, clicando com o botão direito no arquivo e escolhendo a opção Edit Enterprise Library Configuration. Na janela de configuração do Enterprise Library Configuration clique com o botão direito no segundo nó da estrutura e escolha Instrumentation.

Instrumentation

Utilizando a janela Properties do Visual Studio é possível configurar as propriedades do bloco, para o exemplo deste post eu alterei as propriedades PerformanceCountersEnabled, WmiEnable e EventLoggingEnabled para True. Abaixo temos um exemplo de como devemos implementar um listener para monitoramento de chamadas de conexão com o banco de dados.

public class MyListener
{
    public MyListener(string instanceName, bool a, bool b, bool c) { }

    [InstrumentationConsumer("DbConnect")]
    public void ConnectObserved(object sender, EventArgs e)
    {
        System.Console.WriteLine("I saw a Database Connect.");
    }
}

[InstrumentationListener(typeof(MyListener))]
public class MyApplication
{
    [InstrumentationProvider("DbConnect")]
    public event EventHandler<EventArgs> OnDbConnect;
}

Fonte: http://msdn.microsoft.com/en-us/library/cc511922.aspx

Enterprise Library



EntLib (parte 2) – Melhore a performance de suas consultas

26/04/2009 03:09

Todo mundo sabe que na maioria das vezes o maior custo para recuperarmos informações numa aplicação está na consulta ao banco de dados. Entenda por “custo” a demanda de infra necessária para obter ou até mesmo persistir dados no contexto da aplicação bem como o tempo de resposta para executar tais operações, o que impacta diretamente na performance geral da aplicação. Uma das técnicas utilizadas para evitarmos consultas desnecessárias ao servidor de banco de dados é o armazenamento temporário em cache, onde os dados são disponibilizados em uma área da memória do servidor de aplicação.

A Enterprise Library oferece uma biblioteca para utilização de mecanismos de cache de maneira simples chamada Caching Application Block. Para usarmos o bloco numa aplicação basta adicionarmos uma referência no projeto da seguinte DLL:

Microsoft.Practices.EnterpriseLibrary.Caching.dll

A partir daí adicionamos o namespace indicado abaixo na classe que utilizará o Caching:

...
using Microsoft.Practices.EnterpriseLibrary.Caching;
... 

Se quiséssemos, por exemplo, recuperar imagens de produtos gravadas no banco de dados, utilizaríamos o seguinte código:

...

byte[] fotoProduto = null;
ICacheManager cache = CacheFactory.GetCacheManager();
fotoProduto = (byte[])cache[id.ToString()];

if (fotoProduto == null)
{
    ServicoProduto servico = new ServicoProduto();
    fotoProduto = servico.ObterFotoProduto(id);

    cache.Add(id.ToString(), fotoProduto);
}

...

 

Repare que nas linhas 4 e 5 o cache é criado e a variável fotoProduto recebe o valor armazenado no gerenciador de cache do Caching Application Block. Nas linhas 7 a 13 a consulta ao banco é realizada caso o cache ainda não tenha sido preenchido ou o seu tempo de vida tenha expirado. Nas solicitações seguintes a consulta ao banco será descartada, já que o cache já terá recebido a carga da imagem. Para garantirmos a unicidade das imagens fornecemos junto a chave do produto através do valor contido na variável id.

O arquivo de configuração da aplicação deve ser alterado adicionando-se as tags a seguir:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>

...

    <section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </configSections>

...

  <cachingConfiguration defaultCacheManager="Cache Manager">
    <cacheManagers>
      <add expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000"
        numberToRemoveWhenScavenging="10" backingStoreName="Null Storage"
        type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        name="Cache Manager" />
    </cacheManagers>
    <backingStores>
      <add encryptionProviderName="" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        name="Null Storage" />
    </backingStores>
  </cachingConfiguration>

...

</configuration>

 

O tempo de duração do cache está definido na linha 14, através da propriedade expirationPollFrequencyInSeconds.

Obviamente devemos planejar o uso deste mecanismo, entendendo onde teremos um real ganho de performance ao aplicarmos essa técnica, caso contrário estaremos só adicionando mais código na aplicação.

A título de informação, a Microsoft tem um projeto com o codinome Velocity que oferecerá uma plataforma de cache distribuído para aplicações armazenando qualquer tipo de dado com alta-performance. Atualmente o projeto está com a versão CTP 3 disponível para download, caso você tenha alguma experiência com o Velocity e deseje compartilhar comentando aqui, fique a vontade. Até o próximo post da série.

Enterprise Library



Oitavo encontro do grupo .Net Architects

25/04/2009 15:04

Hoje pela manhã participei de mais um encontro do grupo de estudos de arquitetura .Net Architects, onde tivemos como tema ASP.Net MVC x WebForms. O formato da reunião foi um pouco diferente das anteriores, pois o debate ocorreu junto com a “defesa” de cada tecnologia pelo Giovanni Bassi e o André Dias, respectivamente.

Houve até um desafio, onde os dois construíram a mesma aplicação, cada um com sua tecnologia, em 30 minutos. Foi possível comparar na prática as vantagens e as desvantagens de cada uma. Achei fantástico esse formato de reunião, além de muito divertido.

Outra novidade foi a transmissão do encontro em tempo real, com a participação de mais de 20 membros, enviando dúvidas e comentários para os presentes. No final discutimos sobre o primeiro evento do grupo, o .NET Architects Day 2009.

Como de costume, a reunião foi gravada e tão logo seja possível estará disponível no site do grupo.

.Net Architects ,



EntLib (parte 1) – Organizando os arquivos de configuração

23/04/2009 23:34

Se pegarmos um arquivo de configuração de uma aplicação web feita em .NET Framework 1.1 e compararmos com um web.config atual veremos que a quantidade de elementos e tags dentro do XML cresceu consideravelmente. Com o passar dos anos novas implementações e melhorias no .NET Framework ampliaram as possibilidades de configuração de um projeto, dividindo os desenvolvedores em dois grupos distintos: os que gostam e os que odeiam arquivos de configuração XML.

Divergências à parte, vou mostrar uma opção para separarmos as configurações relacionadas a Enterprise Library em arquivos próprios, separados do web.config ou app.config, o que pode ser de grande ajuda para agilizar o trabalho de manutenção e até controlar o acesso a quem é devido.

Vamos utilizar um programa disponibilizado com a instalação da Enterprise Library chamado Enterprise Library Configuration. Se a instalação foi realizada da forma padrão, o arquivo estará disponível no seguinte endereço:

C:\Arquivos de programas\Microsoft Enterprise Library 4.1 - October 2008\Bin\EntLibConfig.exe

Outra forma de acessar este programa é através da IDE do Visual Studio, clicando com o botão direito no arquivo de configuração do projeto e escolhendo a opção Edit Enterprise Library Configuration.

EntLibConfig

Na tela que será apresentada clique com o botão direito no segundo nó da estrutura e escolha a opção New e em seguida Configuration Sources. Será criado um novo nó chamado Configuration Sources, abaixo dele existe um item chamado System Configuration Source, remova este item clicando com o botão direito em cima dele e escolhendo Remove.

Clique novamente com o botão direito no item Configuration Sources e escolha a opção New e em seguida File Configuration Source. A partir desse ponto, basta utilizar a janela Properties (F4) do VS.NET para localizar o caminho do arquivo de configuração através da propriedade File. Também será necessário clicar no item Configuration Sources do painel de configuração e alterar a propriedade SelectedSource para File Configuration Source.

EntLibConfig01

Repetindo os passos acima você pode adicionar mais arquivos de configuração, dependendo apenas da sua necessidade e conveniência. Outra possibilidade interessante é criptografar o arquivo isolado, usando a propriedade ProtectionProvider, conferindo um nível a mais de segurança às informações da aplicação.

Gostando ou não dos arquivos de configuração XML, espero que este post tenha sido útil para você. Até o próximo!

Enterprise Library



Enterprise Library 5 com lançamento previsto para 2010

23/04/2009 22:10

Os trabalhos de desenvolvimento da nova versão começaram oficialmente nessa semana, confira no anúncio do Grigori Melnik, product owner da Enterprise Library. Segundo Melnik a idéia é liberar a nova release no início de 2010, para isso eles utilizarão XP, Scrum e TDD mesmo com uma equipe diversificada e distribuída (Wow! Estou curioso para ver o resultado!).

Quem tiver interesse de acompanhar o desenvolvimento desse projeto “à moda ágil” basta checar o CodePlex, inclusive é possível contribuir para a melhoria da biblioteca.

Informativo



Série de posts sobre Enterprise Library

21/04/2009 20:31

PatternsPractices

A partir dessa semana iniciarei aqui no Reverb uma série de posts sobre a Enterprise Library. A exemplo da série sobre SQL Server 2008, utilizarei exemplos práticos para explicar os principais conceitos de cada application block que faz parte dessa biblioteca.

A Enterprise Library faz parte da área de recomendações e boas práticas da Microsoft conhecida como pattern & practices, disponível no MSDN. Seu código-fonte é disponibilizado juntamente com a instalação da biblioteca, permitindo sua customização e extensão. O objetivo principal é fornecer componentes para resolução de cross-cutting concerns (ou preocupações transversais de uma aplicação como logging, segurança, caching, validação, acesso a dados, manipulação de exceções, etc.).

Convido-o a acompanhar e participar com comentários e experiências vividas no uso da Enterprise Library, enriquecendo o conteúdo da série. Até breve!

Enterprise Library , , ,