quarta-feira, abril 29, 2009

Sun & Oracle: Divagações

A compra da Sun pela Oracle é a notícia do momento e não consigo deixar de dar os meus "pitacos". Gostaria de começar reconhecendo minha pouca familiaridade com os produtos de ambas as empresas, o que aumenta a chance de falar besteiras (mais que o usual, bem entendido).

A Sun Antes da Aquisição

Espero que mesmo os "java-boys" reconheçam que a Sun estava em uma sinuca de bico, com grandes dificuldades nos vários negócios em que atua:
  • Servidores: a Sun surgiu da fabricação de computadores usando chips de projeto próprio. Um negócio que já foi de altas margens. Entretanto, os "computadores pessoais" de hoje são mais poderosos que os workstations de alguns anos atrás. A concorrência é forte pela parte de baixo, tendo que enfrentar projetos de menor custo baseados em chips x86 produzidos em maior volume. A Sun se viu obrigada a também produzir servidores usando x86 e virou uma companhia esquizofrênica, tendo que defender simultaneamente arquiteturas mais fechadas e alto custo e arquiteturas abertas de baixo custo.
  • Processadores: normalmente nós lemos a Lei de Moore como consumidores: "em 18 meses vou poder comprar uma máquina duas vezes melhor pelo mesmo preço". Para o desenvolvedor de processador, a leitura é outra: "daqui a 18 meses vou precisar vender um processador duas vezes melhor pelo mesmo preço". A pressão é brutal e o concorrente principal (Intel) amortiza grande parte do investimento em desenvolvimento e equipamento com linhas de altíssimo volume.
  • Sistemas Operacionais: a Oracle afirmou que a maioria das instalações do seu banco de dados roda sob Solaris, mas eu realmente gostaria de ver os números, de preferência de um instituto independente. Os demais *ix propietários sofreram muito com a concorrência do Windows e do Linux. A própria Oracle trombetava o seu Unbreakable Linux. A abertura da maior parte dos fontes do Solaris revela que a Sun está sensível à pressão do Linux.
  • Star Office: gostaria muito de ter uma idéia de qual a receita que a Sun obtem com este produto, num segmento dominado pela Microsoft e sendo derivado de um produto free (nos dois sentidos).
  • Java: é sem dúvida o grande sucesso da Sun em termos de software (mas não tão grande quanto os "Java-boys" imaginam). Restrições na licença o mantiveram fora das distribuições Linux até recentemente. Brigas com a Microsoft tiraram a JVM da Sun do Windows XP. A "iniciativa .Net" (com o C#) bloqueou em parte o avanço do Java na plataformas Microsoft. E não é aquilo que acionistas chamariam de uma fonte de lucro.
Sun e Oracle: Benefícios

Juntas, Sun e Oracle poderão oferecer soluções completas, num nível que somente a IBM forneceu no passado (talvez até mais, já que a Oracle tem soluções mais fortes de ERP que a IBM).

A Oracle apostou muito em Java e a compra da Sun evita as incertezas que surgiram se a Sun fosse comprada por outra empresa.

Sun e Oracle: Problemas

A Oracle é uma empresa de software e certamente vai sofrer tendo que manter uma operação de hardware. A oferta de hardware poderá também balançar a aliança da Oracle com outros fabricantes de hardware, levando-os a privilegiar outras opções.

A Oracle já anunciou metas de venda e lucro para as operações que eram da Sun. Cortes serão feitos para garantir o lucro. O que nos leva a um caso particular:

MySQL

Durante muito tempo eu sabia praticamente nada sobre MySQL, exceto que era usado largamente em aplicações Web, na chamada plataforma LAMP. E portanto eu tinha a imagem de um sistema de banco de dados free (nos dois sentidos) com os recursos tradicionais de outros sistemas profissionais.

Até o dia em que eu assisti a uma palestra em um evento Microsoft onde falaram barbaridades sobre o MySQL. E eu fui conferir e vi que, mesmo descontando os exageros, o MySQL tinha alguns pontos questionáveis.

O primeiro deles é que inicialmente não suportava recursos básicos de garantia de integridade, como chaves estrangeiras e transações. Dentro da arquitetura do MySQL estas funções estão em um nível chamado store engine. E as store engines que implementam estas características foram desenvolvidas por outras companhias que, não coincidentemente, foram adquiridas no passado pela Oracle (num lance considerados por muitos como um ataque FUD).

O segundo é que o MySQL utiliza licenciamento duplo: free dentro de certas condições e não-free dentro de outras. O mais estranho é que parece ser extremamente difícil cotar e adquirir a licença não free.

Tenho a desconfiança que a Oracle, que se orgulha de ter um banco de dados altamente avançado e eficiente, vai torcer onariz para o MySQL. Talvez o mantenha como um produto gratuito para dificultar a vida do MS SQL e outros, mas certamente farão campanhas de incentivo à migração do MySQL (frre) para o Oracle (pago).

sábado, abril 25, 2009

DVD Caravan - Crítica

Entre as várias coisas de ouvi e gostei no (finado?) programa de rádio belga On The Rocks (que eu comentei aqui) está a música Nine Feet Underground, do grupo Caravan. É um belo exemplo de rock progressivo, com seus quase 23 minutos de som melódico, com vários trechos distintos bem encadeados e um som de teclado bem característico. O Caravan é um daqueles grupos que teve destaque nos anos 70 e permanecem ativos com formações variadas e pouca exposição ao público em geral.

Fiquei, portanto, surpreso em encontrar um DVD deles na Americanas (e por um preço razoável).

O DVD é um registro de um show de 1990, que marcou o retorno da formação original. São apenas 5 músicas, num total de 80 minutos (uma delas é a Nine Feet Underground, em toda a sua glória). Os extras do DVD são um texto até que extenso com a biografia da banda e uma tela com imagens pequenas das capas dos álbuns ("discografia").

Na sua formação original o Caravan era composto por quatro músicos, um tecladista (Dave Sinclair), um baixista (Richard Sinclair, primo do Dave), um guitarrista (Pye Hastings) e um baterista (Richard Coughlan). Os vocais (muito competentes) são de Richard Sinclair e Pye. No show são acompanhados pelo saxofonista e flautista Jimmy Hastings (irmão do Pye e que tocou na gravação original de Nine Feet Underground). O som deles é um rock progressivo com um certa dose de jazz.


O show é bem competente e bem filmado. Os músicos tem postura bastante discreta, não fazendo caretas nem dando shows desnecessários de virtuosismo. A performance da Nine Feet Underground não tem as nuances da gravação em estúdio mas é bastante empolgante.

Concluindo

Recomendado.

sexta-feira, abril 24, 2009

Spoke-o-dometer - Parte 6

Nesta parte vamos testar o circuito na roda de uma bicicleta. Mas antes vamos usar as informações do teste anterior para codificar a detecção de imã.

Detectando o Imã

Relembrando, o sensor usado fornece uma tensão proporcional ao campo magnético a que é submetido. Longe do imã, temos uma tensão de 4.5/2 V. À medida que o sensor se aproximar de um imã esta tensão irá baixar ou subir, dependendo do polo. Pelo teste anterior, a leitura do SD16 com o sensor longe do imã é de 88 (considerando somente o byte mais significativo do resultado).

Uma primeira ideia seria usar um limite único para detectar o imã. Por exemplo, considerar que quando o valor passar de 110 estamos próximos do imã. Entretanto, é provável que as leituras oscilem o que poderia causar uma sequência de detecções em uma única passagem pelo imã.

O mais seguro é colocar uma histerese no teste. Por exemplo, considerar que estamos próximos do imã quando o valor passar de 120 e só voltar a considerar que estamos longe quando o valor cair abaixo de 100. Desta forma, mesmo que o valor passe de 120, baixe para 110 e depois volte para 120 consideramos uma única detecção.

Para ficarmos independentes da polaridade do imã, usamos também dois valores abaixo do de repouso (neste teste, vamos detectar o imã quando o valor ficar abaixo de 56 e considerar que nos afastamos dele quando o valor ficar acima de 76).

Fixando o Circuito e o Imã

O circuito é fixado na válvula do pneu. A posição do imã é relativamente crítica, neste teste ele ficou preso ao freio.

O imã é o "botão" metálico na parte inferior central da foto. As pilhas (que não aprecem na foto), estão diametralmente opostas ao circuito porém mais próximas do centro.

O Software de Teste

O software de teste implementa a histerese mencionada acima. A cada detecção é incrementado um contador, que é apresentado nos LEDs.


/*
Spoke-o-dometer
Teste3 - Teste do sensor em movimento

Daniel Quadros - abril, 2009
*/

#include <msp430.h>

// Valor para contar 1ms c/ clock de 12KHz
#define TEMPO_1MS 12 // 1ms * 12KHz

// Limites para detectar passagem pelo imã
#define VREPOUSO 88 // 01011000
#define VPOS_1 120 // 01111000
#define VPOS_2 100 // 01111000
#define VNEG_1 56 // 00111000
#define VNEG_2 76 // 00111000

#define FALSE 0
#define TRUE 1

typedef unsigned char byte;

static byte bDetectou = FALSE; // TRUE qdo detecta o imã
static unsigned int cont = 0;

// Rotinas Locais
static void Led (unsigned int valor);

// Programa Principal
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 = 0xC0; // P1.0 a P1.5 -> LEDs
// P1.6 e P1.7 são A3+ e A3-
P1DIR = 0x3F;
P1OUT = 0; // Todos as saídas em zero

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

// Programa o ADC
// MSP430F2013 -> SD16
SD16CTL = SD16VMIDON + SD16REFON + SD16SSEL_1; // 1.2V ref, SMCLK
SD16INCTL0 = SD16INCH_3; // PGA = 1x, Diff inputs A3- & A3+
SD16CCTL0 = SD16SNGL + SD16UNI + SD16IE; // Single conversion, Unipolar, 256 SR, Int enable
SD16CTL &= ~SD16VMIDON; // VMID off: used to settle ref cap
SD16AE = SD16AE6 + SD16AE7; // P1.6 & P1.7: A3+/- SD16_A inputs

// Dá um tempinho para estabilizar a alimentação
while (cont < 0xFF)
cont++;
cont = 0;

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

// Programar a interrupção de tempo real p/ cada 10ms
TACCR0 = TEMPO_1MS;
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
SD16CTL |= SD16REFON; // Liga a referência do SD16
SD16CCTL0 |= SD16SC; // Inicia uma conversão
_BIC_SR_IRQ (SCG1+SCG0); // Manter osciladores ligados
break;

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

// Tratamento da interrupção do SD16
#pragma vector = SD16_VECTOR
__interrupt void SD16ISR(void)
{
unsigned int result;

SD16CTL &= ~SD16REFON; // Desliga referência do SD16_A
result = SD16MEM0 >> 8; // Pega resultado (limpa IFG)

if (!bDetectou && ((result > VPOS_1) || (result < VNEG_1)))
{
bDetectou = TRUE;
Led (++cont);
}
else if (bDetectou && (result < VPOS_2) && (result > VNEG_2))
bDetectou = FALSE;

_BIS_SR_IRQ (SCG1+SCG0); // voltar para LPM3
}

// Mostra resultado nos LEDs
static void Led (unsigned int valor)
{
// vamos mostrar somente os 7 bits menos significativos
valor &= 0x7F;
valor <<= 1;
P1OUT = (P1OUT & 0xC0) | (valor & 0x3E);
P2OUT = (P2OUT & 0x3F) | (valor & 0xC0);
}
Para finalizar, o vídeo abaixo mostra o teste em ação:

video

Na próxima parte (se tudo correr bem) vamos começar a mostrar mensagens.

quarta-feira, abril 22, 2009

Spoke-o-dometer - Parte 5

Nesta parte vamos testar o sensor. Para isto vamos examinar um pouco como funcionam o sensor e o conversor analógico SD16_A do MSP430. E, é claro, ver o código.

O Efeito Hall

O efeito Hall é o surgimento de uma diferença de pontecial elétrico em um condutor elétrico, transversa a uma corrente elétrica no condutor e a campo magnético perpendicular à corrente (tradução minha para a introdução em inglês de http://en.wikipedia.org/wiki/Hall_effect).

Simplificando, se pegamos um condutor elétrico alimentado por uma fonte e o submetemos a um campo magnético, surge no condutor uma diferença de potencial entre as bordas perpendiculares à corrente e ao campo magnético.

Sensor de Efeito Hall

O sensor de efeito Hall utiliza o efeito Hall descrito acima em um semicondutor para detectar um campo magnético. Em alguns sensores, como o que estou usando, obtem-se uma tensão proporcional ao campo magnético. Em outros obtem-se apenas uma indicação de presença ou ausência do campo magnético (o que bastaria para o meu projeto).

Alguns detalhes adicionais podem ser vistos (em inglês) na wikipedia (em http://en.wikipedia.org/wiki/Hall_effect_sensor); tem uma animação bonitinha.

O ADC SD16_A

Como descrito (para variar) na Wikipedia inglesa (http://en.wikipedia.org/wiki/Analog-to-digital_converter#ADC_structures) existem várias formas de implementar um Conversor Anaógico Digital (ADC). O objetivo é sempre fornecer um número proporcional a uma tensão.

O funcionamento de um ADC usando modulação Sigma Delta pode ser visto (em inglês) em http://en.wikipedia.org/wiki/Sigma-delta_modulation#Analog_to_Digital_Conversion. Se eu entendi direito, a tensão de entrada (sinal analógico) é usada para gerar pulsos de largura constante espaçados por um tempo proporcional à tensão de entrada (esta é a parte delta). Estes pulsos são contados em um tempo fixo (esta é a parte sigma), fornecendo assim um valor digital proporcional à tensão de entrada. Isto permite construir ADCs com precisão muito boa (o que não deixa de ser um desperdício para o meu projeto).

A programação do SD16_A do MSP430F2113 pode ser encontrada no MSP430x2xx Family User's Guide. Eu me basei no Application Note SLAA283A (que você pode baixar daqui).

A programação é feita escrevendo em quatro registradores do SD16_A:
  • SD16CTL: aqui selecionamos o clock e areferência. No nosso caso vamos usar como clock o SMCLK que virá do DCO. Como o limite do SD16_A é 1.1MHz, segui o Application Note e usei o DCO a 1MHz sem divisão. A referência que vamos usar é a interna (1.2V). Seguindo a recomendação do fabricante, o VMID buffer é ligado e pouco depois desligado para estabilizar o capacitor da referência.
  • SD16INCTL0: controle da entrada. Mantemos o default de esperar quatro amostragens antes de interromper, usamos um ganho de 1 e escolhemos a entrada A3.
  • SD16CCTL0: outro registrador de controle. Selecionamos o modo Single onde se dispara uma conversão e uma interrupção é gerada quando a conversão foi completada (a interrupção também é habilitada neste registrador). Pedimos o resultado na forma Unipolar, onde o resultado é um valor de 0 a 0xFFFF. Por último, usamos uma taxa de oversampling de 256.
  • SD16AE: Habilita os pinos de entrada analógica (no nosso caos, P1.6 e P1.7).
Feita a programação, para fazer uma leitura do sinal analógico entre os pinos P1.6 e P1.7, basta iniciar uma conversão e aguardar a interrupção (não esquecendo de manter o DCO e SMCLK rodando). Quando a interrupção ocorrer, o resultado está em SD16MEM0.

O Programa de Teste

O programa de teste usa os LEDs para mostrar (em binário) a tensão na saída do sensor. Para testar o sensor basta aproximar ou afastar um imã e observar o valor nos LEDs. Aproveitando a idéia da Application Note, o programa economia energia deixando o clock e a referência ligados somente enquanto efetua uma conversão.
/*
Spoke-o-dometer
Teste1 - teste do sensor

Daniel Quadros - abril, 2009
*/

#include <msp430.h>

// Valor para contar 100ms c/ clock de 12KHz
#define TEMPO_100MS 1200 // 100ms * 12KHz

typedef unsigned char byte;

// Rotinas Locais
static void Led (unsigned int valor);

// Programa Principal
void main (void)
{
int cont = 0;

// Desliga Watchdog
WDTCTL = WDTPW + WDTSSEL + WDTHOLD;

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

// Programa entradas e saídas
P1SEL = 0xC0; // P1.0 a P1.5 -> LEDs
// P1.6 e P1.7 são A3+ e A3-
P1DIR = 0x3F;
P1OUT = 0; // Todos as saídas em zero

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

// Programa o ADC
// MSP430F2013 -> SD16
SD16CTL = SD16VMIDON + SD16REFON + SD16SSEL_1; // 1.2V ref, SMCLK
SD16INCTL0 = SD16INCH_3; // PGA = 1x, Diff inputs A3- & A3+
SD16CCTL0 = SD16SNGL + SD16UNI + SD16IE; // Single conversion, Unipolar, 256 SR, Int enable
SD16CTL &= ~SD16VMIDON; // VMID off: used to settle ref cap
SD16AE = SD16AE6 + SD16AE7; // P1.6 & P1.7: A3+/- SD16_A inputs

// Dá um tempinho para estabilizar a alimentação
while (cont < 0xFF)
cont++;

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

// Programar a interrupção de tempo real p/ cada 100ms
TACCR0 = TEMPO_100MS;
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
SD16CTL |= SD16REFON; // Liga a referência do SD16
SD16CCTL0 |= SD16SC; // Inicia uma conversão
_BIC_SR_IRQ (SCG1+SCG0); // Manter osciladores ligados
break;

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

// Tratamento da interrupção do SD16
#pragma vector = SD16_VECTOR
__interrupt void SD16ISR(void)
{
unsigned int result;

SD16CTL &= ~SD16REFON; // Desliga referência do SD16_A
result = SD16MEM0; // Save result (clears IFG)

Led (result);

_BIS_SR_IRQ (SCG1+SCG0); // voltar para LPM3
}

// Mostra resultado nos LEDs
static void Led (unsigned int valor)
{
// vamos mostrar somente os 7 bits mais significativos
valor >>= 8;
P1OUT = (P1OUT & 0xC0) | (valor & 0x3E);
P2OUT = (P2OUT & 0x3F) | (valor & 0xC0);
}

No próximo post vamos prender o nosso circuito à roda da bicicleta e ver o funcionamento do sensor em uma situação mais real.

segunda-feira, abril 20, 2009

Spoke-o-dometer - Parte 4

Feita a montagem do circuito, é hora de um primeiro teste. O objetivo deste teste e verificar que o microcontrolador está rodando e que os LEDs foram ligados corretamente.

O código (compilado com o IAR) é simples:

/*
Spoke-o-dometer
Teste1 - teste dos LEDs

Daniel Quadros - abril, 2009
*/

#include <msp430.h>

// Valor para contar 200ms c/ clock de 12KHz
#define TEMPO_200MS 2400 // 200ms * 12KHz

typedef unsigned char byte;

static int iLed; // indica qual LED piscar

// Rotinas Locais
static void Led (int iLed, int valor);

// Programa Principal
void main (void)
{
int cont = 0;

// Desliga Watchdog
WDTCTL = WDTPW + WDTSSEL + WDTHOLD;

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

// Programa entradas e saídas
P1SEL = 0xC0; // P1.0 a P1.5 -> LEDs
// P1.6 e P1.7 são A3+ e A3-
P1DIR = 0x3F;
P1OUT = 0; // Todos as saídas em zero

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
iLed = 0;

// Dá um tempinho para estabilizar a alimentação
while (cont < 0xFF)
cont++;

// 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 200ms
TACCR0 = TEMPO_200MS;
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
Led (iLed, 0); // apaga LED anterior
iLed = (iLed+1) & 7; // passa para o seguinte
Led (iLed, 1); // acende o LED
break;

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

// Altera o estado de um LED
// iLed: número do LED, de 0 a 7
// valor: 0 = apaga, 1 = acende
static void Led (int iLed, int valor)
{
if (iLed < 6)
{
if (valor)
P1OUT |= (1 << iLed);
else
P1OUT &= ~(1 << iLed);
}
else
{
if (valor)
P2OUT |= (1 << iLed);
else
P2OUT &= ~(1 << iLed);
}
}
O vídeo abaixo mostra o resultado (depois que corrigi as besteiras que eu fiz):

video

No próximo post, o primeiro teste do sensor.

domingo, abril 19, 2009

O Tempora o Mores!

Inspirado neste post do Geringonças e Gambiarras, deu uma "fuçada" com mais atenção nos DVDs de R$12,99 no Wallmart aqui de Osasco. Para minha surpresa, estava lá o Império dos Sentidos!

Para quem estiver boiando:

http://en.wikipedia.org/wiki/O_tempora_o_mores! (a explicação do título do post, em inglês)
http://pt.wikipedia.org/wiki/Ai_no_corrida (ou Império dos Sentidos, resumo do filme em português, não recomendado para menores e pessoas sensívei a temáticas sexuais)
http://www1.folha.uol.com.br/folha/ilustrada/ult90u478558.shtml (em português, menciona o Império dos Sentidos como exemplo do "funcionamento" da censura durante o regime militar)

sábado, abril 18, 2009

Livro de Março: O Mistério da Ilha da Cabana

Já mencionei anteriormente a série juvenil Hardy Boys. Neste post vou comentar sobre três edições distintas do livro O Mistério da Ilha da Cabana.

Os Hardy Boys e Eu

Conheci os Hardy Boys em 1972, quando a Abril começou a publicar quinzenalmente a série. No começo eu não estava muito interessado e li os primeiros volumes mais por insistência do meu pai. No terceiro volume eu já estava fisgado.

O oitavo volume, O Mistério da Ilha da Cabana, é um dos meus favoritos. Talvez seja o ambiente bem diferente do que estamos acostumados (neve e gelo), a ideia de ficar acampado com amigos em uma cabana em uma pequena ilha ou o pequeno mistério em si (que inclui uma mensagem em código). Segundo a Wikipedia e esta página, não estou sozinho nesta preferência.

Vários meses mais tarde, a Abril interrompeu a série no décimo-oitavo volume. A contracapa trazia sempre um resumo do próximo livro, no último estava escrito simplesmente "com este volume se encerra a série".

Posteriormente achei volumes em inglês em uma livraria especializada em livros importados. Para minha alegria, a relação no final dos livros mencionava 57 volumes. Entretanto, naquele tempo livros importados eram raros e caros. Existia o infame "dolar livro": o preço era calculado multiplicando o preço da capa pela cotação do dolar e por dois. Além disso, a escolha ficava limitada à meia dúzia de volumes disponíveis na prateleira. Além da edição americana, tinha também a edição inglesa, que saia um pouco mais em conta.

Uma segunda opção para obter os livros eram as "vendas de garagem". Após algumas compras me deparei com um pequeno mistério: os livros que eu conhecia tinham todos exatamente 20 capítulos, porém um exemplar bem antigo tinha 25. Um segundo mistério era a longevidade da série: enquanto os volumes mais antigos eram de 1920, os mais novos eram de 1970. E todos com o mesmo autor: "Franklin W Dixon".

A minha coleção foi sendo ampliada aos poucos e finalmente concluída graças à Amazon.

A Solução do Mistério de Franklin W Dixon

Foi somente com a internet que eu soube a história completa. Os Hardy Boys foram criados por um sujeito chamado Stratemeyer que contratava ghostwriters para escrever os volumes a partir de sinopses de uma ou duas páginas. Os primeiros volumes foram todos escritos pela mesma pessoa, um escritor canadense que ganhava apenas o suficiente para obter comida e lenha para sobreviver.

No começo os livros tinham todos 25 capítulos. A partir de 1959 os primeiros 38 volumes passaram por uma revisão. O objetivo principal era retirar referências anacrônicas, particularmente o que chamaríamos hoje de politicamente incorreto. Entretanto, as histórias foram também reduzidas para 20 capítulos e na maioria dos casos alteradas. Como veremos adiante, o Mistério da Ilha da Cabana recebeu a adição de subtramas que, no geral enriqueceram a história.

De 1991 a 2007 a editora Applewood Books publicou edições faccimile dos primeiros dezesseis volumes, reproduzindo textos e ilustrações das ediçes originais.

A Versão Original

A versão original, com seus 25 capítulos, conta a história de uma forma mais lenta e com uma prosa um pouco mais elaborada. A história se centra na trama principal. A cifra utilizada é bastante simples, mas bem racional. Procurando no texto algumas palavras óbvias (cribs) a decifração será imediata.

O texto não me pareceu conter expressões arcaicas, percebi somente a grafia 'to-morrow' ao invés de 'tomorrow'. Do lado do "politicamente incorreto", talvez surpreenda os Hardys ganharem espingardas de Natal e mais ainda as usarem para abater duas raposas ladrões de galinha (em algo sem conexão com a trama). A propósito, na versão original os Hardys tem 15 e 16 anos.

O livro possui somente uma ilustração, no início do livro e de traços sofisticados. A ilustração na capa tem uma aparência antiga.

A Versão Revisada

Embora o texto da versão revisada seja menor, foram acrescentadas duas subtramas. Uma delas (o neto desaparecido) abre espaço para um final um pouco mais elaborado. O resultado é um texto mais conciso e recheado de ação. Por exemplo, as férias na Ilha da Cabana já estão decididas no primeiro capítulo da versão revidada mas somente no quarto capítulo da edição original.

O alvo do mistério muda em relação à versão original, assim como a cifra. A nova cifra é um pouco boba e de praticidade discutível, porém pode também ser resolvida através de cribs.

No lugar das espingardas, os Hardys ganham uma máquina fotográfica instantânea, apesar de aqui já terem 17 e 18 anos.

O livro possui algumas ilustrações, inclusive uma que ocupa duas páginas (uma delas com um pouco de texto). A ilustração da capa tem uma aparência um pouco mais moderna.

A Versão Brasileira

Para minha surpresa, a tradução da Abril segue fielmente a versão revisada. A cifra segue a mesma linha, porém com o texto traduzido.

O livro também possui algumas figuras, que me parecem um pouco mais toscas. A capa tem um jeitão meio psicodélico e tropical (esqueceram da neve!).

sexta-feira, abril 17, 2009

Spoke-o-dometer - Parte 3

Nestes posts vamos ver alguns detalhes do projeto do hardware e da montagem.

LEDs

A ligação dos LEDs segue o que já descrevi anteriormente: cada LED é ligado em série com um resitor entre um pino de E/S do microcontrolador e o terra. Usei resistores de 47 ohms porque era o que tinha na quantidade necessária.

Sensor

Como descrevi na parte anterior, o sensor é alimentado por 4.5V. Potencialmente a sua saída pode variar de 0 a 4.5V. Por outro lado a entrada do SD16 trabalha com uma faixa bem menor. Conforme o MSP430x2xx Family User Guide, o valor absoluto máximo é obtido pela fórmula

VFSR = VRef / (2 * Gain)

Usando a referência interna de 1.2V e o ganho mínimo de 1, chegamos à faixa de -0,6V a +0,6V.

Para compatibilizar as duas faixas, a saída do sensor vai para um divisor resistivo:

Adotei R1= 100K e R2 = 10K. Estes valores foram escolhidos pois:
  • A resistência total fica de 110K, o que garante uma corrente baixa.
  • O valor 10K é bem menor que a impedância de entrada do ADC (200K).
  • A faixa da tensão amostrada fica de 0 a 0,41V, compatível com o microcontrolador.
O Circuito Elétrico

A figura abaixo mostra o circuito completo da placa que montei (clique para ampliar).

Não esquecer que no módulo do microcontralador temos ainda (conforme o manual do eZ430-F2013) :
  • Um resistor do pino de Reset para Vcc
  • Um conector de programação, ligado a Vcc, Gnd e aos pinos 10 e 11 (SBWTCK e SBWTDIO)
  • Um LED verde ligado ao pino 2 (P1.0) através de um resistor
A Montagem

Utilizei uma placa padrão para o protótipo, do tipo que tem as ilhas sem nenhuma ligação. As conexões foram feitas soldando fios de wire-wrap. Não fica muito bonito e deu um pouco de trabalho para soldar sem fazer curtos, mas ficou razoavelmente compacto.


O fio de cobre rígido no alto da placa, que tem uma aparência de bobina, tem função apenas mecânica: o aro pode ser colocado na válvula do pneu da bicicleta para fixação da placa.


Na próxima parte vamos ver o código para realizar os primeiros testes de funcionamento.

quarta-feira, abril 15, 2009

Spoke-o-dometer - Parte 2

Nesta segunda parte vou começara a falar do hardware do meu Spoke-o-dometer. Me baseei fortemente no que está descrito em http://www.openobject.org/opensourceurbanism/Spoke-o-dometer_Overview.

O Sensor

O sensor será usado para detectar quando o circuito (que está preso à roda) passar por um determinado ponto. Isto permite tanto determinar a velocidade da roda (medindo o tempo de cada volta) como posicionar a mensagem (medindo o tempo a partir da detecção feita pelo sensor).

Eu já tinha pesquisado este tipo de sensor quando comecei o meu projeto (inacabado) de velocímetro e comprado alguns sensores de efeito Hall modelo A1321 da Allegro (que comprei na Farnell e cujo datasheet está aqui). De uma forma bem simplificada, um sensor efeito Hall gera uma tensão proporcional ao campo magnético a que for submetido. É uma alternativa bem mais precisa e resistente ao ambiente que, por exemplo, usar um reed switch ou um sensor ótico.

O sensor fica montado no circuito e um ima é preso no quadro da bicicleta. Quando o circuito passar pelo ima a variação de tensão no sensor será detectada pelo microcontrolador.

O sensor escolhido requer uma tensão de 4.5 a 5.5V. A saída é normalmente (sem campo magnético) metade desta tensão, conforme a polaridade do campo magnético a tensão irá variar de 0 até a tensão de alimentação.

Os LEDs

Em princípio qualquer LED serviria para o projeto. Aproveitei uns LEDs que eu tinha comprado em uma promoção; são LEDs pequenos (3 mm), opacos e de cor vermelha. O projeto que tomei como exemplo utiliza LEDs maiores, transparentes e de cor vermelha, que provavelmente dariam uma maior visibilidade.

Como no projeto de referência, usei 7 LEDs. Isto permite usar um gerador padrão de caracteres de 5x7.

O Microcontrolador

Os requisitos técnicos para o microcontrolador são:
  • Um timer para contagem de tempo
  • Um conversor analógico digital (ADC) para medir a tensão na saída do sensor
  • Sete saídas digitais para controlar os LEDs
Uma montagem compacta e leve é preferencial para este projeto. Por este motivo resolvi aproveitar a minúscula placa que vem com o programador eZ430-F2013 (que eu comentei aqui), soldando a ela um conector padrão:


A placa pode também ser comprada separada do programador, em pacotes de três (apesar da página no link não mencionar que cada item contém três placas). Um detalhe é que o processador na placa que vem com o programador (MSP430F2013) é diferente do que vem na placa avulsa (MSP430F2012). A diferença está justamente no ADC, que é mais sofisticado no 2013. Entretanto, o ADC do 2012 é mais que suficiente para o que queremos.

Uma outra vantagem de usar o MSP430 é a possibilidade de aproveitar depois um o outro kit que eu tenho, o EZ430-RF2500. Este kit acrescenta um rádio 2.4GHz, o que possibilita transmitir as informações para um display no guidão ou para uma estação na calçada.

O MSP430 trabalha com alimentação de 3V.

A Alimentação

O consumo do circuito será principalmente devido aos LEDs. Inicialmente estou optando por pilhas alcalinas tamanho AA. Não é uma opção compacta ou leve, mas deve durar durante o desenvolvimento, independente dos meus bugs de hw e sw.

Estou usando três pilhas em série, para obter os 4.5V para o sensor. A alimentação do resto do circuito é feita com 3.0V, portanto puxo uma ligação entre a segunda e a terceira pilha.

No próximo post vou mostrar o circuito elétrico e a minha montagem.

terça-feira, abril 14, 2009

Microsoft Cancela Bar no Campus

A notícia correu no final da semana: a Microsoft cancelou o plano de ter um bar no seu campus em Redmond. O motivo informado por um porta-voz foi que eles concluíram que um bar não é um ambiente apropriado para uma empresa.

Os Links

Para quem quiser ver o que parece ser o post original:

http://www.techflash.com/microsoft/Microsoft_cancels_plans_for_on-campus_pub__42823757.html

Tem um follow-up:

http://www.techflash.com/microsoft/Microsoft_workers_form_group_to_save_canceled_campus_pub42874352.html

A inevitável discussão no Slashdot está aqui: http://slashdot.org/article.pl?sid=09/04/11/224237

Um Resumo

Há mais de um ano, a Microsoft fez uma concorrência para conceder a concessão de um prédio em seu campus para a montagem de um bar. Três dias antes da inauguração, a Microsoft enviou uma carta cancelando o aluguel do prédio. A carta não explicava os motivos, mas um porta voz disse que a Microsoft mudou de ideia por achar que um bar não seria um ambiente apropriado. Os responsáveis pelo bar estão desolados.

Alguns Comentários Meus

É claro que nada justifica o cancelamento em cima da hora, após um significativo investimento da empresa selecionada.

Mas é curioso ver a Microsoft ser retratada como uma empresa conservadora. Para mim parece que foi ontem que eram um bando de hippies cabeludos que enchiam a IBM de preocupação:

Historic Microsoft staff photo at its inception, December 7, 1978.
Uma coincidência interessante é que na semana passada estive em uma feira de tecnologia. Várias empresas serviam bebidas alcoólicas (uma delas montou o stand como um bar). Entretanto, uma multinacional muito conhecida, onde tenho vários amigos, só tinha bebidas não alcoólicas para os visitantes. Mais ainda, a recomendação para os funcionários foi de não consumir bebidas alcoólicas no stand, ou mesmo segurar um copo com bebida alcoólica dentro do stand. Normas da matriz, muito bem aceitas e respeitadas pelos funcionários e visitantes, diga-se de passagem.

Minha opinião é que não se trata de uma simples decisão de um gerente mal humorado. Acho que é o retrato de uma mudança da forma como as bebidas alcoólicas são vistas pela sociedade. E não se trata de uma questão moral ou religiosa, do tipo "beber é errado". É uma reação à constatação dos efeitos ruins para pessoas, famílias, empresas e a sociedade em geral, e aos custos associados. É algo parecido com o que aconteceu com o cigarro, que ao longo do último século passou de algo "cool" para ser visto como uma droga viciante que mata pessoas e sobrecarrega o sistema de saúde pública.


Para encerrar, o link para a referência obrigatória sobre o risco da bebida no desenvolvimento de software: http://xkcd.com/323/

segunda-feira, abril 13, 2009

Spoke-o-dometer - Parte 1

Já faz alguns anos que inciei o projeto de um velocímetro para bicicleta. O projeto acabou encostado; quando estava começando a retomar o meu filho me passou um link para esta página, que descreve um velocímetro diferente: o Spoke-o-dometer.

Resumidamente, o Spoke-o-dometer é um circuito que vai montado diretamente no aro da bicicleta e apresenta mensagens se valendo da persistência da visão. O circuito é composto por:
  • um sensor para detectar quando ele passa por um certo ponto da bicicleta;
  • LEDs comuns montados em linha, que serão usados para apresentar as mensagens;
  • um microcontrolador que controla tudo.
Para apresentar as mensagens é usado um esquema semelhante ao velho gerador de caracteres de vídeo:

Entretanto, ao invés de usar uma matriz de LEDs, é usada apenas uma linha, que apresenta em rápida sucessão as várias colunas. Com o movimento da roda, as colunas ficam fisicamente uma ao lado da outra; graças à persistência da visão percebemos como se todas as colunas estivessem acessas simultaneamente. A imagem abaixo (retirada do site que mencionei no início) mostra o resultado:


O Spoke-o-dometer me atraiu bastante: é um projeto relativamente simples, gera um resultado atraente e envolve tecnologias que eu acredito conhecer.

Estou fazendo o meu e vou descrever no blog o meu projeto, mas é ainda um trabalho em curso. Não se espantem, portanto, se os posts ficarem espaçados ou se eu tiver que retificar alguma besteira que eu escrevi.

sábado, abril 11, 2009

Livro de Fevereiro: Khrushchev - The Man and his Era

Devo admitir que antes de ler este livro eu sabia quase nada sobre Nikita Sergeyevich Khrushchev. Tinha uma vaga noção de que ele tinha sido um dos manda-chuvas da URSS e que estava no poder na época da crise dos mísseis (sobre o que eu também não sabia muito). E uma linha em uma música Russians do Sting ("Mr Khrushchev says We will bury you"). O meu ginásio e colégio foram quase nulos em termos de história contemporânea. O período também não era propício para informações sobre um líder socialista.

Demorei alguns anos para tomar coragem para encarar este livro que meu pai tem há bastante tempo. São 650 páginas de um texto muitas vezes denso. O livro possui no total 870 páginas, contando com extensos adendos de abreviações, notas, bibliografia e índice remissivo.

Esta é uma daquelas bibliografias em que o autor vai realmente ao fundo nas fontes, entrevistando muitas pessoas, visitando locais e lendo tudo que foi escrito a respeito. Além disso, o autor tenta desvendar o porque das ações de Khrushchev, que foi uma personalidade altamente complexa. Khrushchev se revela uma pessoa cheia de contradições, cujas ações nem sempre iam de acordo com suas ideias e frequentemente tinham resultado oposto ao que ele esperava.

A leitura do livro não somente traz conhecimento sobre Khrushchev, mas também sobre vários acontecimentos do século vinte e coloca alguma luz sobre o que era viver na União Soviética nesta época. No mínimo, trará ao leitor brasileiro uma nova dimensão à expressão "a coisa estar russa".

Para aguçar o interesse pela leitura, seguem abaixo alguns pontos descritos em detalhes no livro.

Khrushnev nasceu em uma pequena cidade russa, filho de camponeses muito pobres. Aí surge o primeiro conflito interno: Krushnev preferia se considerar um proletário a um camponês, porém grande parte das suas ações no governo estiveram relacionadas à agricultura, assunto sobre o qual se considerava profundo conhecedor. A vida não era fácil. Por exemplo, era preciso enfrentar invernos rigorosos com sapatos improvisados. Em 1908, Krushnev começou a trabalhar nas minas, num ambiente descrito como "o material do qual o anti-capitalismo foi feito": condições precárias, jornada longas, salários curtos. Com a Primeira Guerra Mundial, em 1914, as condições pioraram.

Daí se seguiram a revolução, a queda do czar, a guerra civil, a vitoria dos bolcheviques, uma campanha violenta de industrialização e coletivização, fome e peste. Estima-se que as mortes por fome em 1921 e 1922 na Rússia ultrapassaram as mortes ocorridas na Primeira Guerra e na guerra civil.

Krushnev apoiou a revolução, aproveitou as oportunidades surgidas e foi galgando os degraus no partido. A partir de 1929 mudou-se para Moscou e começou a se aproximar do núcleo do poder; em 1938 Stalin o enviou para a Ucrânia para chefiar o governo local.

Em 1941 a União Soviética entrou na Segunda Guerra, surpreendida por um ataque alemão. O livro não poupa a incompetência russa durante a guerra, particularmente de Stalin. O esforço de guerra, entretanto, aumentou ainda mais a crença de Krushnev no socialismo.

Com o fim da guerra Krushnev retornou para a Ucrânia, indo em 1949 para Moscou diretamente para o círculo central do poder. Perseguições políticas e execuções sumárias existiram desde o começo da revolução, mas com o passar do tempo Stalin estava cada vez mais paranoico e imprevisível. Os companheiros de Stalin viviam sempre com medo e não se negavam a implementar os expurgos sangrentos. Surge assim o segundo grande conflito interno de Krushnev, que foi cúmplice da morte de milhares. Apesar de seus esforços para mitigar o ocorrido, Krushnev frequentemente tentava se desculpar pela sua participação nestes eventos.

Em 1953 Stalin morreu, em um episodio grotesco. Em uma mistura de medo, incompetência e muito provavelmente malícia, Stalin foi atendido por médicos somente doze horas após ter um derrame. Cada providência médica era debatida por uma equipe médica e só executada após aprovada pelos membros do politburo. Stalin agonizou por cinco dias antes de morrer.

Num primeiro instante, Stalin foi substituído por um triunvirato composto por Malenkov, Beria (o temível chefe da polícia) e Molotov. Khrushchev parecia estar relegado a uma posição secundária. Dois anos e meio depois, Beria tinha sido preso e executado; Malenkov e Molotov mantiveram suas cadeiras no Presidium mas estavam totalmente subordinados ao grande chefe, Khrushchev. Para isto ele manipulou a máquina do partido e fez e traiu alianças.

Consolidado no poder, Khrushchev fez em fevereiro de 1956 o fato mais incrível de toda a sua vida: denunciou os crimes de Stalin no vigésimo congresso do partido comunista soviético, no que ficou conhecido como "discurso secreto". Ato duplicadamente heroico pois o expôs simultaneamente aos ataques das vítimas de Stalin (visto ter sido ele cúmplice dos crimes) e dos aliados de Stalin (que além da lealdade a Stalin tinham os seus próprios crimes na consciência). De certa foram, tanto o regime soviético como o próprio Khrushchev nunca se recuperaram disto.

Um golpe ainda tentou derrubar Khrushchev em 57, mas o apoio da máquina do partido permitiu-lhe virar a mesa. Para sorte dos conspiradores, Khrushchev não seguiu a tradição sangrenta de Stalin. A partir daí, até a sua queda, Khrushchev liderou sozinho a União Soviética.

No lado da economia, fez várias reformas tentando colocá-la nos eixos. Apesar de alguns progressos pontuais, os resultados sempre foram ruins e a falta de vários bens foi constante e a fome esteve sempre rondando.

A diplomacia também foi problemática. Dificuldades surgiram logo com o aliado mais óbvia, a China. A "inevitabilidade" da exportação da revolução (crença básica do socialismo, mas abandonada com o tempo) deixou em alerta todos os inimigos. A necessidade de manter um poderosa máquina de guerra estressava ainda mais a economia. A solução encontrada por Khrushchev foram as armas nucleares: a guerra não aconteceria enquanto os dois lados estivessem convencidos que o resultado seria a destruição mútua. A ameaça nuclear permitiu a Khrushchev reduzir as forças militares convencionais. Entretanto, era mais um blefe que uma ameaça, pois a União Soviética dispunha de poucas bombas e condições precárias para dispará-las contra os EUA, que por sua vez colocava os seus misseis na Europa.

Com negociações sobre a Alemanha cada vez mais emperradas, a desmoralização de voos frequentes de aviões espiões sobre a URSS e a colocação de mísseis na Turquia pelos EUA, Khrushchev resolveu apostar numa cartada pesada, iniciando a instalação de mísseis em Cuba e quase causando uma guerra nuclear (que era o que ele queria evitar). Ao final da crise foram retirados os mísseis tanto de Cuba como da Turquia, porém apenas os primeiros de forma pública (o que deixou Khrushchev com a aparência de perdedor tanto fora como dentro da URSS).

Além de tudo isto, Khrushchev teve uma relação conturbada com os intelectuais soviéticos, sofrendo com a sua própria falta de cultura e da manipulação tanto dos intelectuais como dos conservadores pró-censura.

Com o passar dos anos, o comportamento de Khrushchev ficou errático, com reformas malsucedidas sobre reformas fracassadas e mudanças constantes de rumo.

No final de 64, Khrushchev foi deposto. Traumatizados com o fracasso da tentativa de golpe em 57, os novos líderes tomaram uma série de cuidados antes, durante e depois da deposição. Khrushchev foi colocado praticamente sob prisão domiciliar e poucos tiveram a coragem de contactá-lo após a queda. Seis anos mais tarde Khrushchev morria. Sua morte foi discretamente anunciada e vários cuidados tomados para que poucos pudessem ir ao enterro.

Obs.: Estou tentando recuperar o atraso, este post foi começado no final de fevereiro e estava incompleto até agora. Em breve, devo publicar o "livro de março".

quinta-feira, abril 09, 2009

Consultores Altamente Pagos: Sempre os Vilões?

Uma das histórias de ontem no The Daily WTF segue a velha tradição de ter como culpado um HPC (Highly Paid Consultor). Para quem não quiser seguir o link, segue um resumo:

Uma agência de anúncios fechou um contrato com a Pepsi para desenvolver um CRM. Para surpresa deles mesmo, a dupla de desenvolvedores da agência de anúncios conseguiu fazer algo em alguns meses. Entretanto, o sistema estava longe de ser perfeito e por este motivo o chefe deles chamou um "SQL Guru". Após alguns dias o guru foi embora - e o sistema parou de funcionar. Aí os desenvolvedores descobriram que o guru não sabia nada de SQL e, entre outras besteiras, tinha desativado um constrain e feito um update que destruiu a chave da tabela de usuários, que era o centro do sistema. Os estragos no sistema foram considerados irreparáveis e a agência de anúncios voltou a dedicar-se a anúncios.

Ok, é inegável que existe uma legião imensa de falsos "especialistas" e "gurus" tentando cobrar quantias obscenas para realizar trabalhos medíocres. Mas, por outro lado, existe uma minoria de profissionais com conhecimentos bem acima da média dispostos a suar para ganhar dinheiro com trabalho sério.

Porque o primeiro grupo se sobressai tanto no mercado? Na minha opinião a culpa vem de quem os contrata. Tipicamente (como na história acima) a empresa que contrata um HPC o faz depois que mordeu mais do que consegue engolir. E espera que o HPC miraculosamente conserte tudo em um passe de mágica. Nestas condições ela é presa fácil dos enganadores e consegue muitas vezes anular a capacidade técnica dos competentes.

Porque os especialistas (bons ou maus) cobram tão caro? Existem vários motivos (igualmente bons e maus):
  • a oferta de bons especialistas é muito menor que a demanda
  • cobiça das empresas que agenciam os especialistas
  • a associação automática de "caro" a "de boa qualidade"
  • a empresa está sendo forçada a fornecer o especialista
O último da lista merece uma explicação, pois pode não ser óbvio. Ao se ver acuada no canto, a empresa que procura o especialista sai atirando para todo lado. Aí, alguém liga para um conhecido e pergunta se a empresa dele tem competência no assunto. A tendência natural será dizer que sim (mesmo que não saiba do que se trata), só para impressionar. E vem o pedido indecoroso: "Você nos empresta um dos seus especialistas? A gente paga...". Não querendo (ou não podendo) emprestar um especialista, um valor absurdo é cotado (como uma forma polida de dizer "cai fora"). E no desespero o outro aceita!

Para quem está pensando em contratar um "Super Especialista" deixo algumas perguntas a serem feitas antes:
  • estamos tentando começar a coisa direito ou estamos procurando um salvador da pátria?
  • queremos uma pessoa para nos orientar ou é melhor contratar uma empresa para fazer o serviço todo?
  • já fizemos a nossa lição de casa para fornecer as informações corretas ao consultor?
  • temos pessoas capacitadas para absorver (e validar) a consultoria?

quarta-feira, abril 08, 2009

quinta-feira, abril 02, 2009

Rescaldo Primeiro de Abril

Uma tradição que vem degenerando são as brincadeiras de Primeiro de Abril no mundo da tecnologia.

No passado tínhamos algumas coisas sofisticadas, como a write only memory (pdf do datasheet aqui). A (falecida) revista Byte costumava colocar anúncios e artigos falsos (quando saiu um editorial pedindo desculpas pelas brincadeiras dos anos passados eu soube que a Byte estava num caminho sem volta para o final). Mesmo revistas sérias já praticaram este tipo de coisa, para desespero de alguns (se a memória não falha, a Veja republicou como verdadeira uma notícia do New Scientist sobre o cruzamento da fruta pão com o tomate pelo Dr Mc Donnald).

As boas brincadeiras são aquelas que são óbvias mas bem sacadas e aquelas que tem te enganam no início mas estão cheias de pistas. A lista abaixo provavelmente não se encaixam bem nestas categorias:
A oferta de ontem do Giveaway of the Day me deixou em dúvida: brincadeira ou um dos programas mais idiotas que você pode comprar por US$49.99?

Sintam-se à vontade de colocar links de brincadeiras nos comentários.