Débito Técnico

Olá,

esse é um dos posts não-técnicos com cara de técnicos. Li um post interessantíssimo do criador do PowerShell, Jeffrey Snover, sobre o que chamamos de débito técnico. Débito técnico é aquilo que você sabe que ficou faltando fazer no seu produto, release ou software, mas não fez porque não havia tempo, dinheiro, disposição ou porque precisava ser entregue mesmo.

Ele discute o uso de Drones e a captura de um deles pelo exército iraniano, e porque o débito técnico foi a razão dessa captura. Se tiver que escolher o que dá pra ser feito e o que fazer a coisa certa, escolha a segunda. Faça certo e não espere o problema acontecer.

Pra quem ficou curioso, leia o link abaixo. E se você não é o responsável pelas decisões no seu projeto, repasse para ele.

http://www.jsnover.com/blog/2011/12/18/iranian-drone-hack-and-technical-debt/

Até logo!\

Categorias dessa postagem:

Windows Installer

O Windows Installer é o componente utilizado pela Microsoft e recomendado para a criação de instaladores para Windows. Ele é importante na remediação porque alguns dos problemas podem acontecer não por causa de uma aplicação incompatível, mas por um instalador que não funciona completamente.

A determinação do tipo de problema (instalação, tempo de execução) é uma das primeiras tarefas com uma aplicação, seja desktop seja web. O funcionamento do Windows Installer é importante para o diagnóstico, e saber obter informações sobre a instalação, mais importante ainda. Veja a seguir algumas dicas importantes:

Habilitando logs completos

Para poder gerar logs completos de todas as atividades envolvidas durante a instalação, você pode usar um parâmetro da linha de comando que torna possível controlar quais atividades e como elas serão gravadas em disco. O comando msiexec /? mostra todas as opções disponíveis, mas a /L acompanhada do caminho para o arquivo de log (que pode ser relativo) é a mais importante. No exemplo a seguir, o log é gerado com todas as informações (parametro *) e de maneira detalhada (parametro V).

msiexec /i "C:\MyPackage\Example.msi" /L*V "C:\log\example.log"

É possível ainda, usando o parametro ! forçar com que cada linha seja gravada no log de maneira síncrona. Isso é especialmente útil nos casos em que a instalação e o msiexec são interrompidos de maneira abrupta, como uma falha na instalação que derrube o serviço do Windows Installer ou uma tela azul, por exemplo.

Habilitando logs de maneira global

Uma outra dica importante pode ser configurar o serviço do Windows Installer para gerar sempre logs no modo detalhado que foi descrito acima. A maneira mais simples de fazer isso é configurar a chave de registro Logging com o valor VoiceWarmup no registro.

HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer

clip_image001

Caso queira saber mais, consulte o link http://support.microsoft.com/kb/314852

Easter Egg Advice: VoiceWarmup são apenas duas palavras que podem ser geradas configurando todas as opções de log... Nada de mais :-)

Por se tratar de uma chave que pode ser controlada por meio de uma GPO, em alguns casos você pode ter de configurar as permissões desta chave para negar escrita a todos usuários, inclusive a conta LocalSystem, para impedir que a GPO volte a chave ao valor original. Se precisar automatizar, lembre-se do utilitário SubInAcl.

Interpretando e lendo logs do Windows Installer

E agora, com os logs, o que fazer?

Se você já tiver tabalhado antes com troubleshooting, apenas leia de trás para frente e procure informações que chamem a sua atenção. Seu bom senso vai ajudar mais que qualquer conselho.

Caso queira aprofundar ainda mais, sugiro a leitura do link a seguir, que contém várias informações sobre como interpretar as mensagens do log, categorias de mensagens, entre outros. Extremamente útil.

http://blogs.technet.com/b/richard_macdonald/archive/2007/04/02/how-to-interpret-windows-installer-logs.aspx

Enfim, por hoje é só. Vamos em breve continuar explicando problemas que podem ser resolvidos investigando MSIs e instalações com falha. Até a próxima!

Categorias dessa postagem:

TechED 2011–Windows Azure e PowerShell: automatizando tarefas

Olá pessoal,

no TechED desse ano apresentei uma das palestras menores, de 30 minutos, focada apenas em demonstrações. Slide-less, se existe o termo.

Com espaço curto e a possibilidade de fazer apenas demonstrações, minha idéia foi mostrar um pouco de PowerShell (sim, mesmo com mais de 5 anos de vida, pouca gente ainda usa essa ferramenta fantástica) e também de como usar o shell para controlar aplicações na nuvem, fazer a publicação e instalação, bem como iniciar o serviço e alterar o número de instâncias.

Mesmo sem slides, fiz um pequeno resumo do que usei no dia para que quem assistiu possa treinar quando puder. Segue minha lista, copiada diretamente do meu OneNote:

 

    Vinicius Canto Xavier @viniciuscanto no twitter

    The Joel Test: 12 Steps to Better Code

    1. Do you use source control?
    1. Can you make a build in one step?
    1. Do you make daily builds?
    2. Do you have a bug database?
    3. Do you fix bugs before writing new code?
    4. Do you have an up-to-date schedule?
    5. Do you have a spec?
    6. Do programmers have quiet working conditions?
    1. Do you use the best tools money can buy?
    1. Do you have testers?
    1. Do new candidates write code during their interview?
    2. Do you do hallway usability testing?

    Pasted from <http://www.joelonsoftware.com/articles/fog0000000043.html>

    Windows Azure Platform PowerShell Cmdlets

    http://wappowershell.codeplex.com

    Ingredientes

    • Azure SDK 1.4 ou superior e todos os pre-requisitos (IIS, etc)
    • PowerShell 2.0 (parte do W7 e 2008R2 por padrão)
    • ADO.NET Data Services Update for .NET 3.5 SP1
    • Windows Identity Foundation Runtime
    • Windows Identity Foundation SDK 4.0

    Instalação

    Módulo vs PSSnapin

    Prefira módulo se não houver necessidade do PSSnapin

    Makecert

    .\makecert -r -pe -a sha1 -n "CN=VCX's Windows Azure Authentication Certificate" -ss My -len 2048 -sp "Microsoft Enhanced RSA and AES Cryptographic Provider" -sy 24 c:\temp\testcert.cer

    Comandos usados hoje

    • Get-Command
    • Get-Member
    • Get-Help
    • Foreach-Object
    • Group
    • Select
    • Get-Module
    • Install-Module
    • Get-Command (de novo!)
    • New-Deployment
    • Get-HostedServices e Get-Deployment
    • Move-Deployment (VIP Switch)
    • Set-DeploymentConfiguration
    • Set-DeploymentStatus

Categorias dessa postagem:

Como pausar um BAT por 10 segundos? – Extended Version

Alguns amigos de trabalho me deram mais algumas dicas após ler o post anterior. Filtrei algumas, especialmente aquelas que usavam executáveis para fazer o serviço… mas uma outra me pareceu bastante viável e mais decente que o CHOICE apresentado anteriormente. Basta criar o VBS a seguir

wscript.sleep 1000

e use no seu bat usando o comando cscript:

cscript.exe wait.vbs //nologo

simples, direto, e que não pode ser cancelado pelo usuário (a não ser por um CTRL+C).

Categorias dessa postagem:

Como pausar um BAT por 10 segundos?

Da série coisas que o Vinicius lembra de cabeça, mas que é bastante difícil encontrar na internet e podem ser úteis um dia:

@choice /T 10 /C yn /D y > null

Se você for salvo por essa dica um dia, comente aqui Smile

Categorias dessa postagem:

Depois da tempestade…

image

…aparecem as lições que devemos aprender. Nos dois links a seguir, técnicos do SmugSmug e do Netflix discutem porque os sitemas deles estiveram entre os que não patinaram, capotaram ou sumiram de vez do ar com a última grande falha nos serviços cloud da Amazon.

Falhas acontecem. Dessa vez foi com a Amazon, mas qualquer um está sujeito ao problema que ocorreu com eles. E ao invés de criticar, melhor tentar entender como evitar isso no futuro do lado de cá. Quase todas as dicas se aplicam também para apps hospedadas em fornecedores de serviços, seja Microsoft, seja Google, seja lá o que for. O arquiteto que é responsável por projetar o sistema resiliente.

http://techblog.netflix.com/2011/04/lessons-netflix-learned-from-aws-outage.html

http://don.blogs.smugmug.com/2011/04/24/how-smugmug-survived-the-amazonpocalypse/

Sejam inteligentes, e nunca testem a profundidade de um rio com os dois pés ao mesmo tempo. Cloud não conserta sistemas mal projetados Smile. Também não é nenhuma bala de prata. É uma ótima ferramenta, mas não deve ser a única.

Categorias dessa postagem:

How stuff works: Facebook Operations

Oi pessoal,

hoje encontrei uma apresentação antiga do VelocityConf 2010, muito interessante tanto pra infra quanto pra devs. Exatamente do jeito que eu gosto Smile.

A palestra trata de como o time de operações do Facebook trabalha. Pontos que achei interessante:

  • O número de engenheiros/usuário e pessoas de operações/usuário é absurdamente pequeno. Eles realmente são eficientes nesse ponto. Talvez comparar com MS e Google não seja interessante, dado que os dados que ele usou possam estar errados… mas ainda assim o número é impressionante.
    • De qualquer forma, a própria métrica de devs/usuários e itpros/usuários atendidos é bem legal… não conhecia o conceito. Deve ter vindo do ITIL.
  • Implantação de mudanças muito bem organizado. E num ritmo frenético. Várias mudanças acontecendo ao mesmo tempo, de forma controlada. Bonus para o sistema de deployment distribuido usando BitTorrent internamente.
    • O ritmo de alterações no ambiente é quase igual ao que vemos em alguns clientes, mas com um nível de maturidade muito, mas muito maior.
  • Monitoramento feito da maneira correta. Vale como exemplo.

Bom, é isso. Espero que gostem.

 

Até logo!

Vinicius

Categorias dessa postagem:

Série Defrag no Channel9

Olá,

Encontrei uma série nova no Channel 9, uma chamada Defrag. Já tem uns 3 videos lá sobre troubleshooting, e um deles trata de troubleshooting do Windows Installer, Windows Update, e um mecanismo bem rápido pra decifrar códigos de erro do Windows no windbg (!error). Quem fala no vídeo é o Gov Maharaj, um cara bastante conhecido no mundo de Application Compatibility.

https://channel9.msdn.com/Shows/The-Defrag-Show/Defrag-003-Win7-Shutdown-Slowdowns-Prob-Step-Recorder-MSI-Failures

[]s,

Vinicius

Categorias dessa postagem:

IE9 Platform Preview 7 com a carcaça do IE9 Beta

ie9-logo

Muita gente se impressiona quando vê o IE9 rodando páginas com recursos do HTML5. O motivo é simples: resolveram usar a GPU pra processar parte do processo de carregamento da página.

Não se trata de processamento matemático puro, parsing, ou coisa parecida. Trata-se de usar a GPU para fazer o que ela faz de melhor: colocar imagens na tela. E isso vem dando resultados interessantes. A idéia é tão boa que boa parte dos browsers já faz isso (baixe os builds noturnos e compare).

O problema continua com o Platform Preview. Creio que a MS acertou em cheio ao não se limitar aos betas e lançar também versões intermediárias para desenvolvedores. O problema é que o platform preview é bacana só para pequenos testes. É muito chato usar ele no dia-a-dia, dado que ele é só uma janela simples com o Web Browser Control. Nem mesmo o botão back foi programado.

Existe uma forma de criar um IE9, mas com o engine do Platform Preview, que é mais recente. Basta instalar os dois e rodar o script a seguir no PowerShell. Você verá uma pasta nova chamada ie9pp7 no Desktop.

#PowerShell command to create a IE9 Beta with IE9 Platform Preview 7 engine. You need to install both first.

cd "$(cat Env:\USERPROFILE)\desktop";cd(md ie9pp7 -force)
copy "$(cat 'env:\ProgramFiles(x86)')\Internet Explorer\iexplore.exe" . -force
copy "$(cat 'env:\programfiles(x86)')\Internet Explorer Platform Preview\iepreview.exe.local" .\iexplore.exe.local -force

Até logo! E bons testes com seu novo Frankenstein =)

frankenstein_monster_boris_karloff 

Categorias dessa postagem:

Aumentando o tamanho da janela do PowerShell dinamicamente

Essa é uma dica rápida. Ando meio sem tempo ultimamente, mas essa daqui eu preciso postar. Ainda tenho uns 3 posts bacanas pra postar aqui de dúvidas que ando recebendo por e-mail, mas falta tempo pra sentar e escrever com calma. Uma hora sai.

A dica é bacana: será que tem como aumentar o tamanho da janela do PowerShell, via script? Tem.

Porque isso é útil? Imagine que você está fazendo algum script que exibe o status de um servidor exchange, ou um relatório com uma lista de usuários bloqueados com alguns detalhes. E vai fazer isso para um time de TI usar. Normalmente tabelas no PowerShell aparecem (via format-table) de forma resumida. Você pode usar format-table * para exibir todos os campos, mas ele formata sabendo da largura máxima (80 caracteres por padrão, se não me engano).

Você pode resolver isso editando as propriedades da janela, clicando com o botão direito e aumentando o tamanho do buffer da janela (e opcionalmente o tamanho da janela em si).

O que eu encontrei ontem, a pedido do Heitor, grande amigo meu, é uma forma de fazer isso via script. Assim, dentro do script você pode mudar o tamanho da janela e usar quantas colunas quiser no format-table. Veja:

$bs = $host.ui.RawUI.BufferSize; $bs.Width=500; $Host.UI.RawUI.BufferSize = $bs
dir | format-table * -autosize

Se quiser, use o autosize com o format-table para ajustar a largura automaticamente. E altere a largura conforme necessário.

Bom, é isso. Até a próxima!

Categorias dessa postagem:

Como resetar o TPM do micro caso você perca a senha

[Parece meio off em relação ao restante do blog, mas é um post de utilidade pública. Você pode precisar dessa dica um dia…]

Parece mágico, mas não é. E requer acesso ao AD.

http://blogs.technet.com/b/bitlocker/archive/2010/09/14/how-to-use-hash-of-tpm-from-ad-to-reset-your-tpm-password.aspx

Em termos práticos: você pode obter o hash para recuperação de um drive criptografado com Bitlocker a partir do Active Directory. Basta pegar o hash, gravar em um arquivo e usar o assistente de recuperação. Fácil fácil.

Até mais,

Vinicius

Categorias dessa postagem:

Vinicius no TechED: sites de alto desempenho

Olá pessoal,

por conta da correria, acabei não avisando ninguém que me segue aqui no blog que eu iria dar uma palestra no TechEd 2010, sobre técnicas de otimização de front-ends para sites de alto desempenho. Em todo caso, acho que pouca gente pagaria inscrição no TechEd só pra me ver =).

Agora as respostas para as perguntas:

Onde foi parar sua palestra?

Ainda não gravei o video, mas já já divulgo. Por enquanto, segue o link do PPT para download.

Microsoft tem um CDN próprio ou só faço isso com a Akamai? Tem no Brasil?

Sim, o Azure. No Brasil tem CDN para ajudar na distribuição de conteúdo estático, mas o datacenter ainda não. Vale o teste. Uma dica interessante ainda sobre o mesmo assunto é usar um CDN público para scripts Javascript. Conheço o da MS e do Google. É simples: ao invés de hospedar JQuery ou Prototype em casa você pode somente apontar para o CDN público. Você economiza banda e seus usuários agradecem, já que há uma grande chance deles já possuirem isso em cache.

Como eu faço para configurar o cache de objetos individualmente no meu web server?

Aqui. Se for Apache, veja aqui. Se não for nenhum dos dois, procure em algum site de busca. =)

Onde posso encontrar mais info a respeito?

Recomendo três livros: High Performance Websites, o Even Faster Websites e o Ultra Fast ASP.NET. O primeiro é de 2007, mas vale a leitura por ser bem amplo e ter ainda várias dicas que podem ser usadas, mesmo considerando que os browsers evoluiram. O segundo vai mais fundo em otimização de CSS e Javascript, e também vale a leitura. O terceiro é mais focado em ASP.NET, mas vale a pena se você prefere livros estilo cookbook. Tem outros ainda do Stoyan Stefanov que eu queria ler, mas não consegui tempo ou não consegui encontrar ou não foi lançado ainda. Devem ser bons também.

E o tal video que você ia mostrar?

Aqui. É um video muito bom, uma animação criada para ilustrar como funciona o envio de pacotes após o estabelecimento de uma conexão TCP/IP. É bacana notar por exemplo como funciona o processo de slow start e o tamanho da janela de transmissão, que aumenta com o tempo até chegar ao ponto que vários dados são enviados e o cliente envia ACKs de vez em quando. Isso exemplifica o que eu falei na palestra: abrir conexões para cada objeto HTTP é custoso.

Espero que tenham gostado. Qualquer dúvida, é só chamar.

Vinicius

Categorias dessa postagem: ,

ORMs e Stored Procedures

Muito já foi dito sobre o assunto, eu sei. Mas gostaria de marcar aqui um post de um dos melhores caras que eu conheço em SQL, e que fez comentários muito objetivos sobre o assunto.

Trata-se do Blog do Luti, em resposta a um post do Giovanni Bassi. Vale a leitura. Eu confesso que cheguei a duvidar da postagem inicial do Giggio e discuti com outros consultores sobre isso (sprocs vs adhoc queries vs queries parametrizadas), e não houve consenso. Acho que os dois posts (e as referências contidas neles) servem para acabar de uma vez por todas com isso. Agora fica faltando só a dúvida antiga sobre desempenho e ordenação física no disco de um clustered index. =)

Em resumo, use a resposta padrão do consultor: “depende”. Onde for importante, use o ORM. Onde não for, não use. Conheça as duas abordagens e estude caso a caso.

[]s,

Vinicius

Categorias dessa postagem:

SQL Server Express

Você já viu a mensagem abaixo ao tentar adicionar um banco de dados existente?

A mensagem aparece logo após clicar com o botão direito em Databases, escolher a opção Tasks e em seguida Attach Database. Ela diz que o Management Studio não pode criar a caixa de diálogo (Cannot show requested dialog), e informa que o parâmetro nColIndex tem o valor -1. (Microsoft.SqlServer.GridControl)

image

Ela aparece normalmente quando você não tem direito de syadmin. Só reparei nisso porque o SQL Server 2008 R2 não inclui mais os administradores locais no grupo interno de sysadmins. Mais info no link http://technet.microsoft.com/en-us/library/cc280562.aspx

Para resolver o problema, basta usar uma conta que esteja no grupo de sysadmins, obviamente.

Até mais,

Vinicius

Categorias dessa postagem:

PowerShell + Intel VPro: controlando máquinas desligadas

É, exatamente isso. Agora você pode programar máquinas que estão desligadas ou até mesmo travadas, via rede. Isso abre um leque de possibilidades para o pessoal que trabalha com IT e precisa consertar computadores em tempo recorde. Sobrando um tempinho faço uma demonstração disso… =)

http://blogs.msdn.com/b/powershell/archive/2010/07/21/intel-vpro-powershell-module.aspx

[]s,

Vinicius

Categorias dessa postagem:

Robocopy paralelo

Uma das opções que eu nunca usei do Robocopy era a /MT, que permite escolher o número de threads que serão usadas para fazer a cópia. Meus testes informais nunca me permitiram concluir que usar mais de uma thread, especialmente via rede, ajudava muito na cópia.

Scott Allen fez também seus testes, e, segundo ele, o Robocopy com 8 threads melhorava o tempo em 12%. Acho que preciso refazer meus testes =).

http://odetocode.com/Blogs/scott/archive/2010/07/08/multithreaded-robocopy.aspx

Categorias dessa postagem:

F5 ou Ctrl+F5

Você sabe exatamente a diferença técnica entre apertar F5 e Ctrl+F5 num navegador?

Ok, eu digo. Rapidamente: o F5 faz com que o browser envie um GET condicional (aquele com os cabeçalhos If-none-match e/ou If-modified-since). O Ctrl+F5 faz um GET comum.

Se você quiser detalhes de como isso funciona, leia mais no blog do Eric Lawrence. Eu recomendo. Ajuda e muito a resolver problemas em páginas dinâmicas. É importante saber o que o Ctrl+F5 faz para saber onde ele não resolve o problema.

Categorias dessa postagem:

Browsers separados na maternidade…

Acho que um dos dois times anda meio sem criatividade… ou é uma tendência que eu não peguei ainda.

image

Categorias dessa postagem:

Visual Studio 2010 trava ao fechar solução

Não fui muito longe na investigação, mas passei por esse problema e resolvi removendo o arquivo .suo do projeto. Se o problema voltar eu continuo esse post com mais detalhes do que está acontecendo.

Fica aqui a dica, caso alguém passe pelo mesmo problema.

Categorias dessa postagem:

Movendo janelas no Windows igual ao Linux: ALT + Drag

Olá,

uma das coisas que eu mais gosto no Linux, e que não há no Windows, é poder mover janelas segurando o ALT e arrastando a janela.

Hoje encontrei um programa que faz isso parar mim. Chama-se AltDrag, é um projeto open-source hospedado no Google Code e vai pro meu toolbox particular. =)

http://code.google.com/p/altdrag

Eu prefiro usar todos os comandos pelo teclado, mas esse programinha me ajuda a não perder tempo quando sou obrigado a usar o mouse. Não precisa ser instalado, e cabe em qualquer pendrive.

Até a próxima!

Categorias dessa postagem: