Mostrando postagens com marcador Ferramentas. Mostrar todas as postagens
Mostrando postagens com marcador Ferramentas. Mostrar todas as postagens

22 de dezembro de 2010

Detectando memory leaks em seus programas Delphi/C++ Builder

Umas das grandes discussões entre defensores das linguagens de código gerenciado (como C# e Java) e defensores das linguagens puras, isto é, não gerenciadas (como C, C++ e Delphi para Win32) é justamente a diferença mais marcante entre os dois conjuntos de linguagens : o gerenciamento da memória usada pelas variáveis e objetos nos programas.

Nas linguagens gerenciadas, o programador não precisa se preocupar em comandar a liberação da memória usada por objetos que ele tenha criado num programa pois o Garbage Collector faz isso de forma automática quando o objeto sai de escopo, ou seja, quando ele não está mais sendo utilizado. A vantagem é que sempre toda memória alocada pelo programa será devolvida ao sistema operacional quando ele terminar. A contrapartida é que haverá uma thread monitorando continuamente a execução do programa (com possível impacto em performance) além do fato de não se ter controle sobre o momento em que o destrutor do objeto será de fato chamado.

Por outro lado, nas linguagens não gerenciadas é responsabilidade do programador desalocar qualquer memória que ele tenha alocado em seu programa. Como esse é um procedimento manual, eventualmente pode escapar alguma memória sem ser devolvida, o que, em situações extremas, pode resultar até na queda do sistema operacional. Mas, este método produz programas mais rápidos e o programador tem total controle sobre o instante em que cada destrutor é invocado.

À parte a discussão sobre qual das abordagens é a melhor, os desenvolvedores C++ Builder e Delphi Win32 têm uma ferramenta para ajudá-los a depurar seus programas e encontrar eventuais falhas no gerenciamento manual de memória. O FastMM é uma biblioteca que substitui o BorlndMM.DLL, que é o gerenciador padrão dos programas feitos nessas duas linguagens. O MM no nome de ambas as bibliotecas é abreviação para Memory Manager, ou Gerenciador de Memória.

Diferente do Code Guard, o FastMM detecta apenas os memory leaks, apresentando os resultados da verificação num relatório gravado ao final da execução do seu programa. Projetos feitas em ambas as linguagens extraem melhores benefícios do FastMM se estiverem compilados para depuração. Com essa opção ligada, o gerenciador consegue apontar com precisão o local onde foi alocada uma variável que não tenha sido removida da memória.

Em C++, o processo de substituição do gerenciador é mais simples pois implica em simplesmente trocar a biblioteca BorlndMM.DLL original por aquela distribuída junto com o FastMM (ou que tenha sido compilada por você mesmo com as configurações personalizadas). A única ressalva a ser feita é que há uma opção de linkagem nos projetos C++ Builder que permitem embutir no binário final o conteúdo do gerenciador de memória, eliminando a necessidade da biblioteca externa. Por isso, substituir a biblioteca só vai funcionar se o projeto estiver compilado para usar o gerenciador dinamicamente. Na versão que eu tenho do C++ Builder, esta opção aparece na página Linker das opções de projeto e tem o nome de Use Dynamic RTL.

Em projetos do Delphi para Win32, as funcionalidades providas em BorlndMM.DLL são sempre linkadas juntas, produzindo um executável ou biblioteca sem essa dependência externa, resultando num processo de substituição um pouco mais elaborado. Neste ambiente, você terá que incluir em seu projeto o fonte do FastMM e garantir que esta unit seja a primeira a aparecer na cláusula Uses do fonte do seu projeto.

Normalmente, não é necessário fazer quaisquer alterações na configuração do FastMM para depurar um projeto. No entanto, se alguma situação exigir, as configurações dele podem ser encontradas no fonte FastMM4Options.Inc, onde há uma lista de opções ricamente comentadas (em inglês) que podem ser ligadas ou desligadas de acordo com suas necessidades. As opções estão espalhadas em seções organizadas pelo tipo de efeito abordado, como por exemplo as vinculadas à melhoria do tratamento do gerenciador em projetos multi threaded (concorrência), as que controlam a forma com que os memory leaks serão reportados, as que compatibilizam o gerenciador com opções específicas do projeto e as relacionadas à depuração do seu programa quando o gerenciador está presente. Apenas lembro que o FastMM4Options.Inc é parte dos fontes do FastMM e que as alterações introduzidas nele exigem que se recompile o projeto para que surtam efetivamente os efeitos desejados.

O FastMM é um projeto open source hospedado no Source Forge, a partir de onde você pode fazer o download tanto das bibliotecas prontas para diversas versões do Delphi e do C++ Builder quanto os códigos fonte para que se possa compilar sua própria versão com um conjunto específico de opções ligadas.

Mais Informações
Site do projeto FastMM

8 de outubro de 2010

Descobrindo quais aplicações são iniciadas junto com o Windows

Você já teve a sensação de que há coisas demais sendo carregadas junto com o Sistema Operacional quando liga seu computador ? Ou, pior ainda, viu que há um programa sendo iniciado junto com o Windows e não conseguiu descobrir como fazer para impedir que ele seja carregado? Tive um problema assim recentemente, relacionado com o módulo de segurança do site de meu banco, um programa que se chama G-Buster Browser Defense (instalado automaticamente pelo site e colocado na pasta GbPlugin). Em algumas situações ele deixa o computador extremamente lento mas a forma com que ele é instalado não permite remoção fácil. Para saber mais sobre essa remoção especificamente, veja este endereço.

Ao pesquisar uma solução para o problema da lentidão, encontrei uma ferramenta muito boa para monitorar tudo que está sendo iniciado junto com o Windows. A ferramenta, que se chama AutoRuns, é parte da coleção de utilitários desenvolvidos pela Systinternals, tal como o Process Explorer sobre o qual já falei no blog.

Ao contrário de outras ferramentas que se propõem listar os programas iniciados com o Windows, o AutoRuns vai a fundo na sua busca. São incluídos locais como a lista de serviços do Windows, programas diretamente marcados para iniciar com o sistema, os programas registrados como auxiliares do shell (os chamados hooks), objetos auxiliares do navegador de internet, notificações do subsistema de logon e outros. Com isso, é possível fazer uma análise bastante profunda do que realmente é necessário ser iniciado com o Windows, resultando numa inicialização mais rápida do sistema. Obviamente, esse trabalho de limpeza deve ser feito com conhecimento de causa para evitar que o sistema passe a sofrer com mal funcionamentos e instabilidades. Recomenda-se até mesmo a criação de pontos de restauração para o caso de algo sair errado. A imagem abaixo é uma captura de tela da aplicação.
Captura de tela do AutoRuns

Quando se executa o programa, ele imediatamente varre as entradas relevantes do registry, produzindo uma listagem na ordem exata com que essas entradas são processadas durante a carga do Windows. De início, todas as entradas são exibidas numa guia geral mas há também guias organizadas por tipo de inicialização, o que facilita o trabalho de localizar entradas específicas. Por exemplo, há uma guia exclusiva para os Serviços de inicialização automática e outra para os hooks registrados para o Windows Explorer. Em qualquer das guias, os itens levantados vêm acompanhados por uma caixa de seleção. Ao desmarcar essa caixa, o item em questão é temporariamente desabilitado e não será carregado nos próximos boots, até que ela seja marcada de novo. Se preferir, pode remover a entrada em definitivo. Em ambos os casos, os privilégios de manutenção do registry se aplicam, isto é, você só poderá fazer a alteração se o seu usuário tiver a permissão apropriada.

Para evitar que muitas entradas apareçam na listagem, há opção - marcada por padrão - de esconder aquelas que são criadas e controladas pelo próprio Windows. Estas são, em tese, mais arriscadas de se remover ou de se suspender. A ferramenta tem ainda recurso para permitir encontrar as entradas que contenham um texto qualquer, informado pelo usuário.

Os itens são levantados inicialmente para o usuário atual do Windows mas a aplicação permite fazer o levantamento das entradas para qualquer outro usuário que já tenha se logado no computador. Basta selecionar o usuário desejado através da opção de menu User para que o levantamento das entradas específicas desse usuário seja feito, permitindo ao administrador fazer um monitoramento e a limpeza que for conveniente.

Ainda no sentido de auxiliar os administradores, o AutoRuns é distribuído também com uma versão console para ser executada na linha de comando. Isso facilita a automatização de tarefas através da inclusão de comandos da aplicação em arquivos batches. Mais informações sobre quais comandos estão disponíveis por esse meio podem ser encontrados no site da ferramenta.

13 de agosto de 2010

Manipulando conteúdo de arquivos PDF

O PDF - Portable Document Format - é um dos formatos de arquivo mais populares para distribuição de documentos. Uma das razões para isso é o fato de que - como o próprio nome diz - esse ser um formato criado para ser "portável". Isso quer dizer que ele poderá ser aberto e lido em praticamente qualquer sistema operacional - Windows, Linux, Mac OS, etc. Ajuda também na popularização a existência de plugins para lê-lo diretamente nos principais navegadores da Internet.

Mas o HTML também é um formato portável, com recursos para criar documentos tão ricos quando o PDF. Por que, então, criar um PDF para publicar um documento na Internet? Acontece que o PDF permitir configurar propriedades extras para, por exemplo, evitar que alguém sem permissão possa alterar o conteúdo ou mesmo copiá-lo. Esse recurso é imprescindível para proteger direitos autorais. Um PDF também pode ser assinado digitalmente, fornecendo uma dupla proteção para previnir alterações não autorizadas.

É corrente a ideia de que criar PDFs profissionais exige a compra de softwares caros, em especial o Acrobat Pro da Adobe, empresa que especificou o formato e desenvolveu as primeiras ferramentas. Mas, de acordo com o Wikipedia, a especificação do PDF foi feita como um padrão aberto e qualquer um pode criar programas para leitura e/ou criação de arquivos nesse padrão. Tal especificação está publicada no site da ISO, podendo ser adquirida neste link.

Por isso, há bons programas gratuitos para criação desses arquivos, tais como o CutePDF Writer que funciona como uma impressora. Isto é, qualquer documento que você mandar nessa impressora gerará um PDF com o conteúdo correspondente.

Já o NitroPDF Reader é mais flexível pois tem uma interface gráfica inspirada no Office 2007 que permite realizar manutenções diretamente no PDF:
NitroPDF Reader

De acordo com o fabricante, o programa é capaz de ler cerca de 300 extensões diferentes de arquivos e convertê-los em PDF, prontos para edição no próprio ambiente da ferramenta. Entre os formatos com os quais ele trabalha estão os do Microsoft Office (Word, Excel), páginas HTML e diversos tipos de imagens.

Esta ferramenta permite que se adicione comentários e anotações no arquivo, recurso útil para trabalhos colaborativos nos quais mais de uma pessoa faz sugestões e correções ao documento. Nesta mesma direção, a ferramenta também tem recursos para destacar trechos do documento e acrescentar textos em qualquer ponto.

É possível ainda a criação de "carimbos" para identificar o autor de uma manutenção ou garantir a procedência do arquivo, numa espécie de assinatura eletrônica embutida no documento final. De acordo com a sensibilidade do conteúdo, esse carimbo pode ser protegido por senha para evitar uso indevido.

Pra quem trabalha com formulários em PDF, o NitroReader permite salvar uma cópia com as informações lançadas nos campos, garantindo o registro de como o formulário foi preenchido.

Um outro recurso bastante interessante é o que permite extrair todo o texto do documento de um modo que a formatação - parágrafos e espaços - não se perca, ao contrário do que ocorre com o Copiar do Acrobat Reader. Isso levanta, no entanto, uma preocupação com seus próprios textos inseridos num PDF: se não quer que seu trabalho seja tão facilmente copiado, a sugestão é não inserí-lo como texto mas como uma imagem.

O NitroPDF Reader está em versão beta e é gratuito. Há uma outra versão chamada NitroPDF Reader Pro mais completa, com outros recursos e facilidades mas esta é paga.

24 de maio de 2010

Transportando arquivos muito grandes

Nas versões do Windows que ainda possuem suporte hoje em dia – XP, Vista, Seven e suas variações – os discos rígidos (HDs) são quase sempre formatados usando a estrutura de pastas chamada NTFS (NT File System, ou seja, sistema de arquivos do Windows NT). No entanto, muitos dos pen drives e HDs externos ainda vêm formatados usando FAT32, sistema de arquivos usado pelas versões anteriores do Windows (95 e 98) mas ainda reconhecidos nas versões mais recentes.

Ambos os formatos servem ao mesmo propósito, que é organizar o acesso aos arquivos que existem num disco. O que os difere é como é feita essa organização e os recursos adicionais proporcionados por cada formato. O NTFS é mais robusto, tendo sido projetado para, entre outras coisas, comportar informações de segurança mais refinadas, permitindo que sejam inseridas configurações de acesso no nível de pasta e até de arquivo, de modo que apenas usuários cujas credenciais atendam tais configurações é que podem acessar uma pasta ou arquivo. O FAT32, por ser mais antigo, é mais simples e não permite essa distinção.

Outra diferença crucial entre os dois formatos é o tamanho máximo que um arquivo pode alcançar. Enquanto no FAT32 o tamanho máximo não deve passar de 4 GB (gigabytes), a implementação atual do NTFS aceita arquivos com até 16 TB (terabytes).

Por essa razão, se você possui um arquivo de imagem de um DVD (4.5 GB) , um backup de um banco de dados de um Cliente ou outro arquivo qualquer cujo tamanho ultrapasse 4 GB, será um problema copiá-lo de um sistema com NTFS para um pen drive formatado com FAT32. Embora seja permitido que se formate um pen drive ou HD externo com NTFS, nem sempre isso é desejado.

Há uma ferramenta bastante simples e eficaz para resolver este tipo de impasse. Trata-se do HJ-Split, uma aplicação gratuita que não necessita instalação e que se propõe a fracionar um arquivo qualquer, criando arquivos menores que depois podem ser reagrupados para formar o arquivo original novamente.

A interface inicial da aplicação apresenta 4 funções representadas por botões: Split (fracionar), Join (juntar), Compare (comparar dois arquivos) e Checksum (calcular identificação para validar um arquivo). A reprodução abaixo é a tela apresentada quando se solicita a função Split para quebrar um arquivo em arquivos menores:
HJ-Split
Para usar esta função, basta informar o arquivo original, o tamanho máximo que cada fragmento gerado deverá ter e pressionar o botão Start. Na mesma pasta onde está o arquivo original serão gerados tantos fragmentos de arquivos quantos forem necessários, respeitando-se o tamanho máximo estipulado para cada parte. Em cada fragmento será acrescentado um número sequencial (começando com 001) indicando a posição do fragmento dentro do arquivo original. Esses arquivos menores agora podem ser copiados para o pen drive sem problemas.

Quando precisar do arquivo completo novamente, use a função Join do HJ-Split. Nessa função, o botão Input File permite que se localize o primeiro fragmento do conjunto que foi gerado com a função Split – aquele arquivo com o 001 acrescentado ao nome. É importante que todos os fragmentos estejam na mesma pasta para que o HJ-Split os encontre. Informe também a pasta de destino, isto é, o local onde será recriado o arquivo original completo.

No endereço http://www.freebyte.com/hjsplit há links para download de versões para diversos Sistemas Operacionais (Linux, Mac, Windows, etc.).

6 de abril de 2010

Sincronizando arquivos e pastas no Windows

O computador invadiu faz tempo a nossa vida e já se foi a época em que mal tínhamos uma única máquina pra trabalhar. Agora há um computador no escritório, outro em casa, talvez um notebook pra quando viajamos e um outro pra quando vamos a algum Cliente. Dar manutenção em documentos, preparar apresentações, editar planilhas e arquivos fontes são tarefas que não raro temos que fazer em computadores diferentes, dependendo do momento e do lugar em que estamos trabalhando.

É fácil ver que essa situação leva à criação de diversas pastas com versões diferentes de documentos e outros arquivos. Como, então, proceder para termos certeza de que estamos realmente editando a última versão de um documento ou usando a compilação mais atualizada de um programa ?

Tendo esse cenário em mente, a Microsoft criou um programa simples e gratuito, chamado SyncToy cuja versão mais recente é a 2.1.

A operação do SyncToy 2.1 é bastante intuitiva; nele você cria pares de pastas que devem ser mantidas em sincronia e atribui um nome a cada par. Quaisquer pastas que seu computador enxergar poderão ser sincronizadas - pastas locais, na rede, num pen-drive, etc. Quando quiser sincronizar, selecione o nome do par e mande executar a sincronização; é claro que há também a opção de mandar sincronizar todos os pares simultaneamente.

A imagem abaixo mostra o par em que sincronizo os arquivos que compõem esse blog, de modo que posso fazer alterações tanto em casa quanto no escritório, tendo certeza de estar sempre com a última versão de cada arquivo.
SyncToy 2.1
Um dos melhores recursos da ferramenta é o que permite fazer um "preview" das operações que serão executadas. Com ele você vê com antecedência se a operação que será realizada é mesmo a que você deseja, sem risco de perder dados.

Há ainda configurações que permitem estipular quais extensões de arquivos devem ser consideradas e quais o SincToy deve ignorar (ex: não copiar imagens com extensão JPG). Também é possível selecionar quais das subpastas devem ser incluídas na sincronização, além da opção de lançar na lixeira arquivos que tenham sido removidos (ou sobrepostos), ao invés de simplesmente replicar a remoção.

Mas o que exatamente é sincronizado ? O mecanismo padrão é denominado Syncronize e, nesse modo, todas as alterações, criações e remoções de arquivos e pastas são sincronizadas, independente de qual das pastas no par sofreu as alterações. Há outros dois modos para se trabalhar: no modo Echo, apenas manutenções feitas na pasta (e subpastas) da esquerda são replicadas (vão para a pasta exibida à direita na interface), enquanto as alterações feitas na pasta da direita são ignoradas. O último modo disponível é o Contribute, que funciona basicamente como o Echo, exceto pelo fato de que as exclusões de arquivos são desconsideradas.

O SyncToy 2.1 possui versões tanto para sistemas 32 bits quanto para os de 64 bits. De acordo com o site da Microsoft, o programa é suportado pelo Windows 7, pelo Windows Vista e também pelo Windows XP.

O download pode ser feito diretamente através do site da Microsoft (neste link) mas há diversos outros sites que também o disponibilizam (Baixaki, Info, etc.).

Atenção : se você já usa uma versão anterior do SyncToy, veja no site da Microsoft como atualizar para a nova versão sem perigo de perder seus dados.

Mais Informações
Download do SyncToy 2.1

21 de janeiro de 2010

Explorando informações sobre programas em execução

Quem trabalha com desenvolvimento de software certamente já se deparou com a situação de enviar para um Cliente o programa compilado mas esquecer de enviar uma ou mais das bibliotecas dinâmicas (DLLs). Tendo este tipo de problema em mente, passei a buscar algum meio de fazer um levantamento das DLLs necessárias para a execução de um programa.

Como resultado desta busca, acabei me deparando com uma boa surpresa: uma ferramenta chamada Process Explorer. Esta ferramenta era uma das desenvolvidas pela empresa SysInternals mas atualmente pode ser encontrada diretamente no Technet - o site técnico da Microsoft. Digo que foi uma grata surpresa porque esta ferramenta faz muito mais coisas do eu estava procurando, com funcionalidades que realmente podem ser muito úteis para desenvolvedores e profissionais voltados para suporte.

Ao entrar no Process Explorer, ele imediatamente varre os processos que estão em execução em seu computador e os lista num painel na metade superior da interface gráfica, incluindo informações como o nome do fabricante e uma descrição do programa conforme registrado no próprio executável do processo.
Tela do Process Explorer

Clicar com o botão direito do mouse na barra onde estão os nomes das colunas permite selecionar a exibição de outros dados. As colunas disponíveis incluem informações sobre o consumo de memória pela aplicação (virtual, paginada, working set, etc.) dados do handle do processo e dados sobre sua performance (uso da cpu, etc.) e disponibiliza até mesmo qual a conta de usuário sendo usada para a execução.

Clicar com o botão direito do mouse sobre um dos processos dá acesso a outras ações, como modificar a prioridade de execução, suspender a execução temporariamente ou até mesmo interrompê-lo definitivamente. A opção "Propriedades" carrega uma janela onde todas as informações disponíveis sobre o processo são exibidas de forma centralizada (threads, segurança, linha de comando, conexões TCP/IP ativas e outras informações), além de monitorar em tempo real a execução do processo, mostrando gráficos de performance e variação do uso da memória. Ou seja, o Process Explorer é uma espécie de Task Manager turbinado.

Finalmente, selecionar um dos programas da lista faz com que o Process Explorer faça o levantamento de todas as bibliotecas dinâmicas (DLL) que estão carregadas pelo processo no momento. A lista de biblitoecas e os dados coletados sobre elas são então apresentados num outro painel, na parte de baixo da interface gráfica. Como esse painel permite exibir a versão de cada DLL, fica fácil também verificar se as versões carregadas são as corretas e não alguma outra que pode causar erros durante a execução. Ou seja, ajuda a detectar ocorrências de DLL Hell. Para desenvolvedores, esse painel pode ainda mostrar informações sobre o uso de memória por cada uma das bibliotecas e o nome da pasta a partir de onde ela foi carregada.

Um outro recurso interessante é o que permite mostrar todos os arquivos que estão abertos por um processo. Esse recurso pode ser acessado através da opção "Handles", encontrada no menu View e Lower Pane View, sendo que a lista de arquivos substitui a visão de DLLs no painel inferior.

Há ainda um ferramenta de busca no Process Explorer que permite encontrar rapidamente nomes de DLLs, pastas ou arquivos que estiverem em uso em qualquer um dos processos ativos.

O donwload do Process Explorer é gratuito e pode ser feito a partir do endereço http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx.

26 de outubro de 2009

Descobrindo se seu computador comporta o Windows 7

Sempre que sai uma nova versão de um Sistema Operacional - notadamente o Windows - temos uma certa resistência em fazer a troca. As preocupações vão desde o básico "será que o novo sistema terá um boa performance no meu computador ?" até as mais profundas, envolvendo a compatibilidade dos softwares que você mais usa.

Ciente disso, a Microsoft preparou um programa para diminuir os riscos, ao menos no que diz respeito à performance geral do computador e à compatibilidade de periféricos como impressoras e placas de vídeo. O programa chama-se Windows 7 Upgrade Advisor e pode ser executado em computadores com qualquer das versões do Windows que ainda têm suporte, a saber: o próprio Windows 7, o Windows Vista e o Windows XP com Service Pack 2. O programa, que é gratuíto, está disponíel no site da Microsoft através do link http://go.microsoft.com/fwlink/?LinkId=161223. Também pode ser encontrado em outros endereços em sites de download (Info Online, PC World, entre outros).
Tela do Upgrade Advisor

Após o download e a instalação, o programa poderá ser executado para determinar a compatibilidade com o Windows 7. Ele procurará em todo o seu computador por problemas potenciais com hardware, dispositivos existentes e programas que você tenha instalado. Caso encontre algum problema, ele dará recomendações sobre o que deve ser feito antes de tentar partir para a migração para o Windows 7.

Por causa da forma com que o Upgrade Advisor trabalha, você deve ligar os periféricos que você normalmente usa de modo que o programa possa acessá-los e determinar sua compatibilidade com o novo Windows. Isso inclui impressoras, scanners, discos externos, equipamentos que usem a USB (neste caso, o equipamento - como câmeras fotográficas - deve estar conectado na USB e deve estar ligado), etc.

A Microsoft não recomenda que o programa seja executado em ambiente virtualizado (usando o Virtual PC ou Remote Desktop) pois ele poderá deixar de detectar alguns recursos.

Você encontrará no site PC Saudável um tutorial básico para a execução do Advisor.

23 de outubro de 2009

Depurando comandos enviados ao Oracle

Desenvolver um ERP é um trabalho bastante grande já que normalmente engloba vastas áreas da operação de uma Empresa. Se a construção desse ERP tem como premissa ser independente do fabricante do banco de dados onde ele vai armazenar as transações, esse trabalho será ainda maior pois adiciona a dificuldade de compatibilizar a sintaxe dos comandos SQL para realizar as operações no banco de dados.

A ABC71 trabalha com essa premissa e seu ERP é homologado para executar em alguns bancos de dados, entre eles SQL Server e Oracle. Embora haja um SQL padrão, na prática cada fabricante acaba introduzindo diferenças de sintaxe para refletir diferenças de implementação - seja para melhorar performance ou usabilidade, entre outros. É por essa razão que não utilizamos Stored Procedures para implementar funcionalidades do ERP; teríamos praticamente que construir um ERP para cada tipo de banco de dados.

Esse cenário levanta outra questão, relacionada com situações em que é necessária a depuração do programa. Uma vez que os comandos SQL são montados internamente no programa e podem ser diferentes dependendo do banco ao qual são direcionados, como interceptar o comando que é de fato submetido ao banco ? Isto é, será que os valores enviados como parâmetros ao comando SQL estão corretos ? E quanto à sintaxe do comando em si ?

Junto com o SQL Server é distribuído o programa Profiler que é capaz de interagir com o gerenciador de banco de dados e capturar os comandos SQL, incluindo parâmetros, se houverem. No caso do Oracle, não há uma ferramenta que venha junto com o banco para permitir esse tipo de depuração.

Procurando na internet, localizei uma ferramenta chamada Statement Tracer for Oracle, cuja empresa desenvolvedora chama-se Aboves Software. Ela é gratuita mas faz pelo Oracle exatamente o que o Profiler faz pelo SQL Server: captura os comandos SQL submetidos ao banco de dados por uma aplicação. Os comandos capturados são exibidos em linhas, sequencialmente de acordo com a data e hora em que foram submetidos. Ao selecionar uma das linhas, o programa transfere o comando completo para um painel na parte de baixo da interface, permitindo sua análise e, eventualmente, sua cópia.
Tela do Tracer

O Statement Tracer é executado localmente, isto é, no mesmo computador em que você está executando o programa que submeterá as queries. Ele, então, criará uma lista com todos os programas que estejam com alguma conexão ativa com um banco de dados Oracle, exibindo cada programa numa guia diferente. Para iniciar o monitoramento, basta apertar um botão na interface.

O programa permite que você configure quais classes de comando você quer interceptar, incluindo controle de transações, preparação e execução das queries (SELECT, INSERT, etc), visualização de parâmetros em queries parametrizadas e comandos relacionados a operações no esquema do banco de dados (CREATE TABLE, por exemplo). Você pode também incluir ou remover determinadas colunas. Uma dessas colunas traz o tempo que o comando relacionado demorou para executar, sendo uma ferramenta bastante útil para detectar pontos no sistema que possam ter a perfomance melhorada.

Há ainda um configuração de regras para aplicar uma cor diferente às linhas do Tracer, baseado no texto apresentado pelo comando. A utilidade disto é ampla e vai desde descobrir qual comando enviou um determinado valor ao banco de dados até saber quais comandos envolveram determinada tabela ou visão.

Caso queira analisar num outro momento os comandos que foram capturados, basta salvar todo o log para um arquivo texto.

O download da ferramenta pode ser feito neste link. Há outras ferramentas da mesma empresa que podem ser encontradas neste endereço. Veja que há aí um Tracer para interceptar comandos diretamente no ADO, indepentemente do Banco de Dados conectado. No entanto, essa ainda não me pareceu totalmente madura pois às vezes gera invasões de memória.

Mais Informações
Statement Tracer For Oracle

28 de setembro de 2009

Softwares para virtualização de computadores

Mesmo com a queda dos preços dos componentes de computadores, como memória e disco rígido, a virtualização de hardware tem sido uma boa opção para empresas reduzirem custos. A ideia é simples : compra-se um único computador potente o bastante para comportar a emulação de diversas máquinas, com a possibilidade de simular diversos ambientes diferentes. Ou seja, paga-se por uma máquina e pode-se ter diversas outras pelo mesmo preço.

Há diversos softwares no mercado para virtualização tanto de servidores quanto de desktops mas acredito que os mais comuns sejam o Virtual PC da Microsoft e o VMWare da empresa de mesmo nome. Ambos possuem versões gratuitas para virtualização do Desktop.

Em ambos os casos, a máquina real tem seu próprio sistema operacional, que é onde o software de virtualização executará. As máquinas virtuais, então, são carregadas e emuladas dentro do software de virtualização. Elas compartilham o hardware da máquina real, isto é, usam a mesma mémoria, o mesmo disco rígido, rede, impressoras que estejam instaladas, etc - daí a necessidade do computador real ser robusto, caso contrário as máquinas virtuais podem se tornar tão lentas que deixa de ser interessante a virtualização.

A grosso modo, a máquina ou computador virtual é apenas um grande arquivo cujo conteúdo simula a estrutura existente num disco rígido de uma máquina real. O software de virtualização fornece, através de drivers internos, maneiras do sistema operacional interagir com essa estrutura e com o resto do hardware. Assim, o sistema operacional que está executando na máquina virtual é levado a crer que trabalha com uma máquina convencional.

Uma peculiaridade decorrente dessa forma de trabalhar é que as máquinas virtuais permitem que se salve o contexto de trabalho. Isto é, você pode modificar arquivos, realizar instalações, modificar configurações, etc. e só aplicar as alterações se julgar conveniente. Se não gravá-las, a próxima vez que entrar na máquina virtual, você irá encontrá-la exatamente no mesmo estado que se encontrava antes, isto é, com os dados efetivados pela última gravação que você tenha feito. Na ABC71, por exemplo, eu uso o Virtual PC da Microsoft para fazer testes quando há alterações no programa instalador do nosso ERP. Realizo a instalação, vejo se os arquivos foram copiados corretamente, se as chaves no Registry foram criadas e estão íntegras, se o banco de dados foi populado com os registros iniciais necessários, etc. Após o teste, saio sem gravar as alterações na máquina virtual e ela estará pronta para um novo teste no futuro, sem apresentar traços dos testes de instalação anteriores.

A aplicação desse tipo de software é vasta e não se restringe a poupar dinheiro com a compra de máquinas. Além do uso para instalação de softwares como citado acima, há outras possibilidades de uso interessantes:
Num ambiente de treinamento onde há turmas em períodos distintos usando a mesma sala e mesmos equipamentos, máquinas virtuais distintas para cada aluno separa o estado de cada computador, evitando interferências do ambiente de um aluno no ambiente do outro. Se por acaso for o mesmo curso, evita até que um "cole" do outro.
Quando é necessário ter ambientes heterogênios para testes. Por exemplo, analisar o comportamento de uma aplicação em sabores diferentes do próprio Windows (XP, Vista, 98, etc) Como é possível instalar sistemas de outros fabricantes - como Linux - o caminho fica aberto para testar aplicações Web em browsers de sistemas operacionais diversos e, também, para validar aplicações .NET Multiplataforma.
Para usar aplicações legadas, isto é, programas que só rodam em uma versão antiga do sistema operacional. Isto permite que se atualize a versão do Windows num computador sem correr o risco de ter que deixar de usar a aplicação em questão.
Há certas aplicações que não conseguem trabalhar direito quando uma outra determinada aplicação também está instalada. Seja porque teriam que compartilhar algum recurso do computador (uma versão distinta de um driver ou de um arquivo) ou porque exijam uma configuração mutuamente exclusiva. Um caso típico são aplicações Java que precisam de uma versão distinta do JVM para funcionar.

Além disso tudo, como todas as máquinas virtuais se encontram numa mesma máquina real, é mais fácil gerenciá-las. E, como as máquinas em si se restrigem ao arquivo que representam seu conteúdo, fica mais fácil fazer backups.

14 de setembro de 2009

Trabalhando com imagens de CDs e DVDs

Se você tem algum CD ou DVD de software, você provavelmente já se perguntou o que é que vai fazer no caso de acontecer algum problema com ele. Ele pode se riscar, se desgastar ou você pode simplesmente perdê-lo.

Claro que é sempre possível - e recomendável - "queimar" uma cópia dele numa outra mídia e usá-la para evitar que problemas ocorram com a mídia original. Mas há uma solução muito mais elegante : um software chamado Daemon-Tools.

O objetivo primário do Daemon-Tools é simular a existência de um leitor de CD ou DVD, permitindo que você use um leitor virtual de discos. O funcionamento básico é o seguinte : você cria uma imagem da midia (CD/DVD/Blue Ray) no seu disco rígido e comanda o Daemon-Tools para que ele abra no leitor virtual a imagem criada, numa operação que ele chama de "montagem". A imagem da mídia nada mais é que um arquivo para onde o conteúdo do disco original foi transferido e que é organizado num formato conhecido. Este arquivo usualmente tem a extensão ISO mas o Daemon Tools é capaz de "montar" imagens em diversos formatos, incluindo alguns proprietários : ISO, CUE, MDS, NRG, CCD, CDI, etc.

O programa não tem interface visual, aparecendo apenas como um ícone na barra do Windows. É a partir desse ícone que se configura e se opera o programa, ajustando a quantidade de leitores virtuais que estarão ativos e permitindo montar os discos. Do ponto de vista do usuário do Windows, o leitor virtual de discos é exibido no Windows Explorer da mesma maneira que os leitores reais, de forma que é impossível distinguir entre uns e outros.

As vantagens de se usar apenas a imagem do disco no lugar da mídia original são inúmeras. Além da óbvia citada no primeiro parágrafo - fazer cópia de segurança da mídia original - você evita o desgaste natural decorrente do uso constante; pode utilizar o CD/DVD/Blue Ray num computador que não possua leitor físico para esses tipos de mídia (redução de custos) além do fato de que a execução a partir do disco rígido é mais rápida do que executar diretamente do CD. E você não precisa manipular a mídia física, o que é mais prático e minimiza o risco de perdê-la.

Há duas versões da ferramenta. Uma, gratuita e voltada ao uso não-comercial, permite a montagem de até 4 discos virtuais simultaneamente, sendo que a quantidade de leitores que estarão de fato disponíveis é determinada pelo usuário. Essa versão não permite criar as imagens de discos. Para isso, é preciso ter outro programa, como por exemplo, o Nero - que costuma vir com gravadores de CD/DVD - ou o ISO Recorder, que é gratuito.

A versão professional é paga mas também permite que você crie imagens de CDs, DVDs e até Blue-Rays que estejam inseridos em leitores físicos do seu computador. Nesta versão é permitido operar até 32 discos simultaneamente.

18 de agosto de 2009

PowerBuilder pronto para a plataforma .Net

A Sybase está despendendo um bom esforço para implementar a plataforma .Net como um dos alvos no IDE do PowerBuilder. Um dos argumentos de venda da ferramenta é justamente permitir que se evolua a plataforma em que seus programas podem executar com pouco ou nenhum esforço. Para os desenvolvedores de software que usam PowerBuilder, é otimo - certamente vai poupar muito trabalho de migração. Reproduzo abaixo alguns trechos traduzidos a partir da matéria publicada na InfoWorld. A página com a matéria original pode ser acessada aqui.

Após vários anos de trabalho, a Sybase está pronta para entregar o último passo no plano de mover o PowerBuilder na direção do modelo de programação da plataforma .Net.

A empresa disponibilizará na terça-feira (18/08) uma versão beta do PowerBuilder 12, que incluirá 2 IDE's e uma ferramenta para migrar aplicações Win32 para a plataforma .Net. O PowerBuilder 12 representa a última de 4 etapas de um plano iniciado em 2002 para trazer os recursos do .Net para os que desenvolvem com a ferramenta. O programa de beta é aberto a qualquer um que queira participar; a versão final está prometida para a primeira metade de 2010.

A tecnologia DataWindow foi reescrita para oferecer suporte nativo à biblioteca gráfica da Microsoft WPF (Windows Presentation Foundation) e permitir a construção de aplicações .NET com código gerenciado. Também suportará Windows 7 quando este sistema for liberado, ainda este ano.

"[O PowerBuilder] simplifica o desenvolvimento e a joia da coroa é o componente chamado DataWindow, que permite acesso a dados, filtragem, ordenação e outros recursos afins", diz Sue Dunnell, Gerente de Produtos da Sybase. "Com o DataWindow, os programadores precisam escrever apenas 5 linhas de código para executar uma tarefa que pode requerer 300 linhas em C++ ou C#, diz ela".

Os IDE's incluídos na ferramenta são o chamado "Classic" para desenvolvimento de aplicações Win32 e o IDE.NET para desenvolvimento de aplicações WPF, este último montado sobre o shell do Microsoft Visual Studio. O WPF é um componente chave no .NET e ter uma ferramenta de conversão para levar código Win32 para o .NET Framework elimina a dor de uma migração cara, de acordo com um representante da Sybase.

Os programadores poderão construir aplicações Win32 e migrar o código para as tecnologias Windows Forms, WebForms, ASP.Net e WPF. Ou poderão criar aplicações WPF baseadas em código gerenciado .NET, o que trará benefícios como o uso do "sandbox" para implementar segurança. Além disso, poderá utilizar plug-ins do ecossistema do Visual Studio e componentes de terceiros. O acesso a dados é possível com virtualmente qualquer sistema de gerenciamento de dados, diz a Sybase.

"O que estamos entregando é o que desenvolvedores PowerBuilder já estão acostumados e, pararelamente, montamos um ambiente compreensivo para construção de aplicações .NET," diz Dunnell. A versão 12 permitirá aos desenvolvedores misturar os programas que eles já têm com .NET e evoluir para uma aplicação .NET pura.

Outros recursos incluem herança visual para janelas WPF e objetos do usuário, permitindo a criação de heranças de janelas ou controles. A ferramenta também oferece o recurso de arrastar-e-soltar para componentes visuais e acesso a propriedades, métodos e componentes nas janelas WPF.

A Sybase teve que alterar os planos com o .NET para poder incorporar as tecnologias WPF, Windows Communication Foundation e o Silverlight (para aplicações ricas via internet). "A Fase 4 era apenas para tornar a construção de aplicações .NET natural no PowerBuilder mas a Microsoft foi adiante e realmente mudou o significado do .NET," diz Dunnell.

"Para acomodar as mudanças do .NET, a Sybase liberou o PowerBuilder 11.5 no ano passado, oferecendo desenvolvimento cliente-servidor. Precisamos de um ano a mais para incorporar o WPF", acrescenta ela.



31 de julho de 2009

Convertendo apresentações Power Point em animações Flash

Suponha que você montou uma apresentação no Power Point para divulgar um produto da sua empresa. Nesta apresentação, você usou diversas configurações, animações e formatações, além de incluir gráficos e figuras. A apresentação ficou tão boa que seu chefe te pediu que a publicasse na página da empresa na Internet.

Qual a melhor forma de fazer isso de uma forma fácil e amigável ? Simplesmente salvar o Power Point como um HTML pode não ser interessante para alguém acessando o site. A melhor abordagem talvez fosse convertê-la numa animação Flash que é mais apropriada para distribuir na internet. Outro ponto é que animações flash funcionam nos principais navegadores de internet dos principais Sistemas Operacionais e a animação em si não pode ser alterada pelo usuário do site.

Deparei com essa situação recentemente na ABC71 pois a empresa está preparando material para realizar treinamentos no nosso ERP Omega e bastante coisa já foi montada como Power Point. O material ainda não está totalmente pronto e não foi publicado mas encontrei uma ferramenta ideal para o que queríamos.

A ferramenta chama-se ISpring e faz exatamente isso: converte suas apresentações Power Point numa animação Flash. Ela é distribuída como um plugin do Power Point e a interação é transparente já que é criada uma guia com o mesmo look-and-feel do Office 2007:
Não consegui encontrar no site do fabricante informações sobre se o ISpring trabalha com outras versões do Office.

Além de fazer a conversão, o ISpring permite que você inclua narração junto com a apresentação de forma sincronizada. Também permite que se configure uma taxa de compressão para controlar o tamanho final da animação em bytes e que se configure a escala que o resultado final terá em relação à apresentação original, isto é, o comprimento e altura da animação.

O site do produto garante que ele é capaz de converter mais de 180 tipos de animações do Power Point e todos os tipos de transição entre slides disponíveis. Ele também embute áudio e vídeo que tiverem sido incluídos na apresentação original, além de tratar links e os botões de ações. A aparência da animação resultante impressiona bem já que reproduz fielmente o que foi feito no Power Point.

Pela reprodução da barra de ferramentas acima dá pra ver também que há um botão para gerar rapidamente um vídeo Flash compatível para publicar no YouTube.

Há uma versão gratuita da aplicação para uso pessoal, isto é, para você converter apresentações pessoais - como um álbum de suas férias, por exemplo, ou montar e mandar algum cartão multimídia para alguém. A versão gratuita apenas realiza a conversão para Flash, não disponibilizando os recursos de controle de narração, taxa de compressão ou configuração de escala. Veja aqui a comparação entre as versões.

1 de julho de 2009

Sobre o Google Wave (e o Bing)

No começo de Junho, a Microsoft lançou oficialmente seu novo sistema de buscas na Internet - o Bing. O objetivo é que a ferramenta ofereça mais do que simplesmente busca na internet, usando o conceito de "busca semântica", isto é, o sistema tentaria interpretar as palavras-chaves digitadas pelo usuário e com isso conseguiria trazer resultados mais relevantes para a pesquisa.

Como é novidade, acaba aguçando a curiosidade e todo mundo acessa para dar ao menos uma espiada. Vem daí a melhora da posição da Microsoft no ranking do uso de buscadores reportado pelos medidores de audiência da Internet. Eu mesmo fiz esse acesso para testar o Bing mas não encontrei nada particularmente melhor do que os serviços que já existiam anteriormente, incluindo o Live Search da própria Microsoft e o onipresente Google.

Na mesma semana, a Google anunciou que está preparando um novo produto e que este também promete revolucionar o modo como usamos a Internet. O produto, feito com tecnologia Web 2.0 (basicamente HTML e JavaScript), foi anunciado no fim de maio no evento Google I/O 2009, uma conferência para desenvolvedores. O site do preview do Google Wave define a ferramenta como algo para comunicação e colaboração através da Internet, integrando e-mail, troca de mensagens instantâneas, bate-papo, rede social, compartilhamento de documentos e imagens, criação de blogs e wikis.

A base do sistema do Google são as Waves, canais hospedados na internet que comportarão as conversações entre as pessoas vinculadas. Por conversações aqui entenda-se não só troca de mensagens textuais (quer via email, quer via chat) mas também o compartilhamento de fotos, vídeos, e outros documentos, além de interação com mapas. Mas o principal diferencial é permitir a produção de documentos colaborativamente, isto é, várias pessoas da wave trabalhando num documento e até mesmo editando-o de forma simultânea.

Tudo que é dito, postado ou produzido fica registrado na wave, de modo que alguém que não estiver on-line pode acompanhar tudo o que acontece na wave no momento que lhe for mais oportuno, sabendo quem disse ou fez o quê e quando.

Esses recursos todos são construídos em cima de uma API - a Google Wave API - que é um conjunto de ferramentas para desenvolvimento. Essa API é disponibizada pela Google para que seja possível a desenvolvedores externos criar extensões que automatizem tarefas numa wave. Ela também permite que se incluia uma wave dentro de outro site para torná-lo mais interativo. Com isso, muitos desenvolvedores de software devem criar gadgets compatíveis com o ambiente das waves, incrementando cada vez mais as funcionalidades existentes, da mesma forma que acontece com os plugins para o navegador Firefox.

Além disso tudo, a Google está trabalhando num protocolo aberto para permitir a comunicação entre waves. A ideia é que o protocolo, chamado Google Wave Federation Protocol, estimule o surgimento de outros produtores de waves e que waves publicados por diferentes produtores possam compartilhar informações entre si.

Como o Google Wave ainda não está em funcionamento, teremos mesmo que aguardar para saber o que de fato é revolucionário e o que não passa de marketing. A promessa é boa e deve sair ainda em 2009 ...

27 de junho de 2009

Novo antivírus da Microsoft

A Microsoft lançou recentemente um beta de seu novo programa antivírus, chamado Security Essencials. Ao contrário das tentativas anteriores de concorrer com Symantec, McAfee e outros grandes fabricantes de antivirus, essa versão será um serviço gratuito, como atesta o site do Security Essencials. Parece que essa é uma tentativa de entrar pra valer no nicho de segurança.

Os produtos anteriores da Microsoft para esse fim eram o OneCare - que é um serviço pago - e o Windows Defender. Esse último, embora gratuito, só protegia contra sypware. Já o novo produto protege o computador também contra outras ameaças, tais como malwares, rootkits, trojans e outros.

O Security Essencials está disponível para Windows XP (Service Pack 2 ou 3), Windows Vista e também para a próxima versão do sistema operacional da Microsoft, o Windows 7, que ainda não foi oficialmente lançado.

De acordo com o review publicado pelo site Baixaqui, o funcionamento não difere muito das outras aplicações antivírus existentes já que também permite aqendar verificações, padronizar ações e alertas, configurar a proteção em tempo real (isto é, verificar arquivos e outros recursos sempre forem acessados), excluir da varredura certos arquivos e/ou pastas específicas, etc.. Além disso, a atualização do programa e da lista de ameaças a verificar pode ser feita tanto pelo próprio Security Essencials quanto de forma integrada ao Windows Update. Acho que a Microsoft já está se resguardando de futuros processos já que foi multada na Europa por embutir o Internet Explorer no Windows e não dar oportunidade de escolha ao usuários.

Finalizando, a info Online noticiou que a AV-Test, companhia especializada em testes de segurança de TI, confrontou a versão beta desse novo antivírus com uma bateria de testes de cerca de 3.200 vírus, cavalos de troia e vermes. Segundo a notícia, todos os arquivos infectados foram corretamente identificados e limpos.

Infelizmente, a Microsoft limitou a quantidade de downloads do Beta. Quem acessa a página do Security Essencials recebe a mensagem : "Agradecemos o seu interesse em ingressar no Microsoft® Security Essentials Beta. No momento, não estamos aceitando novos participantes. Volte novamente em uma data posterior para verificar se há disponibilidade para mais participantes."

A expectativa é que o lançamento da versão definitiva se dê antes do lançamento do Windows 7, em outubro. Agora, resta esperar para saber se a Microsoft manterá mesmo gratuita essa versão...

22 de junho de 2009

Comparando e mesclando arquivos fonte

Para quem desenvolve software é muito comum a situação de ter que comparar duas versões de um mesmo fonte para saber quais as alterações que foram introduzidas. Quando se trabalha em equipe, então, a situação pode ser ainda pior já que mais de um desenvolvedor pode estar mexendo num mesmo fonte ao mesmo tempo. Depois que ambos terminam suas alterações, é necessário comparar as diferenças e quase sempre fazer um "merge" para que não se perca nenhuma das modificações.

Utilizamos na ABC71 o Visual Source Safe (VSS) da Microsoft para controle das versões dos fontes e o VSS possui recursos para comparar e mesclar o conteúdo de versões. Mas, como não é a função principal da ferramenta, acaba sendo trabalhoso realizar essas tarefas. Além disso, o VSS é bastante integrado a seu próprio banco de dados, tornando ainda mais trabalhoso comparar arquivos externos.

Há algum tempo venho usando uma ferramenta chamada WinMerge, mais apropriada para essas tarefas. Trata-se de um projeto Open Source desenvolvido em C++ cujo objetivo primário é visualizar as diferenças entre duas versões de um mesmo arquivo e, se desejar, mesclar o conteúdo de ambos, gerando uma terceira versão que contenha todas as alterações desejadas.

O WinMerge mostra cada versão do fonte num painel próprio, cada um dos fontes sincronizado no mesmo ponto, dando destaque às diferenças com cores diferentes. É possível navegar rapidamente entre cada alteração através de botões na barra de ferramentas ou usando teclas de atalho. É permitido jogar uma alteração específica de um fonte ao outro, sem qualquer restrição, isto é, nenhum dos fontes é privilegiado: posso lançar uma alteração da versão A de um fonte para sua versão B e a alteração seguinte lançar da B para a A ou optar por não fazer o lançamento. Obviamente, há uma opção para lançar todas as diferenças de uma vez de um fonte para outro. Entretanto, se você quiser garantir que uma das versões não sofra alterações por engano durante o processo de merge, pode usar o recurso de manter um dos fontes como read-only.

A imagem abaixo mostra a tela principal do WinMerge:
Veja na reprodução que há um painel à esquerda mostrando a distribuição das diferenças ao longo dos fontes e que uma seta aponta no painel o ponto exato que está sendo exibido dos fontes.

A imagem mostra também um outro recurso: os fontes são exibidos com syntax highlighting. Como o WinMerge também é um editor de texto, permitindo introduzir novas alterações junto com o merge, acaba sendo bem prática a edição. A imagem não mostra mas também há um painel na parte de baixo da tela que exibe as linhas do ponto atual que está diferente nos dois fontes.

Mais: o WinMerge pode gerar um lista com os arquivos que estão diferentes numa comparação entre duas pastas, incluindo as subpastas, se quiser. Um duplo clique em um arquivo e a tela exibindo visualmente as diferenças é apresentada.

Para terminar, o WinMerge interage com o Windows Explorer de forma que você pode disparar uma comparação simplesmente selecionando um ou dois arquivos (ou pastas) a partir do próprio Explorer.

Mais Informações
Winmerge.org

5 de junho de 2009

Resolvendo problema no Windows Explorer ao acessar certos arquivos

Já se deparou com uma demora excessiva quando seleciona um arquivo no Windows Explorer? Ou demora para aparecer o menu suspenso quando clica com a direita sobre determinado arquivo ? Ou, pior ainda, sempre que seleciona uma pasta ou arquivo, o Explorer é encerrado com a mensagem de arrepiar a espinha "Windows Explorer encontrou um problema e precisa ser encerrado. Desculpe-nos o inconveniente.".

Todos esses problemas podem ter a mesma causa: erro no Context Menu Handler ou Manipulador de Menu de Contexto. O Windows permite que se estenda suas funcionalidades através da criação de componentes COM que são chamados de Shell Extensions. Há diversos tipos de extensões, sendo muito comuns o próprio Context Menu Handler - para incluir uma opção no menu de contexto do Windows Explorer - e também os Browser Helper Object - para estender as funções do Internet Explorer. Uma lista dos tipos possíveis pode ser encontrada aqui (há uma tabela no meio da página).

O Windows instala por padrão uma série de extensões - algumas importantes para o correto funcionamento do sistema - mas diversos fornecedores de software também o fazem. Por exemplo, o antivírus costuma disponibilizar no menu de contexto de pastas e arquivos uma opção para procurar vírus nessa(s) pasta(s) ou arquivo(s). O mesmo ocorre com softwares de compactação (como o Winzip e o 7Z), tocadores de áudio e vídeo, etc. Um outro exemplo é o Acrobat Reader que tem uma extensão para permitir a leitura de arquivos PDF no Internet Explorer.

Voltando ao assunto do começo do post, o que fazer quando esses comportamentos estranhos começam a pipocar? Uma boa solução é a ferramenta Shell Extension Manager para Windows. Ela mostra as extensões de todos os tipos que estiverem instaladas em seu computador, trazendo informações sobre cada uma, incluindo o fabricante, número da versão e o caminho do programa responsável por executar a extensão. O ShellExView não deixa de fora nem mesmo as extensões da própria Microsoft.

Esta ferramenta permite desativar e reativar facilmente as extensões. Portanto, se ocorrer algum dos erros descritos no primeiro parágrafo, basta desativar a extensão que se suspeita estar causando o problema. Há colunas com o nome e a descrição fornecida por cada fabricante para a sua extensão para facilitar a identificação das suspeitas. Há ainda uma coluna com os tipos de arquivo sobre os quais a extensão pode trabalhar.

Normalmente, são as extensões de terceiros as causadoras de problema. Tanto que o ShellExView emite um aviso quando se tenta desativar uma extensão da própria Microsoft, indicando que aquilo é parte do sistema operacional e que desativá-la pode causar problemas no Windows.

Depois de identificado quem é o real culpado pelo problema, pode-se optar por mantê-lo desativado ou desinstalá-lo. Ainda, se o programa é de uma fonte confiável, pode-se tentar a reinstalação.

Problemas com o Internet Explorer também podem ser resolvidos assim, inibindo o Browser Helper Object que possa impedí-lo de funcionar quando se navega em uma página específica.

29 de maio de 2009

Recuperação de arquivos apagados no Windows

Atire a primeira pedra quem nunca apagou um arquivo importante que não tinha backup! Mesmo um técnico previdente ou o analista mais experiente vez ou outra comete esse erro.

Para essas horas de pânico, arrumei uma ferramenta muita boa chamada Handy Recovery que é capaz de recuperar arquivos que tenham sido removidos da lixeira do Windows. Por ser pequeno, a instalação dele não chegou a comprometer os dados do arquivo que eu queria recuperar. Na verdade, a instalação em si não é necessária pois eu simplesmente copiei o programa de um outro computador.

Segundo a documentação, o Handy Recovery é capaz de restaurar arquivos de qualquer sistema de arquivos do Windows - FAT16, FAT32 ou NTFS. A versão 4 da aplicação tem instalação até mesmo para Windows Vista, mas esta é uma versão comercial, isto é, paga.

A versão gratuita é ainda a 1.0, que possui uma interface de usuário mais simples que a versão paga e disponibiliza menos recursos, mas faz o serviço a que se propõe. Essa interface lembra bastante o Windows Explorer, mostrando num painel à esquerda a lista de pastas e no outro, à direita, a lista de arquivos. Há um filtro que pode ser ativado para que a ferramenta mostre apenas os arquivos deletados; com o filtro desligado, todos os arquivos - incluindo os deletados - são mostrados na lista. Os arquivos e pastas que estão deletados aparecem com um ícone diferente (um xis vermelho) para facilitar a localização.

Para restaurar um arquivo, basta localizá-lo no painel à direita e selecioná-lo. É possível selecionar mais de um arquivo por vez usando o control ou o shift, tal qual o Windows Explorer. Quando há um ou mais arquivos selecionados, o botão Restore é habilitado na barra de ferramentas, permitindo a restauração deles. Ao clicar o botão, o programa exibe uma tela para que você possa selecionar a pasta para onde o(s) arquivo(s) deve(m) ser restaurado(s).

É importante selecionar uma unidade de disco diferente daquela onde o arquivo original está. Como o arquivo está apagado para o Windows, os bytes que ele ocupa no disco são registrados como "livres". Assim, restaurar no mesmo disco pode fazer com que o Windows escreva inadivertidamente sobre esses espaços "livres", danificando o arquivo que se quer restaurar.

A versão paga tem alguns recursos extras interessantes, como a possibilidade de se localizar o arquivo pelo seu nome, extensão ou qualquer máscara usando "*" e "?". Há ainda possibilidade de preview do arquivo a ser restaurado e opção de criar uma imagem completa de um disco e, mais tarde, restaurar arquivos a partir dessa imagem, se for necessário.

22 de maio de 2009

Chrome 2.0 e a guerra dos Browsers

Fazia tempo que não se via uma guerra boa assim ! Desde que a Microsoft se deu conta do potencial da internet e incluiu o Internet Explorer gratuitamente no Windows para recuperar o terreno dominado pelo Netscape que os navegadores de internet (os browsers) não estavam tanto na berlinda.

A Microsoft tinha se acomodado depois de vencer a guerra contra a Netscape e ficou bastante tempo sem atualizar o Internet Explorer. Voltou a se mexer apenas quando foi lançado o Firefox - desde então, lançou duas atualizações do IE, incorporando inovações introduzidas pelo novo concorrente (abas para navegação, por exemplo) e produzindo suas próprias inovações (navegação InPrivate - aquela que permite o usuário navegar sem deixar rastros no computador pois não registra o histórico de navegação nem os cookies).

Agora, junta-se à guerra o Google Chrome. A versão 1 já alardeava ter um motor de scripts mais rápidos que os outros Browsers mas foi oficialmente lançada a versão 2.0 e os engenheiros alegam que conseguiram uma melhoria de 30% na carga e execução de páginas com scripts. Veja no blog do Chrome e a notícia publicada no IDG Now !. Além disso, melhoraram também a página exibida quando se cria uma nova aba vazia. Essa página já mostrava imagens dos sites mais visitados e agora permite que você remova dessa lista aqueles sites que você visitou mas tem vergonha que as outras pessoas saibam.

Outras melhorias já existiam nos concorrentes do Chrome, como o modo tela cheia (full screen) e a possibilidade de armazenar informações que você digitou em formulários na internet, evitando que se tenha que digitá-las todas as vezes que entrar no mesmo site.

Outros fabricantes também anunciaram novas versões, praticamente todos correndo para tornar a carga de páginas mais rápida. Como a Web 2.0 está cada vez mais difundida e depende fortemente do uso de scripts, ter um motor mais estável e rápido para esse recurso acaba sendo imprescindível. Dentre o sites que usam massivamente a Web 2.0 e são bastante populares, cito o Google Docs e GMail.

O Firefox 3.5 (ainda em beta) é um dos que anunciaram melhorias, tanto na carga de páginas com conteúdo multimídia quanto no engine de carga e execução de scripts. Além de incorporar o recurso de navegação InPrivate, essa versão também está preparada para o novo padrão do HTML, a versão 5. Veja aqui notícia sobre o FireFox 3.5 na Info Online.

Por fim, a Apple lançará o Safari 4 cujo foco inovativo é também a melhoria dos engines de renderização das páginas e de execução de scripts.

=> Mais informações
Google Chrome Blog,Google lança versão 2.0 do Chrome, Nova geração de Navegadores

19 de maio de 2009

Descobrindo as funções exportadas numa DLL

Imagine a seguinte situação: você tem uma DLL com várias funções exportadas, quer chamar essas funções a partir de um programa seu em Delphi ou C++ mas não consegue descobrir com que nome essas funções foram exportadas e, portanto, não sabe como mapear as funções no seu código.

Já me vi diversas vezes nessa situação, mesmo porque os módulos do ERP da ABC71 são DLLs e a cada operação em um módulo há uma função na DLL. A principal dificuldade é que em bibliotecas escritas em C++ os nomes das funções podem ter sofrido name mangling - toquei nesse assunto em um post sobre como chamar funções C++ no Delphi.

Pesquisando na Internet, localizei uma ferramenta muito boa para saber os nomes exatos das funções e até descobrir se a função desejada foi mesmo exportada. A ferramenta chama-se Dependency Walker. Reproduzo abaixo um pedaço da tela da aplicação que mostra a lista de funções de uma biblioteca que carreguei:
funções exportadasVeja que a primeira coluna indica se a função foi exportada como C, C++ ou através de um índice. Esse índice é o "ordinal" que aparece na segunda coluna. A última coluna traz o nome da função na forma como está exportado, isto é, trata-se do nome que procuramos para passar à função GetProcAddress (API do Windows) ou mapear no Delphi através da declaração external, como no exemplo abaixo.
function index_vlr (vlr: double; indice: smallint;
dt_base: TDateTime; precisao: byte) : double;cdecl;
external 'TPAUX.DLL' name '@index_vlr$qds16System@TDateTimes';

É importante observar que a ferramenta apenas lista os nomes das funções que estão exportadas na biblioteca e que ela não tem como levantar quantos são os parâmetros esperados nem seus tipos de dado - embora seja possível dar um bom chute quando o nome da função agrega name mangling. Portanto, é preciso conhecer bem a biblioteca ou ter uma documentação precisa para obter a informação sobre os parâmetros e tipo de retorno.

A função principal do Dependency Walker é, na verdade, indicar de quais DLLs a DLL indicada depende, isto é, se ela usa funções de outras DLLs - daí o nome de "navegador de dependências". Então, a ferramenta percorre a DLL, verificando quais dependências estáticas estão registradas. Depois, percorre cada uma das dependências encontradas fazendo a mesma coisa, até percorrer todas as DLLs envolvidas. Ao final, tem-se uma lista completa das bibliotecas necessárias para a DLL inicial funcionar corretamente. Isto é bastante útil para determinar quais bibliotecas devem ser incluídas num pacote de instalação, por exemplo.

Para resolver essa questão completamente, no entanto, pode ser necessário usar a opção "Profile". Nessa opção, você carrega um executável (.EXE) e o Dependency Walker tentará monitorar todas as DLL´s usadas pela aplicação, aí incluídas as cargas dinâmicas de DLL (através da função LoadLibrary).

Mais Informações
Dependency Walker, Chamando funções C++ no Delphi (parte 1 e parte 2).

22 de abril de 2009

Limpeza do Registro do Windows

Instalar novos softwares, atualizar softwares existentes com um nova versão, aplicar patches de atualização do Windows, aplicar security updates de uma série de softwares, etc. É grande a lista das coisas que você faz num computador com Windows que deixa o registry com inconsistências e uma montanha de lixo que só serve para ocupar espaço e deixar mais lenta a máquina.

Estive procurando por um bom programa que ajudasse a manter o registry limpo e há algum tempo venho usando um freeware chamado CCleaner. Ele é capaz de remover as entradas do registry que estão obsoletas, incluindo extensões não usadas de arquivos, controles ActiveX inexistentes, ClassIDs e ProgIDs inválidos, desinstaladores que não existem mais, bibliotecas DLL compatilhadas que não são mais usadas, fontes, arquivos de ajuda, caminhos apontando aplicações que não existem, ícones inválidos de aplicações, atalhos inválidos, etc. É possível selecionar quais dessas buscas serão realizadas e, antes do programa efetivamente remover as entradas, você pode marcar as que quer remover e as que quer manter. Também é dada a oportunidade de se fazer backup - a ser restaurado caso a remoção das entradas cause algum problema.

Na verdade, a função principal do CCleaner é auxiliar na limpeza de disco, removendo caches de softwares (navegadores, java, flash), cookies dos navegadores (há como informar uma lista daqueles que se deseja preservar), arquivos temporários de uma porção de aplicações (incluindo as atualizações do Windows), listas de arquivos abertos recentemente, etc. Há ainda funções avançadas para monitorar e editar a lista de programas que são iniciados junto com o Windows e para incluir pastas de usuário no algorítmo de limpeza – você informa o caminho e quais extensões de arquivo devem ser removidos.

Para quem quer radicalizar, a versão mais recente inclui uma opção que permite apagar também os espaços vazios, isto é, ele não remove só a entrada do aquivo na lista de arquivos do computador mas também os bytes que o compunham, impedindo que se veja rastro dos arquivos.

Mais Informações
Ferramenta CCleaner, registry (registro) do Windows, ambos em inglês.