Aug 28, 2007

Silencio...

Já faz algum tempo que não posto nada... o motivo, como todos já devem saber, é a absoluta falta de tempo, afinal de contas, tenho que me dedicar à obra de Deus, minha esposa, filha e aos jogos (need for speed rules!) ;) Como estou um pouco sem tempo para escrever um post mais interessante vou apenas listar algumas coisas com a qual tenho me envolvido atualmente:
  • Object Mocking em .Net (comecei a utilizar o Rhino.Mocks)
  • OODB, ou seja, Object Oriented Databases (estou estudando o DB4O)
  • Estou escrevendo um artigo sobre um dos novos recursos do Windows Vista (e também do Windows Server 2008), o KTM, ou, gerenciador de transações do Kernel, para uma revista sobre .Net.
  • Lendo alguns livros, principalmente um sobre WCF.
  • Etc.
É mais ou menos isso :) []'s Adriano

Jun 15, 2007

Stream de dados alternativas

Para muitos usuários (e mesmo desenvolvedores) do Windows o conceito de arquivo esta tão sedimentado que muitas vezes melhorias significativas no sistema de arquivos deste sistema operacional (no caso o NTFS) são ignoradas.

Neste post apresento um dos recursos mais desconhecidos, stream alternativas de dados ou ADS (do inglês, Alternate Data Stream).

Para compreendermos este recurso é necessário primeiro definirmos (ou relembrarmos) alguns conceitos:

  • Uma stream de dados nada mais é que um conjunto de bytes arranjados de forma seqüencial.
  • Um arquivo é composto por uma ou mais streams de dados.
  • Streams de dados possuem um nome associado através do qual a mesma é referenciada. A regra básica para formação do nome de streams é: nome-arquivo.ext:nome-stream:tipo-stream
  • O nome da stream pode conter qualquer caracter válido para um nome de arquivo.

Como o Windows não possui meios (tanto no Explorer quanto no console) para detectar / mostrar arquivos que possuem ADS, abaixo listei algumas ferramentas úteis para tal finalidade:

Usando ADSs

A forma mais simples para demonstrarmos este conceito é através do console do Windows. Abra o console (cmd.exe) e digite:

echo teste de streams > teste.txt:dados

Simples assim! O comando acima cria uma stream chamada dados com o conteúdo teste de streams.

Agora você pode conferir que o arquivo teste.txt foi criado mas o comando dir reporta o mesmo com 0 (zero) bytes.

Finalmente, para visualisar o conteúdo da stream digite

more < teste.txt:dados

Abaixo apresento um pequeno programa de exemplo para criar ADSs (note que o mesmo não possui nenhum tratamento especial, ou seja, a forma de acessar data streams alternativas é idêntica à utilizada para acessar a data stream default).

#include "stdio.h"
#include "Windows.h" 
void main(int argc, char *argv[])
{
    HANDLE handle;
    if (argc < 3)
    {
        printf("Nome da stream (formato: arquivo.ext:stream) ou dados nao especificados.\r\nUso: ads.exe nome-stream dados");
        return;
    }
    else    
    {
        printf("\r\nGravando dados em %s", argv[1]);
    }
    
    handle = CreateFile(argv[1], 
                        GENERIC_WRITE, 
                        0, 
                        NULL, 
                        OPEN_ALWAYS, 
                        0, 0);
                        
    if (handle != INVALID_HANDLE_VALUE)
    {
        DWORD numberOfBytesWritten;
        int n = WriteFile(  handle, 
                            argv[2], 
                            strlen(argv[2]), 
                            &numberOfBytesWritten, 
                            NULL);
                            
        printf("\r\n%ld bytes gravados", numberOfBytesWritten);
        
        CloseHandle(handle);
    }
    else
    {
        printf("Não foi possivel criar a stream de dados.");
    }
}
[Editado: Correção de um erros de português]

experimente executar o programa com alguns parâmetros como por exemplo:

ads teste.txt:dados "Teste de streams"

É isso ai.

Até a próxima.

May 15, 2007

Boa leitura

Em se tratando de informática, ou mais especificamente de desenvolvimento de software, existem algumas ótimas publicações que podem ser lidas online (algumas delas podem ser baixadas), e o melhor, gratuitamente. É claro, que leio pelo menos uma dúzia de blogs e outras publicações (sem contar livros :) além destas! Adriano

May 11, 2007

"COM" não esta morto (pelo menos eu espero)

Assim como a morte de linguagens de programação como Cobol, Fortram, Basic, etc. e também a extinção dos programadores já foram anunciadas várias vezes, mas nunca se concretizaram ,graças a Deus, muitos já anunciaram a morte do COM (Component Object Model), uma tecnologia da MS para a componentização de soluções. Infelizmente (para estes "gurus" !) isso não aconteceu (preciso dizer: "eu já sabia que isso não aconteceria mesmo") ? Pelo contrário, se você observar o número de sub-sistemas do Windows Vista implementado usando esta tecnologia você irá notar um aumento razoável no número de componentes neste SO. Como grande parte da minha carreira foi dedicada a esta tecnologia é natural que eu tenha interesse nesta :). Assim, a alguns anos atrás (para ser mais preciso, entre 2002 e 2004), eu escrevi (e disponibilizei gratuitamente) um utilitário (ao qual chamei de Typelib Wizard) que, entre outras coisas, permite fazer Browse do conteúdo de TLBs (quer estas TLBs estejam isoladas ou incluídas como recurso de um executável) mais ou menos nos moldes dos browsers de classes encontrados nos ambientes de desenvolvimento atuais. Se você desenvolve componentes COM (ou se utiliza ambientes tais como ASP (não ASP.NET), VB 6, VBA, Power Builder, etc., em que a chance de estar utilizando componentes COM, mesmo sem saber, é grande) esta ferramenta é de grande utilidade. A algum tempo eu não realizo nenhuma manutenção no projeto mas tenho algumas idéias e seria um prazer adicionar outros desenvolvedores para que os mesmos possam atualizar o repositório de código (que aliás, vou passar para o subversion) e ajudar a manter o projeto "andando". Para saber mais sobre o projeto visite os sites abaixo: Abraços. Adriano

Feb 28, 2007

SerialWizard: Uau! 1649 Downloads (1 Gb!)

Quando comparado com outros aplicativos pode não parecer muito, mas para mim realmente é um número expressivo: o SerialWizard já foi baixado 1649 vezes totalizando 1 Gb ! Se tiver curiosidade para saber como o SerialWizard esta neste momento click aqui.

Descubra mais sobre você !

Hoje (como de costume) estava lendo alguns blogs e me deparei com um site muito interessante; neste site você responde algumas perguntas e ele lhe diz qual "super heroi/vilão" você é! :). Veja os meus resultados:
You are Mr. Freeze
Mr. Freeze
50%
The Joker
48%
Dr. Doom
44%
Apocalypse
41%
Lex Luthor
39%
Magneto
38%
Riddler
37%
Juggernaut
36%
Venom
33%
Mystique
32%
Dark Phoenix
26%
Kingpin
26%
Green Goblin
24%
Catwoman
23%
Two-Face
12%
Poison Ivy
12%
You are cold and you think everyone else should be also, literally.
Click here to take the "Which Super Villain are you?" quiz...

You are Green Lantern
Green Lantern
50%
Iron Man
45%
Robin
37%
Spider-Man
35%
Superman
35%
Catwoman
35%
The Flash
35%
Batman
25%
Wonder Woman
20%
Hulk
20%
Supergirl
15%
Hot-headed. You have strong
will power and a good imagination.
Click here to take the "Which Superhero am I?" quiz...
Neste site você pode descobrir qual SO você é :)
You are Debian Linux. People have difficulty getting to know you. Once you finally open your shell they're apt to love you.
Which OS are You?
Neste site você pode descobrir qual linguagem de programação você é :)
You are Python You are slower than others, but easier to understand. You are a minimalist, who doesn't like clutter.
Which Programming Language are You?

Finalmente qual extensão de arquivo você é!
You are .exe When given proper orders, you execute them flawlessly. You're familiar to most, and useful to all.
Which File Extension are You?