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:

VBScript e UAC

Aqui vai um link bacana de como conseguir elevar a execução de um script VBS via Shell.Application. Isso pode fazer seu script voltar a funcionar no Vista e 7.

http://www.winhelponline.com/articles/185/1/VBScripts-and-UAC-elevation.html

Normalmente eles falham ou por causa do redirecionamento de pastas automático ou por falta de permissões em pastas do sistema. Quem já passou pelo problema de rodar scripts de logon no Vista/Windows 7 vai gostar desse link, mas esta não é a saída. Se seu script de logon falha por falta de permissões, muito provavelmente você está tentando fazer alguma coisa errada lá (e que não deveria estar num script de logon)

Até a próxima!

Categorias dessa postagem: ,

Renomeando conexões de rede

Atualização rápida de madrugada para resolver um problema pontual de um amigo: como fazer para renomear a interface de rede?

Listar todas:

netsh interface show interface

e para alterar o nome...

netsh interface set interface "Conexão Local" newname=lan

Categorias dessa postagem:

Perguntas #2 – Adicionando um usuário do domínio no grupo Administrators local

Olá,

varrendo minha caixa de e-mails encontrei uma dúvida interessante pra resolver. Interessante, simples, útil, e que eu já precisei um dia. Logo, vai pro blog.

Pergunta

Vejam o e-mail do Sandro Schon, em fevereiro (antes tarde do que nunca!):

Olá, estava procurando algo sobre scripts na internet e vi o blog (vinicius Canto) e os artigos da tech net e ja me ajudaram bastante, mas nao achei aidna o caminho das pedras pra 3 scripts que preciso onde trabalho....
o 1º seria um script onde eu pudesse inserir um usuário do dominio como Admin em uma máquina remotamente
o 2º seria um script que alterasse algumas configurações da estação, como papel de parede, posição de icones e quais icones na area de trablho, impressoras compartilhadas, etc
e o 3º seria um que me permitisse alterar confi

Resposta

Por partes:

  1. psexec \\maquinaremota net localgroup administrators /add DOMAIN\username
  2. Faça isso por meio de perfis mandatórios. Mais informações aqui
  3. Não entendi. E-mail escrito pela metade não dá… =). 

Análise

Para coisas simples, o psexec da Sysinternals quebra o galho muito bem. Ele tem alguns requisitos (local admin na máquina remota, serviço do Remote Registry habilitado, entre outros) mas é extremamente viável de ser usado. Outra alternativa que pode ser usada é a criação de processos remotamente por meio do WMI (wmic process call create ou script personalizado). Essa alternativa tem menos requisitos e funciona bem. Já comentei sobre ela em outro post sobre como executar processos remotamente, em 2007 (velho esse blog heim?).

Enfim, mesmo não finalizado e não seguindo as regras do blog, valeu pelo e-mail. Eu precisava documentar isso de alguma forma =). Já usei o velho truque do psexec para adicionar usuários do domínio no grupo admin local várias vezes e sempre me perguntam isso, mas não tinha colocado aqui ainda.

Até a próxima!

Categorias dessa postagem: ,

Iniciando o SQL Server Express via linha de comando

Olá,

aqui vai uma dica para os desenvolvedores que seguem meu blog de alguma forma.

Se você é desenvolvedor, no Windows, provavelmente já se deparou com o problema de ter que instalar uma edição do SQL Server em sua própria máquina. Eu não gosto muito dessa idéia por alguns motivos:

  1. Embora usemos strings de conexão para configuração de acesso a dados, o banco na mesma máquina pode mascarar alguns problemas se você não souber direito o que anda fazendo.
  2. O SQL Server instalado na máquina de desenvolvimento pode deixar ela mais lenta se você esquecer ele ligado com um banco grande e não tiver usando o banco.

Por outro lado…

  1. Usar o banco em uma máquina virtual pode deixar as coisas mais lentas ainda, especialmente se você não tiver muita RAM.
  2. Configurar uma VM só com o banco para subir um projeto simples para testar alguma coisa parece trabalho demais também.

A saída que eu encontrei na minha máquina de desenvolvimento foi instalar ele, mas deixar o serviço com startup manual e subir o serviço somente quando necessário. E para fazer isso, aqui vai meu one-liner:

sc query mssql$sqlexpress

e

sc start mssql$sqlexpress

Troque o start por um stop e o efeito será o contrário. Vale lembrar que o comando sc serve para manipular outros serviços também, e responde bem mais rápido que o SQL Server Configuration Manager e o utilitário services.msc. Basta executar estes comandos dentro de um console com direitos administrativos e vc terá o SQL Server Express rodando em segundos… tão rápido quanto subir um processo do PostgreSQL ou do SQLite.

Categorias dessa postagem: ,

Adeus WinRAR. Welcome 7-ZIP

Hoje consegui um argumento interessante para não usar o WinRAR mais. Um amigo meu me apresentou o 7Zip, um utilitário open source para manipulação de arquivos compactados no Windows.

Quando instalei, nenhuma novidade. A interface é bem simples, a integração com o shell falha no Windows 7 em usuário não-admin, mas por mim tudo bem. Tenho que me acostumar com menos opções no botão direito: de maneira geral, menos integração no shell, mais estabilidade.

Hoje, me convenci a nunca mais instalar WinRAR: ele abre arquivos VHD diretamente, como se fosse um arquivo compactado qualquer. O Windows também faz isso, mas exige que o VHD seja importado como um disco dentro do gerenciador de discos (diskmgmt.msc) e, portanto, que o usuário seja administrador da máquina. O 7Zip não precisa nem ser instalado no computador. Além de VHD, abre ainda ISO e MSI. Bacana e simples.

Para quem quiser testar, aqui vai o link: www.7-zip.org.

Recomendo que desativem a integração com o shell. Mais bibliotecas carregadas com o shell, mais acoplamento, e se alguma delas tiver sido desenvolvida com pouco carinho, menos estabilidade. Não é o caso do 7Zip, mas fica a dica.

Categorias dessa postagem:

Como monitorar o número de conexões TCP do seu roteador Linksys

Olá,

acabo de produzir um código incrivelmente simples para monitorar meu roteador Linksys.

O problema era o seguinte: meu roteador trava vez ou outra. Ele continua respondendo pacotes Ping ICMP, mas barra toda e qualquer conexão HTTP de saída. Conexões abertas não são fechadas, mas nenhuma nova é aberta. Nenhum pacote UDP passa.

Encontrei uma pista na net: o limite de conexões TCP dele é 512. Eu já havia aumentado para 1024, mas como naquele momento havia uns 5 ligados em casa, é bem possível que esse limite tenha sido atingido. E o que acontece quando ele atinge o limite? Segundo um post no forum do DD-WRT, ele congela, exatamente como eu descrevi acima.

Agora a diversão do Vinicius: encontrar qual estação (e o qual programa) está abrindo mais de 1k conexões TCP. Apelei rapidamente pro PowerShell, com uma linha. Meu roteador tem uma página de status que informa quantas conexões estão abertas no momento e quais são os hosts das duas pontas. Basta então programar ele para ir lá, autenticar, ler o valor e plotar na tela. Veja como ficou:

PS C:\Users\xis> $wc = new-object system.net.webclient; $wc.credentials = get-credential
PS C:\Users\v-vixavi> for($true) { $wc.DownloadString('http://192.168.1.1/Status_Conntrack.asp')
–match '</div>\n(\d{2,3})\n</div>' | out-null; $matches[1]; sleep 10}

Feio. Mas para um teste simples, funciona. Espero que alguém um dia precise disso. =)

Lembre-se. Este código é certificado pelo Works on My Machine Program.

Categorias dessa postagem: ,

Perguntas #1 – Ativando DHCP em uma conexão

Vez ou outra me deparo com esse tipo de pergunta:

Pergunta

Olá, Vinícius

Gostaria de saber como fazer para obter ip automático das conexões de redes do notebook

Estou usando este script.vbs mas ele só altera a conexão da rede local (cabo rj45) mas a conexão da wireless e a outra complemento da wireless não muda e obtem apenas o ip: 0.0.0.0 e a mascara 255.0.0.0, o dns não fica automatico.

strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNetAdapters = objWMIService.ExecQuery _ 
    ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

strDNS=array()

For Each objNetAdapter In colNetAdapters 
    errEnable = objNetAdapter.EnableDHCP() 
    objNetAdapter.SetDNSServerSearchOrder strDNS

Observação: uso duas conexões com ip’s diferentes em casa e no trabalho e quando vou pra faculdade precisa zerar tudo para ip automático para alcançar o wireless.

veja o código que uso para casa e trabalho, mundando, claro as cadeias de ips.

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set colNetAdapters = objWMIService.ExecQuery _ 
("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE") 
strIPAddress = Array("10.4.0.149") 
strSubnetMask = Array("255.255.255.0") 
strGateway = Array("10.4.0.240") 
strGatewayMetric = Array(1) 
strDNS = Array("10.4.0.240")

For Each objNetAdapter in colNetAdapters 
errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask) 
errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric) 
objNetAdapter.SetDNSServerSearchOrder strDNS 
If errEnable = 0 Then 
WScript.Echo "O endereco IP foi alterado com sucesso !" 
Else 
WScript.Echo "Ocorreu um erro! O endereco IP não foi alterado..." 
End If 
Next

Aguardando. Muito grato !

Resposta

Simples e direto:

netsh int ip set addr "Local Area Connection" dhcp

ou ainda

netsh interface ip set address "Local Area Connection" dhcp  # muda para o DHCPnetsh int ip set addr lan static 192.168.1.50 255.255.255.0 192.168.1.1 1 # muda para ip estáticonetsh /?

Análise

Há normalmente mais de uma forma de resolver o problema. Pondere sempre todas as alternativas. No caso acima, a solução via CMD é muito, mas muito mais simples.

Vou procurar responder as melhores dúvidas. Entendo por melhores dúvidas as que forem realmente interessantes, que me chamem a atenção. Além do mais, a pergunta deve ser bem escrita (odeio frases sem sentido) e, acima de tudo, que o autor tenha a boa vontade de procurar em um site de busca antes de mandar para meu endereço. =)

As perguntas e respostas estarão identificadas pela tag Perguntas e Respostas.

Até a próxima!

Categorias dessa postagem: , ,

Informações úteis

Criei este post para utilizar como página para os links que são exibidos no canto superior da página.

Sobre o blog

Antes de mais nada, um aviso importante: este blog é o meu blog pessoal, blog do Vinicius Canto Xavier. Os artigos, dicas e opiniões aqui expressas não refletem de forma alguma a opinião das empresas onde eu trabalho. Eles não se responsabilizam por nada publicado aqui. Também não garantem (nem eu) o funcionamento das técnicas e truques ensinados por meio deste canal. Pense nisso como uma dica que você recebe de alguém durante o cafezinho: deve funcionar, teste e use por sua conta.

Todas as dicas aqui publicadas são certificadas pelo “Works on My Machine Program”. Eu não recomendo nada daqui para uso em produção, portanto, use por sua própria conta e risco.

Criei o blog com a seguinte idéia na cabeça: preciso escrever as coisas bacanas que me aparecem durante o dia para que eu consiga encontrá-las quando precisar. A idéia do blog não era ajudar ninguém… mas sim a mim mesmo. Quer lugar melhor do que a Internet para guardar alguma coisa? É só publicar em um blog, algum crawler vem e indexa para você. Simples, não?

No entanto, o negócio cresceu. Muita gente acabou gostando das idéias e dos truques aqui publicados. Meu trabalho então é só manter o site no ar, e com uma boa indexação. Quando alguém precisar, é só me encontrar no site de busca mais próximo.

Entre em contato com o Vinicius

Uma das coisas que ainda vão entrar no ar é o recurso de submissão de dúvidas. Enquanto eu não crio (pensei em algo parecido com o Formspring, mas preciso de algo que mostre a fila de perguntas ainda a responder), podem mandar as dúvidas diretamente no meu e-mail público:

mailPor favor, sejam inteligentes, escrevam de forma coerente, correta e procurem a resposta antes na internet ou não terão resposta. Eu responderei assim que possível. Isso pode demorar, principalmente nas semanas que eu trabalhar bastante. Dado que é um trabalho voluntário, tá ótimo. Para opções de suporte de qualidade com SLAs aceitáveis, sugiro procurar uma consultoria especializada nisso.

Buscar dentro site

Sim, finalmente eu consegui. Agora você pode buscar artigos publicados neste site. Use um dos motores de busca abaixo. Se cair em alguma página mal formatada (devido ao layout novo), entre em contato comigo por e-mail que eu corrijo. Há duas opções: o tradicional Google...

Pesquisa personalizada

...ou ainda no Bing:

bing

Por hoje é isso. Espero ter resolvido as principais requisições do pessoal que costuma acessar meu site. Até mais!

Categorias dessa postagem:

Diminuindo o tempo de boot do Windows

Análises de desempenho que não levam em consideração todo o funcionamento do sistema tem grandes chances de chegar a conclusões erradas.

Não sou só eu que penso dessa forma. Qualquer pessoa que já enfrentou o trabalho de tornar sistemas que ficaram lentos em sistemas rápidos já viu isso: quando se olha somente para uma parte do sistema, boas oportunidades são perdidas.

Acabo de ler um ótimo artigo sobre como você pode melhorar o tempo de boot do Windows. Um bom começo para a análise é tentar descobrir o que acontece durante todo o processo de inicialização. É possível ver gráficos assim:

1.1-holy-crap-long-boot

O artigo não descreve exatamente o que fazer para melhorar, mas é um ótimo exemplo de análise observando o todo. Há também dicas sobre onde obter mais informações sobre o BootVis, programa que ele usou para tirar um retrato do que acontece na inicialização.

Muita gente enxerga o Windows com uma caixa preta, mas isso reflete a falta de informação das pessoas com relação ao SO. Usuários Linux se interessam muito mais sobre o funcionamento dele do que os usuários Windows. Uma outra boa dica de leitura para entender melhor como o Windows funciona é o Windows Internals, do Russinovich.

Categorias dessa postagem:

Dicas para máquinas virtuais – Parte 1

Olá,

algumas dicas aleatórias sobre máquinas virtuais:

VM do Visual Studio 2010

Para quem baixou a VM para estudar o Visual Studio, fica a dica: configure a memória do SQL Server que vem instalado. Ele está com a configuração padrão, e vai usar toda a memória disponível. Baixe para algo entre 128 e 1024 Mb de RAM, dependendo da quantidade total que você deixou para a VM e para o host. Apenas não deixe a configuração padrão.

Para quem quiser estudar, é possível baixar uma VM com o VS2010 RC instalado, além do SQL Server e Office. O link é esse:

AHCI em máquinas virtuais

Se você estiver usando uma VM com Vista, Windows 7, 2008 ou 2008 R2, é bem mais fácil configurar a VM para usar o driver AHCI ao invés do IDE padrão. A vantagem é que o acesso a disco da VM fica mais rápido (nos meus testes, algo da ordem de 20%) se você configurar o software de virtualização para usar uma controladora SATA (ou SCSI) ao invés da controladora IDE.

Para fazer isso, basta alterar o valor HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\msahci\Start com o valor 0. Veja:

image 

Feito isso, basta reiniciar a VM e configurar o software de virtualização para usar SATA ao invés de IDE (Hyper-V, VMWare e VirtualBox suportam isso, enquanto VirtualPC e derivados não).

Categorias dessa postagem:

Bloqueadores de USB para Windows: opções disponíveis

Essa é uma dúvida muito comum. De cada 10 perguntas que me chegam hoje por e-mail (calma, vou colocar o sistema automático no ar já já), ao menos uma vem perguntando sobre como bloquear pendrives USB.

Bloquear nativamente, só desativando drivers, como o usbstor. Mesmo assim, ainda dá pra usar USB de alguma forma (via dispositivos MTP, por exemplo), que não são implementados por esses drivers. Quem quiser seguir essa linha, veja mais info aqui.

Eu cheguei a criar um script que monitora o uso do USB em máquinas, de forma bem simples. Não recomendo o uso em produção, era uma POC. Ele é simples demais pra isso, e o e-mail é enviado a partir do cliente, fazendo com que as configurações de envio fiquem dentro do script.

Um grande amigo meu encontrou uma solução gratuita e gerenciável para até 50 máquinas. Obrigado pela dica, Mendes! O link está aqui.

Categorias dessa postagem:

Error spawning RC.EXE no VS 2008 SP1 – parte 2/2

Conforme postei semana passada, eu iria testar se reinstalar o Windows SDK resolve esse problema.

Resposta: resolve sim. Basta reinstalar e reconfigurá-lo pelo menu iniciar para que o Visual Studio use o WSDK 7.0.

Categorias dessa postagem: ,

Novo layout

Depois de muito tempo com um layout pobre e antigo do blogger.com, resolvi atualizar o meu. Usei algumas técnicas bacanas, mas simplesmente não tive paciência para tornar os anúncios XHTML compliant. Existe até um workaround, mas eu não tive tempo de implementar.

A motivação do layout novo é simples. Eu queria disponibilizar as duas coisas que todo visitante me pede: uma forma para buscar artigos e scripts dentro do blog e uma forma de enviar perguntas e entrar em contato comigo. As páginas já estão prontas, mas ainda estou testando. Logo logo eu coloco no ar.

Browsers

Desisti do Internet Explorer 6. Vi que menos de 2% dos meus leitores ainda o usam e simplesmente desisti. O trabalho ia aumentar consideravelmente e o retorno, bem pequeno. Mais informações, aqui e aqui.

Optei por não suportar também usuários com menos de 1024 pixels de largura. Isso correspondia a 3% dos usuários. Destes, mais da metade já não ia conseguir usar o site por ser usuário de IE6.

Ao usuário de IE6, minha recomendação: atualize-se. Seu browser não é seguro, é lento, você já não deve conseguir acessar um monte de sites legais, e os que você acessa com certeza foram adaptados para suportá-lo. Você é algo como um estorvo cibernético. Atualize para a versão mais recente do IE, o IE8, e mantenha uma política para manter seu computador atualizado. Não reclame que ele ficou lento, travando ou qualquer combinação disso se você não teve paciência para mantê-lo atualizado.

Se você não pode instalar nada no seu computador por ser um computador da empresa, baixe um browser que não precise ser instalado, como as versões nightly (builds de desenvolvimento) do Firefox e Chrome. Infelizmente o IE ainda não tem nada similar, embora isso seja possível de ser feito.

Aos designers, não produzam mais sites para IE6, e cobrem caro quando isso for imprescindível. Use padrões e não esqueça uma aplicação web é um sistema distribuído e que o browser é um componente dela. A versão dele (ou do padrão que você vai seguir) deve estar em toda especificação.

Próximos passos

A próxima grande mudança vai ser reorganizar as tags… como vocês podem ver no fim da página, está bem bagunçado.

Espero que gostem,

Até logo!

Categorias dessa postagem:

Error spawning RC.EXE no VS 2008 SP1 – parte 1/2

Recado rápido: aos que estiverem recebendo esta mensagem ao tentar compilar algum programa C++ no Visual Studio 2008 SP1, fica a dica: verifiquem se o Platform SDK foi instalado corretamente.

Ele é instalado normalmente junto com o Visual Studio (se você pedir para incluir o ambiente C++), e sequer aparece na lista de programas instalados.

Se por um acaso você parar a instalação no meio por algum motivo (no meu caso, puxei o cabo de força sem querer), é bem provável que reinstalar ou reparar apenas vá deixar seu VS meio capenga. Descobri isso hoje, meses depois de instalar, que meu C++ não funcionava direito porque o Platform SDK não estava instalado completamente. Pra falar a verdade, não tinha quase nada dele instalado.

Solução: ainda não encontrei. Vou tentar instalar o Platform SDK 6.0a novamente e ver no que dá.

Categorias dessa postagem: ,

Ativando o Terminal Services remotamente

Aqui vai uma dica muito bacana: como ativar o TS de outro computador via rede.

http://oreilly.com/windows/archive/server-hacks-remote-desktop.html

Observações do Vinicius:

  • O procedimento, em uma linha: trocar o valor fDenyTSConnection de 0 para 1. Ele fica na chave HKLM\System\CurrentControlSet\Control\Terminal Server
  • Vale usar o que você quiser para fazer isso: psexec, REG ADD, WMIC PROCESS, telnet, Registro Remoto… no tutorial acima ele usa esse último. Eu recomendo o primeiro ou o segundo, por praticidade.
  • Obviamente, você deve ter uma conta de administrador na máquina remota. Se a conta estiver desativada, nada feito.
  • O reboot pode não ser obrigatório. Basta reiniciar o serviço termservice. Você pode fazer isso com o comando sc \\maquinaremota stop termservice.
  • Contas sem senha não servem para isso. Aliás, não servem pra praticamente nada dado que o Windows bloqueia acesso remoto sem senha por padrão.
  • O UAC pode enganar você. Você pode até configurar ele para não pedir confirmações, mas sua conta vai continuar sendo uma conta simples. Uma conta com direitos administrativos é uma conta dentro do grupo Administradores local (ou em um grupo que pertença a ele). Ponto.

Categorias dessa postagem:

IE6, 7, 8 e os DIVs que saem do lugar

Olá pessoal, tudo bom?

faz tempo que não escrevo por aqui. Segue uma dica bacana que encontrei agora pouco...

Muita gente fala mal do IE, certo? Pra grande maioria, porque é lerdo. Pra quem desenvolve, porque não segue padrões.

Quem já tentou criar páginas e XHTML com CSS dentro dos padrões (infra também... quem já exportou um relatório do SQL, MOM ou SCOM em HTML) provavelmente já viu a página aparecer de um jeito no IE6, de outro no IE7, de mais algumas formas diferentes no IE8. Uma das causas raiz disso é a seleção errada do modo de renderização pelo IE. Na verdade, quem errou foi você ou o programa que gerou o código.

De forma bem simples, o modo de renderização foi a maneira encontrada pra manter compatibilidade com sites antigos nas versões mais novas do IE. Dependendo da página, ou o IE interpreta a página da forma correta, seguindo padrões, ou dá uma folga pra eles e finge ser um IE 6 ou 7. E se ele fingir ser um IE6 alguns divs saem do lugar, medidas são interpretadas de forma diferente, e aí o problema começa. Por outro lado, é esse algoritmo que faz a página do seu roteador dlink antigo continuar funcionando nos IEs novos.

No link a seguir tem uma explicação bacana do time do IE sobre como isso funciona. Vale guardar pra ler quando seus divs sairem do lugar.

http://blogs.msdn.com/ie/archive/2010/03/02/how-ie8-determines-document-mode.aspx

O curioso é que, ainda no começo do artigo, o autor diz que 26% dos sites analisados forçam o modo Quirks (antigo, mais lerdo que o standards, e razão de boa parte dos problemas), entre eles o Unibanco.com.br, bastante conhecido pelas terras tupiniquins.

[]s,

Vinicius

PS: não estou dizendo nada contra os Web Standards. É realmente garantir páginas iguais em todos os IEs e isso atrapalha… mas muitas vezes isso acontece é por falta de conhecimento mesmo.

Categorias dessa postagem: ,

Windows System State Analyzer

Olá pessoal,

acho que encontrei uma pérola na internet hoje: o Windows System State Analyzer.

Eu explico. Durante muitos anos (sim, anos) eu uso um programinha muito simples para monitorar a diferença entre dois estados do computador. Isso é interessante para monitorar o que foi feito por algum instalador, algum programa suspeito ou simplesmente para descobrir onde fica aquela chave de registro que guarda uma configuração que você quer ter uma cópia de segurança.

Nada contra o RegShot. Ele funciona muito bem, e rápido. O problema é que você precisa, em algumas situações, fazer "arte" com ele. Como ele é um programa rodando, ele tem ao menos um processo no sistema. Todo processo tem um dono, nesse caso, o usuário que iniciou o programa (eu). Como meu usuário não consegue acessar determinadas partes do registro e do sistema de arquivos, algumas vezes o RegShot não mostra tudo que foi alterado (já que seu usuário é um usuário comum e não tem direito de fazer tudo na máquina). Isso pode ser resolvido rodando o RegShot como administrador (ou ainda como LOCALSYSTEM, se você for um usuário que realmente entende do SO).

O que eu encontrei hoje é um software da Microsoft que promete fazer o mesmo, e eu nunca tinha visto. Trata-se do WSSA, Windows System State Analyzer.

image

Aí você me pergunta: pra que mais um, se o RegShot já resolve todos os seus problemas? Bom, primeiro, é importante ter opções. Se o RegShot não conseguir me ajudar, tenho mais uma agora. Depois, porque o relatório do WSSA parece ser bem mais simples de se interpretar e tirar conclusões do que o TXT estranho do RegShot:

image

Você pode baixar o WSSA nos links abaixo. Eu estou baixando nesse exato momento.

x86: http://go.microsoft.com/fwlink/?LinkID=140110

x64: http://go.microsoft.com/fwlink/?LinkID=140109

Você pode usar esse programa para o bem ou para o mal. Como ele mostra o que foi alterado no computador, você pode descobrir TUDO que um programa colocou no sistema durante sua instalação. Se você for capaz de voltar ao estado anterior, poderá reinstalar o programa e usar mais 30 dias do periodo trial. Você pode usar para coisas mais interessantes: tentar entender o que já existe na sua máquina com uma versão antiga que está impedindo a instalação de algo que você precisa. Ou ainda entender se um programa é um vírus ou não, observando que tipo de arquivos ele cria ou altera. Enfim, as utilidades são muitas.

Have fun!

Categorias dessa postagem:

libeay32.dll e ssleay32.dll

Olá,

Após a publicação daquele "Sysinternals Tools Downloader", muita gente me perguntou sobre o arquivo acima, o libeay32.dll. Isso porque um dos programas que eu recomendei, o wget, depende dessa biblioteca. Mas como resolver?

Primeiramente, alguma explicação. O wget depende da libssl, uma biblioteca que implemente o protocolo SSL. Reusar software é legal, e evita que reinventemos a roda o tempo todo. Quando o wget foi portado para o Windows, ele continuou dependendo da libssl. Felizmente, várias pessoas portaram também a libssl para Windows. Dessa forma, basta baixar uma implementação e colocar as DLLs nos lugares certos.

Aos que precisarem, eu recomendo instalar a versão da libssl que pode ser obtida aqui. Com a biblioteca instalada, basta pegar o arquivo em questão (libeay32.dll e, possivelmente o ssleay32.dll), copiar e colar em algum lugar do PATH ou no mesmo lugar onde estiver o programa wget.exe. Ele procura na própria pasta. Não é necessário registrar a DLL nem nada parecido: o carregamento dela é feito diretamente a partir do arquivo.

Até a proxima!

Categorias dessa postagem:

Wake On Lan & Powershell: Waking up computers in a network

(This article was written originally in Portuguese. If you are Brazilian, Portuguese or simply prefer to read in Portuguese, click here)

Good morning! Here I have the first version of that function I created to show how to use that little script that sends UDP packets over local network. This can be very helpful in corporative environments, specially when you have information about all machines. There are many implementations of WakeOnLan on the Internet, many of them free, written in many programming languages and technologies. My intention here is only show how to do this using only PowerShell and .Net Framework (and a text editor, of course :)

PowerShell language is very close to C#, so if you are looking for how to do the same in C#, this code can be easily modified. The main advantage of mine is the simplicity and the lack of dependencies... all you need is PowerShell (comes with Windows 7!) and Notepad (comes with all Windows versions)!

WakeOnLan is very simple: first, the computer to be waken needs to be compatible with WOL (the mainboard needs to be PCI2.2 compliant (at least), the computer needs to have ATX PSU, NIC needs to be compatible, and so on). This can be identified in system BIOS, that should have an option to enable or disable WakeOnLan. Of course, check if the computer to be waken is correctly configured.

But how this stuff works? All computer with a PSU supply stay in standby. If you enable WOL the computer also instructs its network card to stay in standby and monitor medium looking for a Magic Packet. When NIC receives the packet, it turns the computer on. And this Magic Packet is only a UDP packet sent to network broadcast address, usually on port 7 or 9, with FF FF FF FF FF FF on 6 first bytes followed by NIC MAC address repeated 16 times (total: 102 bytes). There's the possibility to send a password, but this is not very used and I didn't implemented. More information on Wikipedia.

My script is also simple. Save it on a .PS1 file (for instance, wake-computer.ps1) and call it using what we call dot-sourcing. It's like execute the script, but the internal functions (and also variables, data, constants, aliases) are exported, being visible to the user. Then you need to call a funcion called wake-computer with two parameters: NIC's MAC address and broadcast address.

Here's an example:

. '.\wake-computer.ps1' 
wake-computer 00:16:76:75:01:00 192.168.1.255

Then, the code


# wake-computer function 
# by Vinicius Canto - MVP 
# 
# Usage: wake-computer 
# 
# : MAC address of remote machine. The mac-address must be in the 
# format AA:BB:CC:DD:EE:FF, six numbers in hexadecimal, like the 
# output of IPconfig command 
# 
# Address used to broadcast packets on local network. This 
# address must be in the format a.b.c.d, with a, b, c and d 
# numbers between 0 and 255, the common form of an IP Address 
# 
# Example: 
# wake-computer 00:16:76:75:AA:00 192.168.1.255 
# 
# For more information, contact-me: scripterbr (at) gmail (dot) com 
# 
# I'm looking for people to improve the code... if you want, contact me!  
# example line that sends an UDP packet 
# (new-object System.Net.Sockets.Socket(2,2,17)).SendTo("Vinicius",(new-object System.Net.IPEndPoint(([System.Net.IPAddress]::Parse("192.168.1.2")),2000))) 


function wake-computer([string]$macAddress, [string]$broadcastAddress) {
	$socket = new-object System.Net.Sockets.Socket(2,2,17)
	$destination = [System.Net.IPAddress]::Parse($broadcastAddress)
	$endpoint = new-object System.Net.IPEndpoint($destination,9) 
	[byte[]]$buffer = @(255,255,255,255,255,255) 
	$buffer += (($macAddress.split(':') | foreach {[byte]('0x' + $_)}) * 16)
	$sent = $socket.Sendto($buffer, $buffer.length, 0, $endpoint) 
	"$sent bytes sent. The computer $macAddress may be initializing."
}

I recommend to be careful with line breaks. Blogger don't like source code... Also check if your current PowerShell configuration allows you to run scripts with Get-ExecutionPolicy command. I also recommend to look Wesley's blog... he is currently studying some new technologies like IAMT, and they help, among other things, remote computer management. He'll create some cool thing and post there. The link is here.

See you!

Categorias dessa postagem: