quinta-feira, 17 de dezembro de 2009

Longe de casa por um tempinho...

HO HO HO!
Bom dia pessoal, tudo bem?

Escrevo para desejar a todos amigos leitores desse blog um feliz natal, boas festas e que 2010 seja excelente para vocês, tanto no âmbito profissional como no pessoal.

Para mim 2009 foi um ano de muitas mudanças e desafios, saí da Microsoft, fundei uma nova empresa (Sr. Nimbus), criei treinamentos de SQL Server, prestei consultorias especializadas e ainda consegui contribuir um pouco com a comunidade, coisa que adoro fazer. Foi muito cansativo, mas valeu cada segundo.

Já o ano de 2010 vêm chegando rápido para todos, então encerramos agora cedo o planejamento da Sr. Nimbus e alinhamentos de objetivos e metas ousadas, que irá exigir muito, mas eu não poderia estar mais empolgado com as possibilidades que estamos vivendo.

Espero que você continue por aqui no próximo ano e que possamos viver com prazer essa avalanche de novidades que chega a nós diariamente. Estou escrevendo essa mensagem pois saio hoje de viagem para o outro lado do mundo, somente retornando para o Brasil em meados de janeiro.

Volto em janeiro, com muito gás e promessas de um ano cheio de SQL Server, Azure e .NET.
Fiquem em paz...

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

quarta-feira, 16 de dezembro de 2009

Treinamento em São Paulo confirmado!

Bom dia pessoal, está confirmado o treinamento em São Paulo para Janeiro de 2010. O assunto? SQL Server 2008, claro! O curso é o SQL Server 2008: Arquitetura, estruturas de armazenamento e funcionamento interno.

Para detalhes sobre o treinamento, local, investimento, ementa, entre outros, baixe a proposta aqui.

Para quem descobriu sobre o treinamento agora ou está esperando aprovação da empresa, ainda temos algumas vagas na sala, então vocês podem confirmar presença e por ordem de chegada vão receber a confirmação da Sr. Nimbus (two-phase commit :-)), até que a sala esteja completa.

Viajo amanhã de noite para o outro lado do mundo e ficarei até o dia 18/01 fora da empresa, qualquer assunto relativo ao treinamento podem procurar o Gilberto (gilberto.uchoa@srnimbus.com.br), que também está por aqui no blogspot: http://gbuchoa.blogspot.com.

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

sexta-feira, 11 de dezembro de 2009

SQL Server Saturday Night

Bom dia pessoal!
Fim da ano corrido, mas por bons motivos! Ontem a Sr. Nimbus fechou um ciclo de treinamento de SQL Server 2008: querying, programming, internals e admin, concluiu serviços importantes e já está se preparando para 2010. Inclusive confirmamos o treinamento de SQL 2008 Internals em SP, que promete uma turma muito capacitada e excelentes debates!

Mas esse post não é sobre a Sr. Nimbus não, estou aqui para anunciar que a turma do SQL Server está animada nesse fim de ano e ainda preparou mais um evento da comunidade para falar sobre nosso queridinho. Repasso aqui o convite que eu recebi...

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=

O SQL Server Day foi um sucesso, sendo assim, alguns participantes resolveram dar um presente de Natal para todos: O SQL Server Saturday Night. Um super-webcast de 5 horas de duração que será realizado no dia 19/12/2009 à partir das 18:00 horas.

A grade está montada da seguinte forma:

- Powershell & Transact-SQL (Laerte Jr) - 18:00 as 18:50 horas
- Profiler e Perfmon - (Vladimir Magalhães) - 18:50 as 19:40 horas
- Alta Disponibilidade: Mirroriing (Vitor Fava) - 19:40 às 20:30 horas
- Performance & Tuning - (Rodrigo Crespi) - 20:30 horas as 21:20 horas
- Database Snapshots (Alexandre Lopes) - 21:20 às 22:10 horas
- SQL Server 2008 R2 (Thiago Zavaschi) - 22:10 às 23:00 horas

Ou seja, voce não pode perder, né? Prepara o telão, chama os amigos, pede a pizza + guaraná .. e assista ao SQL Server Saturday Night !

Aonde eu meu inscrevo? http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032437130&Culture=pt-BR

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=

Bom, né?
HOHOHO

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

terça-feira, 1 de dezembro de 2009

Trigger causando deadlock

Ontem recebi uma ligação de um profissional de TI precisando de uma ajuda com o SQL Server relativo a um problema de deadlock. Mesmo com o dia cheio, aproveitei que era feriado e Brasília, e resolvi ajudar o camarada. Depois compenso o tempo perdido de madrugada...

Respondendo a ele eu acabei me empolgando e escrevi um documento explicando o que estava acontecendo, qual o resultado da resolução do deadlock que foi proposta e qual o impacto em termos de desempenho da solução que eles trabalham.

O artigo pode ser encontrado no meu skydrive.



Depois eu vou parar e formatar o artigo como um post, mas não será agora pois estou com pressa.

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

segunda-feira, 30 de novembro de 2009

TechTalk #001 - LSN, page header e restart recovery

Parte importante do trabalho dos funcionários da Sr. Nimbus é prover conteúdo técnico de qualidade para a comunidade e profissionais de TI. Hoje isso ainda não é um pré-requisito de contratação e nem existe um processo formal para tal, mas não sei se um profissional que não possui esse perfil seria o candidato ideal. Parte do meu planejamento para a empresa é que tenhamos frequentes reuniões técnicas internas para troca de conhecimento e experiências, aproveitando para gerar informações preciosas para todos... Bom, vamos deixar isso para lá, são apenas elucubrações de uma manhã chuvosa em dia de feriado aqui em Brasília.

Dessa vez eu não chego aqui com um artigo, mas sim com o primeiro TechTalk da Sr. Nimbus. Os tech talks (ou papo técnico) são pequenos vídeos onde podemos explorar assuntos diversos, algumas vezes mais complexos, em um formato diferente além dos tradicionais artigos e posts que você já conhece.

Nesse primeiro vídeo eu falo um pouco sobre o log de transação e LSN (Log Sequence Number), sua associação com as páginas de dados e o processo de restart recovery (mais especificamente, sobre a etapa de UNDO). O assunto do vídeo eu extraí do meu curso de SQL Server 2008 "Internals" e espero que, mesmo sendo pequeno, esclareça um pouco do funcionamento do SQL Server.

Você pode assistir o vídeo seguindo no link abaixo ou fazer o download do skydrive. Eu gerei três versões com definições diferentes, mas somente publiquei o vídeo em WMV usando a resolução de 1280x800 (30 MB). Se você tiver alguma recomendação sobre o tamanho do vídeo e como podemos melhorar o TechTalk da Sr. Nimbus, deixe aqui seu comentário.

Após o comentário do Patricio eu notei que a geração do WMV não estava muito legal, então eu gerei uma nova versão (um pouco maior) e a publiquei no Screencast.com e no skydrive. Os links agora estão atualizado e refletem a nova versão, mas por ser um pouco maior eu recomendo o download.




Vídeo publicado no Screencast.com (é possível fazer download por lá também).
Ou baixe o vídeo no meu skydrive.

Espero que vocês gostem!

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

terça-feira, 24 de novembro de 2009

Gerando script das views para suas tabelas

Bom dia pessoal.

Hoje eu estava trabalhando em um cliente e precisei fazer uma coisa bem manual: Criar uma série de views com um nome diferente da tabela que estamos consultando, mas contendo todos os campos da tabela original.
Qual o motivo disso? Nós estamos criando um ambiente temporário onde estou jogando um monte de informações e vamos expor uma "interface" usando visões, que o usuário de negócio vai poder consultar à vontade e eventualmente criar consultas e relatórios. Então usaremos essa abstração, que nesse momento refletirá boa parte das tabelas, para evitar um pouco de retrabalho e atrito entre os lados, caso a estrutura mude, e dividir bem a questão de segurança.

Agora que vocês estão contextualizados vamos ver o que bolei... Eu poderia simplesmente sair escrevendo umas 50 visões com todos os campos, mas isso iria levar um tempão, então montei um script rápido que me ajudaria a gerar o código que preciso.

Seu mecanismo básico é o seguinte: tenho uma tabela temporária com N registros contendo o nome do esquema, da tabela existente e o nome que quero dar para a view. Bom base nessa tabela eu utilizo o CROSS APPLY para gerar uma string usando informações da sys.objects, sys.columns e sys.schemas, usando o truque com XML que já coloquei aqui no blog (http://luticm.blogspot.com/2009/06/gerar-registros-em-forma-de-colunas.html).

Segue o código T-SQL utilizando o AdventureWorks2008 para vocês brincarem e, quem sabe, utilizarem em algum momento, customizando o que será gerado.

USE AdventureWorks2008
go

WITH TabelaView AS
(SELECT Esquema, Tabela, Visao
FROM ( VALUES
('Sales', 'SalesOrderHeader', 'Venda'),
('Sales', 'SalesOrderDetail', 'DetalheVenda'),
('Production', 'Product', 'Produto'))
AS T(Esquema, Tabela, Visao))

SELECT
CodigoViews.Instrucao
FROM TabelaView
CROSS APPLY
(SELECT
'
IF OBJECT_ID(''vw_'+ TabelaView.Visao +''') IS NOT NULL
DROP VIEW dbo.[vw_'+ TabelaView.Visao +']
go

CREATE VIEW dbo.vw_' + TabelaView.Visao + '
WITH SCHEMABINDING
AS
SELECT ' +
STUFF(
(SELECT N', ' + QUOTENAME(SC.name) AS [text()]
FROM SYS.columns AS SC
INNER JOIN sys.objects AS SO
ON SO.object_id = SC.object_id
INNER JOIN sys.schemas AS SS
ON SO.schema_id = SS.schema_id
WHERE SO.type = 'U'
AND SO.name = TabelaView.Tabela
AND SS.name = TabelaView.Esquema
FOR XML PATH('')), 1, 2, N'') + '
FROM ' + TabelaView.Esquema + '.' + TabelaView.Tabela + '
go'
AS Instrucao) AS CodigoViews
go

E o código gerado é esse aqui:

IF OBJECT_ID('vw_Venda') IS NOT NULL
DROP VIEW dbo.[vw_Venda]
go

CREATE VIEW dbo.vw_Venda
WITH SCHEMABINDING
AS
SELECT [SalesOrderID], [RevisionNumber], [OrderDate], [DueDate], [ShipDate], [Status], [OnlineOrderFlag], [SalesOrderNumber], [PurchaseOrderNumber], [AccountNumber], [CustomerID], [SalesPersonID], [TerritoryID], [BillToAddressID], [ShipToAddressID], [ShipMethodID], [CreditCardID], [CreditCardApprovalCode], [CurrencyRateID], [SubTotal], [TaxAmt], [Freight], [TotalDue], [Comment], [rowguid], [ModifiedDate]
FROM Sales.SalesOrderHeader
go

IF OBJECT_ID('vw_DetalheVenda') IS NOT NULL
DROP VIEW dbo.[vw_DetalheVenda]
go

CREATE VIEW dbo.vw_DetalheVenda
WITH SCHEMABINDING
AS
SELECT [SalesOrderID], [SalesOrderDetailID], [CarrierTrackingNumber], [OrderQty], [ProductID], [SpecialOfferID], [UnitPrice], [UnitPriceDiscount], [LineTotal], [rowguid], [ModifiedDate]
FROM Sales.SalesOrderDetail
go

IF OBJECT_ID('vw_Produto') IS NOT NULL
DROP VIEW dbo.[vw_Produto]
go

CREATE VIEW dbo.vw_Produto
WITH SCHEMABINDING
AS
SELECT [ProductID], [Name], [ProductNumber], [MakeFlag], [FinishedGoodsFlag], [Color], [SafetyStockLevel], [ReorderPoint], [StandardCost], [ListPrice], [Size], [SizeUnitMeasureCode], [WeightUnitMeasureCode], [Weight], [DaysToManufacture], [ProductLine], [Class], [Style], [ProductSubcategoryID], [ProductModelID], [SellStartDate], [SellEndDate], [DiscontinuedDate], [rowguid], [ModifiedDate]
FROM Production.Product
go


Notem que o T-SQL é bem simples e fácil de ser alterado, então se eu quisesse omitir colunas do tipo uniqueidentifier ou remover campos com nome CodigoXXXXXXX, basta adicionar algumas cláusulas where no código.

Post rápido, mas espero que seja útil para alguém. Ou então pelo menos a idéia do T-SQL...
Você pode baixar o script aqui.

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

quinta-feira, 19 de novembro de 2009

SQLServerDF Encontro V - PASS Summit e Disaster Recovery

Bom dia meninos e meninas.
Apesar da correria e das noites com poucas horas de sono, o grupo SQLServerDF não pode parar (mesmo depois de um mês ausente e o PASS Summit 2009 rolando), certo?

Continuando as apresentações do nosso grupo, o Gustavo Maia volta para a frente da turma para falar um pouco sobre Disaster Recovery, onde ele vai aproveitar um pouco da apresentação que ele fez no SQLServerDay e eu, como acabei de passar 6 horas com o Paul Randall falando sobre isso, vou aproveitar para dar uns pitacos também, quem sabe apimentando um pouco a discussão e mostrando alguma demo.

Porém, antes da apresentação do Gustavo eu vou entrar para falar um pouco de como foi o PASS Summit 2009, tentando passar um pouco dessa incrível experiência e mostrar que já estamos fazendo o planejamento para 2010, onde espero ir com uma pequena caravana do Brasil. Gostou da idéia? Vai com a gente? Fique ligado neste blog.

Vamos ao convite formal:

Vai estar em Brasília no dia 25/11 (quarta-feira) com a noite livre e quer participar? Faça seu registro no grupo SQLServerDF (http://groups.google.com/group/sqlserverdf) e deixe lá a sua confirmação.

Agenda:
- SQLPASS Summit 2009 - Overview, análise e planejamento (Luti - 30 minutos)
- Disaster Recovery - Backup, Restore e Tópicos Avançados (Gustavo Aguiar - 2 horas)
- Detabe técnico.

Local: Auditório da Microsoft em Brasília, Edifício Corporate Financial Center, sala 302.
Horário: 19:00 ~ 22:00 (começaremos no horário, então cheguem na hora, ok?)

Esse encontro será realizado no auditório da Microsoft em Brasília, para mais informações acesse a página do grupo: http://sqlserverdf.sqlpass.org/

Quer convidar um amigo, sem nenhum problema, aquela sala é que nem coração de mãe, sempre cade mais um! :-)

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

quarta-feira, 18 de novembro de 2009

Webcast SQL Server Compact - demos e gravação

Bom dia povo!

Ontem eu gravei mais um webcast para o MSDN, dessa vez falando sobre o SQL Server Compact, com o título: SQL Server Compact 3.5 com qualquer tipo de aplicação.
Como eu já havia gravado um webcast sobre o Compact no passado, onde eu abordei uma série de assuntos relacionados a ele (inclusive alguns que estavam novamente nessa descrição), para não ficar repetitivo eu corri o risco e procurei explorar outros assuntos, sendo um pouco mais breve em alguns temas e detalhista em outros, tentando problematizar um pouco e apontar algumas características que as vezes passam desapercebidas.

A agenda da apresentação foi a seguinte:

1. Características
2. Qualquer tipo de aplicação?
3. Onde é utilizado?
4. DLLs
5. Entity Framework
6. Desempenho
7. Deployment
8. Evolução
9. Conclusão

No tópico 2 eu tentei não só fazer uma listagem, como também jogar um olhar crítico para as nossas escolhas. Depois disso falei um pouco do tipo de limitação que podemos encontrar (usando um exemplo do EF 4), mostrei comparativos de desempenho onde podemos ter o Compact respondendo melhor do que o SQL Server Express (sim, senhor!) e também alguns problemas com deployment de novas versões do seu projeto.

Como demos eu fiz uma BBBEEEMMM simples com Smart Device, que não é minha praia, então só quis mostrar ele funcionando com SQL Compact e diferentes maneiras de acesso com SqlCeCommand direto e TableAdapters. Também montei um exemplo com OBA - Office Business Application - onde eu mostrei que é possível termos um SDF trabalhando junto com um documento do Word e para fechar a outra demo eu usei testes de unidade com o SQL Compact, pois mesmo que você esteja trabalhando em um projeto pequeno, vale a pena fazer a coisa bem feita, não?

No fim ainda fiquei de 15 a 20 minutos respondendo uma série de perguntas que foram aparecendo na sequência, onde o pessoal colocou perguntas e pontos importantes, então quem for assistir a gravação não deixe de ver até o fim!

Para quem perdeu, segue o link da gravação: https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=pt-BR&EventID=1032423024&CountryCode=BR
Os projetos de demos que eu criei estão aqui: http://cid-e145f7753042d628.skydrive.live.com/self.aspx/Public/Apresentacoes/20091116%5E_DemosWebcast%5E_SQLCompact.zip



No fim a avaliação foi boa, mas teve uma pessoa que não gostou! Isso mexe comigo, pois o problema não é alguém não gostar, é eu não saber o motivo para tentar corrigir na próxima vez. Se alguma vez você viu alguma apresentação minha e não gostou, me escreva ok?

===========================

Por falar em avaliação, eu recebi as minhas avaliações do TechEd Brasil 2009 e foram muito boas, mas teve um quesito em particular que me chamou a atenção. Na sessão sobre desempenho de consultas, que estava muito cheia, eu quase consegui nota máxima no item "avaliação do palestrante", onde somente UMA pessoa não marcou a sessão como excelente! :-)
Caramba, como isso me deixou feliz, pois eu ralo muito para tentar fazer uma sessão diferente e legal, que não seja CTRL+C CTRL+V de outras, e o pessoal gostar do que eu fiz é a melhor recompensa de todas. Obrigado a todos e vou tentar sempre melhorar!

=============================

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

terça-feira, 17 de novembro de 2009

Microsoft PDC 2009

Bom dia pessoal, para quem não sabe hoje começou o PDC 09, evento que a Microsoft faz em anos aleatórios quando ela têm boas novidades para contar. Tivemos o PDC em 2008 onde foi anunciado o Windows Azure e temos novamente nesse ano. Teremos novidades saindo de lá, acho que a coisa será mais contida que em 2008, mas nada que tire o brilho do evento e que não mereça atenção.
Quer saber mais sobre o evento? Acesse http://microsoftpdc.com/. Hoje o keynote foi transmitido e amanhã teremos no palco o ScottGu, que sempre trás coisas bacanas e hoje prometeram muita novidade para o Silverlight.

Também vale a pena ficar ligado no Channel9 http://channel9.msdn.com/, que normalmente é o veículo de publicação das sessões e no ano passado disponibilizou TODAS para assitirmos, tomara que nesse ano seja igual. Acessei agora e já temos novidades, como o projeto Dallas.

Outra novidade para mim nesse ano é o acompanhamento através do twitter, basta colocar a hashtag #PDC09 como palavra de busca e vai chover de novidades pelo TweetDeck (ou software que você usa), colocados por diversos anônimos e também pelos muitos brasileiros que estão por lá!

Post rápido, pois está na hora de começar mais uma aula de SQL Server 2008 Internals!


[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

segunda-feira, 16 de novembro de 2009

CTP de novembro - Azure SDK e outros

Post rápido para os Azurianos...
Saiu o CTP de novembro do:


Alguns pontos que merecem destaque:

  • Um worker role pode definir endpoint externo: HTTP, HTTPS e TCP.
  • Tabelas podem ser criadas dinamicamente no Azure Storage. Lá se vai o batch que criamos para o devtablegen...
  • Suporte para o Visual Studio 2010 Beta 2 - como foi anunciado.
  • O exemplo do Storage client foi trocado por uma nova biblioteca com qualidade de produção! Isso foi legal, mesmo com o Steve Marx falando isso no fórum sempre ficava um sentimento ruim quando referenciávamos Microsoft.Samples em nosso produto... Ainda não vi a nova API, mas nessas horas eu agradeço pelos testes de unidade.

Conforme prometido, foi um post rápido.

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

sexta-feira, 13 de novembro de 2009

Treinamento de SQL Server 2008 Internals em São Paulo

===============================================================

Atualização: por questões de facilidade, melhor entendimento e divulgação, montei uma proposta do treinamento com mais detalhes, inclusive um mini-cv deste que vos escreve, e disponibizei no skydrive.



===============================================================

Pessoal, durante os últimos meses eu tenho recebido alguns e-mails isolados, vindo de várias pessoas e estados do Brasil, interessadas no treinamento de SQL Server 2008 internals. Tentando atender aos poucos essa demanda e não querendo postergar demais, eu estou propondo uma turma em São Paulo para o início de 2010.

Quando: 25/01/2010 a 29/01/2010 - 9:00h a 18:30.
1:30h de almoço livre e dois coffee-breaks de 15 minutos.
Onde: a definir - Idealmente zona sul de São Paulo perto da Berrini
Quanto: R$ 1600,00 (em até 4x sem juros)
Mínimo de alunos: 10
Máximo de alunos: 18
Material: Kit Sr. Nimbus de treinamento e certificado de conclusão (75% de presença).

Interessados, entrar em contato comigo: luciano.moreira@srnimbus.com.br

O treinamento somente será confirmado se um mínimo de 10 alunos efetuarem a inscrição e a nossa data limite para confirmação é dia 10/12/2009. Caso o curso não se confirme escolheremos outra data, provavelmente Maio por conta do meu calendário em Brasília.

Antes de chegarmos na ementa eu gostaria de dizer algumas palavras... Montei esse treinamento com base no que aprendi através dos livros, na Microsoft, vivência com o produto, e não acho que seja um curso para o público geral - como o de T-SQL Querying e T-SQL Programming que temos - tanto que não pretendo oferecê-lo em um pacotão para empresas, pois talvez sejam poucos os que realmente o aproveitarão da maneira que eu acredito que deveria ser absorvido pelo aluno.
Então, os alunos desse curso normalmente são aqueles que têm curiosidade para entender como as coisas funcionam e querem sair da média, um SQL geek mesmo! Pois veremos muitas coisas detalhadas que talvez você não irá utilizar diretamente no dia-a-dia, mas minha expectativa é que as pessoas entendam o porquê das coisas no SQL Server 2008. E esse conhecimento fará o profissional sair de lá e olhar para o ambiente de maneira diferente, deixando de achar que as coisas acontecem por acaso ou sorte, podendo falar com propriedade e defender o que é melhor para cada cenário.

Para quem me conhece, tento misturar uma boa teoria com demos interessante e, se possível profundas, colocando o aluno para refletir. É comum eu me empolgar e dificilmente termino alguma apresentação no tempo previsto, então adicionei algumas horas extras para cobrir tudo, pois originalmente esse treinamento seria de 32 horas.

Esse treinamento é diferente dos MOCs e outros cursinhos de SQL que vemos por aí. Sendo ele focado em internals, fica complicado eu disparar um laboratório do tipo: utilize o DBCC PAGE para analisar a estrutura da página e correlacionar o header dela com o log de transação atual utilizando o fn_dblog. Não acha? Fique tranquilo que isso é coberto na demo 04/04!
Por isso eu tento rechear o curso de demos (que vocês receberão com o kit e poderão executar junto comigo) e deixo o curso sem laboratórios, apenas sugestões de outros testes interessantes para casa e painéis de discussão, então posso dizer que vocês aproveitarão as 40 horas com conteúdo de verdade (uma overdose de Luti e SQL Server! :-)).
Mantendo a mesma idéia que eu havia proposto para um primeiro treinamento em São Paulo, penso eu alugar uma sala em um hotel, sem máquina para o aluno, mas com a bancada para que cada um traga seu notebook. Se cada um tiver uma instância do SQL Server 2008 instalada já será suficiente para acompanhar o curso.




Se você participar e sair dessa semana percebendo o tanto de coisas que ainda temos que aprender e que achando que sabe muito pouco, mas com um sentimento de que agora terá um maior controle sobre seu ambiente, minha missão foi cumprida!





SQL Server 2008: arquitetura, estrutura de armazenamento e funcionamento interno.

Duração: 40h
Nível do treinamento: 300/400
Referências: Inside Microsoft SQL Server 2005: the storage engine e SQL Server 2008 Internals.
Pré-requisitos: O aluno já deve trabalhar com o SQL Server, saber escrever de forma proficiente consultas T-SQL e conhecimento da teoria de banco de dados relacional.
Público alvo: desenvolvedores T-SQL e DBAs SQL Server, que querem entender como o SQL Server funciona em maiores detalhes e saber como utilizar os recursos disponíveis de forma eficiente, pois se não houver uma estrutura bem elaborada com uma programação bem feita, o desempenho da solução ficará comprometido. Alguém sem experiência com SQL Server ou que nunca trabalhou diretamente com o banco de dados, terá dificuldade em acompanhar o curso.
Descrição: Este treinamento visa oferecer ao aluno uma visão da arquitetura do SQL Server, juntamente com uma visão simplificada do sistema operacional, descrevendo os mecanismos que fazem o SQL Server funcionar. Após a visão arquitetural é ensinado como criar as estruturas em um banco de dados (tabelas e índices), sua organização física, funcionamento do log de transação, cache de planos e gerenciamento de concorrência.

Conteúdo programático:

Módulo 01: Arquitetura do sistema operacional - gerenciamento de memória (VAS, 32 e 64 bits, PTE, AWE, PAE), processos/threads, operações de I/O, storage e alinhamento de partição.
Módulo 02: Arquitetura do SQL Server - engine relacional, engine de armazenamento, SQLOS, schedulers , gerenciador de memória , lazy writer, métodos de acesso, buffer manager, otimizador de consultas, protocolos de rede, entre outros.
Módulo 03: Banco de dados – tipos de bancos, arquivos, modelo de alocação (GAM, SGAM, PFS e IAM), filegroups e melhores práticas, estados do banco, database snapshots (utilizações e desempenho), opções de configuração e a tempdb e suas otimizações.
Módulo 04: Log de transação – importância, características de funcionamento, protocolo WAL, LSN, checkpoint, modelos de recuperação, estruturação interna (VLFs), problemas comuns, crescimento e funções não documentadas.
Módulo 05: Tabelas – criação de tabelas, tipos de dados, uso do NULL, restrições, chaves estrangeiras, estrutura do armazenamento físico e alterações de dados (análise dos internals da página com DBCC PAGE).
Módulo 06: Índices - tipos e seu armazenamento físico (CL, NCL e heaps), criação e suas opções, modificação de dados e seu impacto, fragmentação (como evitá-la e corrigi-la), estatísticas e índices especiais.
Módulo 07: Armazenamento especial - objetos grandes (LOBs), tipo filestream (criação, manutenção e desempenho), colunas esparsas, compressão de dados e particionamento de dados e índices.
Módulo 08: Gerenciamento de concorrência – propriedades ACID , bloqueios (tipos, duração, granularidade e escalação), níveis de isolamento, deadlocks, estrutura interna (blocos e donos), deadlocks e versionamento de registros.
Módulo 09: Cache de planos – consultas adhoc e procedimentos, funcionamento e internals, problemas e benefícios, parametrização (sniffing, optimize for), recompilação e plan guides.

Estou com uma mega dúvida se vai dar tempo de cobrirmos também de forma detalhada o query optimizer, pois é um tópico complexo. Nesse momento eu deixei de fora para um futuro treinamento de tuning, mas quem sabe eu não mudo de idéia?

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

SQL Server 2008 R2 - CTP de novembro

Bom, na correria eu estou alguns dias atrasados e provavelmente essa notícia já ficou velha, mas lá vai.
A Microsoft anunciou na segunda-feira a disponibilização do SQL Server 2008 R2 CTP de novembro para assinantes do MSDN e TechNet, e disponível para o público geral em 11/11. O legal foi ver os nomes oficiais dos novos recursos, o Madison passou a ser chamado Parallel Data Warehouse e o Gemini de PowerPivot.

Já estou fazendo o meu download, o tempo para baixar é tranqüilo, o problema é achar tempo para brincar com o bichinho... 

Aqui está o anúncio oficial no blog da Microsoft Data Plataform: http://blogs.technet.com/dataplatforminsider/archive/2009/11/09/announcing-the-sql-server-2008-r2-november-ctp.aspx.

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

SQLPASS Summit 2009 - Dia 04

No último dia de palestras do evento eu dei uma passada na general session para ver o que o pessoal estava falando, mas não me pareceu muito interessante, então aproveitei para conversar com alguns clientes que a Microsoft levou para o PASS. Alguns deles que eu já conhecia da minha vida de PFE e DPE, e uma pessoa citou que me ouviu em um TechEd passado, muito legal esse tipo de relacionamento e saber um pouco do cotidiano de outros DBAs. Tempo mais do que bem gasto e divertido.

Depois me dirigi para a sessão Capturing and analyzing file & waitstats com Andrew Kelly. Como já ouvi do assunto no primeiro dia queria me aprofundar um pouco em alguns tipos específicos e consegui aprender algumas coisinhas interessantes. Não foi nenhuma palestra de outro mundo para quem já está brincou um pouco com suporte, mas é sempre ver a abordagem que outros profissionais utilizam para isolar um problema e resolvê-lo, pois nos ajuda a pensar na nossa maneira de trabalho. Aproveitei a sessão para montar um script usando file stats em conjunto com o Transaction log, para mostrar algumas características do log flush, script que inclusive usei ontem no meu treinamento. Também devo ressaltar que ele fala muito bem e de forma didática, colocando-o na minha lista de bons palestrantes.

Na segunda sessão eu me dirigi para a sala 613/614 movido pela curiosidade do que seria apresentado na sessão: Troubleshooting applications accessing SQL Server, com duas indianas do time de suporte (CSS), a Abirami Lyer e outra que esqueci o nome. Essa foi uma sessão para alimentar a alma de qualquer geek e, devo admitir, senti uma saudade do time de suporte PFE da MS e algumas das aventuras que passamos... bons tempos também.
No início da sessão foi mostrado como fazer um troubleshooting de conexão com o SQL Server, utilizar o BID tracing (ferramenta grátis que eu desconhecia - http://msdn.microsoft.com/en-us/library/cc765421.aspx aqui está um bom artigo) e o netmon, analisando um pouco do padrão de comunicação entre o cliente e servidor e o que procurar nos traces. No segundo momento a outra engenheira mostrou como utilizar o windbg e o debugdiag para verificar se existe um connection leak na aplicação, então o debugdiag era configurado para gerar um dump quando um evento específico do .NET acontecia e depois o dump era aberto pelo windbg, onde algumas method tables eram analisadas, estruturas e por aí vai, até conseguirmos identificar quem é o responsável pela conexão, que pode ser um pool. Sessão mmuuuiittoo deep e deliciosa, saí de lá agradecendo por ter deixado a curiosidade me levar.

Terceira sessão, como todos os outros horários, tive que escolher entre três sessões e acabei ficando com o Victor Isakov em The Problem With Parallelism. Sessão interessante para quem ainda não sabe muito sobre o assunto, mas acho que ficou devendo um pouco, pois não trouxe nenhuma grande novidade e eu esperava algumas demos mostrando problemas encontrados. Nada disso, muita coisa teoria e alguns pontos que eu discordo do palestrante, nada mais normal se tratando de um tema espinhoso no SQL Server.

E por fim fomos todos ouvir o Adam Machanic falando na sessão Advanced SQL Server 2008 Extended Events: Performance Profiling and Troubleshooting Techniques (nível 500). A sessão prometia e foi entregue! Além de saber muito, o palestrante tinha didática e mostrou uma série de detalhes interessantes, o problema é que como é muita coisa e muito XML para olhar, não conseguimos decorar tudo que foi dito, então fica registrada como uma sessão para rever e rever, além daquele gostinho de que esse é um tema que somente vamos dominar depois de muita prática. Esse assunto será um dos meus queridinhos depois do PASS, pois espero muito do ExEvents e acho que ele vai me ajudar bastante a entender maiores detalhes do SQL Server e resolver os casos mais cabeludos, mas se isso será verdade, só o tempo dirá.

Na quinta-feira Seattle passou a ser Seattle e a chuva caiu com vontade. Bye bye sol...

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

domingo, 8 de novembro de 2009

SQLPASS Summit 2009 - Dia 03

Hoje o dia começou com mais uma sessão de keynote e, devo dizer, eu não gosto muito de keynotes pois é muito marketing das novidades. Dei uma passada na sala algumas vezes para ver como estava e vi slides já conhecidos e o pessoal falando do algumas "novidades" de BI, muito do que eu já havia visto com o projeto Gemini.

Logo em seguida eu fui assitir a uma sessão sobre o SSIS: Applied SSIS Design Patterns. De acordo com o nome da sessão eu esperava discutirmos diferentes padrões, como carregamento incremental, Slow changing dimensions, manipulação de arquivos e por aí vai. O palestrante citou o padrão de incremental loading, falando sobre uso do CDC, timestamp ou hashing, mas depois ele ficou mostrando alguns truques que utilizou no SSIS e outras descobertas bem interessantes.
Apesar da sessão ter sido divertida, o tópico padrões - o que realmente me interessava - acabou ficando em segundo plano, e pelas minhas pequisas com o SSIS eu tenho percebido que não existem padrões bem definidos. Eu faço as minhas maluquices no SSIS (algumas considero bem interessantes), outros inventam coisas diferentes e no fim é a liberdade de desenvolvimento e experiência que conta. Sei que o time de consultoria da Microsoft possui um toolkit do SSIS e alguns padrões, mas não sei detalhes de cada um deles. O botton line para mim que fica é: vou mostrar ao mundo o que estou fazendo e quem sabe não sai daí um padrão ou dicas bem interessantes...

Após o almoço acounteu uma sessão que eu estava esperando bastante, com o Ben Nevarez: How the query optimizer works! Novamente a expectativa me pregou uma peça, a sessão foi interessante, mas não tinha nennuma novidade. Eu e outros que assistiram a palestra ficaram com a mesma impressão, que ele poderia ter explorado melhor demos, o assunto e a abordagem da palestra, que num tom de voz único deixou todo mundo cansado. Eu consideraria a palestra nível 300, não 400 como definido.

De última hora eu troquei uma palestra de SSIS por uma feita pelo Jonathan Kehaylan - Opening the SQL Server 2008 troubleshooting toolbox: an introduction to Extended Events. Apesar da palestra conter o nome "Introduction", não se engane, foi um nível 400 dos bons! Depois de um início um pouco devagar, o Jonathan embalou e, com a ajuda de alguns desenvolvedores do time de produto responsáveis pelo ExEvents (que estavam sentados atrás da gente!), ajudou-nos a entender como a coisa funciona e parte do seu poder. Os eventos ainda não possuem uma boa documentação, sendo colunas de descrição nas tabelas sys.dm_xe_****** a única fonte de informação, mas desde a primeira vez que vi isso no SQL Server 2008, já pude notar o excelente nível de detalhamento (está documentado em um webcast!).
Para quem não sabe, os ExEvents são uma maneira de coletar informações detalhadas do SQL Server, mais leve que o SQL trace, com mais informações e excelente para troubleshooting. O potencial é enorme e pouca gente sabe disso, então é um assunto que está na minha pauta para ser detalhado no curso de internals e tuning. Para ajudar, o Jonathan montou uma ferramenta que está disponível no codeplex, chamada de Extented Events Information (um add-on do SSMS) que parece bem bacana, vale a pena conferir!

Para fechar o dia, fui assitir o Erik Veerman na sessão Data Profiling and Cleansing with Integration Services 2008. A sessão foi bem legal, nada muito aprofundado no funcionamento do SSIS (já que não era objetivo da sessão), mostrando principalmente algumas técnicas de limpeza usando fuzzy lookup e fuzzy grouping. Mas além de ver a ferramenta eu gosto das dicas que a experiência ensina e esse pessoal nos passa, como por exemplo: você poderia fazer o matching de todos os seus registros contra uma fonte específica usando o fuzzy lookup, mas se você fizer primeiro um lookup (que é exato) e depois somente aplicar o operador de fuzzy para os registros sem pares (no matching) seu pacote será mais otimizado! Mesmo usando dois operadores a mais, o de lookup comum e o union (que juntará a saída dos dois lookups), interessante não?

Depois de um dia cansativo no evento, tivemos a noite de confraternização do Summit, onde eles fecharam o GameWorks - loja de fliperama que fica ao lado do centro de convenções - e ficamos lá algums horas comendo, bebendo e jogando tudo o que der vontade, não preciso dizer que foi massa!

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

quarta-feira, 4 de novembro de 2009

SQLPASS Summit 2009 - Dia 02

Bom dia pessoal, pelo menos por aqui ainda é manhã!

Ontem tivemos oficialmente nosso primeiro dia de evento do SQLPASS 2009, com muitas sessões interessantes e bem difícil de escolher entre elas. Logo no café da manhã encontrei dois amigos da Microsoft, o André Hass e Luiz Felipe Pimenta, que também estão no evento.
Depois fomos para a general session, onde o Bob Muglia falou um pouco da história do SQL Server, inclusive mostrando a caixa de comercialização do SQL Server 4.2, bem divertido! O Ted Kummert entrou dando um foco muito grande no Win2008 R2 e SQL Server 2008 R2, com uma demo muito legal do SQL Server usando 64, 128 e 192 processadores, para trabalhar com uma carga gerada por eles, tudo regado a task manager e contadores. Incrível ver a máquina respondendo a essa massa crítica com uso de 90% em todos os 192 processadores.

Depois eles mostraram um recurso bem legal do R2 para gerenciamento de vários servidores, tudo atrelado ao PBM (Policy Based Management) com uma série de políticas "out of the box", onde você define os thresholds de alerta e monitoração. Um recurso que pode ser atrelado a essa funcionalidade do SSMS de gerenciamento é o Data Tier Component, onde você relaciona o banco de dados a uma aplicação, com deployment e atualzação feitos de forma integrada com o Visual Studio 2010 (no estilo do VSTSDBPro ou DataDude, mas melhorado), inclusive editando políticas para deploymento do projeto, como haver uma configuração específica no servidor, por exemplo. O interessante da definição desse Data Tier Component é que os dados de saúde coletados pelo SQL Server serão segmentados, então você pode ter uma visão macro ou uma mais detalhada.

Se não estou engando, no VS2010 o DBPro vai fazer parte do Professional e não ser mais uma SKU separada. Mas isso EU ACHO e ouvi faz muito tempo isso, mas não vou parar para pesquisar agora, então se alguém souber o roadmap do produto, me avise por favor. :-)

Depois disso foi mostrado o Live Migration, recurso do Hyper-V que permite movimentar uma máquina virtual para outro local sem que o workload de trabalho seja interrompido, isso mesmo, eles dispararam uma aplicação com múltiplas threads e enquanto o bichinho ficava lá trabalhando numa boa, a máquina era movida em background. Muito legal.

Depois da general session, eu assisti uma sessão que valeu a passagem para cá: Inside SQL Server Wait Types, nível 500 com o Bob Ward, principal escalation engineer na Microsoft. O cara foi fundo, como sempre (adoro apresentações dele) e mostrou como eles analisam muitos problemas com base nos wait types. Saí de lá quase chorando de emoção, foi MMMUUUIIITTTOOO boa a sessão.

Mudei meu cronograma para assistir uma sobre cluster: Implementing and supporting SQL Server 2008 cluster, pois depois que saí do time de PFEs da Microsoft eu perdi um pouco de contato com esse lado. Essa sessão foi um pouco estranha, algumas coisa interessantes e outras mais viajantes, o ruim foi que o apresentador não deu uma linha lógica para a sessão, saiu falando de um bocado de coisas relacionadas a clustering no SQL2008 e Win2008. Uma coisa que você aprende nos eventos é que não existe um mapeamento 1:1 entre um excelente profissional (o cara sabia muito) e uma boa apresentação, enão você passa a conhecer quem vale a pena ser ouvido com o tempo, mas sempre temos que arriscar.

Depois eu fui atrás de uma sessão de consolidação e virtualização, mas infelizmente ela havia mudado de horário, o que me fez correr para uma outra sessão: SQL Server Execution Plans - from compilation to caching and reuse, com Maciej Pilecki. Essa sessão também foi muito boa e como nos últimos meses eu já havia feito uma série de apresentações sobre o Plan Cache, inclusive abordando algumas coisas que ele não teve tempo, já estava carimbado no assunto. O bacana foi que eu consegui verificar algumas coisas que eu sempre comento e aprendi alguns pequenos detalhes muito divertidos, como analisar os atributos de um plano em cache para saber se outro usuário vai reutilizá-lo ou outra entrada será colocada em cache.

Por fim nós saímos todos de lá e fomos no campus e nova lojinha da Microsoft. Eu ainda não conhecia os novos prédios, pois no ano passado eles estavam em construção, e ficou tudo muito bonito, como sempre. Olhar o campus da Microsoft é sempre uma coisa que eu gosto, um ambiente bem legal e tudo arrumadinho, dá vontade de ficar lá para sempre, mas não foi para isso que vim aqui, então no próximo post eu volto para falar sobre o evento.

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

segunda-feira, 2 de novembro de 2009

PASS Summit 2009 - Pré-conferência

Vamos a um resumão do primeiro dia de evento aqui em Seattle...

Eu e o Fernando, outro SQLGeek que está aqui para o evento, chegamos no Washington conference center por volta de 7:30 e fizemos o registro no evento, depois de um lanchinho eu fui para a minha sessão pré-conferência: Care and feeding of the transaction log, com a famosa autora Kalen Delaney. O Fernando foi ouvir a Kimberly Tripp falando sobre indexação, espero que depois ele coloque mais informações no seu blog.

Nem preciso dizer que eu estava super ansioso pela sessão, mas acho que expectativa demais sempre é ruim. Em uma sala parcialmente cheia nós tivemos os seguintes tópicos sobre T-LOG:

- Log Internals
- Physical Log Management
- Restore and Recovery
- Logging Experinence
- Best and Wort Practices

O primeiro e segundo tópicos foram de uma profundidade razoável, falando um pouco sobre VLFs, log cíclico, DBCC LOGINFO, Truncate, etc. Aqui eu esperava ver mais detalhes sobre o T-LOG, mas acho que se ela aprofundasse mais o material seria considerado MS Only (interno da Microsoft). A discussão sobre quantidade de VLFs no log file foi interessante e ela disse que existe um post bacana da Kimberly sobre o assunto, que deve ser esse: http://www.sqlskills.com/BLOGS/KIMBERLY/post/Transaction-Log-VLFs-too-many-or-too-few.aspx. Parece que no SQL11 teremos um warning que irá nos avisar quando o número de VLFs chegar a mais de 1000, vamos ver se aparece mesmo.

Uma pergunta boa que passou sem resposta foi: porque o FSeqNo começa em 34 (ou outro número qualquer) quando um novo banco de dados foi criado?
Eu não tenho absoluta certeza do que vou dizer agora pois não busquei na documentação, mas acho que existe uma boa chance de eu estar certo... Todos os bancos de dados são criados seguindo o banco Model, que precisou do log para registrar as instruções em sua criação, usando VLFs e gerando FSeqNos. Quando criamos um novo banco ele leva a estrutura do Model, inclusive a informação do FSeqNo, por isso a numeração não começa no 1 (ou zero). Usando o SQL Server 2008 SP1 eu vejo o seguinte resultado, utilizando o DBCC LOGINFO na model e em um banco recém criado (respectivamente):

FileId FileSize StartOffset FSeqNo Status Parity CreateLSN
----------- -------------------- -------------------- ----------- -----------
2 253952 8192 17 0 128 0
2 262144 262144 18 2 128 0

FileId FileSize StartOffset FSeqNo Status Parity CreateLSN
----------- -------------------- -------------------- ----------- -----------
2 253952 8192 18 2 64 0
2 253952 262144 0 0 0 0

É interessante notar que a paridade muda, então não me parece uma cópia da informação, pois esse bit é alterado (64 ou 128) a cada novo uso do VLF.

No tópico Restore and Recovery vimos checkpoints, recovery, REDO, UNDO, backup e restore, com RECOVERY, NO_RECOVERY, COPY_ONLY e STANDBY. Muitas dúvidas sobre o assunto, algumas bem viajantes, outras não, que formam respondidas pela Kalen. Uma coisa que eu gostaria de ressaltar aqui é que os registros do log são escritos em disco SOMENTE quando uma transação é commitada ou checkpoint ocorre (e mais outros momentos, se não me engano), e não a todo momento em que uma instrução é executada. Isso é uma coisa que não é muito falada e eu mesmo acreditava no passado que a todo instante o SQL Server estava escrevendo no log, o que é errado.

Dentro todos os tópicos o mais legal foi quando discutimos logging experience, que falamos sobre os recovery models, onde houveram muitas perguntas e eu anotei alguns cenários que ficaram no ar para testar em casa. Deixo aqui uma referência que eu já havia dado uma olhada mas acho que deve ficar na lista de leitura de todos: The Data Loading Performance Guide (http://msdn.microsoft.com/en-us/library/dd425070.aspx).

Ela também falou um pouco sobre os comando DBCC LOG e FN_DBLOG, que já são conhecidos de quem brinca com o SQL Server faz um tempinho, então não sei se foi grande novidade para o pessoal na sala. No fim ela passou por uma lista de recomendações que devem ser lidas por todos, para vermos se não estamos esquecendo de alguma coisa.

Durante o evento ela falou sobre algoritmos de logging, aí eu lembrei de um paper interessante para os mais viciados: ARIES: a transaction recovery method supporting fine-granularity locking and partial rollbacks using write-ahead logging (http://portal.acm.org/citation.cfm?id=128770).

Uma dica que deixo aqui é a página da Kalen, onde ela publica dados sobre suas apresentações em conferências. Dê uma olhada em: http://insidesqlserver.com/conferences/.

Minha avaliação sincera, sem querer parecer um babaca:

No fim eu achei a sessão regular, pois estava com a expectativa lá no céu, afinal é a KALEN DELANEY, e já faz algum tempo que estudo o T-LOG, inclusive com alguns dados mais detalhados enquanto estava na Microsoft. Porém para aqueles que já possuem experiência com o produto, mas não ficam alucinados com Internals e lendo livros atrás de livros, a sessão foi excelente, para os iniciantes, ela seria boa, mas um pouco viajante.
Também esperava que a Kalen tivesse a mesma energia contagiante que a Kimberly têm em suas sessões, pois gosto de ver o apresentador se empolgando com o que está falando...

Estou aqui no keynote de abertura oficial do evento, depois mando novidades para todos.

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

quinta-feira, 29 de outubro de 2009

Mande sua pergunta para o PASS!!

Bom dia pessoal.
Amanhã eu vou para SP e depois embarco para Seattle, onde vou participar do PASS Summit 2009, evento focado no SQL Server. Minha meta é conseguir blogar um pouco sobre o evento e o que eu estou assistindo, para trazer um pouco do que verei para o resto da comunidade.

O site oficial do evento é esse aqui: http://summit2009.sqlpass.org

O evento em si acontece entre terça e quinta, mas eu também vou participar da pré e pós-conferência, passando o dia inteiro com...
Segunda: Kalen Delaney - Care and feeding of the transaction log
Sexta: Paul Randal e Kimberly Tripp - Disaster recovery: tips, tricks and techniques.

Mas o que significa o título do post "Mande sua pergunta para o PASS"?
Como eu estarei em contato com uns monstros do SQL Server e terei mais tempo para pensar sobre questões relacionadas ao SQL Server, será uma boa hora para responder perguntas mais difíceis sobre o funcionamento do nosso queridinho. Então se você quer saber de algo, deixe aqui seu comentário!

Outra coisa que devo comentar: na minha opinião, eventos como o PASS são imperdíveis para profissionais de SQL Server e participar de um evento como esse faz a pessoa amadurecer bastante e perceber o quanto podemos nos aprimorar.
Realmente gostaria de ver um grupo maior indo comigo no próximo ano e, com um pouco de controle e planejamento, não é nada de outro mundo. Será que vale a pena o evento? Faz o seguinte, dá uma olhada na grade do Summit e depois me conta: http://summit2009.sqlpass.org/LinkClick.aspx?fileticket=475oJ4TOQFQ%3d&tabid=68

Eu ia fazer uma enquete para vocês escolherem uma sessão para eu assistir, mas acho que não vai dar ibope, então caso sejam feitas perguntas e haja muito interesse sobre um tema específico, quem sabe eu mudo minha grade para tentar respondê-las...

Espero voltar em breve ao meu blog, assim que me organizar por lá. E para essa viagem longa vou levar o SQL Server 2008 Internals para me fazer companhia... Geek é geek e vice-versa (lembrando o artilheiro Jardel!).

E para variar, parece que vou pegar um friozinho com chuva em Seattle: http://www.weather.com/weather/tenday/USWA0395?from=month_topnav_undeclared

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

quarta-feira, 28 de outubro de 2009

Java vs .NET - Material e comentários

No último sábado eu participei do evento Java vs .NET (http://www.javaversusdotnet.com.br/), onde fiz uma pequena palestra sobre mapeamento Objeto-Relacional na plataforma .NET.

Analisando o que eu consegui assistir, o evento foi bem interessante, com ambos os lados focados em tecnologia e não em jogar pedra no outro, mas sempre sai uma faísca, que controlada é saudável. O público foi bastante eclético, com muitos estudantes e profissionais de TI, o que adiciona um ingrediente ao desafio, pois o apresentador têm que achar um meio termo para sua palestra, senão um dos grupos serão implicitamente convidados a tirar uma soneca.

Acho que a minha apresentação foi legal e o público gostou, no início eu estava com dificuldade para falar bem (tenho que me lembrar de comer menos antes de uma palestra! hahaha), mas no fim a coisa se ajeitou e nenhuma demo deu errado. Depois que eu falei o Marcelo, um camarada muito gente fina por sinal, falou com propriedade sobre a plataforma Java, onde pude notar uma série de semelhanças e dificuldades que todos enfrentamos, fortalecendo minha idéia de que ambas as tecnologias são boas, e nós profissionais de TI é que estamos estragando a brincadeira quando usamos mal a tecnologia.

Duas coisas me marcaram no evento:
1 - A falta de perguntas no debate! Eu achei que ia chover perguntas no fim das apresentações e aconteceu o contrário, no meu caso somente foram 3 perguntas. Isso foi muito chato.
2 - Os palestrantes de Java fazem poucas demonstrações. Eu sei que existe uma cultura interessante com eles, de discutirem o JCP, entender em qual versão está o que e quais frameworks (dos N) possuem qual recurso, mas poxa, uma demo sempre cai bem para materializar o que está sendo dito para o público.

A segunda parte do evento acontecerá no dia 07 de novembro, mas não poderei participar pois estarei viajando. De qualquer forma, fica aqui o convite.

Quem quiser minha apresentação, baixe aqui.



Valeu muito participar do evento, encontrar os amigos e conhecer novos profissionais e universitários...

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

SQLServerDay - 12 horas de SQL Server

Essa notícia já está rolando a alguns dias, mas eu não posso deixar de colocar aqui informações sobre um evento focado em SQL Server com doze horas de duração, certo?

No dia 07 de novembro vai rolar o SQLServerDay, com doze apresentações de uma hora sobre os mais variados temas, com muitos rostos conhecidos pela comunidade e que conhecem bastante do SQL Server. Para mais informações acessem o site (http://www.sqlserverday.com.br/default.html) ou a comunidade (http://sqlserverday.ning.com/).

Será que eu vou palestrar? NÃO!! Acredita?
Não foi por falta de vontade ou convite, mas infelizmente no sábado da realização do evento (também dia da segunda parte do evento Java versus .NET em Brasília) eu estarei voltando do PASS, evento de SQL Server que pariticiparei na semana que vêm e, a menos que eu possa transmitir do avião uma sessão, não vai rolar. :-)

Pelo menos estamos chamando de PRIMEIRO SQLServerDay, quem sabe nos outros eu não apareço.

Bom, o jeito vai ser assistir TODAS as gravações depois, mas tenho que adimitir que estou muito curioso para ver duas sessões: "Entenda porque o Query Optimizer é mais esperto que você" e "Analise de Desempenho utilizando as Estatísticas de Espera".
Adorei o título do primeiro! Pura verdade e ainda têm desenvolvedor que se acha melhor que o query optimizer...

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

terça-feira, 27 de outubro de 2009

Testes de unidade em aplicações multi-thread

No meu último artigo eu trouxe uma solução para um problema que eu passei aqui na Sr. Nimbus, já esse post não trás boas novidades não, apenas mostra uma característica do Visual Studio 2010 (e acredito que anteriores) de uma história com testes de unidade e aplicações multi-thread.

Vamos ao nosso cenário básico: imagine uma classe responsável por disparar alguns workers em background de acordo com a tarefa que cada um deve executar. Esses procedimentos por si geram notificações através de eventos que podem ser tratados por outras classes da sua solução. Nada demais, o código para isso (bem simplificado) poderia ser assim:

public struct InfoTarefa
{
public string Info;
public DateTime horaExecução;
}

public class NegocioTeste
{
public void ExecutaTarefa(object informação)
{
InfoTarefa tarefa;
tarefa.Info = (string)informação;
tarefa.horaExecução = DateTime.Now;

if (TarefaCompleta != null)
TarefaCompleta(tarefa);
}

public delegate void NotificarTarefaCompleta(InfoTarefa tarefa);

public event NotificarTarefaCompleta TarefaCompleta;
}


public class ThreadEmBackground
{
public List tarefas;
private NegocioTeste negocio;

public ThreadEmBackground(NegocioTeste n)
{
negocio = n;
}

public void ProcessaTarefas()
{
foreach (string tarefa in tarefas)
{
Thread t = new Thread(negocio.ExecutaTarefa);
t.Start(tarefa);
t.Join();
}
}
}
Por simplicidade deste exemplo eu faço um Join() da thread criada, esperando o fim da execução, para deixar esse exemplo bem controlado, mas na aplicação de verdade isso é diferente.
Para testar o código acima basta fazermos o setup correto das pré-condições, colocando as verificações do resultado na rotina de tratamento do evento TarefaCompleta.

[TestMethod]
public void TesteBásico()
{
//SETUP
List tarefas = new List();
tarefas.Add("Tarefa 01");
NegocioTeste negocio = new NegocioTeste();
ThreadEmBackground gerenteThreads = new ThreadEmBackground(negocio);
gerenteThreads.tarefas = tarefas;
negocio.TarefaCompleta += RecebeInfoTarefa;

Assert.AreEqual(1, gerenteThreads.tarefas.Count);

// Execução do curso básico
gerenteThreads.ProcessaTarefas();
}

public void RecebeInfoTarefa(TestesMultiThread.InfoTarefa tarefa)
{
Assert.AreEqual("Tarefa 01", tarefa.Info);
Assert.IsTrue(tarefa.horaExecução > DateTime.Now.AddMinutes(-1));
}
Mas se a verificação falhasse no tratamento do nosso evento, que acontece em outra thread, olhe na figura abaixo o que veríamos:



Um Error aparece no lugar do Failed, com um ícone de warning (?!) e a mensagem “The agent process was stopped while the test was running”. Se clicarmos duas vezes em cima do Error para analisar o que aconteceu (ação já automática com a falha usual do assert), a mesma mensagem será exibida, o que não ajuda em nada (no caso do Failed vemos a stack trace).

Aí você descobre que deve clicar em “Test run error” para ver a stack trace, onde conseguirá a informação “One of the background threads threw exception: Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException: Assert.Fail failed. Problema na validação”.

Isto é, por se tratar de uma thread em background, a maneira como o Visual Studio trata as verificações é diferente do comportamento usual, o que eu achei ruim. Isso mata alguém, não vejo maiores problemas, mas fico imaginando se trará algum impacto durante a automação dos testes ou em momentos diferentes, o que me deixa um pouco inseguro.

Outra coisa que eu tentei através do Visual Studio e não consegui ver uma maneira fácil (a não ser codificar), foi a possibilidade de executar o testes orientando o VS para disparar várias threads de uma só vez, me ajudando a testar condições de corrida.

Para ser super sincero, pode ser que o Visual Studio tenha recursos nessa área de testes para aplicações multi-thread, mas em algumas pesquisas rápidas que fiz não encontrei muitas referências e um funcionário da MS diz no fórum que “Nós não temos uma ótima história para contar sobre aplicações multi-threaded”. Em: http://social.msdn.microsoft.com/Forums/en-US/vststest/thread/c19e9ba8-52db-4970-99a4-04468206baf6/
Ainda vou explorar o DevCenter de computação paralela (http://msdn.microsoft.com/en-us/concurrency/bb895950.aspx) e o único recurso que eu achei para esse cenário, o projeto CHESS (http://research.microsoft.com/en-us/projects/chess/).

Para fechar o artigo: Com os computadores pessoais entrando na era dos multi-cores e todo mundo falando da necessidade de termos aplicações que aproveitem de verdade esses recursos (e até a GPU), espero que o Visual Studio traga boas novas nessa área e ajude os desenvolvedores, o que acredito que acontecerá.

Se você tiver alguma dica ou experiência para compartilhar, estou ansioso para ouvi-lo!
Baixe o PDF e código fonte aqui.



[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

segunda-feira, 26 de outubro de 2009

Testes de unidade com deployment de arquivos


Olá pessoal, vamos de Visual Studio hoje.


Imagine um cenário bem comum: Estamos desenvolvendo um projeto que manipula arquivos e, para ajudar o desenvolvimento, você cria uma classe utilitária que lê do arquivo de configuração qual é o repositório local (diretório) onde os arquivos são armazenados. Essa classe auxiliar será utilizada por toda aplicação, então não existirá somente para testes. Exemplo de código abaixo:


public class Configuração
{
private static string repositórioArquivos;

static Configuração() {
repositórioArquivos = ConfigurationManager.AppSettings["RepositórioArquivos"];
}

public static string RepositórioArquivos
{
get { return repositórioArquivos; }
}
}

public void RenomearArquivo(string nomeArquivo, string novoNomeArquivo)
{
string repositório = Configuração.RepositórioArquivos;
File.Move(Path.Combine(repositório, nomeArquivo), Path.Combine(repositório,
novoNomeArquivo));
}

Antes ou depois de codificar a classe, você desenvolve alguns testes para testar seu componente, então para tudo funcionar corretamente você adiciona ao seu projeto de testes um arquivo App.Config e colocar uma entrada no AppSettings, que será lida pelo auxiliar de configuração:

[TestMethod]
public void TesteCenárioUsoBásico() {

// Pré-condições
Assert.IsTrue(File.Exists(Path.Combine(
TestesComArquivos.Configuração.RepositórioArquivos, "arquivoqualquer.txt")));

TestesComArquivos.ClasseNegocio negócio = new TestesComArquivos.ClasseNegocio();
negócio.RenomearArquivo("arquivoqualquer.txt", "novoarquivotexto.txt");

// Pós-condições
Assert.IsTrue(File.Exists(Path.Combine(
TestesComArquivos.Configuração.RepositórioArquivos, "novoarquivotexto.txt")));
}


Execute o projeto (em anexo a este artigo) e tudo funcionará perfeitamente. Quer dizer, mais ou menos, pois aqui temos alguns problemas:

1 - Depois que você executar esse teste, o arquivo estará renomado e a próxima execução vai falhar. Você corrige isso escrevendo direito as pré-condições e setup do seu teste. Por simplicidade eu deixarei como está, ok?

Tudo isso funciona corretamente se você está desenvolvendo sozinho, mas e se houver uma equipe junto com você?

2 - Em primeiro lugar, os arquivos não serão levados juntos com o projeto, então se alguém adiciona outro arquivo para teste, o que você faz? Isso garoto, adicione os arquivos ao projeto de teste, para todos os desenvolvedores terem acesso ao distinto quando pegarem uma nova versão do projeto.

3 - (Um problema de verdade) Cada desenvolvedor pode definir um diretório local diferente para seu workspace de trabalho, então se um desenvolvedor colocar os arquivos da solução em outro diretório e mudar o App.Config, quando você pegar a última versão do projeto no TFS, bye bye testes!

Uma maneira de "resolver" isso é ficar mudando o App.Config para cada desenvolvedor ou então padronizar o diretório local para o seu projeto, mas é um gato MUITO feio. Concorda? E se houverem builds diários, você vai fazer o quê? Como resolvemos isso?


  1. Adicione ao seu projeto o diretório "Arquivos" e coloque lá dentro o famoso "arquivoqualquer.txt". Lembre de marcar a opção do arquivo "Copy to output directory" com "Copy if newer".

  2. Como a cada nova execução dos testes são gerados novos diretórios com um timestamp diferente (ex.: "C:\Projects\VisualStudio\TestesComArquivos\TestResults\luciano.moreira_DSKSRN01 2009-10-26 14_26_18"), precisamos referenciar os arquivos dentro do diretório "Out", onde estão as DLLs do projeto.

    1. Como nossa propriedade em Configuração.RepositórioArquivos é somente leitura e não queremos interferir com a interface da classe, adicionarei um método internal chamado DefineRepositórioArquivos.

      internal static void DefineRepositórioArquivos(string repositório) {
      repositórioArquivos = repositório;
      }

    2. Para que esse método seja visível no nosso projeto de testes, utilizamos um pequeno recurso do .NET, definindo que os métodos internal do assembly de negócio são visíveis somente para o projeto de testes. Recurso que somente utilizo nesse tipo de cenário.

      [assembly: InternalsVisibleTo("TestesComArquivos_TesteSuite")]

    3. A partir desse momento eu faço uma pequena alteração no setup do meu teste, para que ele defina qual o repositório de arquivos de acordo com o diretório de deployment do teste. Para isso eu utilizo a classe auxiliar TestContext, que possui a propriedade DeploymentDirectory. Se você não quiser usar essa classe auxiliar, pode partir para a ignorância com o AppDomain.CurrentDomain.BaseDirectory.

      TestesComArquivos.Configuração.DefineRepositórioArquivos(TestContext.DeploymentDirectory);

    Se você executar o seu teste nesse momento irá receber um erro! Analisando com cuidado verificará que o problema está no primeiro Assert, que pergunta pela existência do arquivo, então olhando o diretório criado pelos testes notará que o arquivo não foi colocado no Out. Huummm, mas no passo 1 você já pediu para o arquivo ser copiado para o diretório de saída, não é suficiente?


    O pior é que não! Quando você compila o projeto de teste o arquivo é colocado no "\Bin\Debug" corretamente, mas não é levado para o "\TestResult\....\Out" que é criado para o teste. Para isso é necessário editar as configurações dos testes em "Local.testsettings" (dentro de Solution Items) e no Deployment adicionar o diretório "Arquivos", conforme figura abaixo.




  3. Pronto!

    Basta executar o seu teste que tudo vai funcionar e quantas vezes forem necessárias, pois cada novo teste copia o arquivo original para um novo diretório, evitando o primeiro problema que eu citei. Agora todos os seus desenvolvedores podem trabalhar tranquilamente, adicionar novos arquivos ao diretório já criado e codificar novos testes, basta lembrar de definir o diretório correto no início dos testes.

    Bom, espero que tenham gostado. O projeto que criei está disponível juntamente com o PDF do artigo. Baixe aqui.

    []s
    Luciano Caixeta Moreira - {Luti}
    Chief Innovation Officer Sr. Nimbus Serviços em Tecnologia Ltda luciano.moreira@srnimbus.com.br
    www.twitter.com/luticm

quinta-feira, 22 de outubro de 2009

Resultado webcast - Entity Framework 4.0

Hoje eu ministrei um webcast sobre algumas das novidades no Entity Framework 4.0. Curiosamente a apresentação caiu na semana do lançamento do Visual Studio 2010 Beta 2 e .NET Framework 4.0 Beta 2, mas como eu não tinha certeza sobre a existência do EF Features CTP 1 junto com o Beta 2 (e outros motivos), acabei ficando com o Beta 1 + EF Features CTP 1.

A agenda do webcast foi:

• Um pouco de história
• Novidades do EF 4.0 Beta 1 e Feature CTP 1
• Demos
• Novidades do EF 4.0 Beta 2
• Roadmap?
• Conclusão

Antes de começar o webcast eu passei por um bom aperto, acabou a luz em metade de Brasília, saí correndo do escritório para a casa da mãe, lá é claro que a NET estava fora do ar (Murphy?) e tive que usar um modem emprestado que nem 3G era. Início torto, atrasado e corrido, mas depois eu acho que tudo correu bem e fomos acabar por volta de 13:40h.

Minha análise do webcast: falei muito de pressa e muita coisa (para variar), tivemos constantemente mais de 100 pessoas na sala, o que mostra claramente que o EF gera muito interesse, as demos funcionaram bem e ainda houveram muitas, mas muitas perguntas mesmo. Por fim achei o webcast bom, mas sempre têm algo que não gosto.

Se você não viu, a gravação deve estar disponível em breve no mídia center do MSDN. Deixo aqui as soluções no VS2008 e VS2010, além do PDF do PPT. Download.



Quais são os próximos passos? Continuar destrinchando o Entity Framework 4.0, pois não é uma tecnologia simples, e trabalhar com seu uso e adequação à arquitetura do projeto, que é de suma importância para o sucesso do mesmo. Ainda têm muita coisa que preciso entender em detalhes para ficar 100% seguro com o distinto, e hoje foi só o começo, agora só precisamos ficar antenado em mais uma tecnologia...

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

quarta-feira, 21 de outubro de 2009

Visual Studio 2010 e .NET Framework 4 - Beta 2

Bom, para quem assina RSSs, o dia de segunda foi repleto de posts sobre o lançamento do Visual Studio 2010 e .NET Framework 4.0, ambos beta 2. Depois de dar uma olhada nos posts e iniciar o download através da assinatura do MSDN, tive que controlar minha ansiedade e deixar para instalar ambos posteriormente. Explico os motivos:

- Não consegui uma informação clara sobre o Entity Framewok. Tenho instalado o VS2010 Beta 1 e o Entity Framework feature pack CTP1, que me trás algumas novidades que espero ver na versão final do EF (e não em um SP1, tomara!), mas o anúncio do time de produto não deixa claro se esses recursos estão todos disponíveis no beta 2. Pelo comentário do Fredrik Knutson, parece que a resposta é negativa.
Veja o anúncio formal e se o roadmap te interessa, deixe um comentário em: http://blogs.msdn.com/adonet/archive/2009/10/19/vs2010-and-net-framework-beta-2-announced.aspx

- Azure Tools for Visual Studio. Se você está desenvolvendo com o Azure, sabe que instala o SDK e o Azure Tools for Visual Studio. Mas se você desinstalar o beta 1 e colocar o beta 2, mesmo reinstalando as ferramentas do Azure, elas não deverão funcionar. O jeito é esperar pelo CTP de novembro: http://beta.blogs.msdn.com/jnak/archive/2009/10/18/windows-azure-tools-and-visual-studio-2010.aspx
Se você está apenas utilizando o StorageClient, a coisa toda deve funcionar sem problema.
Tomara que nesse CTP eles compilem o development storage com o 4.0 e não com o 3.5, facilitando a vida de quem está gerando a DLL com o TableStorageDataServiceContext através do VS2010, mas isso é assunto para um outro post.

- Integração entre o Visual Studio 2010 beta 2 e o Team Foundation Beta 1. Em um primeiro momento, eu não quero colocar o TFS Beta 2, pois exige uma preparação cuidadosa e tenho que garantir que os artefatos que eu tenho armazenados não serão perdidos em um erro de operação. O problema é que não existe garantia do VS beta 2 funcionar com o TFS beta 1, segundo o Brian Keller: http://social.msdn.microsoft.com/Forums/en/tfsprerelease/thread/e8185f70-aa69-4ddd-80f9-2508115916b7

De qualquer forma, se você está preparando uma instalação do TFS Beta 2, aconselho dar uma olhada neste guia que está sendo preparado - TFS 2010 Beta 2 Deployment Checklist:
http://geekswithblogs.net/aaronsblog/archive/2009/10/04/135297.aspx

Uma excelente notícia sobre o beta 2 é a licença "Go-Live", que significa que nós podemos utilizar os produtos para projetos em produção. Lembro de ver em um post que, se não me engano, você precisa se cadastrar para ter esse suporte. Vou ver como funciona e depois retorno para vocês.

Agora, se você não possui nenhum desses requisitos, eu aconselho correr no site e começar a fazer download do seu Visual Studio 2010 beta 2, que aparentemente já está disponível para todo mundo, não só assinantes do MSDN. Para mim o jeito vai ser voltar para as VPCs e brincar com o distinto fora da máquina física...

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
Atualizado em 27/10/2009

O time do EF anuncionou que eles estão trabalhando no Feature CTP para o Visual Studio 2010 Beta 2. E esperar para ver... http://blogs.msdn.com/adonet/archive/2009/10/26/upcoming-ado-net-entity-framework-feature-community-technology-preview-for-visual-studio-2010-beta-2.aspx

Seja paciente! :-)

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

terça-feira, 20 de outubro de 2009

Webcast da semana - Novidades no EF 4.0

Durante a correira da semana eu estou encontrando um tempinho para falar um pouco sobre as novidades do Entity Framework 4.0, webcast que acontecerá nessa quinta-feira. Gosta do assunto e quer saber o que o time de produto anda preparando para nós? Então reserve um tempinho na agenda e venha conferir...

A URL para cadastro no evento e participação é: https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032423387&EventCategory=4&culture=pt-BR&CountryCode=BR

Eu também estou dando uma olhada no que temos de novo com o .NET Framework 4.0 Beta 2, que saiu ONTEM para assintantes do MSDN! Espero conseguir sanar algumas dúvidas que eu tive e mostrar tudo isso para você nessa quinta.

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

sexta-feira, 16 de outubro de 2009

Evento Java versus .NET 2009

Oi pessoal, tudo bem?

Depois de alguns anos sem acontecer o famoso evento Java versus .NET em Brasília, em 2009 o evento volta a dar o ar da graça. Dessa vez o evento será divido em dois dias, sendo que o primeiro acontecerá em 8 dias, sábado 24/10.

Além de assistir a alguns debates, eu estarei presente no evento apresentando sobre EF, Linq to SQL e Astoria, no Tema 3: Acesso a dados e mapeamento objeto-relacional (ORM), que acontecerá sábado, 24 de outubro de 2009 (14:00 às 16:00).

Aproveitando, eu vou falar o que sinceramente espero do evento: eu gostaria de ver poucos xiitas dos dois lados, uma análise de qualidade dos frameworks e um belo comparativo das plataformas.

Por conta do acaso eu comecei a trabalhar com a plataforma Microsoft e não parei mais, porém estou vivendo um dilema fuderoso (posso escrever isso?), pois quero saber mais sobre WCF, WF, WPF, Azure, SQL, VSTS, TFS, Sharepoint, EF, Astoria, LINQ, MIF, DSL, ASP.NET MVC, AJAX, DDD, DD, metodologias,… Mas é humanamente impossível.
Não sei quanto a vocês, mas além da plataforma que trabalho, eu morro de curiosidade de saber mais sobre tudo. Gostaria de saber mais sobre o JEE 6, JSF 2, JPA 2, EJB 3, e como são tratadas questão de segurança, integração, workflow, testes, BI, em outras plataformas, entendendo onde uma está melhor que a outra e quais avanços podemos esperar em ambas.

Espero que eu consiga sair do evento com uma visão mais ampla e que os profissionais de TI já tenham percebido que é possível fazer coisas maravilhosas com qualquer uma das plataformas, mas que o principal problema de hoje é termos profissionais fazendo um trabalho de merda, e não é usuário ou negócio que estão errados, como alguns pensam.

Informações detalhadas sobre o evento podem ser encontradas no site: http://www.javaversusdotnet.com.br. Abaixo, estão destacadas algumas das principais informações sobre o evento.

· Motivação do evento - Por que participar?
http://www.javaversusdotnet.com.br/Motivacao.aspx

· Objetivos e organização do evento
http://www.javaversusdotnet.com.br/Objetivos.aspx

· Programação do evento
http://www.javaversusdotnet.com.br/Programacao.aspx

· Palestrantes da Plataforma Java
http://www.javaversusdotnet.com.br/PalestrantesJava.aspx

· Palestrantes da Plataforma .NET
http://www.javaversusdotnet.com.br/PalestrantesDotNet.aspx

· Todos parceiros do evento
http://www.javaversusdotnet.com.br/Apoio.aspx

· Apoio social
http://www.javaversusdotnet.com.br/Beneficencia.aspx

· Inscrição no evento
http://www.javaversusdotnet.com.br/Inscricao.aspx

· Local de realização do evento
http://www.javaversusdotnet.com.br/Local.aspx

· Imagens disponíveis para divulgação do evento
http://www.javaversusdotnet.com.br/ImprensaImagens.aspx

Nos vemos lá? Espero que sim...
Se alguém quiser um desconto na inscrição do evento, mandar um e-mail para luciano.moreira@srnimbus.com.br.


[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

quarta-feira, 7 de outubro de 2009

Claims Based Identity & Access Control Guide

Oi pessoal.
Segurança é um assunto recorrente no cotidiano do mundo de IT (e fora dele), mas eu ainda tenho a impressão que a maioria esmagadora dos desenvolvedores arrepiam até o último fio de cabelo quando falamos do assunto, tratando-o como tabu ou algo esotérico.
Principalmente agora, com o advento das aplicações na nuvem, ou você entende o que está fazendo e mostra que está tomando as precauções para melhorar a segurança de seu aplicativo, ou...

E para nos ajudar, sempre temos novos recursos aparecendo e, ainda bem, GUIAS. Um deles que está em desenvolvimento é o Claims Based Identity & Access Control Guide, disponível claro, no codeplex: http://claimsid.codeplex.com. Ainda está em beta e acabou de sair o primeiro drop do guia, mas para quem está antenado, vale a pena acompanhar. Só precisa de um nome mais curto, que tal CBI&CA_guide? Brincadeira...

Além disso, não deixem de frequentar os blogs dos arquitetos da MS, que estão recorrentemente abordando o assunto, principalmente o Markus Kristen: http://blogs.technet.com/markuschristen/archive/tags/Geneva/default.aspx.

Post rapidinho, só para espantar os mosquitos da dengue rondando esse blog. ;-)

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

sexta-feira, 25 de setembro de 2009

Impressões da prova 70-561

Na última quarta-feira eu fiz a prova 70-561 – Microsoft .NET Framework 3.5: ADO.NET Application Development, que é focada nas tecnologias de acesso e manipulação de dados oferecida pela Microsoft. Como é de costume, eu peguei a lista de exigências para a prova (http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-561&locale=en-us#tab2) e durante o domingo eu dei uma olhada em alguns tópicos específicos, alguns para aprender e outros para revisar, aproveitando para codificar um pouquinho. Como eu já tinha brincado com o ADO.NET tradicional no passado e na MS andei olhando para o LINQ, EF e Sync Framework, já estava com um trabalho de base mais ou menos executado, mas gostaria de ter dedicado mais tempo para me preparar para a prova e minha recomendação é: não faça a prova se não estiver seguro com as tecnologias e estudado bem!

Diferente da última prova que eu fiz, eu realmente gostei dessa prova. O conteúdo foi bem equilibrado, respeitando as porcentagens detalhadas no guia, com algumas questões mais simples, mas no geral as perguntas foram bem puxadas, o que exigiu um tempo maior do que eu estou acostumado a gastar. Saí da prova faltando só 40 minutos para acabar o tempo, muito do qual foi gasto na análise das alternativas, onde alguns pequenos detalhes estavam fazendo a diferença.

Um pouco sobre o conteúdo...
Entity Framework: Não basta saber usar o LINQ para consultar as entidades no contexto ou usar o eSQL. Lembra daqueles XMLs (SSDL, MSL e CSDL) que ninguém quer ver e eu sempre mostrava nas minhas apresentações, pois é, saiba bem como eles funcionam e se relacionam, lembre-se que existem ferramentas por trás (EDMGEN) e quais são as opções para carregar os dados. Não peguei nenhuma questão focada em change tracking com EF, mas estude isso.
LINQ: Em diversas questões o LINQ será utilizado para recuperar os dados, nada muito complicado ou atolado de expressões lambda, mas também nada extremamente fácil.
Sync Framework e SqlDependency: com certeza a parte mais difícil da prova, caíram algumas questões do sync bem difíceis, inclusive tinha uma que eu olhei para ela e me perguntei: isso existe? :-)
ADO.NET 2.0: grande maioria da prova e exige um bom conhecimento, como o entendimento das opções oferecidas pelas diversas enumerações no framework (ex.: CommandBehavior), como trabalhar com dados desconectados, serializar o DataSet, rowversion, questões relacionadas com controle de transação e otimização no acesso. Nada de questões básicas do tipo: use conexão, comando, datareader e varre o leitor, muito pelo contrário, se desse para complicar um pouco e colocar a estrutura básica com algum erro, provavelmente é isso que eles fariam. Acho que por acaso, não caíram questões de pooling, mas eu não deixaria de estudar esse tópico. E ah, estude bem a questão de constraints (FK e Unique) e DataRelation, isso apareceu bastante.

No fim eu comentei duas questões, uma de EF onde havia um nome de entidade (lógica e de armazenamento), que estava errado no MSL e fazia com que todas os itens estivessem errados (marquei o que seria o teoricamente certo). E outra sobre sync framework, que até onde eu sei um dos requisitos pedidos na questão não foi atendido por não ser o comportamento default dos agentes.

Por curiosidade eu consultei a página com o número de MCPs no mundo todo. Os dados devem estar desatualizados, mas segundo a MS eu me juntei a um grupo de 345 pessoas que possuem a certificação de ADO.NET 3.5. Cool! http://www.microsoft.com/learning/en/us/certification/cert-overview.aspx#tab5

Bom é isso, no final tudo deu certo, a nota foi boa, e saí de lá feliz.
Por falar em ficar feliz, a quarta acabou super bem com o encontro do SQLServerDF! Onde além de uma apresentação super divertida e tranqüila, fiquei sabendo que um dos participantes – o Luan - passou na sua primeira prova da MS com uma excelente nota, usando o voucher de 50% que conseguimos com a Hepta. É bom ver que o grupo está ajudando as pessoas, é nessa hora que você coloca a cabeça no travesseiro e lembra que vale a pena o trabalho gigantesco (é muita coisa, acreditem) que você faz de graça com e para a comunidade...

Até o próximo post e, quem sabe, prova.

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

terça-feira, 22 de setembro de 2009

Evento em Brasília - ECODevelopers

Não sei se o pessoal anda antenado, mas teremos em Brasília o ECO Developers, um evento organizado por grupos de usuário e que toca um tema mais do que atual, o desenvolvimento sustentável.

Quer participar? Acesse o site: http://ecodevelopers.brasildotnet.net/.





[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

quarta-feira, 16 de setembro de 2009

Encontro IV - SQLServerDF

Bom dia meninos e meninas.
Apesar da correria e das noites com poucas horas de sono, o grupo SQLServerDF não pode parar, certo? Claro que não!

Continuando as apresentações do nosso grupo, dessa vez sou eu quem volta ao palco, para falar sobre o SQL Server Integration Services, ferramentas que venho brincando bastante e fazendo coisas muito divertidas.

Vai estar em Brasília no dia 23/09 com a noite livre e quer participar? Faça sua inscrição em http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032426708&Culture=pt-BR (sim, finalmente registrei o evento junto ao CEA com a devida antecedência).

Qual é mesmo o nome da sessão?

Agenda:
- Conheçendo o SQL Server Integration Services 2008 - (duração 2:30h) com Luciano Caixeta Moreira
- Detabe técnico.

Descrição da sessão: Essa é uma apresentação sobre o SSIS e o processo de ETL (Extração, transformação e carga de dados), onde temos como objetivo: entender a arquitetura do SQL Server Integration, como ele se integra com a plataforma Microsoft, mecanismos básicos de control flow e data flow, logging, configuração, entre outros. Essa sessão irá fornecer a base para o próximo encontro, onde serão abordados mais recursos e avançados do SQL Server Integration Services.

Como sempre, vou tentar fazer uma sessão bem focada em demos, que é o meu estilo.

Esse encontro será realizado no auditório da Microsoft em Brasília, para mais informações acesse a página do grupo: http://sqlserverdf.sqlpass.org/

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

terça-feira, 15 de setembro de 2009

TechEd 2009 - Arquivos da sessão DBP302

Conforme prometido, disponibilizo o conteúdo que apresentei junto com o Gustavo Gattass (MS) na sessão DBP302 - Data Warehouse e Integration Services numa solução de BI.

Baixe aqui os arquivos.



Estou trabalhando em alguns screencasts com o SSIS, então fique ligado que em breve terei boas novidades para vocês.

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm