TechDays08 – Day 1

12/Março – 8h30 – Centro de Congressos de Lisboa – Depois de encontrar alguns dos MSP, fazer o check-in (sem filas…balcão à parte =P) e ter uma breve reunião com o grupo de MSP para algumas indicações gerais, estava na hora do keynote.
 
KEY02 – Keynote
 
O keynote foi dado pelo Miguel Caldas, da Microsoft, que fez um discurso bastante descontraido (até atirou a gravata ao chão..). Começou por apresentar o TechDays em números:
 
  • 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.

 

DAT02 – T-SQL: Tips and tricks
 
Esta sessão, dada pelo Stephen Forte como já disse, tinha como objectivo a exploração de 3 ou 4 funcionalidades do SQL Server que podem ajudar a resolver alguns problemas. O Stephen começou por contar a história de como fez uma apresentação num país árabe tendo o tradutor ficado a dormir, e depois colocou um grande sinal de proíbido(ou evitar a todo o custo) nos cursores. Muitas vezes os cursores tendem a ser o vício "procedimental" dos programadores reflectido no SQL (foreach(line l in cursor){…}), o que vem contra o funcionamento "set-based" dos SGBD (uma instrução implica vários passos e pode ter vários efeitos sobre conjuntos de informação distintos).
 
 
O segundo ponto foram as common table expressions (CTE) que são uma espécie de vista temporária apenas no contexto de execução corrente. Concretamente, o Stephen mostrou como recorrer às CTE para implementar queries recursivas. Demasiado retorcido para mim, à primeira vista. Quando tiver tempo de perceber melhor o funcionamento, talvez escreva qualquer coisa sobre isso. Um exemplo de aplicação da "recursividade" é: 1) tabela de empregados em que cada um tem um id e o id do seu chefe (chava estrangeira para a própria tabela – "home key", na linguagem do stephen); 2) listar todos os suboordinados de um empregado.
 
Depois falou-se de uma coisa que eu desconhecia mesmo: suporte para manipulação directa de xml através do tipo "xml" que tém..métodos!..no sql server. Uma coluna de uma tabela pode ser do tipo xml, e sobre um valor deste tipo podemos, por exemplo, extrair texto de elementos pesquisados com xpath. Parece-me que a utilidade disto pode ser questionável.. mas ok..há suporte para isso, e posso vir a encontrar cenários em que dê mesmo jeito.  Mais info aqui.
SELECT xCol.value(
   '/livros//livro[1]/titulo', 'nvarchar(70)') 
FROM docs
 
Próximo ponto: Raking Functions. Suporte para atribuição de classificações a registos conforme uma dada ordenação definida numa cláusula "order by". Torna-se útil em cenários de elaboração de relatórios, sendo possível utilizar vários nível de rankings. Por exemplo, classificação dos melhores clientes a nível mundial e nacional.
 
Para terminar, falou-se de PIVOTs. Sem entrar em muito detalhe, esta funcionalidade é útil também para relatórios, e permite de forma simples coisas deste género:
Tabela com (id_cliente,ano,despesa)
Marcar o ano como pivot sobre os valores ano1, ano2, ano3 e dizer que queremos ver a despesa
Obter 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
 
Depois desta sessão era hora de almoço. Finalmente! O almoço era servido no pavilhão dos expositores, com vários "pontos de distribuição" nas laterais, do tipo..pega o prato e leva para ires comer em algum sitio. Qual sítio? em primeiro lugar, como a sessão terminou um pouco depois da hora, grande parte da comida já estava a acabar, e nos pontos onde não estava..as filas eram enormes. Depois, não havia quase espaço nenhum para o pessoal estar a comer. Acabei a comer em pé com o prato na mão. Valeram as carnes frias e comida mais "buffet" que havia no seguimento das comidas quentes (que já não cheguei a ver). Foi um dos pontos em que a organização podia ter estado melhor.
 
ARC04 – Database design partterns
 
A minha primeira sessão da tarde, novamente dada pelo Stephen Forte, apresentava 3 padrões de desenho para BDs. Sim, também há padrões de desenho para BD; secalhar até já os usámos só que não lhes demos nome. O Stephen tinha dito que nestas conferências ficava sempre com a comida vegetariana porque a sessão antes de almoço se atrasava…desta vez ainda não tinha almoçado de todo..e lá foi ele para o primeiro padrão:
 
Transactional pattern
 
Amplamente usado: formas normais, relações com chaves estrangeiras..etc. Dispensa comentários.
 
Slowly-changing dimension pattern
 
Erro comum: queries complicadas sobre um conjunto vasto de dados normalizados (várias tabelas).
Problema: queries muito pesadas afectam o desempenho das actualizações (insert,update,delete) que é preciso realizar e que efectivamente são importantes para manter um estado coerente nas aplicações.
Solução: criação de uma base de dados mais "flat" (não normalizada), organizada de forma mais adequada às queries "complicadas", e que fica preferencialmente alojada noutra máquina. As queries "complicadas" passam a fazer parte de um processo de transformação que passa os dados para a nova base de dados. estas actualizações são feitas de forma periódica e incremental.
Vantagens: O modelo normalizado não é afectado por queries que trabalham sobre muita informação; as queries na base de dados "publicada" são mais simples, porque o peso está no processo de transformação; os chefes podem por o newbie a trabalhar nos relatórios sobre a nova base de dados, porque fica mais simples =P
 
Este modelo é bastante utilizado. Por exemplo, na Amazon: a compra de um livro apresenta um stock que tem de ser confirmado na fase final da transacção. Porquê? O catálogo e as consultas iniciais da compra são feitas num sistema com este padrão, em que a base de dados "read-only" é actualizada de 15 em 15 minutos.
 
Data Warehouse pattern
 
Extensão ao modelo anterior através de um modelo de estrutura em estrela. Neste modelo não consegui reter tudo..espero não meter água no que vou dizer. Exemplo: tabela que armazena o número de um cliente, o nome do produto que comprou, a data e valor da compra. Para realizar uma query para saber as compras de cada trimestre do ano estamos a afectar a introdução de novas compras. A ideia é criar uma tabela auxiliar (Dimension table) que representa datas de compra, atribuindo-lhes identificadores. A tabela principal, que regista as vendas, (Fact table) fica depois com o identificador da data. A tabela auxiliar pode até conter qual o trimestre da data, pré-determinado, e um índice nessa coluena, que não vai afectar a Fact table: data_de_venda(id, data, trimestre). As queries podem depois ser realizadas nas tabelas auxiliares e só quando temos os identificadores concretos é que consultamos a tabela principal, tendo assim menos impacto.
 
 
Para completar a sessão, falou-se ainda um pouco de partição horizontal e vertical de dados, tema com o qualjá estava mais familizarizado.
  • 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.

 
 
 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s