SELECT CAST (power(CrazyIdeas, Curiosity) * (RealLifeExperience + MyMistakes)) / FreeTime) AS VARCHAR(MAX)) FROM MyBrain WITH (NOLOCK, INDEX('idx_Neuron')) WHERE ThingsIThinkIKnow in ('SQL Server', 'DB2', '.NET', 'Cloud')
terça-feira, 5 de maio de 2015
Material do GAB 2015 - Azure DocumentDB
Aproveitei minha corrente de estudos "beyond relational" e fiz minha primeira apresentação sobre o Azure DocumentDB. A sessão tinha duração de 50 minutos, mas me empolguei e falei por 1:15h. :-)
Você também pode fazer o download da apresentação.
Agora é achar uma brecha na agenda para fazer novamente a apresentação, dessa vez para o SQLServerDF.
Abraços
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
quinta-feira, 26 de julho de 2012
Cloud Computing != HA e DR
sexta-feira, 29 de junho de 2012
Artigo comparativo - desempenho de I/O
Em paralelo estamos trabalhando com um cliente para validar o SQL Server rodando no AWS e também conduzindo uma série de testes de desempenho, começando pelo I/O.
Eu e o Ivan Lima preparamos, configuramos e executamos a avaliação, que culminou com o belo artigo publicado agora: SQL Server na nuvem! Azure vs Amazon. Round I: desempenho de I/O
Imperdível a leitura do artigo. Deixe lá seus comentários.
[]s
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
sexta-feira, 22 de junho de 2012
SQL Server e a nuvem
IaaS + SQL Server
Perguntas e oportunidades
quinta-feira, 4 de agosto de 2011
Oportunidade: Desenvolvedor SQL Server e Azure
Estamos com duas vagas na Nimbus, ambas com perfil de desenvolvedor .NET, uma para se aventurar no Azure e outra com o SQL Server.
Mais detalhes de cada uma das vagas estão aqui:
Desenvolvedor SQL Server
Desenvolvedor Windows Azure
Para quem já havia me enviado currículos anteriormente, eles também serão considerados.
[]s
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
terça-feira, 17 de novembro de 2009
Microsoft PDC 2009
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
Saiu o CTP de novembro do:
- Azure SDK: http://www.microsoft.com/downloads/details.aspx?familyid=772990DA-8926-4DB0-958F-95C1DA572C84&displaylang=en
- Ferramentas para o Visual Studio: http://www.microsoft.com/downloads/details.aspx?FamilyID=6967ff37-813e-47c7-b987-889124b43abd&displaylang=en
- .NET Services: http://www.microsoft.com/downloads/details.aspx?familyid=C80EBADF-7EB8-4A62-ABCD-0B57FA3855F8&displaylang=en
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.
[]sLuciano 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
- 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
quinta-feira, 23 de julho de 2009
CTPs Julho para o Azure
Windows Azure Software Development Kit (July 2009 CTP)
Ref.: http://www.microsoft.com/downloads/details.aspx?familyid=AA40F3E2-AFC5-484D-B4E9-6A5227E73590&displaylang=en
Windows Azure Tools for Microsoft Visual Studio July 2009 CTP
Ref.: http://www.microsoft.com/downloads/details.aspx?FamilyID=8d75d4f7-77a4-4adf-bce8-1b10608574bb&displaylang=en
Microsoft .NET Services SDK (July 2009 CTP)
Ref.: http://www.microsoft.com/downloads/details.aspx?FamilyID=38d8cf79-fc39-4aef-b3fd-ef280f2e9fa6&displaylang=en
[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Ltda
E-mail: luciano.moreira@srnimbus.com.br
quarta-feira, 29 de abril de 2009
Testes de unidade, Azure e confiabilidade
Para ilustrar como os testes me ajudam, vou descrever um pouco do que eu fiz recentemente e, quem sabe, você também vai se sentir compelido a adotar essa boa prática de programação.
Primeiro eu codifiquei um wrapper para uma classe do projeto StorageClient que vem junto com o SDK do Azure e depois, para garantir que tudo irá funcionar corretamente, eu escrevi um teste que tentava criar uma série de containers passando com parâmetros os nomes mais esdrúxulos, conforme vocês podem ver abaixo:
Assert.IsTrue(ger.CriaContainer(@"ML:K()*_%^%$#@!@$#%^GBDF HGDSFKhf hdf kjh"));
Assert.IsTrue(ger.CriaContainer(@"~!#anjnd_)(* 8923849790>""?><>MarshalByRefObjectAssert.IsTrue(ger.CriaContainer(@"|{})_(*()*&h12h8934njkhf1"));
Assert.IsTrue(ger.CriaContainer(@"~!#anjnd_)(* 8923849790>"<>MarshalByRefObjectAssert.IsTrue(ger.CriaContainer(@"[]@#$|\\\skj382oflkuy"));
Assert.IsTrue(ger.CriaContainer(@"~s 092k3 jk3098 \\[hshsh"));
O método CriaContainer tenta limpar os nomes informados, deixando somente caracteres válidos. Porém eu somente comecei a escrever o método de limpeza do nome depois que meu teste estava pronto. O que eu fazia então...
while (ExecutaTeste() != tudoOk){
Luti_EscreveDireitoFuncaoLimpeza();
}
Enquanto o meu teste não passava todinho (o local storage do Azure gerava uma Exceção), eu continuava melhorando o método de limpeza. Depois de algumas iterações desse loop, o teste mostrou aquele check verdinho, tudo 100%.
Feito esse e mais outros testes, todos executando com sucesso, resolvi testar meu código diretamente contra a nuvem. Alterei o App.Config do meu projeto de testes para usar minha conta do Azure e executei a bateria com 10 testes: Verde, Verde, Verde, Verde, VERMELHO!
Uai, estava tudo certo?! Olha daqui, olha dali, vejo o problema. O armazenamento local permite que eu crie um container com o nome parecido com "empresa---xxx". O problema é que se olharmos a documentação, veremos "Every dash (-) character must be immediately preceded and followed by a letter or number".Ugh.
Resultado: o ambiente de desenvolvimento local não checa essa regra.
Sabe quando eu acho que iria encontrar um erro desse tipo se não fossem pelos testes, provavelmente em produção!!!
Depois disso alterei meu código para refletir os requisitos do Azure, re-executei os testes de unidade e tudo verde. Lindo.
Mas a coisa não termina por aí não. Depois de concluído os testes, resolvi baixar e instalar o CTP de Março (ainda estava com o de Janeiro). Instalei tudinho e adivinha qual foi a primeira coisa que eu fiz? Executei novamente minha bateria de testes... Tudo certo, então até que me provem o contrário, a instalação foi um sucesso.
Qual o meu sentimento no fim das contas? Eu estou confiando bastante no meu código e, toda vez que houver alguma alteração eu não vou precisar ficar 45 minutos para testar se houve alguma mudança que me prejudica, basta eu executar meus testes novamente que em alguns segundos eu saberei a resposta.
Gostou?
[]s
Luciano Caixeta Moreira
luciano.moreira@srnimbus.com.br
luticm79@hotmail.com
sexta-feira, 3 de abril de 2009
Troubleshooting - Development Storage e Azure Tables (a solução)
Esse artigo é continuação da primeira parte da minha saga com as tabelas no Azure (http://luticm.blogspot.com/2009/04/troubleshooting-development-storage-e.html)
Depois de analisar muito código e estudar a estrutura do cabeçalho e outras coisinhas relacionadas com o Lite Shared Key, eu saí do computador, respirei um pouco e iniciei outro projeto do zero, onde reconstruí a aplicação, copiando e colando o código do meu artigo de referência.
Depois de tudo montado, fui executar e ... funcionou! Mas que droga, que besteira eu estou fazendo? Code Review, lá vamos nós.
Opa! Eu tinha optado por não herdar minha entidade da classe TableStorageEntity e durante o CTRL+C / CTRL+V eu não levei o campo Timestamp. Será que é isso? Coloquei o campo, usei o DevTableGen, chequei o gerenciamento dos serviços no development storage, executei minha aplicação e ... erro! Mas agora um erro diferente.
Vou poupá-los dos detalhes sórdidos da hora que se seguiu, mas quero alertá-los sobre algumas coisas que eu aprendi, e quem sabe ajudá-los a poupar um pouco de tempo e paciência.
1 – Apesar de não listado neste documento http://msdn.microsoft.com/en-us/library/dd320275.aspx, o Azure na nuvem se vira automaticamente com a coluna timestamp, enquanto é necessário criar a coluna para o ambiente de desenvolvimento local. A documentação do SDK fala sobre a necessidade de existência dos campos, mas não especifica esse detalhe “These system properties are automatically included for every entity in a table. The names of these properties are reserved and cannot be changed. The developer is responsible for inserting and updating the values of PartitionKey and RowKey. The server manages the value of Timestamp, which cannot be modified.”.
O que me fez gastar um tempão foi a mensagem do warning registrado no log, que me colocou na trilha errada.
2 – Recriar a estrutura da tabela e metadados.
Outro detalhe que pode te ajudar durante o desenvolvimento é a configuração da tabela no SQL Server. Veja os passos que eu executei para realizar outros testes:
2.1) Depois que eu deixei o código funcionando, alterei o nome dos campos da entidade de Address e Name para CampoA e CampoB.
2.2) Apaguei o banco de dados no SQL Server e recompilei minha solução, para atualizar a ddl com os novos nomes.
2.3) Executei novamente o comando DevTableGen para gerar o banco de dados e a tabela com os novos campos. Verifiquei no Management Studio, tudo criado corretamente.
2.4) Chequei o status dos serviços no development storage. Todos os serviços rodando e apontando para o local correto (vide figura abaixo).
2.5) Executei a aplicação e ... Mais um erro!
Muito estranho, o código está atualizado, a estrutura da tabela no SQL Server também já reflete o CampoA, mas porque estou recebendo esse erro?
Depois de analisar um pouco o que estava acontecendo, supus a causa raiz. O problema está com os metadados armazenados pelo serviço do development storage, que os manteve em cache e mostra corretamente o status de running, pois o banco de dados e a tabela existem, mas sem nenhum refresh do esquema.
Quando tentamos recuperar a propriedade CampoA, o serviço não consegue fazer o mapeamento com os seus metadados e retorna um erro, mesmo com a estrutura correta criada no banco de dados. Um simples restart do serviço de tabela trás os novos metadados e deixa a aplicação funcionando corretamente.
Então fica a dica: quando estiver desenvolvendo em seu ambiente local, depois de usar o DevTableGen, não esqueça de reiniciar o serviço de armazenamento das tabelas, para que os metadados sejam atualizados.
Depois que os problemas estão resolvidos você olha para trás e pensa: putz, quanta besteira, eu devia ter conseguido resolver isso em 10 minutos. Mas desenvolvimento é assim, ainda mais quando estamos com CTPs.
Espero que esse post ajude algum desenvolvedor desamparado. :-)
Até o próximo post.
[]s
Luciano Caixeta Moreira
luticm79@hotmail.com
luciano.moreira@srnimbus.com.br
Troubleshooting - Development Storage e Azure Tables (o problema)
Hoje gastei um bom tempo fazendo troubleshooting de um bug que eu introduzi no meu código, enquanto tentava manipular tabelas no Azure. A coisa começou obscura, através das mensagens de erro eu fui para um caminho ruim e somente depois de muitos testes consegui resolver meu problema e entender melhor alguns detalhes das ferramentas do Azure SDK para desenvolvimento local.
Para me orientar na criação de tabelas no Azure, utilizei o artigo http://blogs.msdn.com/jnak/archive/2008/10/28/walkthrough-simple-table-storage.aspx, de onde fui pegando algumas idéias e montando meu próprio exemplo.
Montei meu exemplo com uma tabela entidade simples e dois botões, responsáveis por inseriam um registro e fazer uma consulta nos registros. Rodei o aplicativo e bang! Apareceu aquela mensagem excelente “The Server encountered na error processing the request. See Server logs for more details”.
Fui então procurar onde ficam os logs do Development Storage e usando o .NET Reflector descobri que ficam no AppData local do usuário. Tarefa que seria mais rápida se eu tivesse lido o comentário do arquivo DevelopmentStorage.exe.Config. “The logs go to LOCALAPPDATA%\DevelopmentStorage\Logs and are named after the date/time when the development storage was started.” :-)
Analisando o diretório, adivinha? Vazio! Então alterei a configuração para trabalhar com o nível de logging detalhado (verbose).
<system.diagnostics>
<sources>
<source name="System.Net.HttpListener" switchName="detalhado" >
<listeners>
<add name="defaultListener"/>
</listeners>
</source>
</sources>
<switches>
<!-- <add name="default" value="Critical"/> -->
<add name="detalhado" value="Verbose"/>
</switches> (continua...)
Agora sim, reiniciei o development storage para ele utilizar a nova configuração e após reproduzir o erro consegui ver o seguinte (extraí um pedaço do log):
System.Net.HttpListener Information: 0 : [5156] HttpListenerContext#64537591::.ctor(httpListener#6503226 requestBlob=35055504)
System.Net.HttpListener Information: 0 : [5156] HttpListenerRequest#3338611::.ctor(httpContext#64537591 memoryBlob# 35055504)
System.Net.HttpListener Information: 0 : [5156] Associating HttpListenerRequest#3338611 with HttpListenerContext#64537591
System.Net.HttpListener Information: 0 : [5156] HttpListenerRequest#3338611::.ctor(httpContext#64537591 RequestUri:http://127.0.0.1:10002/devstoreaccount1/Tabela() Content-Length:0 HTTP Method:GET)
System.Net.HttpListener Information: 0 : [5156] HttpListenerRequest#3338611::.ctor(HttpListenerRequest Headers: x-ms-date : Fri, 03 Apr 2009 14:30:15 GMT
DataServiceVersion : 1.0;NetFx
MaxDataServiceVersion : 1.0;NetFx
Accept : application/atom+xml,application/xml
Accept-Charset : UTF-8
Authorization : SharedKeyLite devstoreaccount1:5YEL7oTeEAsOtPyqxwBN9P8OBR4cw/DelOyy1Nk9+1M=
Host : 127.0.0.1:10002)
System.Net.HttpListener Warning: 0 : [5156] HttpListener#6503226::HandleAuthentication() - Recebida uma solicitação com um esquema de autenticação sem correspondência ou sem nenhum esquema desse tipo. AuthenticationSchemes:Anonymous, Authorization:SharedKeyLite devstoreaccount1:5YEL7oTeEAsOtPyqxwBN9P8OBR4cw/DelOyy1Nk9+1M=.
System.Net.HttpListener Verbose: 0 : [5156] HttpListener#6503226::EndGetContext(IAsyncResult#26998456)
System.Net.HttpListener Verbose: 0 : [5156] HttpListener#6503226::EndGetContext(HttpListenerContext#64537591 RequestTraceIdentifier#00000000-0000-0000-0500-0080010000f2)
Nota: estou tentando vencer meu preconceito e trabalhar com um SO em português, mas acho que vou acabar vencido nessa disputa...
Pelo log não encontrei nenhum erro, apenas um aviso – em negrito que aponta para um problema de autenticação, no meu entender, claro. Dado que existe uma série de diferenças entre o armazenamento de tabela no Azure e no desenvolvimento local (ref.: http://msdn.microsoft.com/en-us/library/dd320275.aspx), sendo uma delas “The local Table service supports only Shared Key Lite authentication. It does not support Shared Key authentication.”, tudo indicava um problema com o Shared Key Lite.
Com o intuito de confirmar minhas suspeitas, fiz um teste usando o serviço de armazenamento da minha conta no Azure. Diferente do local, onde tenho que usar a ferramenta DevTableGen, adicionei mais um botão à minha aplicação, responsável por criar uma tabela em tempo de execução:
StorageAccountInfo account = StorageAccountInfo.GetDefaultTableStorageAccountFromConfiguration();Resultado: tudo funcionando perfeitamente com o armazenamento na nuvem.
TableStorage.CreateTablesFromModel(typeof(ContextoServico), account);
Pensei comigo “estou no caminho certo, vamos ver onde está o problema com os mecanismos de segurança do meu armazenamento local”...
Será?
[]sLuciano Caixeta Moreira
luticm79@hotmail.com




