Friday, March 23, 2007

Microsoft TechDays - Conclusões

E foi o TechDays 2007!

Entre conceitos, alguns novos, outros nem por isso, alguns mais interessantes que outros, destacaria os seguintes:
- Expression Blend
- XAML/XOML
- a familia W*F
- a abordagem a algumas particularidades do .Net 3.0, que inclui o C# 3.0
- o LINQ!!!
- o ORCAS
- algumas metodologias ágeis, como o XP (não o SO :), mas o eXtreme Programming), o SCRUM e o MSF Agile
para referir apenas alguns...

Foram três dias interessantes, cheios de informação nova ou semi-nova, e que serviram sobretudo para dar um pequeno fôlego ao nosso dia-a-dia como developers! ;)

Podem consultar mais detalhes no link do TechDays 2007:
http://www.microsoft.com/portugal/techdays/2007/temas.mspx

E acima de tudo, divirtam-se! :)

Microsoft TechDays - Dia 3

E eis-nos chegados ao terceiro desta edição do TechDays!

Deste ultimo dia, destaco estas duas apresentações, ainda na linha do que designei de W*F (aka, Windows "qualquer coisa" Foundation :)):

DEV020 - Extensibilidade do Windows Workflows Foundation com Custom Activities
DEV024 - Construir Serviços WCF com WWF - Presente e Futuro

E sobretudo estas duas, que gostei bastante:

DEV027 - LINQ - .NET Language Integrated Query Framework
DEV025 - Segurança na Windows Communication Foundation: objectivos, modelos, padrões e pontos de extensão

Cá seguem os meus resumos:

DEV020 - Extensibilidade do Windows Workflows Foundation com Custom Activities

O WWF foi lançado em Novembro/06 como parte do Windows Vista/.Net 3.0.

Nesta sessão foi relembrado o conceito de Workflow como implementação de processo ou lógica de negócio. Foi ainda relembrado o concieto de actividade, um passo no workflows (e/ou uma classe .Net)

Fazendo a analogia com a UI:
- workflow = form
- actividade = controls

As Custom Activities são escritas quando há necessidade de reutilização.

Como fazer uma Custom Activity:
- derivar da base-class Activity
- usar o namespace System.Workflows.ComponentModel

É possivel tirar partido do XAML.

Sequência do workflow: é colocada no ficheiro XOML (o editável do XAML), na forma de tags

A máquina de estados da actividade inclui o seguinte:
- Initialize()
- Execute()
- Cancel()
- Compensate()

Uma excepção no workflow é uma Fault, que é passada para a actividade Faulting, onde é depois tratada.

Uma actividade é single threaded, logo não convém colocar nada pesado no workflow.

Benefícios do WWF:
- transparência
- serviços
- modificação dinâmica

As actividades são unidades fundamentais de Execução, Reutilização e Composição.

DEV024 - Construir Serviços WCF com WWF - Presente e Futuro

O que é o WCF e o WWF? E o que não são?


- são Frameworks de desenvolvimento de vanguarda
- não são pensadas para trabalhar em conjunto, dado que foram desenvolvidas em paralelo
- não são produtos! São frameworks.

Arquitecturas sincronas:
- utilizam o paradigma pergunta-resposta
- não utilizam toda a funcionalidad WWF.
- dificuldades:
. passagem de parâmetros
. leitura/resposta
. sincronização de threads

Arquitecturas assíncronas:
- permitem usar todas as funcionalidades do WWF
- o WWF foi pensado para esta abordagem
- o que preciso ter mais?
. passo o id do workflow que quero executar (formas de passar o id: com cookies, soap header, customizada - ie, passo o id como parte da interface, mas não é uma boa solução - )
- mapeamento de inputs/outputs: External Data Exchange (construido para o SharePoint, é complexo de usar; válido mas limitado em termos de evolução futura; não vai ser abandonado)´

Como configurar uma External Activity:
- definir a interface
- criar um objecto que implementa a interface

Class MyFile PersistenceService: classe que permite guardar os dados em File System (ie, em suportes de dados persistentes)

WWF/WCF em .Net 3.5:
- duas novas actividades: send e receive (correlation tokens: associam a pergunta à resposta
- porque na versão 3.0 não é muito simples de implementar, a versão 3.5 traz algumas vantagens:
. queues (transparentes para o user)
. suporte a gestão de permissões
. suporte a conversações

Com o ORCAS (futura versão do Visual Studio) há problemas actuais que são resolvidos. A integração com o WCF e WWF passa a ser mais natural.

DEV027 - LINQ - .NET Language Integrated Query Framework

O LINQ é uma nova linguagem de query integrada na plataforma de desenvolvimento.


Não exige alterações à plataforma, mas às linguagens de programação (outra forma de fazer as coisas).

Efectua queries sobre objectos, e funciona com extensões ao C# 3.0.

Inovações no C# 3.0:
- inferência no tipo de variáveis locais
- expression tree
- tipos anónimos
- métodos de extensão

Os Standard Query Operators são os métodos disponiveis. Os Extension Methods podem ser utilizados acrescentando a referência de onde os métodos se encontram (ex.: System.Query).

Utiliza Deferred Query Execution, ie, a query só é executada quando tento iterar sobre os dados.

LINQ para SQL:
- actualmente:
. mando os dados da BD para um objecto (com open, datareader, etc...)
. desvantagens: pode haver incompatibilidades de data types (não há verificação em compile time)
- com o LINQ:
. os dados também são enviados para objectos
. as classes descrevem os dados (a classe é Strongly Typed)
. as tabelas são apenas colecções
. a ligação também é Strongly Typed (ex.: Northwind db = new Northwind(........);)
. a linguagem suporta sintaxe para queries

O ORCAS foi referido como facilitador para a integração com o LINQ.

Grande vantagem do LINQ: unifica o modelo de programação (não necessito saber XML, ou SQL, ou o que quer que seja, para aceder aos dados)

Outras vantagens:
- compile-time type checking
- intellisense

LINQ para XML:
- actualmente:
. modelo imperativo
. centrado no documento
. não tem querys integradas
. o DOM carrega tudo para memória (torna-se pesado)
- com o LINQ:
. centrado nos elementos
ex.:
xElement contacts = new xElement("contacts",
from c in customers
where c.Country = "USA"
Select new xElement("contact",
new xElement("nome", c.CompanyName),
new xElement("phone", c.CompanyPhone)
)
);
. modelo declarativo
. queries integradas
. menos código. E mais eficiente.

Principais caracteristicas:
- linguagem integrada de query (XPath, XQuery)
- melhor manipulação do DOM

Arquitectura LINQ:
- source implementa a IEnumerable (faz com que o código funcione à base de delegates, etc...)
- source implementa a IQueryable (gera uma árvore de objectos)

DEV025 - Segurança na Windows Communication Foundation: objectivos, modelos, padrões e pontos de extensão

Objectivos na troca de mensagens:

- confidencialidade
- autenticidade
- integridade
- autorização
- ...

Transporte vs. mensagem:
- segurança ao nivel da mensagem (XML-DSIG, XML-ENC, WS-*)
- segurança ao nivel do transporte (SSL, Kerberos, ...)
Ambos têm vantagens e desvantagens.

Segurança na WCF - é implementada ao nivel do channel Stack:
- Binding: define o formato da pilha de protocolos
. stack do cliente tem de igual ao stack do servidor
. não é no binding que defino o ssecurity token a usar (quem o define são os behaviors - clientCredentials, ServiceCredentials - ao nivel do Protocolo e do Transporte)
- authorization behaviors (definidos no Dispatcher, do lado do serviço)

Modos de binding:
- Transporte
- Mensagem (username, certificados X.509, Herberos, IssuedToken)
- Hibrido

Credenciais do cliente:
- ao definir as credenciais do cliente, defino também as credenciais do serviço
- qual escolher? Depende do cenário: Internet, Intranet, ambos, Federação

Componentes de um cenário de Autorização:
- Bindings
- Source Credentials
- ServiceAuthorizationBehaviors

Padrões de Autenticação:
- Arquitectura
- Desenho
- Implementação

WSSF - Web Service Software Factory:
- implementação de padrões para a WCF

NTLM: um protocolo de segurança que pode ser usado em alternativa ao Kerberos, mas é menos seguro => realça a importância de usar padrões, soluções testadas, em vez de usar configurações ad-hoc (exemplo de alteração de parâmetros de false para true, quando o Kerberos não funcionou. Passou a usar NTLM, baixando os niveis de segurança)

"O Admirável Mundo Novo" da Segurança:
- IdentityMetaSystem (entidades externas que verificam a identidade - IdentityProvider)
- a identidade é constituida por um conjunto de claims, transportadas em SecurityTokens, e representam uma identidade digital (como que um documento de identificação digital - tipo um BI digital, um Contribuinte digital, etc...)

Federação - um cenário mais complexo:
- posso criar uma cadeia de identity providers
- a comunicação é feita por WS-Trust
- como funciona:
. WSDL + WS-Policy (WS-MEX): para representar as politicas de segurança (obter metadata)
. WS-Trust: para enviar as mensagens (comunicar)

Pontos de extensão - autorização baseada em claims:
- claim: "the expression of a right with respect to a particular value"
- são implementadas em claimsets (o SecurityToken tem um claimset)

IdentityModel: utilizado para implementação de segurança com autorização baseada em claims

Pontos de extensão no WCF:
- validação de SecurityTokens (username tokens, validação de certificados X.509)
- definição de Thread.CurrentPrincipal (associação de roles)
- politicas de autorização
- SecurityTokens proprietários (Provider, Serializer, Authenticator)
- Canais de protocolos

Microsoft TechDays - Dia 2

Neste segundo dia, das apresentações a que assisti, destaco as seguintes:

DEV012 - Windows Presentation Foundation II
DEV013 - Own3d: Hacking ainda mais fácil em AJAX Web Sites?
DEV015 - Introdução ao Windows Communication Foundation

Cá vai um pequeno resumo!

DEV012 - Windows Presentation Foundation II

"Programming is an art form that fights back."


Foi assim que se iniciou a 2ª parte da sessão sobre WPF, tendo decorrido a 1ª na véspera.

Nesta sessão, falou-se de WPF Everywhere (WPFE), que é um subset do WPF. É XAML-based e tem como plataformas target a Web e o MobilePhone.

WPFE vs. WPF - o WPFE:
- não tem 3D
- tem UI controls minimo
- não tem suporte GPU
- pretende correr no browser

O Web Programming Model é XAML e Javascript, ou XAML e .Net

Objectivo do WPFE:
- enhance de páginas Html: foi mostrado um exemplo de uma página html normal com um script javascript pelo meio, que não faz mais que instanciar uma classe js

Falou-se do MS Expression Design, uma ferramenta para design com a possibilidade para XAML. Falou-se também do XAMLPad, que corre como uma aplicação e permite gerar código XAML a partir de objectos gráficos.

WPFE vs. Flash - o WPFE:
- é XAML-based
- permite tirar partido do Javascript
- permite tirar partido do CLR (C#, VB.Net, VisualStudio)
- é searchable (XML)

Como instalar o WPFE:
- autoinstalation
- windows update? eventualmente num futuro próximo será um dos updates do windows. O utilizador te-lo-á sem sequer se aperceber. Para já não é possivel.
- tamanho: inferior a 2Mb
- não exige .Net/WPF

DEV013 - Own3d: Hacking ainda mais fácil em AJAX Web Sites?

Nesta apresentção, alertou-se para algumas situações que podem gerar insegurança em sites web.

Cuidados a ter:
- não expôr um web service (expôr apenas, por exemplo, só os web methods usados pelo AJAX)
- não usar callbacks passados por parâmetro na Query String (já que a função de callback pode ser 'roubada' e utilizada de forma nociva)
- atenção ao cross-site-scripting (agora ainda mais vulnerável com as tabs dos novos browsers)

Falou-se do Cross Site Request Forgery, que explora a relação de confiança de um site nos seus utilizadores. Uma técnica para o evitar é garantir que um Post vem da minha máquina. Se não vier, não executo. Outra técnica é tornar as páginas minimamente imprevisiveis.
Potencial:
- ataques IP internos
- configuração de routers, impressoras, etc...
- "qualquer endpoint http standard que possa ser automatizado"
Reforçou-se ainda que a minima falha XSS derrota a maioria das técnicas de prevenção.

Como conclusão, foram referidos alguns pontos:
- os browser worms, CSRF, XSS, podem ser explorados em ataques na web 2.0
- a promiscuidade entre tabs no browser torna os sites ainda mais vulneráveis a ataques
- boas práticas:
. privilégios mínimos de acesso a BDs
. não usar frameworks AJAX 'caseiras'
. validar todos os inputs
. cuidado com a exposição de web services

DEV015 - Introdução ao Windows Communication Foundation

Esta sessão apresentou o Windows Communication Foundation (WCF), uma nova abordagem na relação cliente-servidor (ou cliente-serviço).


O WCF pertence à framework 3.0, e possui uma API comum a todas as tecnologias (WSE, Remoting, etc). Reforça o conceito de separação entre interface e implementação.

Como é distribuido?
- hosting no IIS (exige a utilização do ficheiro .svc, que identifica o service type)
- WAS (Windows Activation Service) - no Windows Vista ou no "Longhorn"

Bindings:
- BasicHttpBinding: interoperabilidade com WCF (o WCF garante maior interoperabilidade e maior garantia de conformização aos standards que o WSE)
- os bindings podem ser customizados (no ficheiro de configuração) - neste ponto foi referida a importância das configurações. São muito poderosas e por isso é preciso manipulá-las com cuidado e com a certeza do que se está a fazer.

Contratos:
- serialização do MyOutputType e MyInputType
- serialização feita por:
. DataContractSerializer (default)
. XML Serializer (é mais lento)

Transacções:
- suporta WS-AT
- gestores de transacção:
. LTM (LightWeight Transaction Manager) - um AppDomain, um serviço
. DTC (que pode usar o WS-AT ou o OleTx) - quando temos AppDomains diferentes, uma LTM passa automaticamente a DTC
. KTM (Kernel Transaction Manager) - para o Vista e "Longhorn"

Segurança:
- Autenticação (Security Token; suporte built-in para windows - kerberos e NTLM, Certificados X.509, tokens de Cardspace, tokens de SAML, autenticação de user e pwd)
- Autorização (ServiceAuthorizationBehavior)

A administração WCF pode ser feita com PowerShell.

Interoperabilidade e integração:
- cliente asmx (WCF) e serviço WCF (asmx): estratégia de integração BasicHttpBinding com o WCF
- cliente WCF e serviço COM+: estratégia de integração ComSvcConfig.exe para wrap do COM+ num WCF endpoint
- cliente WCF e serviço COM: estratégia de integração ServerMonikers
- ...entre outras...

Conclusões:
- WCF é uma DSL para comunicação (message-based)
- API consistente e unificada
- vem com o Framework .Net 3.0

Microsoft TechDays - Dia 1

Este primeiro dia começou com uma sessão de abertura onde se pretendeu fazer uma resanha dos vários pontos a abordar ao longo do evento.

Deste primeiro dia, as sessões que considerei mais interessantes, e sobre as quais me debruçarei de forma algo resumida (!!), foram as seguintes:

SRV002 - Nova geração de Arquitectura de Infra-Estrutura: Service Oriented Architectura (SOI)
DEV005 - Team System: Extensibilidade e Integração Continua
MGT004 - Windows PowerShell (ex-"Monad"): a próxima geração de Command Line Scripting

Segue um pequeno resumo destas sessões!

SRV002 - Nova geração de Arquitectura de Infra-Estrutura: Service Oriented Infrastructure (SOI)

Esta sessão centrou-se na Service Oriented Architecture, agora em voga, que consiste, de forma muito resumida, em ter uma serie de aplicações que são clientes de mais do que um serviço.

Ressaltou-se a importancia de conhecer a infraestrutura-alvo e de ter um catálogo de serviços.

Foi referido o WSRM (Windows System Resource Manager) para facilitar a gestão de recursos, e que já vem incluido no Windows Server 2003, Enterprise Edition.

Por onde começar?
Foram sugeridos um conjunto de pontos:
- definir e prioritizar os serviços (conceito "low hanging fruit" - começar pelos serviços mais à mão) - não esquecer os ambientes de teste e controlo de qualidade
- definir a experiência do utilizador (comunicação não tecnológica)
- desenhar a arquitectura de referência (abstrair e normalizar; categorizar subscritores como alto, médio ou baixo, por: capacidade, carga, performance, disponibilidade)
- evoluir para a gestão de serviço (garantir que cada serviço tem um gestor, que faça a gestão entre o fornecedor do serviço e o consumidor, que faça a gestão da entrega do serviço e que garanta o suporte ao serviço)

Foram referidos como facilitadores de SOI algumas tecnologias:
- virtualização (utilização de máquinas virtuais -exige gestão e pode apresentar alguns problemas de performance)
- clustering (tem custos elevados - compensa se se pretende ganhar em capacidade)
- SAN (flexibilidade, capacidade, replicação, backup)

Em resumo:
- não é uma nova tecnologia. é uma nova abordagem (uma mudança de pensamento, se quisermos...)
- depende da capacidade do gestor do serviço
- inclui gestão de perfis (roles)
- deve ser adoptada gradualmente (conceito "low hanging fruit")

DEV005 - Team System: Extensibilidade e Integração Continua

Esta apresentação focou-se sobre os conceitos de Integração Contínua (IC), já familiares para alguns.


Foi referido um conjunto de boas práticas, como:
- ter um Sistema de Controlo de Versões (VSS, TFS, ...)
- ir buscar sempre a ultima versão do projecto ("Get latest version")
- integrar uma vez por dia

Como beneficios da IC, foram listados os seguintes:
- reduz o esforço de integração
- permite a automatização de tarefas
- permite a detecção mais rápida de erros
- diminui ciclos de feedback
- permite a monitorização dos estados dos projectos
- mais qualidade no código (com ferramenta de qualidade)

Foram citadas algumas ferramentas que possibilitam a IC:
- NAnt e MSBuild
- NAntContrib (complementa o NAnt)
- NUnit (testes unitários)
- NCover (estatisticas sobre o código - permite, por exemplo, saber que % do código está abrangida por testes unitários)
- NDepend (análise de dependências entre source e assemblies)
- FxCop (análise de boas práticas no código - convenções, performance, etc...)
- Simian (detecção de duplicação de código)

Como implementar a IC - a sugestão dada inclui os seguintes pontos:
- criar em File System uma estrutura do tipo:
...\CruiseControlNet\server
...\projectos\build\application
...\projectos\build\source

...\projectos\web
- instalar o CC.Net e o CC.Tray
- instalar o TFSCCNetPlugIn (colocar em ...\CruiseControlNet\server)
- alterar o CCNet.exe.config - alterar o xml:
. configuração do projecto
. configuração do SSControl
. configuração do Build
- start ao serviço CCNet
- verificar o Web Dashboard
- verificar o deploy no ambiente de destino

Outra aplicação de IC referida é o Automaton.

MGT004 - Windows PowerShell (ex-"Monad"): a próxima geração de Command Line Scripting

A nova shell de scripting do Windows dá pelo nome de PowerShell, e vem já incluida com o Exchange Server 2007.


Porquê uma nova shell?
Porque muitos dos Win IT Professionals usam os CMD, BAT, VBScripts, ....

Funcionalidades mais valorizadas:
- é fácil de escrever sem saber programação
- shell única para todos os componentes Windows e Microsoft
- é compativel com outros scripts que já existam

Benefícios do PowerShell:
- fácil de usar e de aprender (sintaxe "verbo-sujeito" - ex.: get-process)
- acelera a automação de tarefas administrativas

Principios do PowerShell:
- preserva o investimento feito
- poderosa manipulação de objectos
- facilita a vida aos Admins (personalização de comandos, construção rápida de scripts, criação e partilha de ferramentas - cmdlets)

Caracteristicas:
- fácil de usar: suporte nativo e uniforme para ADSI, WMI, COM, XML, ADO, HTML, CSV
- fácil de adoptar:
. download gratuito
. funciona em XP, WinServer 2003, Vista, e WinServer "longhorn"
. comandos e scripts mais rápidos
- fácil de aprender:
. guias de aprendizagem "Getting started"
. livros, web casts
. scripts de exemplo
. suporte da comunidade

Produtos que tiram partido da PowerShell:
- Exchange Server 2007
- System Center
- Windows Server

Blog da comunidade:http://blogs.technet.com/powershell

Microsoft TechDays 2007

Esteve aí!

Foi esta a semana que a comunidade Microsoft se reuniu em Lisboa para (re)descobrir as novas tendencias tecnológicas para os próximos tempos!

Falou-se muito de WCF/WPF/WWF, de novas formas de desenhar camadas de apresentação, etc etc....

Os meus próximos posts vão resumir um pouco do que ouvi e anotei nas apresentações, pelo menos das que considerei mais interessantes!

Naturalmente, estes posts são apresentados ASIS.

É já a seguir! ;)