sexta-feira, maio 26, 2006

Sério ou Brincadeira?

Vi no Newsgroups do Technet o link abaixo

http://www.certifai.xpg.com.br/index.php

dei uma olhada no site e não consegui decidir se é ou não uma brincadeira. Será que alguém pagaria R$50 por um transcript MCP falso? (Para quem não conhece, o transcript MCP é uma folha com a relação das provas de certificação Microsoft que você fez, você imprime no seu próprio micro acessando um site da Microsoft).

Ah sim, é claro que ser for sério é ilegal, imoral, etc.

Agora vou voltar aos meus estudos para obter o meu certificado à moda antiga.

sexta-feira, maio 12, 2006

Certificação

Como mencionei em 10 de janeiro, estou a um exame da certificação MCAD e a dois exames da MCSD .Net (ambas já obsoletas). Graças às promoções do TechNet Brasil, tenho vouchers para exames gratuitos válidos até 1/julho. Portanto criei coragem e marquei o exame 70-320 para o começo de junho. Se sobrar fôlego, vou tentar também o 70-316.

Portanto, agora é "crunch time" e os posts aqui e no Wiki C/C++ Brasil vão ficar ainda mais escassos.

sexta-feira, maio 05, 2006

Amazon

Novo recorde de entrega da Amazon: fiz o pedido no dia 25/4, os três livros foram despachados no dia 27/4 e chegaram à agência hoje (5/5). E é bom lembrar que teve um feriado no Brasil no dia 1o. Ah, e foi pelo Standard International Shipping.

sexta-feira, abril 28, 2006

Bugs Terríveis de Achar - Execução Paranormal de Código

Os dois últimos dias foram de uma busca frenética atrás de um bug.

O bug se apresentou em um firmware que estamos desenvolvendo para um dispositivo e que roda em um microcontrolador. A programação deste tipo (sistema embarcado) é bem diferente da programação normal para PC. Como é comum nestes casos, o firmware é gravado em uma memória não volátil (memória Flash) dentro do próprio microcontrolador. Esta gravação é feita por um software de PC, através de um gravador ligado à porta paralela do PC e a determinados pinos do microcontrolador.

Uma segunda memória não volátil (EEProm), externa ao microcontrolador, é usada para manter dados não voláteis, alguns deles extremamente críticos para a operação (como o número de série do dispositivo). A gravação na EEProm requer uma série de passos: é preciso habilitar a gravação, enviar o comando de gravação, o endereço e o dado. Não é algo que possa acontecer por conta própria.

No processo de produção dos dispositivos, é gravado primeiro um software de teste no microcontrolador. Através de uma serial de debug, são feitos testes e gravadas as informações críticas. Após isto é gravado o firmware normal.

Bem, após a produção de 140 dispositivos, verificou-se que cerca de uma dúzia estava com número de série incorreto. Pânico! Uma primeira hipótese, erro de operação na produção, parece improvável dado a taxa de erros. Restam o software de teste estar gravando algo errado ou, pânico maior, o firmware normal estar destruindo as informações na EEProm. Por outro lado, este efeito nunca tinha sido observado com as duas dezenas de protótipos.

Uma primeira revisão do firmware mostra que a EEProm é gravada em poucos pontos. Segue-se uma discussão filosófica sobre a necessidade e conveniência destes pontos. Faz sentido colocar um número de série default em caso erro de checksum na EEProm? A conclusão é que o firmware normal deve evitar ao máximo gravar na região onde estão os parâmetros mais críticos. Entretanto, mudar isto antes de descobrir o que está acontecendo pode apenas mascarar um problema sério.

A decisão é acrescentar um teste para tentar pegar se o número de série está danificado. Se sim, acender um LED de erro e preservar o conteúdo da EEProm para ver se dá uma pista do que ocorre. Em seguida, tentar reproduzir o problema, refazendo o procedimento de produção com esta nova versão.

Feito o procedimento com 20 dispositivos, em 2 ocorre o erro. É uma boa notícia: o problema pode ser reproduzido.

Alguns testes mostram que o software de teste está gravando os valores corretos na EEProm. Hora de ativar os traces do firmware e observar as informações enviadas pela serial. Após alguma tentativas, verifica-se que a corrupção da EEProm ocorre logo após a carga do firmware.

O teste começa a ficar mais complicado. É preciso prestar atenção no trace enviado pelo dispositivo quando ele é re-iniciado após a carga. É um problema esporádico, às vezes ocorre apenas após muitas tentativas. Para dificultar, às vezes ocorre um erro na verificação feita após a gravação. Outras vezes, a execução do firmware não acontece ao final da gravação e verificação, sendo preciso esticar o braço e desligar e re-ligar o dispositivo.

Prestando mais atenção, percebe-se que o firmware executa mesmo quando ocorre um erro na verificação. Em uma destas ocasiões, o conteúdo da EEProm é danificado. Primeira teoria: o firmware executado estava danificado de uma forma que causou a gravação incorreta da EEProm. Segue-se uma discussão de como o firmware pode descobrir que está gravado errado e não executar neste caso (a técnica tradicional é colocar um checkum no código, obviamente não resolve se a rotina de verificação estiver danificada).

Segue-se mais bateria de testes, tentando ver se sempre que a EEProm é danificada ocorreu erro na verificação. Alguns minutos depois, teoria abalada: a EEprom foi corrompida sem que tivesse ocorrido erro de verificação.

Para tentar cercar mais o problema, coloquei na rotina de gravação da EEProm (no mais baixo nível) um teste do endereço de gravação. Se for o endereço do número de série, ao invés de gravar envia um ! para a serial. Mais algumas tentativas e aparece !!! isolado, sem os demais traces...

Olhando com mais atenção ainda, percebemos que existe alguma atividade no dispositivo durante a verificação da gravação, quando o processador devia estar parado. Nova teoria: existe algo errado no processo de gravação e verificação, que faz o processador iniciar a execução antes da hora e de forma "meio torta".

Para comprovar, coloquei uma variável que é iniciada com zero e incrementada a cada passo da iniciação do software. Na rotina de escrita na EEProm, acrescentei um teste: se não tiverem sido executados todos os passos da iniciação, envia pela serial @ seguido do valor do contador. Alguns poucos testes são suficientes para ver alguns @0 e @1 surgirem durante a verificação. Execução paranormal: a rotina de gravação está sendo executada desrespeitando o fluxo normal da execução.

Hora de reclamar do gravador para o projetista do hardware. Aparentemente o processador está recebendo um sinal de reset fora de hora. Após algumas tentativas de achar uma explicação no software para o comportamento anormal, decide-se colocar um capacitorzinho no sinal de reset que vem do gravador (algo como dar um tempinho em software). Antes de soldar o capacitor, o técnico decidiu verificar o cabo. Tinha um mau contato no pino de reset. Testes com um outro cabo e com o cabo com o mau contato eliminado confirmam que o problema sumiu.

Resumindo, um mau contato no cabo usado para gravar o firmware fazia com que ocasionalmente o sinal de reset "balança-se" durante a verificação da gravação. Isto deixava o processador meio "bêbado" e ele saia executando errado o firmware.

Agora é só eliminar todos os problemas potenciais que identificamos enquanto procurávamos o bug que não existia.

quinta-feira, abril 20, 2006

Sinais de Um Programa Ruim

Esbarrei com um artigo interessante sobre sinais no código fonte que indicam um programa problemático. Para quem não tiver paciência de ler o artigo todo, eis a lista de sinais:
  1. Comentários ausentes ou ruins
  2. Nomes inapropriados
  3. Formatação inconsistente do fonte
  4. Falta de teste de códigos de retorno e de erros em geral
  5. Repetições de código
  6. Falta de clareza
  7. Complicações desnecessárias
  8. Condições assumidas não documentadas
  9. Substituição das funções das bibliotecas padrões por funções próprias
  10. Falta de suporte à depuração
Esta lista pode inclusive ser usada como um checklist às avessas durante o desenvolvimento. Se você perceber que o seu código contém algum dos sinais acima, pare e conserte.

Se você precisar dar manutenção em um software, verifique antes os sinais. Se forem muitos, considere seriamente fazer um refactoring (mas pense muito antes de reescrever tudo).

quarta-feira, abril 19, 2006

GPF - Grilo Pulsante Fantasma

A foto acima é do brinqedinho que levei no Segundo Encontro de Programadores C/C++ em São Paulo. Como a regua e o cartão mostram, é um circuito bastante pequeno, onde os maiores componentes são a bateria, o buzzer (uma espécie de alto falante sem imã) e o resistor sensível a luz (LDR).

O componente mais importante, entretanto, é o PIC 12F675. Trata-se de um microcontrolador, um computardor quase completo dentro de um chip. Este modelo possui 1024 palavras para armazenamento de programa (Flash), 64 bytes de Ram para variáveis e 128 bytes de memória não volátil para dados (EEProm). O processador utiliza um conjunto de apenas 35 instruções. Neste projeto usei o clock interno de 4 MHz, o componente permite usar um cristal externo de até 20MHz. Possui um modo sleep, útil a circuitos a bateria, que reduz o consumo de energia a quase zero.

O microcontrolador possui uma quantidade grande de recursos. Possui internamente dois timers, que podem ser usados para gerar interrupções periódicas, fornecendo uma base tempo para o software. Seis dos oito pinos podem ser tratados como entrada ou saída digital (isto é, serem colocados em nível lógico "0" ou "1" por controle do software). Quatro dos pinos podem ser usados como entradas analógicas (o software pode ler o nível do sinal do pino como um valor digital de 8 ou 10 bits).

O objetivo do circuito era mostar os potenciais do microcontrolador e o fato dele poder até ser programado em C. Inspirado em um exemplo do fabricante do PIC, é um circuito para ser escondido em um lugar e perturbar as pessoas presentes. O circuito fica a maior parte do tempo dormindo. Em tempos aleatórios ele acorda e faz um pequeno bip (daí o grilo pulsante). Para tornar a detecção mais difícil, o bip é feito somente se o circuito estiver no escuro (daí o fantasma). O LED (que também só é acionado no escuro), permite confirmar que o circuito está ligado. Por último, um botão permite testar o circuito, soando o bip e piscando o LED. Desta forma, o cicuito usa:
  • uma entrada digital (o botão)
  • duas saídas digitais (o LED e o buzzer)
  • uma entrada analógica (o sensor de luz)
  • um timer para acordar o circuito periodicamente
  • um timer para fornecer a temporização para a geração da frequência enviada ao buzzer.
O software foi desenvolvido em C no PC e gravado no PIC através de um gravador externo. Acrescentando um conector e um resistor seria possível gravar o PIC sem retirá-lo da placa (usando o mesmo gravador).

O custo total do circuito fica abaixo de R$50. O PIC custa menos de R$15, comprado unitariamente em uma loja. O preço USA, para 100 peças é USD 1,19.

Quando se fala em microprocessadores, a maioria das pessoas pensa imediatamente em computadores de mesa. Entretanto a grande revolução está nos microcontroladores, que permitem acrescentar inteligência a equipamentos por um baixo custo. A nossa casa está repleta deles, escondidos em geladeiras, máquinas de lavar, micro-ondas, TVs, DVDs, etc.

segunda-feira, abril 17, 2006

Livros do mês

Um dos meus motivadores para aprender inglês foi a coleção de livros do meu pai, principalmente os de fição científica. A minha primeira leitura de verdade em inglês foi a trilogia original da Fundação de Isac Asimov (Foundation, Foundation and Empire e Second Foundation).

Embora isto tenho sido há muito tempo atrás, ainda existem alguns livros da coleção do meu pai que não tinha lido. Um deles era o clássico (infelizmente esgotado) The Weapon Shops of Isher de A. E. Van Vogt. Algumas idéias podem hoje parecer chavão, mas provavelmente eram novidade quando o livro foi escrito. É um daqueles livros que prende o leitor, você fica sempre querendo saber o que vai acontecer. De quebra tem um tradicional paradoxo de viagem no tempo, com o personagem que só existe no curto intervalo de tempo entre ele chegar do futuro e voltar ao passado.

Ao devolver este livro acabei pegando para reler The Double Helix de James D. Watson. São as recordações da descoberta da estrutura do DNA (que de forma não esperada esclareceu o processo de duplicação dos genes). O livro não se limita aos aspectos técnicos, tratando muito da questão do relacionamento entre os envolvidos e da concorrência versus cooperação. Mostra um pouco como funciona internamente o meio científico e as suas motivações.

Resumindo uma longa história em um único parágrafo, a estrutura do DNA foi descoberta por James Watson e Francis Crick após um período relativamente curto de estudos, a partir de dados experimentais (fotografias por raio-X de cristais de DNA) obtidos por Maurice Wilkins e Rosalind Franklin num trabalho bem mais demorado. Watson e Crick utilizaram principalmente a montagem de modelos, técnica usada anteriormente por Linus Pauling para descobrir a estrutura dos amino-ácidos e desprezada por Wilkins e Rosalind. Para complicar mais a situação, as principais fotografias usadas foram tiradas por Rosalind, e usadas sem o seu conhecimento, devido a problemas de relacionamento com os demais. Watson, Crick e Wilkins vieram ganhar o prêmio Nobel por esta descoberta (e outras relacionadas), porém Rosalind morreu alguns anos antes. Embora alguns considerem Rosalind uma injustiçada, prefiro a versão presente na Wikipedia.

segunda-feira, abril 03, 2006

C e C++

No Wiki do "C/C++ Brasil" está em discussão o nome do grupo. Um ponto sempre lembrado é o desejo de manter o C no nome, e nesta hora me sinto meio culpado, já que às vezes sinto que sou o único do grupo que programa no dia a dia em C.

Isto não significa que eu não tenha estudado e continue estudando C++. Ainda outro dia eu tomei um susto ao abrir um livro de C++ (de 94) e descobrir que eu não só tinha lido como tinha feito correções nos exemplos. E afinal, eu passei no exame de Visual C++ da Microsoft.

Na verdade, comecei a ter algum interesse em C++ no final dos anos 80. Nesta época chegamos a comprar na Humana uma cópia de um dos primeiros compiladores C++ para o DOS, o Zortech (que alguns anos depois foi comprada pela Symantec). A Borland foi uma grande divulgadora do C++, com o Turbo C++ e o Borland C++; lembro de um vídeo da Borland chamado "The World of Objects" (ou algo parecido). Em 92 a Humana fez um primeiro projeto em C++, usando o Microsoft C/C++ 7.0 (o primeiro compilador C++ da Microsoft).

Na Seal, fizemos alguns projetos com o Visual C++ 2.0 para serem rodados no NT 3.1 (ambos novidade na época). Alguns dos meu programas usavam até a MFC (então na versão 3.0). A maioria dos desenvolvimentos na Seal era feito em Visual C++ 1.5, para coletores de dados com sistema DOS. Eventualmente alguem teve a idéia de fazer uma biblioteca de classes para facilitar o desenvolvimento para os coletores. Embora eu não estivesse na época trabalhando na área de software, alguem me passou a especificação para dar os meus palpites. A especificação começava com uma classe CString (como se o VC 1.5 já não tivesse duas classes de string) e terminava com uma classe CUtil cujos membros eram funções diversas (para deixar tudo orientado a objeto?). No final a classe CUtil foi abandonada, mas a CString ficou lá.

Foi lendo esta especificação e a coluna de dúvidas de C++ do Microsoft System Journal que eu concluí que conceitualmente o C++ é bem mais pesado que o C. Recentemente escrevi um artigo sobre construtores no Wiki, e foi um trabalho bastante árduo para descrever algo que é simplesmente básico (quem usa C++ no dia a dia tem que ter tudo isto e muito mais na ponta da lingua). Talvez por isso eu continue usando C mesmo quando o C++ é uma opção disponível. O fato de eu estar cercado de outros programadores C também contribui, principalmente porque eu sempre tenho a esperança de deixar a manutenção para eles.

quinta-feira, março 30, 2006

Yes, nós temos livrarias!

Sou fã de longa data da Amazon, e costumo elogiá-la com frequência. Entretanto, sou fã de mais longa data da Livraria Cultura, desde quando não existia a Internet e a única loja deles era no Conjunto Nacional.

Dando uma olhada ontem, percebi uma novidade: livros usados. Diferente da Amazon, que somente intermedia a venda de livros usados, a Cultura recompra livros em bom estado (comprados nos últimos 6 meses) por 25% do preço original e os revende. Fiz uma experiência com o mais recente Asterix e recebi um exemplar em excelente condições pela metade do preço. E a entrega foi no mesmo dia (coloquei o pedido às 12:50, saiu de lá às 15:14 e foi entregue no começo da noite).

Reforço a minha sugestão de sempre: antes de comprar um livro na Amazon, dê uma pesquisada nas livrarias nacionais.

quarta-feira, março 29, 2006

Covers, versões, remakes etc

Ontem (28/mar/06) , o Jornal da Tarde falava um pouco sobre covers, na esteira de apresentações no Sesc Santana de bandas covers dos Beatles, The Who e Mutantes.

Conforme detalhado no link acima, covers não são uma novidade e existe uma certa polêmica sobre como catalogá-los. Alguns interpretes tentam copiar até a aparência do interprete original (como a maioria dos Elvis impersonators). Outras se concentram em procurar reproduzir ao vivo o som original (por exemplo, o The Australian Pink Floyd Show). Alguns grupos até tentam reproduzir mais de uma banda ao mesmo tempo (como a Beatallica).

Em alguns casos, o material original é usado apenas como ponto de partida. Isto funciona particularmente bem com as músicas dos Beatles, onde é bastante difícil fazer algo melhor com um arranjo parecido com o original. Como exemplo, recomendo o disco Tribute do Rick Wakeman, que você encontra por aí por menos de R$10.

sexta-feira, março 17, 2006

quarta-feira, março 15, 2006

A Dura Vida de Usuário de Computador

Nos artigos americanos é bastante comum se referirem à mãe com um exemplo de usuário comum. No meu caso, minha mãe (felizmente) não usa computador. Entretanto, meu pai usa. Não é um exatamente um usuário comum, mas sofre com frequência com as coisas incompreensíveis que os softwares fazem.

Há pouco mais de um ano, ele comprou o Norton System Works. No começos dos anos 80, Peter Norton era um colunista da recém criada PC magazine que colocou à venda um utilitário para recuperar arquivos apagados. Ao primeiro utilitário se seguiram outros, surgindo o Norton Utilities. Com o passar dos anos os utilitários passaram do DOS para o Windows, a empresa foi comprada pela Symantec e até a tradicional foto do Peter Norton de braços cruzados sumiu dos anúncios e embalagens.

Algum tempo atrás o System Works começou a reclamar que uma assinatura estava vencida. segundo as instruções da tela, meu pai acabou caindo na loja on line, onde comprou e fez o download de uma atualização do System Works. Entretanto, o software continuou reclamando da assinatura e meu pai acabou comprando também a renovação de assinatura do antivirus em separado (ele achou que era apenas R$39, mas no caso da renovação de assinatura os preços no site brasileiro são em US$!). Entretanto, o software continuou reclamando que a assinatura estava vencida. Além disso, volta e meia aparecia uma tela do Windows Installer, tentando instalar algo. Após algum tempo aparecia uma mensagem de erro dizendo que o arquivo de instalação devia ser rodado a partir do Setup. Foi neste ponto que ele entregou os pontos e me chamou.

O primeiro ponto que eu percebi foi que o System Works não estava atualizado. A primeira ideia foi tentar rodar novamente o instalador. Entretanto, meu pai não sabia aonde ele tinha sido colocado. Na FAQ do site da Symantec as soluções para este problema (aparentemente comum) são olhar no diretório selecionado no Save As ou então, se o usuário souber o nome do arquivo do instalador, usar o File Search. É claro que se meu pai soubesse em qual diretório tinha recebido o arquivo nós não precisaríamos olhar no FAQ. E se eles próprios não sabem dizer o nome do arquivo, como esperar que nós soubessemos? (No final o arquivo se chama Setup.exe, como dezenas de outros, portanto o File Search não seria muito útil). O e-mail de confirmação do pedido tem um link para refazer o download, com as instruções de digitar o número do pedido e a senha. É claro que na página apontada pelo link não tinha nenhum lugar para fazer downloda ou entrar com estas informações. Após navegar por algumas páginas achamos a página de download, conseguimos lembrar a senha e fazer o download do Setup.exe.

O Setup instala um gerenciador de download que faz o download do software propriamente dito (quase 100M). Pausa para visitar a geladeira. Terminado o download é hora da instalação (seguida de um tradicional restart). O passo seguinte (automático, como tudo mais) é ativar e registrar o produto. Entretanto, o micro do meu pai não se conecta diretamente à internet quando entra no ar, é preciso chamar o "discador" do Speedy manualmente (um procedimento teoricamente sensato). Logo a primeira tentativa não teve sucesso. Feita a conexão à internet, foi preciso umas 3 tentativas para ter sucesso na conexão ao servidor da Symantec. O programa apresenta então um a lista de providências 'urgentes' a serem tomadas. A primeira é atualizar o software que acabou de ser baixado. É claro que isto não inclui as definições atualizadas de virus, que são um download a parte.

Bem, resumindo uma longa história, foram cerca de 2 horas para conseguir instalar o System Works. O Windows Installer parou de reclamar, a assinatura está renovada. Tem agora um ícone imenso na barra de programas e o tempo de boot passou de imenso para quase insuportável.

E daqui a 12 meses a assinatura vai acabar de novo...

segunda-feira, março 13, 2006

Protocolos de Comunicação

Um dos trabalhos que andei fazendo envolveu implementar o protocolo XModem em coletores de dados. Os protocolos de comunicação são algo que me facinam há muito tempo (afinal, os meus dois primeiros empregos estavam relacionados a comunicação de dados).

Um protocolo de comunicação é um conjunto de convenções usado para mover informações entre dois equipamentos. Os principais objetivos de um protocolo é cuidar do endereçamento (no caso de ligações multiponto) e garantir a integridade das informações. Embora isto não seja muito visível atualmente, a comunicação à distância está sujeita a grande quantidade de erros. A maioria dos equipamentos atuais (inclusive modems) possuem protocolos embutidos que detectam e recuperam erros de forma quase transparente. No começo da comunicação via modem, os erros de comunicação eram mais evidentes. Antes da internet, a vida on-line era feita através das BBSs (computer Bulletin Board Systems) que enviavam os textos sem protocolo, era comum caracteres sumirem, mudarem ou mesmo surgirem do nada. Um bom protocolo de comunicação precisa ter uma boa resistência a estas ocorrências.

A maioria dos protocolos de comunicação se baseiam nos mesmos conceitos. O primeiro destes conceitos é um pacote. O início de um pacote é normalmente marcado por um caracter especial. O final de um pacote pode ser determinado de três formas básicas: tamanho fixo em função do tipo de pacote, um campo de tamanho dentro do pacote ou um caracter especial no fim. Para detectar erros, é comum acrescentar-se ao final do pacote um ou mais bytes que são calculados a partir dos demais. O receptor recalcula estes bytes e confere com os recebidos, se não forem iguais é porque um erro ocorreu. Exemplos comuns de detecção de erro são os checksums (soma desprezando vai-um) e os crcs (cyclic redundancy codes). Alguns sistemas utilizam códigos de correção de erro (ECC) que além de detectar erros pode corrigir uma parte deles. O mais comum entretanto, é recuperar uma situação de erro solicitando a retransmissão do pacote. Na forma mais simples, a cada pacote recebido o receptor envia um caracter que indica se o pacote foi recebido corretamente (ACK - Acknoledge) ou com erro (NAK - NonAcknoledge). Para tratar o caso em que um ACK, NAK ou pacote é perdido no meio do caminho normalmente os pacotes são numerados e as recepções são temporizadas. Por exemplo, se o transmissor envia o pacote 31 e o receptor o recebe corretamente mas o ACk é perdido, o transmissor irá dar um timeout e re-enviar o pacote 31. O receptor ignora o pacote duplicado e re-envia o ACK para que o transmissor envie o pacote seguinte.

Como descrito acima, é comum os protocolos darem significado especial para alguns códigos. A tabela ASCII reflete isto, reservando os primeiros 32 códigos para os caracteres de controles, alguns como nome como Start of Transmission (STX), Start of Header (SOH), End of Text (ETX), Acknoledge (ACK) e Non-Acknoledge (NAK). Existem dois tratamentos comuns para os códigos de controle presentes no interior dos pacotes (nos dados). O mais comum é permitir a presença de caracteres de controle dentro de pacotes; isto é mais simples e eficiente porém pode causar problemas quando ocorre algum erro e um caracter de dado é tratado erroneamente como caracter de controle. Outra opção é utilizar um caracter de prefixo (o código ASCII tem o DLE com esta finalidade). Por exemplo, um protocolo pode convencionar que para enviar um SOH nos dados deve ser enviado DLE A e que para enviar DLE deve ser enviado DLE P ou DLE DLE.

Uma outra coisa impressionante é como determinados protocolos criados de forma despretenciosa acabam virando padrões e se mantendo vivos por décadas. O protocolo XModem foi criado nos anos 70, por uma pessoa que queria passar arquivos de um micro para outro e permanece em uso até hoje, apesar de ter uma série de limitações.

A implementação de protocolos envolve conceitos e técnicas interessantes de programação. Em ambientes sem multiprogramação muitas vezes o programa precisa analisar os caracteres recebidos um a um; após examinar cada caracter precisa retornar a um loop principal onde outras funções são tratados. Exemplificando em um pseudo C:

// loop principal
while ( )
{
  TrataTeclado ();
  AtualizaTela ();
  if (RecebeuCaracter)
    TrataCaracter ();
  ...
}

Neste caso é inevitável implementar o protocolo como uma máquina de estados. Por exemplo, o pacote básico do XModem começa com um caracter SOH e tem 132 caracteres:

enum { ESPERANDO_SOH, RECEBENDO_PACOTE } estado = ESPERANDO_SOH;
byte pacote [132];
int i;

TrataCaracter (byte c)
{
  switch (estado)
  {
    case ESPERANDO_SOH:
      if (c == SOH)
      {
        estado = RECEBENDO_PACOTE;
        i = 0;
        pacote[i++] = c;
      }
      break;

    case RECEBENDO_PACOTE:
      pacote[i++] = c;
      if (i == 132)
      {
        TrataPacote();
        estado = ESPERANDO_SOH;
      }
      break;
  }
}

Em um ambiente multitarefa, é possível fazer algo mais legível como:

byte pacote [132];
int i;

RecebePacote ()
{
  While (RxCar() != SOH)
    ;
  pacote[0] = SOH;
  for (i = 1; i < 132; i++)
    pacote[i] = RxCar ();
  TrataPacote ();
}

(Obviamente estes exemplos são artificialmente simples, existem variações do XModem , não estou tratando timeouts, etc.)

No caso de você estar desenvolvendo para um sistema sem sistema operacional (um com sistema capenga como o DOS), você provavelmente vai ter uma fila para sincronizar a recepção em tempo de interrupção com o consumo dos bytes. Se você quiser implementar multitarefa por contra própria, vai ter que implementar um semáfaro para a fila (neste caso o RxCar() acima faz uma operação P na fila e fica bloqueado se a fila estiver vazia, até que a interrupção coloque um caracter na fila e faça um operação V).

Se tudo isto parece longe do seu dia a dia, lembre-se que você está lendo isto em um site através (no mínimo) dos protocolos TCP/IP.

quarta-feira, março 08, 2006

Delphi has left the building


A notícia é velha, mas só a vi agora; a Borland vai sair do mercado de IDE (Ambiente Integrado de Desenvolvimento) e está procurando um comprador para o Delphi, JBuilder e C++ Builder.

A Borland é uma empresa que nasceu mais ou menos na mesma época que o PC e nos anos 80 conseguiu criar uma imagem muito boa. Seus primeiros produtos (Turbo Pascal, Sidekick e SuperKey) logo se tornaram best sellers, com preços acessíveis (olhando numa revista de 86, o Turbo Pascal 3.0 custava $99.95 enquanto que o Microsoft C 4.0 custava $319) e o "Borland No-nonsense License" (trate o software como um livro). A Borland popularizou algumas categorias de software, como IDE (o Microsoft C 4.0 funcionava por linha de comando) e TSR (Terminate e Stay Resident).

No final dos anos 80, a Borland sonhou alto e lançou não somente outras linguagens (como o Turbo C, Turbo Prolog e até o Turbo Basic) como uma planilha (Quattro), um gerenciador de banco de dados (Paradox) e um editor de texto (cujo nome me falha). No começo dos anos 90 (antes do surgimento do Visual Basic, abrindo a programação Windows para todos), a Borland conseguiu a façanha de ter o melhor ambiente de desenvolvimento para o Windows 16 bits, com o Borland C++. Ainda nesta época, lançou o Turbo Pascal for Windows, que veio a se tornar o Delphi.

O Delphi sempre contou com características de respeito. Juntou à facilidade RAD do Visual Basic uma linguagem estruturada orientada a objeto. Fez a transição dos 16 para os 32 bits e, mais recentemente para o .Net (algo que o Visual Basic não conseguiu). Desde o começo foi capaz de gerar código nativo e de pequeno tamanho (para ter uma idéia, a primeira versão Windows do software de imposto de renda cabia num disquete, a versão deste ano tem 3 Mbytes). Até mesmo suporte a Linux o Delphi chegou a ter. Apesar disto, a popularidade do Delphi nunca foi imensa.

Embora ainda exista uma esperança da Borland voltar atrás (como foi na mudança de nome para Inprise) ou de achar um comprador que consiga pelo menos manter a base atual de fãs do Delphi, o mais provável é que o Delphi passe a ser um produto de nicho, se defasando ao longo do tempo. É claro que vai demorar muito para acabar (afinal, ainda vemos aplicações Clipper em uso), mas vai ser cada vez mais arriscado desenvolver em Delphi.

E com isto as opções para desenvolvimento de aplicações "nativas" ficarão ainda mais limitadas. Tirando as alternativas "livres", não sobra muita coisa além do Visual C++ da Microsoft. Para aplicações do tipo formulários + banco de dados, o futuro parece ser Java e .Net. Daqui a alguns anos, para usar o programa de imposto de renda muita gente terá que fazer um download de dezenas de megabytes para instalar a máquina virtual Java ou o framework .Net atualizado.

Um último ponto a pensar é a questão da influência do código "livre" na decisão da Borland. No caso do JBuilder, parece bastante claro que a Borland perdeu clientes para o Eclipse. Apesar do discurso anti-Microsoft de muitos proponentes do "software livre", as empresas menores e os produtos de nicho sofrem muito mais com esta "concorrência". E, como resultado, se acentua mais a concentração do mercado em um ou poucos produtos.

domingo, fevereiro 12, 2006

Crosby, Stills & Nash

Embora não muito conhecido no Brasil, o CS&N foi aclamado como 'supergrupo' desde que surgiu em 68. Com uma mistura de rock e folk, ele se destaca pelas harmonias vocais e pelas canções engajadas. David Crosby é um hippie californiano que começou a ficar famoso no grupo The Byrds. Stephen Stills é o sulista que se juntou a Neil Young no Buffalo Springfield, é um grande guitarrista (embora às vezes exagere na pose). Graham Nash é o ingles que fez parte do Hollies; suas canções, embora simples do ponto de vista instrumental, tem aquela qualidade de tocar fundo nas pessoas.

Tenho 2 DVDs (nacionais) deles. O primeiro é Daylight Again, gravado de um show feito em 1982 (a contracapa diz 83) na esteira do sucesso do disco com o mesmo nome. Um grande show, com uma grande banda de apoio. O único senão é a aparência do Crosby, completamente 'chapado', imóvel com os olhos fixos ou fechados. Estranhamente, isto não afetou a sua voz. Para compensar, Stills está em plena forma e aproveita bem um pequeno arsenal de guitarras. Entre os vários destaques, preste atenção em You Don't have To Cry, foi nesta música que, em 68, pela primeira vez eles experimentaram cantar juntos. Fica claro porque eles decidiram na hora formar um grupo.

O outro DVD é The Acoustic Concert, um show de 1991. Embora eles próprios chamem o show de Acústico, na maior parte Stills está tocando uma guitarra elétrica. Um descrição mais exata é que é show só com eles, sem banda de apoio, só as vozes e guitarras (e um piano em algumas músicas). O resultado é de literalmente arrepiar. Crosby está ótimo, tendo se desintoxicado na marra através de alguns meses na prisão.

Quem quiser ouvir amostras gratuitas do som deles, tem algumas músicas para download no 4WaySite (destaque para Wind On The Water). No Amazon tem um dowload gratuito de uma música mais recente do Nash. Quem quiser saber a história completa do CS&N, tem um exelente biografia de Dave Zimmer.

Advinhe o Filme

Um dos recursos pouco aproveitados da Sky é a possibilidade de ver um resumo curto do filme que está sendo apresentado. Poderia ser útil para escolher o filme, e certamente ajuda para confirmar se um determinado filme é o que estamos pensando ou um homônimo.

Ontem eu vi um filme cujo resumo era Família rica, de hábitos elegantes mas pouco convencionais, tem sua tranquilidade ameaçada quanto suposto tio desaparecido se infiltra em sue lar. Qual era o filme? A Familia Adams... (vai passar de novo hoje)

O Fim da AOL Brasil

Ando tão desligado que só fiquei sabendo do fim da AOL Brasil quando recebi o aviso que o meu e-mail vai sumir daqui a pouco mais de um mês.

Morando em Osasco (a 1 Km da fronteira com São Paulo) eu não tinha muitas opções quando comecei a acessar a internet, pois os grandes provedores não tinha número local (só muito recentemente ligação para São Paulo deixou de ser interurbano). Além disso, sou cliente do Itau o que dava direito a uma mensalidade reduzida.
Por tudo isso dava para aguentar o uso de software não padrão e as dificuldades de acesso ao e-mail pelo Outlook. Aliás, desde que coloquei banda larga em casa, eu só usava o e-mail, o discador da AOL nem está instalado nos micros. Continuei assinate por preguiça de sair acertando o endereço de e-mail nos vários serviços que uso.

Aparentemente inundar as pessoas com CDs e firmar parcerias com o Itaú e o Mac Donnald's não foi suficiente para a AOL Brasil dar lucro.

sexta-feira, fevereiro 10, 2006

O Enigma do Quatro

Faz quase um mês desde o último post. Não foi falta de assunto, preguiça ou férias em uma ilha paradisíaca, foi excesso de trabalho mesmo.

Apesar disto, sobrou tempo para ler O Enigma do Quatro. Seguindo a moda atual, é um livro sobre um mistério da Renascença. A contra capa possui uma inevitável comparação elogiosa com Dan Brown.

Não consegui me entusiasmar muito com o livro. Ele me pareceu muito arrastado, só pegando impulso no quarto final. O estilo também não faz o meu gênero, muitos flashbacks para contar o interrelacionamento entre os personagens e o avanço na solução do enigma. Para completar as mais de 400 páginas da edição nacional, muitas descrições de prédios de Princeton.

Decididamente, em termos de mistérios da Renascença prefiro a primeira temporada de Alias.

sábado, janeiro 14, 2006

Maigret

Descobri neste começo de ano que a editora L&PM está publicando os livros do inspetor Maigret em formato de bolso (e preços acessíveis).

Sou fã de Maigret de longa data. O estilo dos livros é diferente dos livros policiais mais conhecidos (como os da Agata Christie). A ênfase está mais na ambientação da trama e na caracterização dos personagens que no crime em si. O final, normalmente, revela uma trama sórdida e personagens com suas vidas dominadas pelas fraquezas humanas. Outra diferença é que Maigret é um policial, o que dispensa as frágeis reviravoltas e coincidências comuns nos livros policiais para levar o detetive ao crime. É também bastante curioso ver o funcionamento da policia francesa e seu estreito relacionamento com a justiça (para começar, Maigret trabalha na Polícia Judiciária).

Sinto também uma certa semelhança entre o comportamente de Maigret durante a investigação e o meu próprio comportamento quando estou debugando um problema, particularmente a sensação de peso e hesitação.

Nem todos irão apreciar o estilo de Georges Simenon, e talvez seja daqueles que só se começa a apreciar depois de ler mais de um. Os interessados não devem ter dificuldade de achar os livros em livrarias (por exemplo, Cultura e Siciliano) e bancas. O livro que acabo de ler é A Fúria de Maigret, na mesma coleção tem Maigret e o Homem do Banco, que também recomendo (a parte em que Maigret vai obter informações sobre o morto no seu local de trabalho é imperdível).

terça-feira, janeiro 10, 2006

Mais um Exame de Certificação

Em 15 de abril de 2003 comprei na Amazon o meu primeiro lote de livros sobre .NET. Entre eles, o MCAD/MCSD Training Guide do Amit Kalani para o exame 70-315 (Developing and Implementing Web Applications with Visual C# and Visual Studio .Net). Meu objetivo, na época, era obter o MCAD até o final do ano. Considerando os exames em que já fui aprovado para obter o MCSD Visual Studio 6, preciso, além do 70-315, apenas mais um exame (70-320).

O ritmo do estudo oscilou conforme a pressão do trabalho e da família. Na metade de 2003 mudei as minhas prioridades e passei a estudar para o exame 70-300 (Analyzing Requirements and Defining Microsoft .NET Solution Architetures), a fim de aproveitar uma oferta de exame gratuito para quem já tinha a certificação em MCSD. Após passar no exame, voltei à inconstância do estudo. De alguma forma, 2004 passou sem que eu prestasse qualquer exame.

Em agosto de 2005, ganhei um voucher de exame gratuito em uma das promoções do TechNet Brasil e defini como nova meta para o MCAD o final de 2005. Em novembro, com o lançamento do Visual Studio 2005, a Microsoft anunciou novos exames (a serem disponibilizados em 2006) e uma mudança radical nas certificações de desenvolvimento. Em meados de dezembro, descobri que o voucher valia apenas até 8 de janeiro. Com este incentivo adicional, entrei em um ritmo acelerado de estudo e no dia 4 passado prestei e passei o exame (agora quase obsoleto).

Para quem não conhece o processo de certificação da Microsoft, eu diria que na essência eles consistem em passar em exames. Você estuda da forma que achar melhor, agenda o exame em um centro autorizado, vai no dia combinado, responde às perguntas no micro e se acertar um número mínimo de questões passou no exame. Tendo passado em um exame, você é um MCP (Microsoft Certified Professional), com direito a diploma, cartão e broche. Determinadas combinações de exames dão direito a títulos adicionais (com diploma, cartão e broche).

A pergunta mais comum sobre certificação é se vale a pena. A minha resposta é que depende do que você espera da certificação. No meu caso, eu comecei a me interessar por certificação no final de 2001, em um momento em que estava com grandes dúvidas sobre a minha carreira. Meus objetivos eram dois: mostrar a mim mesmo que eu era capaz de passar nos exames e aumentar a abrangência dos meus conhecimentos (já que eu trabalhei sempre em áreas bem específicas). Tenho certeza que atingi estes dois objetivos. Não percebi os efeitos colaterais da certificação apregoados por alguns, como aumento expressivo da remuneração, veneração pelos colegas de trabalho e fim da queda de cabelo.

Um outro mito sobre certificação é a sua relação direta com a experiência profissional com o assunto. Eu diria um profissional com anos de experiência terá dificuldades nos exames, pelo fato da experiência tender a se concentrar em algumas tecnologias e os exames serem muito abrangentes. Olhando pelo outro lado, é plenamente possível passar num exame sem ter experiência profissional no assunto. No meu caso específico, tenho usado os exames como incentivo para estudar assuntos com os quais não tenho contato no dia-a-dia e os resultados tem sido positivos.

Para quem ainda pretender prestar o exame 70-315, alguns comentários. O livro do Amit Kalami foi muito bom, além de preparar para a prova ele ensina bastante coisa para quem for usar C# no dia-a-dia. Recomendo fazer toda a parte prática do livro (o que acabei não fazendo na correria final). O exame consta de 43 questões de múltipla escolha, o software deixa bem claro quando é esperada mais de uma alternativa e não deixa selecionar a mais ou a menos. O tempo é mais que suficiente, e ainda se ganha mais 1/2 hora pelo exame estar em inglês. A nota mínima é 700, ou seja, você precisa acertar pelo menos 31 das 43 questões (supondo que não se possa acertar parcialmente uma questão). A redação das questões sofre muito da tentativa de dar uma roupagem "prática" às questões, o que resulta numa enxurrada de informações desnecessárias. Por outro lado, ocasionalmente uma informação vital está escondida no meio do texto, portanto você precisa ler tudo com muita atenção. As questões em si são um segredo industrial da Microsoft e você precisa aceitar um NDA antes de começar o exame. Como levo a sério NDAs, digo apenas que o livro do Amit Kalami cobriu bem o assunto. O nível de dificuldade é suficiente para fazer a maioria das pessoas suar, é importante não entrar em pânico ao ficar em dúvida e lembrar que você não precisa acertar todas as questões para ser aprovado.

Agora é decidir se vou tentar fazer o 70-320. Apesar de também estar obsoleto, o livro está na minha estante pegando poeira...

Enquanto isso, tem gente já fazendo os exames da nova geração.