quarta-feira, dezembro 31, 2008

Controlando um LED com um MSP430 - Parte II

Nesta parte vamos ver o software do nosso projeto.

Como ambiente de desenvolvimento vou usar o IAR Embedded Workbench Kickstart, que é fornecido junto com o programador EZ430-F2013 e pode também ser baixado gratuitamente do site da Texas. Esta versão grátis é limitada para gerar programas de até 4KBytes; como o modelo que estamos usando possui somente 2K de Flash, é mais que suficiente.

Existem, é claro, várias maneiras de estruturar o nossa programa. Optei por programar o timer para gerar interrupções a cada 50 milisegundos e colocar toda a lógica dentro do tratamento desta interrupção. Desta forma, na maior parte do tempo o processador estará parado em modo de economia de energia.

Para controlar o botão usei uma variável de tipo byte, onde 1 bit indica o estado do botão na leitura anterior e outro o estado após o debounce. Este segundo bit só é alterado após duas leituras consecutivas iguais.

Uma segunda variável do tipo byte armazena o estado do LED: apagado, aceso continuamente ou piscando. A cada pressionamento do botão o estado muda ciclicamente.

Sem mais delongas, eis o código em C:
#include 

typedef unsigned char byte;

// Bits correspondentes aos pinos de E/S
#define BOTAO 0x01
#define LED 0x40

// Valor para contar 50ms c/ clock de 12KHz
#define TEMPO_50MS 600 // 50ms * 12KHz

// Controle do LED
static enum { APAGADO, ACESO, PISCANDO } ModoLed;

// Controles do estado do botão
#define BOTAO_ANTERIOR 0x01 // este bit indica o estado anterior
#define BOTAO_APERTADO 0x02 // este bit tem o valor c/ "debounce"
static byte ModoBotao;

void main (void)
{
// Desliga Watchdog
WDTCTL = WDTPW + WDTSSEL + WDTHOLD;

// Altera a configuração de clock para ativar o VLOCLK
BCSCTL3 |= LFXT1S1;

// Programa entradas e saídas
P1SEL = 0; // Todos os pinos como I/O
P1DIR = 0xFF & ~BOTAO; // Somente o botão é entrada
P1REN = BOTAO; // Usar resistor no botão
P1OUT = BOTAO; // Resistor é pullup

P2SEL = 0; // Todos os pinos como I/O
P2DIR = 0xFF; // Todos os pinos como saída
P2OUT = 0; // Todos as saídas em zero

// Inicia os nossos controles
ModoBotao = 0;
ModoLed = APAGADO;

// Alimentação já deve estar estável, vamos ligar o DCO
BCSCTL1 = CALBC1_12MHZ;
DCOCTL = CALDCO_12MHZ;

// Programar a interrupção de tempo real p/ cada 50ms
TACCR0 = TEMPO_50MS;
TACTL = TASSEL_1 + MC_1 + TAIE; // ACLK, up mode, interrupt

// O nosso programa principal vai ficar dormindo,
// todo o tratamento será feito na interrupção
_BIS_SR(LPM3_bits + GIE); // Dorme tratando interrupção

// Nuca vai chegar aqui
while (1)
;
}

// Tratamento da interrupção do Timer A
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A_TO(void)
{
switch (TAIV)
{
case 10: // overflow

// Trata o LED
if (ModoLed == PISCANDO)
P2OUT ^= LED;

// Trata o botão
if ((P1IN & BOTAO) == 0)
{
// Botao está apertado
if (ModoBotao & BOTAO_ANTERIOR)
{
if ((ModoBotao & BOTAO_APERTADO) == 0)
{
// Acabamos de detectar o aperto
ModoBotao |= BOTAO_APERTADO;
switch (ModoLed)
{
case APAGADO:
ModoLed = ACESO;
P2OUT |= LED;
break;
case ACESO:
ModoLed = PISCANDO;
break;
case PISCANDO:
ModoLed = APAGADO;
P2OUT &= ~LED;
break;
}
}
}
else
{
// Vamos aguardar a confirmação
ModoBotao |= BOTAO_ANTERIOR;
}
}
else
{
if (ModoBotao & BOTAO_ANTERIOR)
ModoBotao &= ~BOTAO_ANTERIOR; // aguarda confirmar
else
ModoBotao &= ~BOTAO_APERTADO; // confirmado
}
break;

case 2: // CCR1, não utilizado
break;
}
}

Alguns comentários sobre o código:
  • O include msp430.h define as constantes relativas ao microcontrolador. O modelo específico de microcontrolador é definido nas opções do projeto.
  • O MSP430 inicia a execução com o watchdog ativo, portanto é necessário desativá-lo ou desarmá-lo periodicamente.
  • Para o timer estou utilizando o VCLOCK, que é um clock interno lento (12KHz) e de baixo consumo. É somente este clock que vai estar ativo enquanto o processador aguarda uma interrupção. O VCLOCK não é muito preciso; para ter um clock preciso de baixo consumo é necessário colocar um cristal externo de 32KHz.
  • Quando o processador está rodando é usado o DCO, que é um clock interno rápido (12MHz). Como parte do processo de fabricação são gravados na Flash parâmetros de calibração do DCO, desta forma esta clock é razoavelmente preciso.
  • O MSP430 possui uma grande versatilidade nos pinos de entrada e saída digital. A recomendação da Texas é que os pinos não usados sejam programados como saída.
  • O timer no MSP420F2011 é também muito flexível o que, neste caso, pode deixar a programação um pouco complicada. No caso é usado o up mode, no qual o timer conta de 0 até o valor em TACCR0. Ao atingir esta valor, o contador volta a zero e uma interrupção é gerada.
  • A função _BIS_SR permite ligar bits do registrador de status. No caso são ligados os bits que colocam o processador para dormir com economia de energia (Low Power Mode 3) e o bit que permite interrupções. O resultado é que o processador fica parado na instrução seguinte, tratando interrupções. Quando uma interrupção ocorre, o registrador de status é salvo na pilha e o processador entra no modo normal de execução (LPM0). Ao final da interrupção o registrador de status é restaurado da pilha. Para o processamento continuar no programa principal uma interrupção precisaria alterar o registrador de status na pilha antes de retornar, o que não é feito neste programa.
  • A pragma_vetor define que a rotina seguinte é uma rotina de tratamento de interrupção. O compilador cuida de colocar o endereço da rotina no vetor de interrupções e de colocar os preâmbulos e postâmbulos adequados no código.
  • A interrupção do timer pode ser gerada por vários motivos, o registrador TAIV informa qual o motivo. No caso só estamos interessados na interrupção gerada quando o contador dá a volta.
Na próxima parte vamos ver este mesmo código em Assembly; na quarta e última parte veremos como montar o circuito, compilar o código e gravá-lo no microcontrolador.

segunda-feira, dezembro 29, 2008

Controlando um LED com um MSP430 - Parte I

A exemplo do que fiz com o microcontrolador PIC, nesta série vamos ver como controlar um LED desta vez usando um microcontrolador MSP430 da Texas.

O Objetivo

O objetivo desta série é mostrar o projeto do hardware e software de um pequeno dispositivo que ilustra como controlar um LED usando um MSP430. O dispositivo possui um LED e um botão que será usado para controlar o estado do LED (apagado, piscando ou aceso).

O Projeto de hardware

Neste projeto vou usar o MSP430F2011; é simples alterar tanto o hardware como o software para outros modelos.

O MSP430F2011 tem as seguintes vantagens para este projeto:
  • pode operar com alimentação de 1.8 a 3.6V, o que simplifica a operação com baterias e pilhas
  • disponível em encapsulamento DIP de 14 pinos, o que simplifica a montagem
  • possui dois osciladores internos, um que opera até 16 MHz e outro de aproximadamente 12KHz, dispensando a conexão de um cristal ou ressonador
  • memória Flash para o programa, o que simplifica a gravação e regravação
  • gravador e depurador de baixo custo (EZ430-F2013)
O primeiro passo para o projeto de hardware é examinar o datasheet do microcontrolador, que pode ser baixado do site da Texas.

No datasheet verificamos que o clock máximo varia de 6 a 16MHz dependendo da alimentação. Minha opção foi operar com o oscilador interno (DCO) a 12MHz usando uma bateria de 3V (Duracell DL2032 ou equivalente). O positivo da bateria deve ser conectado ao pino 1 (VCC) do MSP430 e o negativo ao pino 14 (VSS).

O pino 10 (RST) deve ser ligado a VCC através de um resistor de 47K. Este pino é responsável pelo reset do microcontrolador e será usado também na programação da Flash.

O LED e o botão são conectados a pinos de entrada/saída de uso geral, que no MASP430F2011 são qualquer um dos pinos de 2 a 9 ou um dos pinos 12 e 13. Escolhi o pino 13 (P2.6) para o LED e o pino 2 (P1.0) para o botão, para facilitar a minha montagem.

O LED, como diz a sigla, é um diodo emissor de luz. Quando submetido a uma tensão direta acima de sua tensão de queda ele emite uma luz com intensidade proporcional à corrente. Existem vários modelos de LEDs, que emitem as mais diversas cores. A tensão de queda é tipicamente de 2V e uma intensidade boa para um LED montado em painel pode ser obtida com uma corrente de 10 mA.

Voltando ao datasheet do MSP430, verificamos que um pino de entrada/saída é capaz de gerar ou absorver uma corrente de até 40mA e tem uma tensão de 0,6V (nível zero) ou VCC-0.6V (nível um). A capacidade de corrente do MSP430 permite ligar um LED diretamente das duas maneiras abaixo:


Na primeira maneira, com o LED ligado entre o pino do MSP430 e VSS, o valor do resistor em série (conforme a lei de Ohm) deve ser

(VCC - 0.6 - 2,0)/0,01 = 40 ohms

Analogamente, com o LED ligando entre o pino do MSP430 e VCC, o valor do resistor deve ser

(VCC - 0.6 - 2,0)/0,01 = 40 ohms

No primeiro caso, o LED acende quando o pino do MSP430 está no nível um, no segundo quando está no nível zero. No meu circuito adotei a primeira maneira com um resistor de 39 ohms (o que gera uma corrente de ligeiramente acima de 10mA).

Para a ligação do botão vamos usar o resistor de pullup interno do MSP430. Desta forma, o botão pode ser ligado diretamente ao VSS e erá lido como nível zero quando fechado e como nível um quando aberto.

Para facilitar a gravação, vamos colocar um conector de programação no circuito. Para a programação com o eZ430-F2013, usando a alimentação do circuito, basta conectar dois pinos (e mais o VSS):

pino 11 TEST
pino 10 RST

O ideal seria usar um conector igual ao do programador, porém ele é difícil de ser encontrado e tem um espaçamento muito pequeno para montagens convencionais. A solução é soldar um cabo no conector e colocar um conector mais comum na outra ponta:


O pino 1 do conector poderia ser usado para alimentar o circuito, neste caso seria preciso desconectar a bateria durante a programação. Para simplificar deixei este pino aberto nas duas pontas.

A lista de componentes para o circuito fica sendo:
  • 1 MSP430F2011 (encapsulamento N)
  • 1 LED
  • 1 Botão de contato momentâneo
  • 1 Resistor de 39 Ohms 1/8 W
  • 1 Resistor de 47 KOhms 1/8 W
  • 1 Bateria de 3V
  • 1 Suporte para a bateria
O circuito completo fica (clique para ampliar):



No próximo post da série vamos ver o software.

sábado, dezembro 27, 2008

Tintim no País dos Sovietes

Os álbuns do Tintim fizeram parte da minha infância. Naquele tempo eram livros caros, de capa dura; li a maioria deles emprestados por um vizinho. Este ano a Cia das Letras lançou dois números inéditos no Brasil: "Tintim no País dos Sovietes" (a primeiro de todos, que comento aqui) e "Tintim e a Alfa-Arte" (o último, que foi lançado incompleto postumamente).


O grande destaque visual das histórias do Tintim sempre foram os detalhes perfeccionistas dos desenhos (por exemplo, li uma vez que Herge mandou seus assistentes fotografarem a porta de um avião que aparecia parcialmente no fundo de um quadrinho do "Vôo 714 para Sydney", para garantir que estivesse correta).

O que eu não sabia é que os primeiros álbuns foram todos revisados e redesenhados. e somente aí ganharam as cores e detalhes que eu conheci. A exceção é - você já deve ter deduzido - justamente o "Tintim no País dos Sovietes". Originalmente publicado em 1929 e 1930 em um suplemente infantil de um jornal belga, foi publicado como álbum brevemente em 1930. Só voltou a ser republicado em 1973, na forma de facsimile.

É este facsimile que a Cia das Letras traduziu. O resultado é um álbum bem mais longo que os demais, com 137 páginas, porém com um traço mais grosseiro em preto-e-branco:


O enredo também é um pouco diferente dos demais álbuns, com críticas muito diretas ao comunismo (a crítica social e política está presente na maioria dos álbuns de Tintim, exceto pelos produzidos durante a ocupação da Bélgica pelos nazistas, porém de uma forma mais refinada).

Apesar do número maior de páginas, fica uma impressão de repetição, com Tintim sendo capturado e fugindo inúmeras vezes.

A grande pergunta é: compensa comprar este álbum? Certamente não para quem ainda não conhece Tintim; neste caso é melhor algum dos outros como "A Ilha Negra" ou "O Cetro de Ottokar". Se você já conhece Tintim, mas ainda não leu todos os álbuns, sugiro completar primeiro o resto da coleção. Para aqueles que já leram todos os demais e anseiam por mais histórias, aí sim recomendo "Tintim no País dos Sovietes".

13/01/09: Revisado o texto.

sexta-feira, dezembro 26, 2008

Livraria Cultura: Nota 10

Eu estava de olho há algum tempo em duas caixas de DVDs, aguardando a entrada de dinheiro (coisas de que é empresário e tem rendimento variável e incerto). Acabei colocando o pedido na manhã do dia 23 de dezembro. Coloquei no mesmo pedido as duas caixas para aproveitar uma promoção de frete grátis para pedidos acima de um certo valor.

Uma das caixas estava com indicação de "entrega foguete" - entrega no mesmo dia para a Grande São Paulo. Normalmente solicito a entrega na empresa, que fica em São Paulo, mas deste vez pedi para entregar em casa, em Osasco. O entregador chegou quase junto comigo, no início da noite.

A outra caixa estava com indicação de postagem em até um dia útil; para o frete expresso é mais um dia útil portando só esperava receber no final da semana. Além disso, na manhã do dia 24 reparei que a disponibilidade tinha sido alterada no site para 10 dias úteis, sinal que o estoque deles tinha acabado.

Imagine a minha surpresa quando a Livraria Cultura ligou para minha casa na tarde do dia 24. Maior ainda quando informaram que o entregador estava na minha rua e não estava achando a casa (a minha casa tem um numeração incoerente com as demais da rua).

É realmente incrível que (a) os prazos de postagem estavam rigorosamente certos, mesmo para um item que estava em final de estoque; (b) apesar de não terem nenhuma obrigação, optaram pela entrega por courier ao invés de Sedex; (c) ao não encontrar a casa o entregador ligou para a livraria e aguardou um retorno.

A Livraria Cultura nem sempre tem os melhores preços, mas o serviço deles sempre me surpreende. Se você deseja comprar um livrou ou DVD, não deixe de dar uma olhada no siste deles (www.livrariacultura.com.br)

terça-feira, dezembro 23, 2008

Resoluções de Ano Novo - Edição 2009

Mais um ano complicado, mais resoluções não cumpridas:
  • Instalar e usar sistema de controle de versão: esta eu delegei. Mesmo assim não aconteceu, mas do começo do ano que vem não passa.
  • Fazer até o fim pelo menos dois dos "programas maravilhosos" que eu invento: nada feito. Vamos ver se nas férias consigo pelo menos começar um deles.
  • Aprender e usar Python: também não saiu do zero.
  • Trabalhar para diminuir as listas de pendências pessoais e profissionais, evitando criar novas pendências: falhou. A lista de pendências disparou no segundo semestres e somente agora parece estar baixando. Estou tentando delegar mais, mas isto não resolveu muito (ver o primeiro item).
  • Não trabalhar mais que 50 horas por semana: também falhou. Com a lista de pendências saindo do controle, acabei tentando compensar trabalhando feito louco. Mudanças no horário do resto da família também contribuiu para isto.
  • Melhorar a regularidade de posts no blog: sucesso! Dei uma rateada no final do primeiro semestre mas o segundo foi muito produtivo.
As novas resoluções para 2009
  • Melhorar o meu foco e tentar fazer menos coisas ao mesmo tempo.
  • Repensar minha forma de trabalho, para colocar manter as pendências sob controle e reduzir o nível de trabalho para algo razoável.
  • Usar com regularidade um sistema de controle de versões.
  • Fazer até o fim pelo menos um dos meus "projetos maravilhosos".
  • Lançar o meu segundo blog (que não vai ter nada a ver com tecnologia).
  • Chegar ao Local Finals do Google Code Jam.

Um Feliz Natal a ambos os meus leitores!

domingo, dezembro 21, 2008

Alta Fidelidade nos Anos 50

Antes um aviso: as imagens que eu vou mostrar são de bem antes de eu nascer, apesar delas terem tido alguma influência na minha infância.

O termo "Alta Fidelidade" (ou Hi-Fi) é possivelmente desconhecido da maioria de vocês. Mais estranho ainda deve ser uma revista de Áudio cheia de fórmulas e circuitos, voltada para os hobbistas montarem os seus próprios aparelhos de áudio.


A imagem acima é de uma coletânea de artigos da revista Audio Engineering de 1950 a 1952. O meu pai tem também a terceira edição, com artigos de 1952 a 1955 (de onde tirei o Concrete Monster).

Ulta-Linear Williamson Amplifier


Um bom sistema de áudio de Alta Fidelidade precisa ter um bom amplificador de potência, e o Williamson era uma das principais referências. O meu pai tinha dois destes aparelhos, cada um com 20W RMS de potência, um montado por ele aqui no Brasil e outro comprado nos Estados Unidos. Estamos falando, é claro, de um a,plificador mono aural. Um dos meus primeiros contatos com eletrônica foi ajudando o meu pai a montar um kit de pré-amplificador estéreo (já com transistores) para ser ligado aos dois Williamsons. Foi com estes amplificadores que eu escutava discos na minha adolescência.

Caixas Acústicas

Outra diversão dos hobbistas era a construção de suas próprias caixas acústicas e vários artigos traziam fórmulas e ábacos para o projeto. Ábacos eram gráficos que eram usados facilitar os cálculos numa época em os engenheiros tinham que se virar com réguas de cálculo e tábuas de logaritmos.

As caixas que tenho na minha sala são de construção própria, na época do meu casamento e estão se aproximando de duas décadas e meia de bons serviços:


Limitações orçamentárias impediram a inclusão de um alto-falante de médios; o mesmo ocorreu nas demais caixas que o meu pai montou. Por outro lado, as minhas caixas ganharam o melhor acabamento, cortesia do marceneiro que fez os armários embutidos da minha primeira casa.

Até o final do século passado, um bom alto-falante estava associado ao tamanho. Alguns hobbistas se deixavam levar pelo entusiasmo, como o modelo abaixo que servia também de estante:

Nada ganha, entretanto, do Concrete Monster da figura abaixo. Infelizmente a minha mãe e a minha esposa não deixaram fazer um destes.


22/12/08 19:10: Corrigidos erros grosseiros de digitação.

quinta-feira, dezembro 11, 2008

LightScribe - Parte 3: O SDK

Nas partes anteriores (aqui e aqui), descrevi a tecnologia LightScribe e os aplicativos disponíveis para a impressão de rótulos em CD e DVD usando o LightScribe. Nesta parte final vamos ver como fazer os nossos próprios aplicativos (ou acrescentar a impressão em um aplicativo já existente).

O SDK

O Kit de Desenvolvimento (SDK) também está disponível no site oficial. Como vou descrever adiande, dá até para desenvolver sem ele.

O SDK instala no seu micro:
  • A documentação (fraca) do SDK
  • Um arquivo de include (LSPrintLauncher.h) e uma library (LSPrintLauncher.lib) para usar com C ou C++
  • Um exemplo em C++, utilizando a MFC
Como É Feita A Impressão

Vou matar de cara o suspense e mostrar o cadaver atrás da cortina:
  • O seu programa cria a imagem a imprimir em um arquivo (bmp, png, jpg).
  • Você chama a função launchPrintOptions que está em LSPrintLauncher.dll.
  • launchPrintOptions dispara LSPrintDialog.exe que apresenta o diálogo de impressão.
  • Se o usuário confirmar a impressão, LSPrintDialog.exe dispara LSPrintingDialog.exe que faz a impressão.
Onde estão LSPrintLauncher.dll, LSPrintDialog.exe e LSPrintingDialog.exe? No LightScribe System Software (LSS) que eu mencionei na segunda parte.

Três Formas de Imprimir

Entendido o mecanismo de impressão, dá para perceber que temos três maneiras de imprimir:
  • Linkar LSPrintLauncher.lib e chamar diretamente a função launchPrintOptions. Isto é o mais simples mas pressupõe que (a) a sua linguagem permite linkar direto com uma library (b) a DLL e os .exes do LSS estão no path.
  • Linkar dinamicamente e LSPrintLauncher.lib e chamar indiretamente a função launchPrintOptions. A API do Windows possui as funções para carregar na memória uma DLL e localizar uma rotina dentro dela pelo nome. É "bruxaria nível 2", mas tem a vantagem de não precisar linkar a lib e poder localizar a DLL em tempo de execução (o modo oficial é olhando no registry em HKLM\SOFTWARE\LightScribe\LSPrintLauncher).
  • Chamar diretamente os executáveis. Isto pode criar problemas de compatibilidade se algum dia os nomes ou parâmetros dos executáveis forem alterados, mas dá para fazer até de arquivo batch.
Detalhes e Mais Detalhes

Obviamente estou resumindo bem a coisa. As 16 páginas da documentação do SDK tem um pouco mais de detalhes, principalmente os parâmetros das funções e dos executáveis. O parâmetro mais importante é o nome do arquivo com a imagem.

Um ponto importante é que os programas são rodados separados da sua aplicação. Isto pode criar o problema de saber quando o arquivo pode ser apagado. Uma opção interessante é deixar o programa de impressão apagá-lo quando não precisar mais dele, neste caso é recomendado criar o arquivo com um nome único no diretório temporário do usuário.

Além de launchPrintOptions, a DLL possui as rotinas launchPrint (que dispara a impressão) e haveLSDrive que informa se existe uma unidade LightSribe no micro.

domingo, dezembro 07, 2008

LightScribe - Parte 2: O Software

Nesta segunda parte vamos ver algumas opções de software para gravação de rótulos através da tecnologia LightScribe.

LightScribe System Software (LSS)

Esta é parte do software que comanda a unidade e fornece uma API para que as aplicações façam a gravação. É, portanto, um software obrigatório.

No caso do meu notebook, este software veio pré-instalado. Já o desktop foi objeto de um downgrade (troca do Vista por XP) e ficou sem ele. Não tem problema, basta baixar do site oficial:

http://www.lightscribe.com/downloadsection/Windows/index.aspx?id=810

(Esta é a versão Windows, tem também para Linux e Mac).

Este software instala o LightScribe Control Panel; por default o software é executado automaticamente na iniciação do Windows (como gravar rótulos é uma atividade pouco frequente, recomendo desligar esta opção).

LightScribe Simple Labeler

Também disponível gratuitamente no site oficial, este programa é, como o nome sugere, muito simples.

O rótulo gerado é bastante simples e com layout inflexível: duas linhas de texto (uma superior e uma inferior) e duas bordas gráficas nas laterais:


A interface é um daqueles assistentes que praticamente insultam a inteligência do operador. A primeira tela pede para colocar o disco virado para baixo na unidade (esta tela pode ser desligada). A segunda tela é onde você informa as duas linhas de texto, o fonte (você não pode escolher o tamanho) a imagem da borda (dentre 8 opções), a unidade de disco LightScribe e a quantidade de cópias. A terceira tela mostra um preview da etiqueta (em branco e preto), permitindo disparar a gravação ou voltar atrás.

LightScribe Template Labeler

Mais um software gratuito disponível no site oficial, este é um software realmente útil, capaz de suprir as necessidades da maioria dos usuários.

A interface também e do tipo assistente (e também tem um primeira tela opcional inútil), mas a montagem da imagem é bem mais flexível: você escolhe um modelo (template) e edita o conteúdo dos itens do template (imagem e textos). Na edição dos textos é possível escolher fonte, tamanho, efeitos (negrito, sublinhado, itálico) e o alinhamento. O programa vem com 15 templates e tem vários outros para download no site oficial.

Outros Programas

Como veremos na terceira parte, a interface de programação do LSS é muito simples. Não é surpresa, portanto, que várias empresas responsáveis por programas populares de gravação de CD e DVD suportem a impressão de rótulos via LightScribe (por exemplo, Nero, Roxio e Sonic).

No caso do meu notebook, vem instalado o CyberLink DVD Suite, que inclui o LabelPrint. A função de gravação de rótulos LightScribe no LabelPrint é ao mesmo tempo simples e flexível. Existem alguns modelos (layouts) prontos e você pode acrescentar campos de texto (tanto retangular como curvo) e figuras.


A não ser que você queira fazer algum muito especial ou algo mais automático, os softwares disponíveis no site oficial serão mais que suficiente. Caso contrário, você pode fazer o seu próprio software - é o que veremos na terceira e última parte.

sábado, dezembro 06, 2008

LightScribe - Parte 1: A Tecnologia

O meu notebook traz em destaque a indicação de gravador de DVD com LightScribe. Por uma parcial coincidência, o meu novo micro no trabalho também tem um gravador com LightScribe (ele também é HP). Mas o que é LightScribe? Nesta pequena série de posts vou falar o que é, as aplicações (grátis) para uso e no SDK para quem quiser usar este recurso nos seus próprios programas.

O Que É LightScribe?

Sucintamente, LightScribe é uma tecnologia para usar o laser do gravador de CD ou DVD para desenhar figuras (ou texto) na parte superior de midias especiais. Isto permite rotular o CD ou DVD diretamente no gravador.

A Tecnologia

A tecnologia foi inventada por um engenheiro da HP e é objeto de uma patente.

A midia recebe na parte superior uma cobertura com um verniz que muda de cor quanto atingido pelo laser do gravador. Ela possui também uma marcação no anel central.

Uma unidade de gravação LightScribe utiliza um laser e mecanismo comuns, porém é capaz de usar a marcação na midia para obter precisão no posicionamento no sentido de rotação do disco (que não é crítico quando estamos escrevendo dados mas é vital para desenhar a figura).

Sob controle do software adequado, o laser é acionado nos momentos apropriados para mudar a cor de pontos específicos, desenhando assim a figura. Uma vez que as unidades tem somente um laser, é necessário virar o disco (colocar a face superior para baixo) para gravar o desenho.

A gravação é monocromática. Inicialmente estavam disponíveis somente discos com uma cor dourada que muda para um cinza escuro quando atingido pelo laser. Atualmente estão disponíveis outras cores (porém continua sendo uma cor única). Uma vez alterada a cor de um ponto, não existe volta (isto é, não existem discos apagáveis). É possível acrescentar desenhos (escurecendo pontos) mas não é possível substituir um desenho já gravado.

Cuidados e Desvantagens

É necessário alguns cuidados para evitar que a gravação se apage, porém são os cuidados já recomendados para o bom armazenamento de midias: evitar calor e humidade excessivos e a incidência contínua de luz direta. Também não é recomendada a manipulação contínua da midia, pois resídios de produtos químicos (como loções e shampoos) podem afetar a gravação.

O processo de gravação é relativamente lento, podendo chegar a 20 minutos (o que é mais demorado que gravar o conteúdo). Não é algo para ser usado em produção em série.

Para quem mora aqui no Brasil, a principal desvantagem é a midia especial, que não é fácil de encontrar e custa mais caro. Procurando na internet, achei para venda na Tecnomidia (http://www.tecnomidia.com.br). Para meus testes comprei:
  • CD-R Multilaser: 52x, veio num pacote de 10 CDs (embrulhado em celofane). Dentro do pacote, cada CD vem em um envelope branco com janela transparente.
  • DVD+R TDK: 16x, veio uma embalagem de pino (DVDs sem embalagem) dentro de uma caixa bonita.

Para ver as opções de midia LightScribe na Tecnomidia, digite "LightScribe" no box "Localize Produtos", para ver os detalhes do produto é preciso clicar em Comprar. No momento a maioria das opções está fora de estoque. A compra pela internet ocorreu sem problemas, porém devo alertar que a Tecnomidia tem uma política comercial justa mas pouco usual: o preço varia conforme a forma de pagamento (cartão de crédito, boleto, depósito, etc). Os preços apresentados podem sofret um pequeno acréscimo após a seleção da forma de pagamento. Além disso, o preço por unidade cai à medida que a quantidade comprada aumenta.

Na época em que comprei (out/08), com pagamento com cartão de crédito, saiu R$1,53 por CD e R$2,45 por DVD (lembrar que foram 10 unidades de cada). É bem mais caro que CDs e DVDs normais, mas não chega a ser proibitivo para alguns CDs ou DVDs especiais que você queira dar de presente. Os preços já subiram, efeito da "marolinha".

Links

O site oficial da tecnologia é http://www.lightscribe.com/
Mais alguns detalhes podem ser encontrados na Wikipedia http://en.wikipedia.org/wiki/Lightscribe


No próximo post vou falar sobre as opções de software.

segunda-feira, novembro 24, 2008

Google Code Jam 2008 - Temos um Vencedor

A final da competição foi no dia 14 de Novembro, na sede da Google, com apresença dos 97 melhores colocados (devia ser 100, acho que tiveram 3 W.O.s, incluíndo aí os dois "brazucas").

O vencedor foi Tiancheng Lou da China, que competiu com a alcunha ACRush. A relação dos vencedores está em http://code.google.com/codejam/results.html.

domingo, novembro 23, 2008

Porta Puzzle Grow

Um problema para os fãs de quebra cabeça é como proteger o trabalho incacabado. Já me aconteceu de chegar em casa e descobrir que um quebra cabeça que eu vinha montando a dias tinha sido "carinhosamente" desmontado e guardado na caixa (me colocando de volta à estaca zero). A Grow comercializa um Porta Puzzle, que se propõe a ser o fim deste problema.


O Porta Puzzle é oferecido em dois tamanhos, um para quebra cabeças de até 1500 peças e outro para quebra cabeças de até 3000 peças. O preço está na faixa de R$50 a R$70. Como sou exagerado, comprei o maior (o que deu um pouco de trabalho, pois a maioria das lojas que eu consultei só tinha o menor).

Preparação

O porta puzzle vem dobrado na caixa. Uma consequência é que ficam vincos que atrapalham a montagem do quebra cabeça (estes vincos devem sumir como o uso).

O primeiro passo é inflar o tubo, o que deu bastante trabalho. A válvula é daquele tipo que tem que ser pressionado de um certo jeito para deixar passar o ar (as instruções não mencionam isto). Além disto, a tampa impede colocar diretamente uma bomba de bicicleta, o que me obrigou a exercitar os pulmões.

O modelo grande é realmente grande, com uma área de montagem de 87 x 135 cm. Embora seja de plástico, a superfície de montagem imita feltro (o que tem o efeito colaterar de grudar o pó de papelão que acompanha os quebra cabeças novos).

Teste de Uso

A foto na caixa é muito bonita, mas não é bem assim que costumo montar um quebra cabeça.


A foto abaixo é uma situação mais real de um quebra cabeça no início de montagem. No caso o quebra cabeça é de 1000 peças, que parece pequeno na área de montagem. As instruções recomendam não deixar peças soltas. Um aperfeiçoamento seria o Porta Puzzle tem um ou mais bolsos para as peças, na falta deles usei saquinhos Ziploc.


A foto abaixo é o resultado após fechar o Porta Puzzle (enrolando da direção do tubo inflado para a borda), transportá-lo um pouco (sempre na horizontal) e depois abrí-lo novamente.

Embora não tenha sido perfeito, foi bem satisfatório. Resultados melhores devem ser obtidos com o quebra cabeça mais avançado e fechando e abrindo com mais cuidado.

Conclusão

O Porta Puzzle funciona adequadamente e certamente será apreciado por quem costuma montar quebra cabeças. É uma boa sugestão para presente de Natal (possivelmente acompanhado de um quebra cabeça).

sábado, novembro 22, 2008

Jogo do Mês(e Grátis) - Mad Race

Mad Race é um jogo de corrida, destes que você vê imagem de longe e o seu carro parece de brinquedo.


O jogo é muito viciante. Os gráficos são muito bons (a imagem acima está reduzida, clique na abaixo para ver uma imagem mais realista) e a música dá a tensão certa, sem ser cansativa.


Tem várias pistas e alguns modelos de carros. Os carros podem ser equipados com uma arma frontal e uma arma traseira (porque as concessionárias não oferecem estes acessórios?):


Para mudar carro ou acrescentar armas você precisa de pontos, que são ganhos vencendo corrida, pegando powerup ou destruindo os carros dos oponentes (você perde pontos quando o seu carro é destruído).

Existem dois modos de jogo: single race e tournament. No segundo modo você só avança para a pista seguinte após vencer a corrida na atual. No início sofri muito; foi preciso paciência para ir juntando pontos e melhorando o carro até a primeira vitória. A partir daí foi uma sequência grande de vitórias.

O único ponto negativo é que só dá para dirigir pelo teclado e as teclas são fixas. Depois de algum tempo os dedos ficam doendo!

O melhor de tudo é que é gratis, basta baixar de http://www.gametop.com/category/downloadable.html. Tem outros jogos grátis no mesmo site, mas ainda não experimentei.

terça-feira, novembro 18, 2008

DVD: O Enigma de Andromeda

Inspirado pelo meu post sobre a morte de Michael Crichton, comprei o DVD O Enigma de Andromeda.

É uma história de ficção científica: um satélite cai em uma cidadezinha e todos os habitantes morrem, menos um velho e uma criança. Um grupo de cientistas precisa decifrar o mistério e deter a ameaça.

Ao contrário de outras adaptações dos livros de Crichton, esta não tem nenhum ator famoso. O único nome conhecido nos créditos é o diretor, Robert Wise, que se notabilizou por dirigir filmes dos mais diversos gêneros (ganhou um Oscar pela Noviça Rebelde, dirigiu O Dia Que a Terra Parou e o primeiro filme de Star Trek).

O filme mistura a naração com alguns trechos em flashback e em alguns momentos a tela é dividida em partes. A edição "nervosa" e a trilha sonora criam um ambiente intrigante e cheio de suspense.


Existe uma preocupação em dar um tom de veracidade à história e a tecnologia apresentada é compatível com a época de realização do filme (1971). Não se assustem, portanto, em ver teletipos e gráficos do nível do Apple ][ (que, é claro, não existia ainda na época do filme).


Algumas pessoas talvez não gostem do jeito meio seco como as informações são passadas, que podem fazer com que se chegue ao final sem entender o que se passou.

Concluindo, é um filme muito interessante para se ver. Encontrei para venda em várias lojas, por preços entre R$28 e R$40.

domingo, novembro 16, 2008

Gabinete para HD Exteno Leadership

Na minha aventura de trocar o HD do meu micro (aqui e aqui), acabou sobrando um HD SATA de 250GBytes. Minha idéia era aproveitar este HD em um gabinete externo conectado por USB, o que finalmente estou fazendo. Sem pesquisar muito, comprei um gabinete da Leadership:



Dentro da simpática caixinha tem um monte de coisas. Além do gabine e da fonte, são fornecidos:
  • um cabo USB
  • um suporte para manter a caixa de pé na mesa
  • um adaptador SATA / ESATA e um cabo ESATA, para ligar o HD externo ao micro via SATA ao invés de USB (o que deve fornecer maior velocidade)
  • um manualzinho
  • um mini-CD com o driver para Windows 98
  • parafusos para fixar o HD
  • uma chave de parafuso



Abrindo o gabinete, descobre-se que o interior é bastante simples:



A montagem não exige prática nem habilidade. É preciso conectar ao HD os cabos de alimentação e SATA; os conectores são daqueles que não permitem conectar errado. Em seguida o HD deve ser aparafusado à placa. Um problema com o meu HD é que o posicionamento dos conectores atrapalha colocar o HD na posição correta.


Na traseira do gabinete temos os conectores USB, ESATA e alimentação, bem como a chave liga e desliga. Na frente tem um LED azul para indicar que está ligado. A coisa só não foi mais simples porque a fonte veio com defeito. Precisei voltar na loja para eles trocarem.


O manual, além de sucinto, tem um texto no mínimo estranho. Embora em alguns trechos a tradução esteja boa, em outras está em "protuguès". Abaixo uma pequena "pérola" do FAQ:

Vamos ver agora como se comporta no dia a dia.

sábado, novembro 15, 2008

Livro do Mês: The Sign of Four / O Signo dos Quatro

Como comentei recentemente, baixei um audibook grátis do livro The Sign of Four (também conhecido como The Sign of The Four, veja na wikipedia). A qualidade da história e da leitura me cativou de tal forma que eu passei a ouví-la toda vez que estava andando de carro.

Embora quase todos saibam que é Sherlock Holmes, a maioria nunca leu um dos livros. A relação oficial é composta por quatro livros longos e cinco coletâneas de histórias curtas. The Sign of Four é a segunda história com Sherlock Holmes escrita por Conan Doyle. O livro tem alguns elementos clássicos, como as deduções com relação ao Dr Watson logo no capítulo inicial, o uso dos "irregulares da rua Baker") e alguns personagens mais para o lado do fantástico. A história começa com Holmes e Watson acompanhando a cliente a um encontro onde são prometidas informações sobre o pai dela desaparecido há 10 anos. Não demora muito para se depararem com um homicídio. Holmes resolve o mistério antes da metade do livro, o que se segue é a procura do crimonoso (que culmina com uma perseguição de barcos a alta velocidade no Tâmisa) e a inevitável narrativa do criminoso (que neste caso é bem mais curta que em Um Estudo em Vermelho e Vale do Terror).

De quebra, o livro traz o famoso uso de drogas por Holmes para se estimular na falta de um mistério para investigar. E também um interesse romântico para Watson (que parece ser desconhecido pelos que enxergam algo mais na amizade entre os dois).

O texto em inglês pode ser baixado gratuitamente do Projeto Gutenberg, em http://www.gutenberg.org/etext/2097. Lá também pode ser encontrado o audio book, em http://www.gutenberg.org/dirs/etext05/shsof163-index.htm.

Quem preferir ler em inglês não vai precisar gastar muito. Como o texto já está no domínio público, as publicações nacionais não são caras. Tenho em casa uma versão da Melhoramentos, que custa atualmente na Livraria Cultura menos de R$25.

A Melhoramentos tem também um edição de bolso, ainda mais barata (abaixo de R$15). Em uma folheada rápida a tradução me pareceu boa. Uma curiosidade é que no início do livro Sherlock em sua depressão toca o violino ao invés de usar drogas. Provavelmente um pequena censura para o livro ser apropriado para crianças.

O Signo dos Quatro não é um livro muito longo. O texo da edição em português mostrada acima ocupa cerca de 90 páginas (tamanho meio A4).

Resumindo, The Sign of Four é uma boa pedida para quem quer começar a ler Sherlock Holmes.

sexta-feira, novembro 14, 2008

segunda-feira, novembro 10, 2008

Organizando Cabos para Guardar

Espero que este post não seja óbvio demais, mas vamos lá. Como muitos, eu me irrito na hora de organizar cabos antes de guardá-los. Se a gente os deixa soltos, eles se enrroscam como se fossem minhocas e resistem tenazmente às tentativas de retirar.


As alternativas mais comuns (ilustradas acima) não são plenamente satisfatórias:
  • Amarrar o cabo com ele mesmo aumenta o risco de danificá-lo.
  • Usar um arame (como costumam vir do fabricante) não é prático se o cabo for manipulado com muita frequência.
  • Os elásticos quebram se são mexidos com muita frequência e se decompõem em uma terrível "meleca" se forem esquecidos muito tempo.
A solução que considero melhor é usar uma tira de velcro. Por uma destas coisas que só os "contadores de feijão" podem explicar, a fonte do meu celular vagabundo vem com uma mas a do meu notebook (que custou umas quinze vezes mais) não.


Felizmente, não é muito difícil de achar tiras de velcro à venda. Para não perdê-las (afinal, não são assim tão baratas), o melhor é prender uma das pontas de forma "definitiva" no cabo, o que pode ser facilmente ser feita com uma cola, de preferência uma cola de contato (como as duas acima).

Para quem não conhece, deve-se aplicar as colas de contato sobre as superfícies que serão coladas (devidamente limpas, secas, etc), aguardar a cola secar e depois juntar as duas partes (com cuidado pois a colagem é "instantânea"). Maiores detalhes devem estar presentes na embalagem da cola ; )

O resultado final é a fita de velcro presa "definitivamente" ao cabo, ficando sempre disponível para amará-lo na hora de guardar:

domingo, novembro 09, 2008

Seminario C&C++ para Sistemas Embarcados

Tive o prazer de apresentar ontem uma palestra no seminário "C&C++ para Sistemas Embarcados", promovido pela Tempo Real Eventos a partir das idéias do Grupo C&C++ Brasil e do Portal Embarcados.

O primeiro ponto a destacar é o tamanho do encontro. Foram 370 inscritos, um salto imenso em relação à dúzia de entusiastas de C&C++ que se reuniram em uma mesa do Outback do Shopping Eldoradohá menos de três anos. Isto mostra como as coisas são possíveis quando se vai à luta, algo que Alberto Fabiano, Pedro Lamarão e Diego Sueiro mostraram ser mais que capazes.

Outro destaque foi a presença de palestrantes de outros estados, lembrando que existem vários polos de tecnologia fora do eixo Rio-São Paulo.

Apesar de certamente não ser isento, me arrisco a fazer alguns comentários sobre as palestras apresentadas.

Técnicas de Programação em C para Sistemas Embarcados

Esta foi a minha palestra. Como estava muito preocupado em não estourar o tempo (o que já ocorreu em minhas apresentações anteriores), acabei errando para o outro lado. Em retrospecto eu deveria ter aprofundado mais em alguns pontos, aproveitando melhor o tempo disponível. Felizmente fui salvo pelas perguntas da platéia, que ocuparam uma boa parte do tempo que sobrou.

Utilização de C++ em Microcontroladores

Palestra de Luiz Barros, de Pernambuco. Uma análise muito boa dos mitos e verdades em torno do uso de C++ no desenvolvimento embarcado, exemplificada com código real do Luiz.

Explorando os 16 bits da Microchip

Esta palestra foi apresentada por Daniel Rodrigues, que atua na área de treinamentos e suporte da LabTools. Como o título sugere, foi uma palestra mais voltada para hardware e focada em uma família específica. Em alguns momentos, roçou perigosamente com a propaganda explícita da Microchip. As demostrações no final da palestra mostraram o imenso potencial dos microcontroladores em aplicações envolvendo display gráfico sensível ao toque e comunicação via ethernet. Foi uma palestra interessante, mas ficou aquele desejo que ela tivesse centrado mais nos aspectos de programação.

Otimização de Código C para Sistemas Embarcados

Palestra apresentada por Fábio Pereira da ScTec de Santa Catarina, e para mim o ponto alto do seminário. Tenho um livro do Fábio (Microcontroladores PIC - Programando em C) que havia me surpreendido com a ambundância de informações importantes. A base da palestra foi a constatação de que, no mundo limitado dos microcontroladores, diferenças pequenas no código C podem trazer diferenças significativas no código gerado e estas diferenças nem sempre são intuitivas. A partir disto o Fábio apresentou uma boa quantidade de exemplos, todos meticulosamente testados. Mais importante que os exemplos específicos, ele mostrou o caminho das pedras: como identificar os pontos críticos e analisá-los.

Desenvolvimento Embedded no Mundo da eLua

Dado Sutter, da PUC-RJ apresentou o projeto do port da linguagem Lua para sistemas embarcados. A linguagem Lua é um belo caso de sucesso do desenvolvimento "brazuca": criada na PUC-RJ chamou a atenção da comunidade internacional e hoje aparece em vários produtos comerciais (como o World of Warcraft e o Photoshop Lightroom da Adobe). A eLua parece destinada a seguir estes passos. O objetivo da eLua é não apenas colocar a linguagem Lua rodando em sistema embarcados, mas também definir e implementar um conjunto de módulos complementares que permitam que o desenvolvimento para sistemas embarcados possa ser feito em um nível mais alto de abstração, facilitando a migração de aplicações entre hardwares diferentes. Infelizmente, por limitação de tempo, acabou sendo cortada a demonstração prática.

Concluindo...

Ontem foi um dia bastante divertido e excitante. Os interessados no assunto, que tiveram ou não a oportunidade de assistir ao seminário, ficam novamente convidados a visitar os sites abaixo onde em breve devem estar links para as palestras (acredito que inclusive com vídeo).

http://www.ccppbrasil.org
http://groups.google.com/group/ccppbrasil
http://www.embarcados.com.br/

quinta-feira, novembro 06, 2008

Michael Crichton (1942-2008)

O falecimento de Michael Crichton ontem me pegou de surpresa. Mestre do "tecno-thriller", Crichton é o autor de uma série de livros que eu gostei muito, embora os mais recentes (como State of Fear) não tenham me entusiasmado tanto como os mais antigos.

Uma lista de filmes para assistir em memória dele:
  • O Enigma de Andrômeda
  • Congo (médio)
  • Coma (nunca vi este)
  • Parque dos Dinossauros (este todos conhecem, assim como as continuações)
  • Esfera (não é grande coisa, mas os atores são famosos)
  • Sol Nascente (excelente)
  • Assedio Sexual (li o livro mas não vi o filme)
Ou simplesmente veja um capítulo de ER.

Uma curiosidade: somente hoje, olhando a entrada na Wikipedia, descobri que ele escreveu (sob pseudônimo) um livro que eu li na adolescencia: Binary. Infelizmente este livro está disponível somente usado.

quarta-feira, novembro 05, 2008

A Urna Eletrônica Brasileira é Segura?

Com as recentes eleições no Brasil e nos EUA, é natural que os brasileiros estejam batendo no peito de orgulho das nossas urnas eletrônicas, principalmente quando comparadas com as formas de registro de voto nos EUA.

Embora eu esteja plenamente satisfeito e confiante com o nosso sistema, é preciso registrar algumas preocupações manifestadas tanto no Brasil como no exterior.

As Limitações da Urna Brasileira

As críticas à urna brasileira costumam se focar em duas limitações do sistema:
  • Inexistência de registro físico dos votos para conferência. Os votos são registrados apenas eletronicamente, impedindo uma recontagem. Já foram feitos testes em eleições passadas com urnas que possuiam uma impressora para registrar o voto. O voto impresso era apresentado ao eleitor para conferência antes de ser guardado. Este processo foi considerado muito caro, complicado e sujeito a falhas mecânicas.
  • Identificação do eleitor pelo mesmo equipamento que registra o voto. O terminal onde o mesário digita o número do título está ligado diretamente a urna, tornando possível (na teoria) a amarração do voto ao eleitor.
Mas o Fonte do Software Não É Aberto?

Uma das vantagens da urna eletrônica brasileira é que o projeto está aberto para consulta e verificação pelos partidos. Entretanto isto não é suficiente.

Uma primeira precaução é o controle rígido das versões, para garantir que o software nas urnas corresponde ao fonte "aprovado". Nos EUA, onde em alguns locais as eleições são agressivamente tercerizadas, já ocorreu de uma empresa reconhecer que foram usadas máquinas com um software diferente do que tinha sido homologado. Não conheço os detalhes, mas até onde sei a Justiça Eleitoral é extremamente cuidadosa neste ponto.

Mas isto não basta. Existe uma famosa apresentação de Ken Thompson ("pai" do Unix), onde ele mostra como um programa pode ser "pervertido" sem deixar traços nos fontes:
  • Suponhamos que desejamos perverter o programa A. Se fizermos a alteração nos seus fontes, quem tiver acesso aos fontes poderá detectar a perversão.
  • Entretanto, o programa A é compilado por um compilador C. Se tivermos acesso aos fontes de C, podemos gera um compilador C' que detecta quando A é compilado e altera o código gerado para executar A' contendo a "malvadeza".
  • A alteração pode ainda ser detectada olhando o fonte de C'. Entetanto, o compilador é compilado por ele mesmo. Geramos então um compilador C" que detecta não somente quando A é compilado, mas tambem quando C é compilado (alterando o código de forma a gerar o equivalente a C"). Uma vez gerado o executável de C", o seu código fonte pode ser destruído.
  • A partir daí a compilação de C gera o compilador C" e a compilação de A gera A', sem nenhum indício nos fontes de C ou A.
No caso da urna eletrônica, a alteração pode ser introduzida tanto no programa de votação como no sistema operacional.

Outras Formas de Fraude

Em um dos vários escândalos sobre urnas eletrônicas nos EUA, descobriu-se que uma urna utilizava uma destas fechaduras vagabundas de móveis de escritório para proteger o acesso ao cartão de memória Flash onde são registrados os votos (e onde poderia ser colocado um software para ser executado no momento de boot).

A empresa se defendeu, afirmando que além da fechadura existia um lacre. Alguém sugeriu então uma forma diferente de afetar o resultado da eleição:
  • Suponha que uma determinada seção tenha (segundo as pesquisas) predileção pelo candidato A que não queremos que ganhe.
  • Recrutamos então um eleitor desta sessão e o instruímos para ir votar no horário final e, no isolamento da cabine de votação, quebrar o lacre.
  • Na hora da contagem será detectado o lacre quebrado e o conteúdo da urna terá que ser ignorado (apesar de não ter sido alterado!).
Ou, como neste diálogo clássico entre Dilbert e Dogbert:
  • Dilbert: você me enganou ontem. Você me convenceu a não ir votar pois você ia votar no outro canditado e se nós dois não fossemos o resultado seria o mesmo.
  • Dogbert: e...
  • DIlbert: cachorros não votam!
  • Dogbert: não diretamente.
Concluindo

Após as eleições brasileiras vou dormir sabendo o resultado e sossegado. Entretanto, as preocupações acima não deixam de ser válidas (e altamente improváveis). Quem sabe alguém não desenvolve uma forma simples, barata e confiável de acrescentar um registro físico dos votos que permita recontagem...

segunda-feira, novembro 03, 2008

14o Concurso Anual de Ficção Interativa

Está meio em cima da hora, mas até o dia 15 de novembro ainda dá para votar no 14o Concurso Anual de Ficção Interativa. Mesmo que não pretenda votar, se você gosta de aventuras de texto vale a pena baixar os jogos inscritos (lembrando que são jogos curtos, feitos para serem avaliados após 2 horas de jogo).

sexta-feira, outubro 31, 2008

Audio Book Grátis: The Sign of Four

Recentemente o Efetividade.net comentou sobre a disponibilidade de audio books brasileiros. Isto me lembrou do Projeto Gutenberg, que disponibiliza não somente e-textos mas também audio books.

Eu já tinha experimentado um audio-book do Projeto Gutenberg no passado, mas a qualidade era bem ruim. De qualquer forma, resolvi fazer uma nova tentativa e baixei o audio book do The Sign of Four, de Conan Doyle, em inglês.

Este é o segundo livro do Sherlock Holmes. Lembro que não tinha este livro na biblioteca do ginásio e acabei lendo somente depois de adulto, em inglês. Quem quiser saber um pouco sobre o livro, basta olhar na Wikipedia.

Os primeiros segundos do audio book me assustaram, pois é uma voz gerada por computador dizendo "File One ...", porém a partir daí a leitura é humana e muito profissional. O inglês tem um agradável sotaque britânico, entonação perfeita e varia conforme a personagem. É para quem tem boa fluência em inglês, mas estou conseguindo acompanhar bem apesar de fazer um bom tempo que não converso em inglês (mas ouço bastante na TV).

O link para o baixar o audio book é: http://www.gutenberg.org/dirs/etext05/shsof163-index.htm. Quem quiser acompanhar com o texto escrito, pode baixar de http://www.gutenberg.org/etext/2097.

Ao contrário da maioria dos arquivos contidos no Projeto Gutenberg, o audio book não foi feito por um dos voluntário do projeto, mas sim cedido pelo Audio Books For Free, e possui direitos autorais vigentes.

O site do Audio Books For Free (http://www.audiobooksforfree.com/) possui uma boa variedade de livros, porém não é totalmente free. As versões grátis são (pelo menos nos casos que examinei) MP3 com bitrate de 8Kbps, o que eles próprios qualificam como "qualidade suportável". Um efeito deste baixo bitrate é dar uma falsa impressão de eco. Quem tiver curiosidade de ver como a qualidade varia com o bitrate, pode escutar as amostras com as várias opções. Conforme o bitrate (e a qualidade) aumentam, sob o preço (de US$5 a 8). Mesmo para baixar as versões grátis é preciso se cadastrar no site. A estrutura de preços é curiosa: se você preferir baixar um zip ao invés de vários arquivos você precisa pagar uma 'taxa de zip' de 3 dólares!

A versão do The Sign of Four disponível gratuitamente no Projeto Gutenberg é a de 16Kbps e tem uma qualidade mais que suficiente. O Audio Books For Free informa que é o narrador do audio book: John Telfer, um compositor e ator britânico.

quinta-feira, outubro 30, 2008

Problemas com o Windows Update

O Windows Update é certamente um recurso muito útil e poderoso do Windows. Na maioria dos casos ele permite manter o seu sistema operacional atualizado com um mínimo de esforço. Exceto, é claro, quando algo dá errado.

As Atualizações do Windows

Como já comentei antes, a Microsoft normalmente disponibiliza novas atualizações uma vez por mês, no chamado Patch Tuesday. Ocasionalmente saem os cumulative patches que substituem um conjunto de patches distintos para um mesmo componentes do Windows. Bem mais esporadicamente temos os Service Packs, que acumulam uma grande quantidade de correções e atualizações.

No dia-a-dia temos duas formas de manter o nosso sistema atualizado:
  • usar o Automatic Update, que verifica periodicamente a disponibilidade de novas atualizações. Dependendo do seu coeficiente de confiança/pregiça, você pode optar para o Automatic Update apenas notificá-lo da presença das atualizações, baixar mas perguntar antes de instalar ou baixar e instalar sem perguntar nada. O download é feito de forma a minimizar o impacto no uso normal do micro e da internet (veja detalhes no meu post anterior), o que acarreta em uma "falta de pressa".
  • usar o Windows Update, que é um site que interage com um controle ActiveX no seu PC para verificar as atualizações disponíveis e possibilita baixar e instalar sob demanda.
A primeira opção é, na maioria dos casos, a mais apropriada. Uma exceção é se você não tem conexão contínua com a internet. Outra, que foi o meu caso, se você está querendo atualizar um micro novo.

O Meu Problema

Estou trocando o meu micro no trabalho e portando partindo de um XP SP2 "zerado". A partir de um certo ponto as instalações passaram a dar a seguinte singela mensagem de erro:

Problema: Um problema no seu computador está impedindo que as atualizações sejam baixadas ou instaladas
Solução: Para corrigir o problema, tente instalar as atualizações novamente. Se isso não funcionar, use a Solução de Problemas para tentar solucionar o problema.

Óbvio que tentar novamente deu o mesmo resultado e a Solução de Problemas não deu nenhuma dica útil.

Resolvendo o Problema

Como Santo Google informa, este problema não é totalmente incomum (como veremos, no meu caso foi uma falha conhecida bastante fácil de ser duplicada) e existem várias discussões a respeito. Só para citar duas:
É claro que o caminho que eu segui foi bem tortuoso, mas vou dar aqui a ordem correta.

O primeiro ponto importante é olhar o log do Windows Update, que fica em C:\WINDOWS\WindowsUpdate.log. Como todo bom log, foi feito para ser lido pelo programador, não pelo usuário. De qualquer forma a informação que interessa é a seguinte:

Handler Attempting to create remote handler process
Process: C:\WINDOWS\system32\wuauclt.exe
FATAL: Error: 0x80004002. wuauclt handler: failed to spawn COM server
Handler FATAL: 0x80004002: ERROR: Remote update handler container process created (PID: 3036), but exited before signaling event

Se você estiver enfrentando este problema e as mensagens no log forem como estas, é bem provável que a solução que apresento a seguir resolva o problema.

A mensagem fala em um erro ao disparar um COM server. COM é a tecnologia de componentes da Microsoft e ela se baseia fortemente em informações armazenadas no registry. O motivo mais comum para problemas é um módulo COM não estar devidamente registrado.

Embora a mensagem acima não informe isto, o problema é o registro de wups2.dll. Para registrar corretamente esta DLL basta:
  • parar o serviço de atualizações automáticas
  • registrar a DLL usando o regsvr32
  • reiniciar o serviço de atulaizações automáticas
Os forums mencionados acima tem as instruções passo-a-passo. De forma resumida, você pode abrir uma janela de comando e executar os comandos abaixo:

net stop wuauserv
regsvr32 %windir%\system32\wups2.dll
net start wuauserv

Entendendo a Falha

A Microsoft tem um artigo curto mas bem detalhado sobre o assunto em http://support.microsoft.com/kb/943144

Existe duas formas fáceis de você obter o problema acidentalmente:
  • você reparou uma instalação do XP a partir do CD original. O reparo deixa a DLL no disco mas apaga as informações do registry
  • você estava com o XP SP2, foi no Windows Update, atualizou o client do Windows Update e logo em seguida baixou e instalou o SP3. Por uma falha da Microsoft, você não é orientado a reiniciar o micro após atualizar o client. O novo client é instalado mas não registrado; o SP3 registra o client antigo. Foi o que aconteceu comigo.
Um Conserto para Outros Problemas

Antes de descobrir o problema real eu estava desconfiado de ter algo corrompido nos arquivos baixados. Nos forums acima tem instruções detalhadas da própria Microsoft de como limpar os arquivos que foram baixados pelo Windows Update mas ainda não instalados. De forma resumida:
  • limpar todo o cache do Internet Explorer (o procedimento é diferente para o IE6 e IE7)
  • parar os serviços de Atualizações Automáticas e Criptografia
  • apagar a pasta C:\Windows\SoftwareDistribution
  • renomear a pasta C:\Windows\\System32\catroot2
  • reiniciar os serviços de Atualizações Automáticas e Criptografia
Após isto uma visita ao Windows Update permitirá baixar novamente as atualizações que ainda não foram instaladas.

Balançando Galinhas Mortas

Entre as sugestões existem alguns rituais que, salvo prova em contrário, me parecem pouco contribuir para solucionar o problema. A menção mais comum é desligar antivirus e outros programas. Embora esta sugestão ajude a desconsiderar uma possível causa de erro, é pouco provável que um antivirus conhecido interfira no Windows Update. Principalmente quando o Windows Update pára de funcionar após algumas atualizações dele próprio.

terça-feira, outubro 28, 2008

NSIS - parte 5

O NSIS é uma ferramente bastante rica, permitindo expansões de diversas formas. Melhor ainda, ela tem um recurso de macros que possibilita usar estas expansões de uma forma muito fácil. Por exemplo, usamos na parte anterior a Modern User Interface simplesmento usando um !include e meia dúzia de !insertmacros. Por trás disso tem muitas centenas de linhas de script (veja em C:\Program Files\NSIS\Contrib\Modern UI e C:\Program Files\NSIS\Contrib\Modern UI).

Uma coisa comum nas duas versões da Modern User Interface é a criação de novas páginas para o instalador, recurso este que pode ser usado diretamente nos nossos scripts. A versão 1 da MUI usa o recurso de Install Options. Este recurso, que já está sendo descontinuado, utiliza um arquivo .INI para definir os controles presentes na tela e para interagir com eles.

Vamos dar uma olhada neste post no recurso nsDialogs, usado pela MUI2. No nsDialogs a criação e interação com os controles é feita através de código, o que é mais flexível (e trabalhoso) que os arquivos .INI do Install Options.

Tanto Install Options como nsDialogs utilizam plugins, que são DLLs preparadas de acordo com algumas convenções do NSIS. De forma (quase) transparente para nós o NSIS coloca a DLL dentro do instalador, a expande em um diretório temporário e a apaga quando não for mais necessária.

Vejamos abaixo um exemplo e depois vamos análisar as linhas relevantes:

#
# Exemplo de uso do "nsDialogs" no NSIS
#

!include MUI2.nsh
!include nsDialogs.nsh
!include LogicLib.nsh


Name "Opções"
OutFile "InstOpc.exe"
InstallDir "$PROGRAMFILES\NSIS_Opcoes"
InstallDirRegKey HKLM "Software\NSIS_Opcoes" "Install_Dir"

BrandingText "DQSoft - http://dqsoft.blogspot.com"

Var ChaveUninstall
Var Dialog
Var Label
Var Text
Var Info


;--------------------------------
; Acrescenta um logotipo

!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "dqsoft.bmp"
!define MUI_HEADERIMAGE_UNBITMAP "dqsoft.bmp"

;--------------------------------
; Instalador

!insertmacro MUI_PAGE_WELCOME
Page custom nsDialogsPage nsDialogsPageLeave
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH

!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES

!insertmacro MUI_LANGUAGE "PortugueseBR"


Section "-Obrigatoria"
StrCpy $ChaveUninstall "Software\Microsoft\Windows\CurrentVersion\Uninstall\DQSoft_Opcoes"
SetOutPath $INSTDIR

FileOpen $0 $INSTDIR\texto.txt w
FileWrite $0 $Info
FileClose $0


WriteRegStr HKLM SOFTWARE\NSIS_Opcoes "Install_Dir" "$INSTDIR"
WriteUninstaller "uninstall.exe"
WriteRegStr HKLM $ChaveUninstall "DisplayName" "NSIS Opcoes (remoção)"
WriteRegStr HKLM $ChaveUninstall "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegStr HKLM $ChaveUninstall "DisplayIcon" '"$INSTDIR\uninstall.exe"'
WriteRegStr HKLM $ChaveUninstall "DisplayVersion" "1.0.0"
WriteRegStr HKLM $ChaveUninstall "Publisher" "DQSoft"
WriteRegStr HKLM $ChaveUninstall "UrlInfoAbout" "http://dqsoft.blogspot.com"
SectionEnd

Section "Atalhos no Menu Iniciar"
CreateDirectory "$SMPROGRAMS\NSIS Opcoes"
CreateShortCut "$SMPROGRAMS\NSIS Opcoes\Texto informado.lnk" "$INSTDIR\texto.txt"
CreateShortCut "$SMPROGRAMS\NSIS Opcoes\Remove.lnk" "$INSTDIR\uninstall.exe"
SectionEnd

;--------------------------------
; Nossa página personalizada

Function nsDialogsPage

nsDialogs::Create /NOUNLOAD 1018
Pop $Dialog

${If} $Dialog == error
Abort
${EndIf}

${NSD_CreateLabel} 0 0 100% 12u "Texto a gravar:"
Pop $Label

${NSD_CreateText} 0 13u 100% -13u "Digite aqui..."
Pop $Text

nsDialogs::Show

FunctionEnd

Function nsDialogsPageLeave

${NSD_GetText} $Text $Info

FunctionEnd

;--------------------------------
; Desinstalador

Section "Uninstall"
StrCpy $ChaveUninstall "Software\Microsoft\Windows\CurrentVersion\Uninstall\DQSoft_Opcoes"
Delete "$INSTDIR\*.*"
RMDir "$INSTDIR"
Delete "$SMPROGRAMS\NSIS Opcoes\*.*"
RMDir "$SMPROGRAMS\NSIS Opcoes"
DeleteRegKey HKLM SOFTWARE\NSIS_Opcoes
DeleteRegKey HKLM $ChaveUninstall
SectionEnd
O primeiro ponto a reparar é os vários !include no início:
  • MUI2.nsh para usarmos a Modern User Interface
  • nsDialogs.nsh para criarmos a nova página
  • LogicLib.nsh define algumas operções lógicas que vamos usar
No meio das declarações das páginas do instalador temos a nossa página personalizada:

Page custom nsDialogsPage nsDialogsPageLeave
A página personalizada envolve duas funções que declarmos adiante, uma executada antes da execução (que irá criar a página) e outra executada quando o operador sai da página (que usaremos para pegar os valores fornecidos).

Na nossa sessão obrigatória, ao invés de instalarmos a calculadora, vamos criar um arquivo texto contendo um texto que foi digitado na nossa página personalizada. Reparar que o NSIS possui instruções também para manipular arquivos (no caso estamos usando FileOpen, FileWrite e FileClose).

Chegamos agora à função que ira criar a nossa nova página. A notação nsDialogs::xxxx indica a chamada de uma rotina na DLL nsDialogs. A primeira rotina chamada é Create, que irá criar o diálogo. A opção /NOUNLOAD indica que vamos continuar usando a DLL e portanto ela não deve ser descarregada (é este o motivo de eu ter dito que o uso da DLL era quase transparente). O número mágico que segue, 1018, indica a página que vamos sobrepor. A documentação do nsDialogs informa os números apropriados.

O resultado do Create é um handle para o diálogo (uma identificação para nos referirmos a ele posteriormente). Como acontece em vários locais no NSIS, o resultado fica em uma pilha e precisamos fazer um POP para recuperá-lo e salvá-lo em uma variável. Por segurança, testamos se o valor retornado é válido.

Em seguida criamos dois controles no diálogo: um label (texto estático) e um textbox (caixa para entrada de texto). Os quatro números presentes indicam a posição inicial e o tamanho. Como pode ser visto, existem várias opções de fazer isto: 0 é um posição absolutam em pixels; 12u é um valor proporcional ao tamanho do diálogo (que por sua vez depende do tamanho do fonte do sistema) e 100% é um valor relativo ao tamanho total do diálogo. Além de label e text, existem vários outros controles que podem ser usados.

A rotina de saída da página usa a macro GetText para recuperar o conteúdo da caixa de entrada de texto e salvá-lo em uma variável.

A nossa página personalizada fica com o seguinte aspecto:


Uso Prático

Ok, muito interessante, mas para que pode servir? O uso mais comum é para solicitar informações adicionais ao operador, configurando o software durante a instalação. Embora este exemplo tenha gravado a informação em um arquivo texto, existem instruções no NSIS para escrever no Registry (como já vimos) e para escrever em arquivos .INI.

Alguns exemplos de informações que já solicitei em meus instaladores:
  • nome de um diretório que será usado para interface entre o meu programa e uma outra aplicação
  • dados para acesso a uma base de dados
  • endereço IP de um servidor
No próximo post farei um apanhado geral de vários recursos menores do NSIS.