segunda-feira, março 31, 2008

4o Encontro de Programadores C e C++


Sábado passado ocorreu o Quarto Encontro de Programadores C e C++ de Sampa onde tive o prazer de fazer uma das palestras. O inevitável powerpoint está disponível aqui, em abril pretendo transformar a palestra em uma série de posts aqui no blog.

Fotos do evento estão sendo colocadas aqui.

terça-feira, março 25, 2008

Obras Completas de Carl Barks em Oferta

Encontrei ontem em uma banca os primeiros exemplares da coleção "O Melhor da Disney - Obras Completas de Carl Barks" da Abril em oferta por R$7,95 o que é uma pechincha considerando que o preço na época do lançamento era R$14,95 e os números atuais estão sendo vendidos por R$16,95.

Para quem não conhece a coleção nem sabe que é Carl Barks fica a sugestão de comprar pelo menos um exemplar, garanto que vai gostar. Só não reclamem para mim se ficar viciado e acabar comprando a coleção inteira.

quarta-feira, março 19, 2008

Arthur C. Clarke (1917-2008)

Embora o trabalho (sempre ele!) esteja me impedindo de postar nas últimas semanas, não podia deixar de escrever pelo menos algumas linhas sobra a ida de um dos grandes nomes da ficção científica.

Para mim Arthur Charles Clarke era, acima de tudo, um Grande Escritor. Livros como Childhood's End, The City and the Stars, Rendezvous with Rama e Songs of Distant Earth me facinaram não somente pela ciência mas pela capacidade do texto em transmitir imagens e emoções. Suas estórias curtas, encontradas em várias coletâneas, são de altíssima qualidade.

Não era exatamente um inventor, mas tinha um faro apurado para detectar as potencialidades de novas tecnologias (o exemplo clássico, é claro, é o conceito dos satélites de comunicação geo-estacionários).

segunda-feira, março 03, 2008

Código de Barras - Código Intercalado 2 de 5

O código Intercalado 2 de 5 (I25) foi desenvolvido para melhorar a densidade do Código 2 de 5 Padrão (isto é, permitir colocar a mesma quantidade de informação em um espaço menor). É um código para números com uma quantidade par de dígitos (acrescenta-se um zero á esquerda se necessário). Cada seqüência de barras e espaços codifica dois dígitos, um nas barras e o outro nos espaços. Isto torna pouco viável a sua impressão através de uma fonte de letras.

A forma de codificação é idêntica à do Código 2 de 5 Padrão, porém aplicada a barras e espaços. São utilizadas duas larguras de elemento. O elemento mais largo deve ter duas a três vezes a largura do mais estreito. Cada caracter é codificado em uma sequência com 5 elementos, das quais 2 são largos e 3 são estreitos. O primeiro dígito é codificado nas barras da primeira seqüência, o segundo nos espaços da primeira seqüência, o terceiro nas barras da segunda seqüência e assim por diante.

Um código intercalado 2 de 5 é composto, no mínimo, do código de início, os códigos de dados e do código de fim. Um dígito de controle módulo 10 pode ser usado; neste caso o número codificado deve ter um número impar de dígitos, para resultar num número total de dígitos par.

As sequências utilizadas para os dígitos no Code Intercalado 2 de 5 são as mesmas do Código 2 de 5 Padrão, exceto que se aplicam tanto a barras como espaços:

Onde 'E' indica um elemento estreito e 'L' indica um elemento largo.

As marcas de início e fim fogem um pouco deste padrão:
  • o início é a seqüência: barra de largura 1, espaço, barra de largura 1, espaço
  • o fim é a seqüência: barra de largura 2, espaço, barra de largura 1
A largura de cada sequência é 14 a 18 módulos, dependendo da relação entre os elementos largos e estreitos. Considerando que não seja usado checksum e que o elemento largo tenha o dobro da largura do estreito, um código com n dígitos terá largura de 7*n+8 módulos:
  • 7 = 4 elementos de lagura 2 + 6 elementos de largura 1 para cada par de dígitos
  • 8 = largura das marcas de início e fim (4 módulos cada)
O Código Intercalado 2 de 5 não é um código robusto. Uma vez que as seqüencias de inicio e fim podem aparecer em alguns pares de dígitos, é possível (e relativamente fácil) fazer uma leitura parcial do código. Isto ocorre tipicamente ao se usar um leitor laser manual, com o feixe inclinado em relação ao código. Por este motivo, aplicações que requerem a leitura desta simbologia devem, sempre que possível, conferir o tamanho do código lido e rejeitar códigos com tamanho inferior ao esperado. Outra solução, para os casos em que múltiplos tamanhos precisam ser suportados, é exigir que barras horizontais acima e abaixo do código:

Por este motivo, a maioria dos leitores saem de fábrica com o I25 inibido ou limitado ao tamanho 14. Infelizmente o Intercalado 2 de 5 é ainda bastante utilizado, o que cria para os fornecedores de hardware e software os problemas de ensinar a configurar o leitor e explicar o porque de códigos inválidos serem capturados.

Um uso comum do I25 é na marcação de unidades múltiplas de varejo e atacado, no chamado ITF-14 ou DUN-14. O ITF-14 consiste no código de identificação do item (o EAN-13 que veremos no próximo post) acrescido de um dígito inicial que indica o modelo de embalagem (o que permite descobrir a quantidade de unidades na embalagem). Para evitar o problema de leitura parcial, o padrão DUN-14 estipula o uso das barras de proteção:

Um outro uso do I25 é nos documentos bancários brasileiros, consistindo o chamado Código Febraban. Este código possui tamanho fixo e dígito verificador, o que ameniza o problema da leitura imparcial. Padece porém de um tamanho exagerado (44 dígitos), muitas vezes não suportado pelos leitores projetados para o mercado americano ou europeu.

Do ponto de vista extritamente técnico, o código 128 substitui com vantagens o intercalado 2 de 5, apresentando densidade equivalente com muito maior robustez.

Atualizado em 18/jun/08 para corrigir o erro nos códigos de início e fim, detectado por José Roberto Vieira.