Monthly Archives: March 2008
TechDays08 – Day 3
Using System.Threading.Parallel;(…)Parallel.For(int i = 0; i < X; ++i){DoSomething(i);}
- WinDbg – ferramenta com interface tipo consola para debug "nativo" e que tem um módulo para debug "managed". Permite os habituais breakpoints, ver o stack das várias threads, qual a thread que lança excepção, …
- SOS: interface mais user friendly para o WinDbg. Permite, por exemplo, ver todos os objectos no heap na forma de tree view.
- Hawkeye: permite inspecção em tempo real de elementos de UI em .NET. É a versão managed do WinSpy.
Junto com o WinDbg é fornecida uma dll que pode ser integrada nas aplicações .NEt para gerar dumps de memória de forma simples, para depois serem enviados para o maild a empresa, por exemplo. Algo semelhante ao que acontece com aquelas janelas do Windows que, quando há um erro, perguntam se queremos enviar informação.
Foi informação que pode não ser útil actualmente, mas que no futuro, no mundo do trabalho, vai dar bastante jeito. Valeu a pena!
- IEnumerable<T> –> Enumerable: representa queries sobre dados em memória; as lambda expressions são substituídas por métodos anónimos (delegates).
- IQueryable<T> –> queries sobre outras fontes de dados; em vez de delegates são utilizadas expression trees.
As expression trees são uma representação lógica das labda expressions que é depois avaliada em runtime para gerar a query sobre a fonte de dados alvo. E isto é o fundamental da implementação de providers LINQ! O processo tem início numa implementação de IQueryProvider que através do método CreateQuery(Expression s) permite devolver uma representação da query já construída (IQueryable).
Uma ferramenta que pode dar jeito não só neste cenário (alguém vai implementar providers..?), mas também em debug é o Expression Tree Viewer, que serve para aquilo que o próprio nome diz. É um sample que vem com VS; basta compilar e adicionar aos visualisers.
Para terminar, o orador deixou alguns tips & tricks para este processo:
- Mapeamento de operadores – as queries podem ter chamadas a métodos não suportados na fonte de dados alvo.
- Se queremos suportar operadores que não existem em C# ou VB, podemos definir novos extension methods.
- Quando um operador não é suportado e lançamos uma excepção, não nos podemos referir à linha de código fonte porque as expression trees são independentes disso! Devemos usar um trace "posicional", ou seja, conforme a posição do elemento da expression tree.
- Pode ser possível fazer normalização; por exemplo, agrupar chamdas consecutivas ao "where".
Mais uma boa sessão, com um orador muito prestável e seguro do que estava a dizer. E pronto..depois de mais umas fotos da praxe..lá se acabou o TechDays08.
TechDays08 – Day 2 – Student Day
- Identidade = conjunto de claims
- Claims: asserções de um sujeito; transportadas em tokens
- Emissor: próprio utilizador ou terceiros – Fornecedores de identidades (IdP)
- Consumidores de identidades aceitam claims de IdP
O Information Card Model é uma "especificação" do modelo anterior, adicionando-lhe o conceito de Identity Selector – elemento responsável pela autenticação do utilizador (importante para o acesso ao cartao não permitir automaticamente a obteção de tokens) e contacto com o IdP adequado para obter os tokens correspondentes às claims pretendidas.
Um Information Card é então uma relação entre o user e o IdP: define a localização do IdP, metadados, e quais as claims que consegue emitir. O selector de identidades é responsável por perguntar ao utilizador qual o cartão que quer utilizar de entre aqueles que satisfazem as claims pedidas pelo consumidor, e contactar o IdP para obter os tokens respectivos. Note-se que o cartão é apenas uma associação e só por si não responde a nada. A obtenção dos tokens correspondentes às claims é feita "on-line".
O CardSpace é a implementação da Microsoft do selector de identidades e proporciona uma experiência de utilização sempre igual do ponto de vista da identidade. Essa é uma característica de um bom sistema de identidades. Pemite integração com o WCF e com o IE8, apresentando uma API para que qualquer aplicação possa utilizar este selector de indentidades (System.IdentityModel).
Depois desta sessão foi a esperada hora de almoço, e como já era de prever a confusão foi ainda maior que no dia anterior. Apesar de tudo, ainda me calhou uma massa vegetariana, que até estava boa. Por esta altura soube que 470 dos 500 estudantes de ensino superior que estavam inscritos tinham aparecido! Juntei-me ao resto do pessoal do ISEL e lá fomos almoçar com os pratos em cima dos blocos publicitários ao pé das XBOX.
Ainda não tinha a certeza a que sessão ia no primeiro slot da tarde. Acabei por ir a esta:
SRV05 – Virtualização e Alta Disponibilidade com Windows Sever 2008
Máquinas virtuais? Clusters? As duas coisas em conjunto? O tema da sessão não era daqueles a que tenho estado mais atento mas valeu bem a pena! O foco principal foi o Hyper-V, uma componente do Windows Server 2008 para suporte a virtualização. Esta componente quase que transforma o próprio SO numa máquina virtual, inserindo uma camada de software – o Hypervisor – que comunica com os processores a memória. Sobre este podem ser montadas outras máquinas virtuais. O potencial deste componente pode ser bastante explorado, principalmente em termos de disponibilidade, quando utilizado sobre um cluster. A alta disponiblidade no Hyper-V tem por base o mecanismo de Quick Migration, que consiste em mudar uma máquina virtual de um nó do cluster para outro num tempo relativamente curto, aidna que proporcional à memória da VM e ao tamanho de storage, podendo ocorrer com manutenção de estado (downtime planeado) ou não (downtime não planeado).
O ponto forte da sessão foi mesmo uma demo dessas funcionalidades. O orador, Nuno Carvalho, levou duas máquinas com 2 processadores 4-core e 32 GB de RAM cada (!) que partilhavam por rede um sistema de aramazenamento persistente (storage). Em 2 ou 3 minutos configurou um cluster com esses dois nós e depois colocou duas máquinas virtuais em execução sobre o mesmo, inicialmente no primeiro nó. Uma das VM tinha o Ubuntu e o orador saiu-se com a frase: "sempre quis mostrar linux numa apresentação da Microsoft" =p Depois, ele desligou o cabo de corrente do nó onde as VM estavam a ser executadas e o sistema reiniciou-as de forma automática no outro nó do cluster! Muito simples de configurar e com muitas potencialidades.
O resto do dia foi passado um pouco "on the fly", porque tinha pensado ir às duas sessões de Silverlight 2 e acabei por não ir a nenhuma delas na totalidade. Optei pela sessão:
Pela descrição na agenda parecia que ia trazer alguma coisa de novo..mas foi mais do mesmo..pelo menos os primeiros 25 minutos, que foi o tempo que me aguentei lá… Os oradores até eram bons..dois alemães que não paravam quietos e passavam um à frente do outro enquanto este falava. Acabei por ir ver o resto da sessão sobre silverlight. Passaram umas demos porreiras, mas nada mais do que estava à espera. No final perguntei ao orador uma dívida que tinha em relação ao papel dos servidores (passam a ser apenas fontes de dados, através de serviços) e percebi que a segunda parte também não ia ser grande novidade. Espero que para a maioria dos estudantes tenha sido! Fui antes à sessão do pessoal do MLDC sobre tecnologia de fala.
DEV04 – "Are You Talking to Me?" – Como integrar tecnologia de fala em aplicações desktop e IVR.
Esta foi a sessão ideal para o fim da tarde! Descontraída e com uma dinâmica muito boa. Começou com o Pedro Silva Santos num diálogo com uma voz portuguesa no computador, ao qual se juntou depois a nova voz que estão a desenvolver. Foi uma forma engraçada de cativar o pessoal e mostrar o trabalho que têm vindo a desenvolver.
A primeira parte da apresentação não era novidade para mim, já que fiz uma apresentação sobre o tema no ImagineCup Road Show, no ISEL. Falou-se sobre síntese e reconhecimento de voz e das formas mais tipicas de implementação:
- Síntese: concatenação de pequenas samples de fonemas
- Reconhecimento: baseado em probabilidades atríbuídas ao reconhecimento dos vários fonemas identificados na fala; atribuição de propabilidade de ser um dos fonemas reconhecidos; cálculo da probabilidade/certeza total
Depois fizeram umas demos simples recorrendo à biblioteca SpeechFX do .NET 3.0 (vejam a apresentação que referi =P) e outra mais engraçada com o robotic studio: puseram um robot da lego a responder a comandos de fala, integrando um novo bloco de controlo no robotics studio, que identifica os comandos de voz e gera as saídas correspondentes. ainda deu para o robot jogar bowling com umas garrafas de plástico e uma bola anti-stress.
A segunda parte foi virada para as tecnologias de servidor, nomeadamente o Speech Server 2007. A ferramenta é baseada em Workflow Foundation e permite desenhar a base de um sistema mesmo a alguém que não saiba mais que um miúdo de 10 anos. É só arastar alguns blocos – início de chamada, opções que o utilizador deve dizer, … – e ligá-los coforme o "flow" pretendido. Para soluções mais complexas, podemos sempre pegar no código gerado e trabalhá-lo.
No fim das sessões o pessoal do ISEL foi-se embora (acho que gostaram do dia) e lá fora já havia autocarros para levar o pessoal que tinha vindo de mais longe. Eu fiquei mais um bocado com os MSP e fomos todos jantar, porque o TechDays não se faz só de sessões. Parece que depois ainda houve TechNights para alguns…
O ambiente no Student Day estava porreiro e acho que correspondeu às expectativas. Espero que o pessoal tenha aproveitado. Eu gostei de os ter por lá e de ser um pouco a ponte entre eles e o evento e outras pessoas (msp, por exemplo).
TechDays08 – Day 1
- 3 dias
- 2300 pessoas
- incluindo 500 estudantes
- 30 expositores
- 6 auditórios e 3 labs em funcionamento paralelo
De seguida o orador convidou o Nuno Costa, também da Microsoft e que esteve na conferência MIX’08 em Las Vegas, a falar sobre as novidades que lá foram apresentadas, principalmente o IE8 e o Silverlight 2.0. Foram apresentados alguns "exemplos reais" – site português da Expo Saragoça, protótipo do NetViagens.com, Memorabilia do HardRock (vizualização parcial de imagens de alta resolução das peças de museu dos cafés; vale a pena ver..até se vê a dedada na guitarra!).
O Miguel Caldas retomou a apresentação, expressando a vontade da Microsoft de criar ferramentas que permitam ao developer proporcionar novas e melhores experiências de utilização. Essas ferramentas tendem a unificar-se sobre a plataforma .NET.
Para concluir foram dadas algumas informações mais práticas sobre o evento – localizações, actividades – mesmo na altura em que o computador do orador ficou sem corrente e faltaram os slides =P Correu bem na mesma.
Para este dia tinha planeado 4 sessões:
- T-SQL – dicas e truques
- Database design patterns
- Hands-on lab Blend/WPF
- Test driven development
O hands-on lab estava cheio quando cheguei, mas ainda fiquei a ouvir. Estavam a seguir um tutorial base do Blend, pelo que percebi..não me agradou e saí. Acabei por não ir a nehuma sessão nesse slot e aproveitar para por a conversa em dia com alguns MSP e pessoal da Microsoft. As outras 3 sessões eram dadas pelo mesmo orador: o Sephen Forte. Excelente orador! Penso que será dos melhores que vou encontrar no evento. Conseguiu manter uma dinâmica excelente em todas as sessões com piadas sobre ele, sobre os EUA e mesmo sobre Portugal, sempre com grande interacção com o público. Via-se que tinha uma grande experiência profissional; tinha sempre um caso real para exemplificar e algumas histórias para contar. No fim de umas das sessões ainda tive oportunidade de ter uma pequena conversa com ele, já de volta à zona dos oradores.. é muito acessível, prestável e descontraído.
SELECT xCol.value( '/livros//livro[1]/titulo', 'nvarchar(70)') FROM docs
Tabela com (id_cliente,ano,despesa)Marcar o ano como pivot sobre os valores ano1, ano2, ano3 e dizer que queremos ver a despesaObter tabela com uma linha por cliente e com a estrutura (id_cliente, ano1, ano2, ano3) em que as colunas dos anos têm a despesa de cada ano
- Partição horizontal: dividir registos de tabelas por várias bases de dados com tabelas semelhantes, de acordo com um critério (país, por exemplo).
- Partição vertical: dividir conlunas da tabela conforme a necesidade de utilização das mesmas. O número de registos é igual nas várias BD, mas com conjuntos de colunas diferentes.
VST06 – Test-driven development
Última sessão do dia; tema menos técnico, mas no qual estava interessado para aplicar num projecto no ISEL.
Esta metodologia consiste em realizar pequenas iterações no desenvolvimento, escrevendo primeiro o código de teste para as funcionalidades a implementar. O processo é descrito por RED-GREEN-REFACTOR:
- Implementar código de teste
- O novo teste falha (porque não há implementação da funcionalidade) – RED
- Escrever código para passar o teste
- O teste sucede – GREEN
- Rever o código e melhorá-lo – REFACTORING
- Repetir os passoa anteriores
Ese tipo de desenvolvimento encaixa nas metodologias ágeis já que se baseia em pequenos ciclos de desenvolvimento com alterações rápidas e que geram auto-documentação (os próprios testes).
Há que ter cuidado para não escrever código de teste demasiado grande e exaustivo (como este post talvez?) nem demasiado pequeno e fraco, testando apenas a componente sobre a qual estamos a trabalhar. O Stephen disse uma curiosidade engraçada (não para os lesados): o bug mais caro da história foi na Mars Explorer, em que muitos (muitos) dólares de hardware de "top" foram ao ar porque faltavam um ";" algures! upa upa…
No fim desta sessão ainda falei mais um pouco com o orador, juntamente com o Fábio e o André Gomes Sousa, e depois foi hora de voltar para casa, passando antes pela casa da namorada que não tem culpa da Microsoft me fechar um dia inteiro no CCL =P
Só consegui acabar de escrever esta review já no fim do 2º dia, que foi o Student Day e que foi "à maneira". Nos próximos dias deixo uma review desse dia e também do último dia de TechDays deste ano.
Links
Alguns links que podem ser do interesse de algumas pessoas em algum sítio =P
- Post do Bruno Silva – utilizar um Membership Provider ASP.NET e o Windows LiveID
- Scott Guthrie – First look at Silverlight 2
- Scott Guthrie – Inside Silverlight 2 Beta 1 – Channel 9
- Scott Guthrie – Using Expression Blend with Silverlight 2
- Miguel de Icaza @ MIX’08 – Mono Project – Channel 8
- TechDays08 – quase a começar!