quarta-feira, abril 23, 2008

Padre Adelir de Carli: Candidato a um Darwin Award?

Antes de mais nada, gostaria de esclarecer que torço para o padre Adelir de Carli ser encontrado são e salvo. Mas, se o pior acontecer, ficarei pensando se não é o caso de nominá-lo para um Darwin Award.

Para quem não conhece, os Darwin Awards são desprestigiosos prêmios dados a "pessoas que contribuem para a evolução da espécie humana se retirando do pool de genes". Em português claro, são pessoas que de uma forma estúpida se matam ou destroem a sua capacidade reprodutiva.

Pelo que leio nos jornais, o padre parece ser uma boa pessoa. Sua principal motivação para a aventura que pode ter resultado na sua morte era nobre: chamar a atenção para o trabalho comunitário do qual ele faz parte (Pastoral Rodoviária).

Por outro lado, alguns fatos relatados me levam a suspeitar de seu bom senso:
  • Tentar quebrar um recorde de 19 horas voando com balões de festa cheio de gás hélio.
  • Fazer isto com um mínimo de equipamentos de segurança (por exemplo, depender de um celular para se comunicar com a terra) e sem uma equipe de apoio (pelo que li até agora).
  • Insistir em partir com condições climáticas desfavoráveis
Não se pode dizer que ele seja totalmente irresponsável: estava usando um roupa térmica, capacete e tinha um paraquedas. Segundo alguns relatos (mas não todos) ele estaria sentado em uma cadeira flutuante.

Fico portanto em dúvida se ele se encaixaria nos requisitos para o prêmio. E torço para que se safe desta, o que certamente o desqualifica.

Tirando Proveito de Pendrives

Os "pendrives" (mais precisamente USB Flash Drive) já exitem a bastante tempo e conseguiram desbancar os floppys como forma de transportar arquivos entre micros.

O meu primeiro pendrive foi um JumpDrive da Lexar Media, escolhido pelo fato de poder ser acoplado a um tocador de MP3 da mesma marca, comprado em 2004. Devido a restrições orçamentárias, comprei o modelo de 256MBytes (custou US$42 nos EUA).

Embora funcionasse perfeitamente, a sua 'baixa' capacidade me levava a usar com frequência CDs para mover arquivos entre o trabalho e casa. Além da fragilidade durante o transporte, os CDs R/W são bem lentos para gravar (e não aguentam muitos meses de serviço); CD-R é mais rápido mas o resultado são literalmente pilhas de acumulados ao longo dos anos.

Por este motivo, resolvi comprar um novo pendrive, com um pouco mais de capacidade. Acabei comprando um DataTraveler de 1GB da Kingston, que é um modelo "entry-level" (continuo com restrições orçamentárias). Custou R$32 na Kalunga (e provavelmente deve ser achado por bem menos por quem não tiver restrições morais em não pagar impostos). Até agora (cerca de uma semana) o DataTraveler não decepcionou nem surpreendeu.

Este post, entretanto, não visa falar de hardware mas sim de software. Motivado pelos comentários em um post no efetividade.net, resolvi começara a usar alguns utilitários para tirar maior proveito do pendrive.

TrueCrypt

Uma das preocupações de quem usa pendrive é a possibilidade de perdê-lo e as informações armazenadas cairem em mãos erradas. O TrueCrypt é uma forma simples de proteger os dados em um pendrive.

O TrueCrypt é um software bastante completo, com inúmeras opções e usos, no roteiro abaixo uso apenas um mínimo dos seus recursos. Recomendo fortemente ler a documentação que está no site.

O roteiro abaixo mostra como usar o TrueCrypt de forma simples (sob o Windows):
  • Baixe o Setup do site
  • Execute o setup, aceite o termo de licenciamento, selecione a opção Extract e escolha um diretório no pendrive.
  • Execute o TrueCrypt.exe do diretório onde você o extraiu e clique em 'Create Volume'.
  • Escolha 'Create a file container', 'Standard TrueCrypt Volume', selecione um diretório do pendrive (pode ser o raiz) e de um nome discreto ao arquivo ('dump', 'danificado', 'high score', etc). Aceite os defaults nas opções e escolha um tamanho apropriado para o seu volume criptografado (por exemplo 100M). Escolha com carinho uma senha, qualquer coisa com menos de 20 caracteres resulta em um Warning. Fique movendo o mouse em cima da tela seguinte por vário segundos, clique em Format, aguarde e clique em Exit. Pronto, você criou um volume criptografado!
  • Para colocar dados no volume, selecione o arquivo na tela inicial (clique em Select File), selecione uma unidade na lista no alto da tela, clique em Mount e forneça a senha. A partir daí basta copiar os arquivos para a unidade para eles serem salvos criptografados. Quando terminar, clique em Dismount.
  • Para acessar o volume criptografado em outra máquina, basta colocar o pendrive, executar o TrueCrypt.exe e montar o volume.
Repetindo, o TrueCrypt tem muito mais recursos. Estudo o manual e selecione os que forem mais apropriados para o seu uso.

PortableApps

O 'pulo do gato' no procedimento descrito acima é não precisar instalar o TrueCript no micro, basta ter os arquivos necessários em um diretório do pendrive. Se você gostou desta idéia, você vai gostar de PortableApps.

A idéia de PortableApps é fornecer versões de software livre que podem ser rodadas diretamente de uma unidade removível, não necessitando de instalação. Para facilitar ainda mais, existe o PortableApps Menu, que é uma expécie de Start Menu específico para estas aplicações.

Existem várias aplicações disponíveis, o roteiro abaixo é somente para dar um gostinho:
  • Baixe o instalador da Base Editon do PortableApps Suite
  • Execute o instalador e instale no diretório raiz do pendrive
  • Baxei algumas aplicações de http://portableapps.com/apps. Por exemplo, o Sudoku Portable.
  • Execute o instalador da aplicação, instalando no diretório PortableApps que foi criado na instalação da Base Edition
  • Execute StartPortableApps.exe, clique em Options e selecione Refresh App Icons
Por enquanto é isto. O meu próximo passo vai ser experimentar colocar um repositório do Mercurial no pendrive, seguindo as dicas do Caloni.

terça-feira, abril 15, 2008

Código de Barras - Código 128


A simbologia Code 128 procura corrigir as deficiências das simbologias vistas anteriormente, apresentando as seguintes características:


  • Capacidade de codificação de todo o conjunto ASCII (0x00 a 0x7F)
  • Possibilidade de codificação compacta de códigos numéricos
  • Checksum obrigatório, para maior confiabilidade
O Code 128 utiliza barras e espaços de tamanhos diversos (porém sempre múltiplos do módulo), organizados em 107 símbolos com largura de 11 módulos. O caracter correspondente a cada símbolo depende do conjunto de caracteres (subset) sendo usado. A marca de início do código indica o subset sendo utilizado inicialmente, símbolos especiais permitem alterar o subset no meio do código.

Existem 3 subsets, denominados A, B e C. O subset A permite codificar dígitos isolados, letras maiúsculas, caracteres especiais e os caracteres de controle. O subset B é semelhante ao A, porém os caracteres de controle são substituídos pelas letras minúsculas. No subset C, cada símbolo corresponde a um par de dígitos permitindo codificar números de forma compacta (como no intercalado 2de5).

Um código de barras Code 128 é composto por um Símbolo inicial (Start-A, Start-B ou Start-C), os símbolos correspondentes ao conteúdo, um símbolo com o checksum e o símbolo final (STOP) seguido de uma barra de largura dupla (poderíamos também considerar que o STOP possui largura 13 ao invés de 11).

As sequências de barra e espaços utilizadas pelo Code 128 são as seguintes (clique para ampliar):


onde '0' é um espaço e '1' é uma barra.

Um código composto de 'n' letras terá, portanto, a largura

11*(n+3)+2

11 = largura de um símbolo
3 = símbolos de início, checksum e fim
2 = barra dupla no vinal

Já um código com 'n' dígitos (n par) terá a largura 11*(n/2+3)+2 = 5,5*n + 35, o que é mais compacto que os 7*n+16 módulos do intercalado 2 de 5 sem checksum para n maior que 12. Além do checksum, o Code128 é mais seguro que o intercalado por ter marcas de início e fim.

O checksum é calculado somando-se o código do símbolo inicial aos códigos dos símbolos do conteúdo com peso 1, 2, 3, ... (da esquerda para a direita) e pegando-se o resto da divisão do total por 103.

Por exemplo, vamos considerar a codificação de DQSoft:

(104 + 1*36 + 2*49 + 3*51 + 4*79 + 5*70 + 6*84) mod 103 = 16

Quando um símbolo FNC1 é colocado logo depois do start, o conteúdo do código deve seguir uma estrutura definida. É o chamado GS1-128 (antigamente conhecido como UCC/EAN-128), que veremos no próximo post da série.

segunda-feira, abril 14, 2008

Lei 11644/08 Limita a Exigência de Experiência nas Contratações

Cortesia do vagas.com.br, recebi a notícia da assinatura pelo Presidente Lula da Lei 11.644/08, cuja integra está abaixo:

LEI Nº 11.644, DE 10 DE MARÇO DE 2008

Acrescenta art. 442-A à Consolidação das Leis do Trabalho - CLT, aprovada pelo Decreto-Lei no 5.452, de 1o de maio de 1943, impedindo a exigência de comprovação de experiência prévia por tempo superior a 6 (seis) meses.

O PRESIDENTE DA REPÚBLICA
Faço saber que o Congresso Nacional decreta e eu sanciono a seguinte Lei:
Art. 1º A Consolidação das Leis do Trabalho - CLT, aprovada pelo Decreto-Lei no 5.452, de 1º de maio de 1943, passa a vigorar acrescida do seguinte art. 442-A:

"Art. 442-A. Para fins de contratação, o empregador não exigirá do candidato a emprego comprovação de experiência prévia por tempo superior a 6 (seis) meses no mesmo tipo de atividade."

Art. 2º Esta Lei entra em vigor na data de sua publicação.

Brasília, 10 de março de 2008; 187º da Independência e 120º da República.
LUIZ INÁCIO LULA DA SILVA
Tarso Genro
José Antônio Dias Toffoli

O objetivo declarado da lei é facilitar o acesso dos jovens ao mercado de trabalho. Na minha leitura de engenheiro, a lei proibe a exigência de COMPROVAÇÃO, porém todas as repercuções (positivas e negativas) que encontrei consideram que está poibida a exigência de EXPERIÊNCIA.

Como tem sido prache com este tipo de legislação, os sindicatos e centrais estão elogiando e as empresas criticando. Minha posição pessoal é que esta é uma lei equivocada e coloco aqui minhas considerações.

VETERANOS E NOVATOS NAS EMPRESAS

Em primeiro lugar, eu acredito em equipes com diversidade de experiência. Acho igualmente inviáveis equipes compostas apenas por "sumidades" ou por "novatos". Seguindo a tradição presidencial de analogias futebolísticas, eu diria que os times bem sucedidos são normalmente aqueles que mesclam craques com os apenas esforçados e veteranos com promessas e revelações. Em uma empresa, é comum termos pessoas mais experientes orientando e formando os menos experientes.

As equipes das empresas são dinâmicas (felizmente não tanto como os planteis dos times de futebol). Um componente fundamental para o sucesso de uma empresa (e para um time) é saber contratar as pessoas certas, para manter o perfil da equipe ou para alterá-lo para se adequar a mudanças na área de atuação. Existem momentos em que se deve contratar pessoas com menos experiência e investir no seu treinamento. Em outros é necessário contratar alguém que possa produzir imediatamente, com pouca supervisão.

Além disso, é obvio que as remunerações de profissionais experientes e novatos são diferentes.

Portanto, em condições normais, veteranos e novatos não concorrem às mesmas vagas, tanto do ponto de vista das empresas como dos candidatos (pelo menos no lado dos veteranos, já que existem alguns recém formados que já se consideram - com ou sem razão - melhores que profissionais com muito mais experiência).

COMO OBTER EXPERIÊNCIA SE 'TODAS' AS VAGAS EXIGEM EXPERIÊNCIA?

Esta é uma pergunta ouvida com frequência.

Se realmente todas as vagas exigem experiência, isto indica uma situação em que um grupo restrito de profissionais experientes se alternam nas vagas e provavelmente este grupo supera a demanda do mercado. Se existissem vagas sobrando e profissionais faltando, os salários subiriam até o ponto em que as empresas investiriam na formação de novos profissionais, migrando as vagas não atendidas para vagas para pessoas com menos experiência (um resultado direto da lei da oferta e procura, ainda não emendada com sucesso por nenhum governo). Nesta situação a melhor opção para o profissional sem experiência é migrar para um campo onde exista demanda alta e falta de pessoas capacitadas.

Nos outros casos, o profissional sem experiência precisa procurar melhor as vagas. É mais comum as empresas darem destaque à procura por profissionais especializados (que são mais difíceis de encontrar). Às vezes para obter experiência é preciso ser menos seletivo nas ofertas. Como disse o Romário, não dá para ir chegando e querer sentar logo na janelinha.

QUAL SERÁ O RESULTADO PRÁTICO DA LEI?

Desconfio que boa parte das empresas vai desconhecer ou ignorar a lei. É pouco provavél que exista um esforço contínuo do governo em verificar o seu cumprimento, e a multa (segundo informações colhidas na internet) é de um salário mínimo (dobra na re-incidência) o que pode ser irrelevante frente aos demais custos de contratação.

Empresas grandes provavelmente serão mais cuidadosas no enunciado dos anúncios. Com isto um número maior de currículos de pessoas sem experiência serão recebidos e, na maioria dos casos, sumariamente descartados. Cria-se assim uma falsa expectativa para os sem experiência.

Suponhamos, entretanto, que a lei "funcione". Isto é, que as empresas contratem mais pessoas inexperientes (que vamos admitir serem jovens). Estas contratações serão para vagas anteriormente destinadas a pessoas experientes. Estaríamos, portanto, trocando o problema do jovem que não encontra trabalho pelo dos profissionais experientes que não encontram mais espaço no mercado. De tabela, as empresas provavelmente ofereciam salário menores (afinal os profissionais inexperientes exigirão treinamento e supervisão); os profissionais experientes terão que reduzir suas pretenções salariais para serem competitivos. O resultado é uma queda na massa salarial e um desperdício dos profissionais experientes.

ONDE ESTÁ O ERRO? O QUE SERIA MELHOR FAZER?

O erro está em tentar curar a febre mudando a forma de medir a temperatura. Se existe a falta de vagas para os profissionais menos experientes é porque:
  • Existem mais profissionais que vagas. É preciso aumentar a quantidade de vagas (e não tentar mudar o perfil das pessoas contratadas). Isto se faz crescendo a economia e incentivando as empresas.
  • As pessoas não saem das escolas com a formação adequada. Isto torna os recém formados mais caros, pois precisam ser re-treinados pelas empresas. A saída é melhorar o nível das escolas, deixar os currículos mais compatíveis com as exigências do mercado de trabalho e incentivar uma maior integração entre empresas e escolas*.
Sei que muita gente não vai concordar com estas opiniões. Deixe a sua nos comentários!

* Estranhamento, integração "empresa escola" é um palavrão para muitas pessoas. No livro "The HP Way" David Packard conta como no início dos anos 50 a universidade de Stanford separou uma área de seu terreno para ser alugado para laboratórios de pesquisa, escritório e até mesmo fábricas de empresas de alta tecnologia. O programa foi um sucesso e duplicado por outras universidades americanas. Aqui no Brasil experiências equivalentes ainda são vistas com muitas suspeitas.

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.

quinta-feira, fevereiro 28, 2008

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

O código 2 de 5, também chamado de Discreto 2 de 5, 2 de 5 Padrão e Industrial 2 de 5, é um código numérico de baixa densidade e porisso pouco usado. Ele é um código discreto, onde cada caracter corresponde diretamente a um padrão de barras distinto e de mesmo tamanho, o que permite a sua implementação através de um fonte de letras. É um código bastante antigo, existindo desde os anos 60.

O código 2 de 5 utiliza duas larguras de barra. A barra mais larga deve ter de duas a três vezes a largura da mais estreita. Cada caracter é codificado em uma sequência com 5 barras, das quais 2 são largas e 3 são estreitas (daí vem o 2 de 5). Os espaços entre as barras não contém informação e normalmente são da mesma largura que as barras estreitas. A distância entre um caracter e outro não é crítica mas deve ser de pelo menos uma barra estreita.

Além dos dígitos de 0 a 9 o código 2 de 5 possui sequências especiais para marcar o início e o fim do código.

Um código 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 caracter de checksum (módulo 10) pode opcionalmente ser colocado entre o final dos dados e a marca do final.

As sequências utilizadas para os dígitos no Código 2 de 5 são:


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 2, espaço, barra de largura 2, espaço, barra de largura 1, espaço
  • o fim é a seqüência: barra de largura 2, espaço, barra de largura 1, espaço, barra de largura 2, espaço
A largura de cada sequência é 14 módulos. Considerando que a barra larga tenha o triplo da largura da estreita, não seja usado checksum, um código com n dígitos terá largura de 15*n+ 16 módulos:
  • 15 = 2 barras de lagura 3 + 3 barras de largura 1 + 1 espaço após cada barra
  • 8 = largura das marcas de início e fim
Para calcular o checksum (opcional) some primeiro os dígitos, usando pesos 3 e 1 alternadamente da direita para a esquerda. Calcule o resto da divisão desta soma por dez. Se o resto for zero, o dígito é 0, senão é 10 - resto. Por exemplo:
Código 12345 
Pesos 31313

Soma 3+2+9+4+15 = 33
Resto 33 % 10 = 3
Dígito 10 - 3 = 7
O código 2 de 5 é um código em desuso, visto que permite codificar apenas dígitos e a densidade resultante é muito baixa. O código 128 (que veremos futuramente) permite codificar o conjunto completo de caracteres ASCII e é muito mais eficiente na codificação de dígitos.

No próximo post veremos um parente do 2 de 5, o Intercalado 2 de 5, que possui uma codificação bem mais compacta mas infelizmente possui alguns problemas práticos.

Atualização em 03/mar/08: a relação de largura entre as barras largas e estreitas pode variar de 2 a 3, acertos menores no texto.

quarta-feira, fevereiro 27, 2008

Código de Barras - Código 39

O código 39 ou código 3 de 9 é um código de uso genérico bastante popular. Ele é um código discreto, onde cada caracter corresponde diretamente a um padrão de barras distinto e de mesmo tamanho, o que permite a sua implementação através de um fonte de letras.

O código 39 utiliza duas larguras de elemento (um elemento é uma barra ou espaço). O elemento mais largo deve ter de duas a três vezes a largura do mais estreito. Cada caracter é codificado em uma sequência de 9 elementos, dos quais 3 são largos e 6 são estreitos (daí vem o 3 de 9). O primeiro e o último elemento são sempre barras. A distância entre um caracter e outro não é crítica mas deve ser de pelo menos um elemento estreito.

O código 39 permite codificar diretamente os dígitos, as letras maiúsculas e os caracteres especias - . [espaço] $ / + e %. A codificação ASCII completa pode ser obtida usando estes últimos quatro caracteres como um prefixo. Existe também uma sequência de elementos para indicar o início e fim do código (*). Esta sequência permite também ao leitor identificar o sentido em que as barras estão sendo percorridas.

Um código 39 é composto no mínimo do código de início (*), os códigos de dados e do código de fim (*). Um caracter de checksum (módulo 43) pode opcionalmente ser colocado entre o final dos dados e o '*' final.

As sequências utilizadas no Code 39 são:


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

Uma característica interessante é que um erro na leitura de um único elemento (por falha na impressão ou na leitura) gera um caracter inválido, impedindo a leitura incorreta.

A largura de cada sequência é 12 a 15 módulos, dependendo da relação entre os elementos largos e estreitos. Considerando que a distância entre os caracteres seja de um módulo, que não seja usado checksum e que o elemento largo tenha o dobro da largura do estreito, um código com n caracteres terá largura de 13*(n+2)-1 módulos:
  • 13 = 3 elementos de lagura 2 + 6 elementos de largura 1 + 1 espaço ao final
  • n+2 = caractes + marcas de início e fim
  • -1 = descontando o espaço no final do último caracter
O checksum (opcional) é o resto da divisão da soma dos códigos de 0 a 42 dos caracteres de dados por 43. Por exemplo, para o texto "DQSOFT" o checksum é (13+26+28+24+15+29) % 43 = 6 que corresponde ao caracter '6'.

As características do code 39 facilitam a sua impressão e leitura, mas isto não é significativo para os dispositivos atuais (exceto no caso de se desejar usar um fonte de letra para gerar o código de barras). O código 128 (que veremos futuramente) permite codificar o conjunto completo de caracteres ASCII ocupando um espaço igual ou menor.

terça-feira, fevereiro 26, 2008

Código de Barras - Impressão

A impressão de código de barras consiste apenas em desenhar barras de tamanho certo no lugar certo. Simples não? Existem, porém, algumas sutilezas no processo. Indo direto ao ponto, um código de barras impresso perfeitamente tem as barras com bordas retas, largura precisa e alto contraste com os espaços, o que nem sempre é fácil de obter. Felizmente a maioria dos leitores consegue ler códigos de baixa qualidade.

Uso de Impressoras Gráficas Comuns

Impressoras comuns com capacidade gráfica podem ser utilizadas para imprimir código de barras, porém nem sempre com boa qualidade.

Um dos piores tipos de impressora para imprimir código de barras é a matricial. Um primeiro problema é a baixa resolução, o que faz com que uma barra tenha largura de poucos pontos. Some-se a isto o fato dos pontos serem redondos e temos bordas curvas e largura variável. Um segundo problema é que a impressão é feita por uma cabeça que se move na horizontal em uma carcaça que muitas vezes treme continuamente durante a impressão. Isto gera variações no posicionamento horizontal e problemas de alinhamento vertical. Por último existe a questão da fita de impressão. Quando nova ela costuma soltar muita tinta, gerando impressões borradas. À medida que vai ficando gasta, o contraste vai caindo.

As impressoras a jato de tinta estão longe de serem ideais para a impressão de código de barras, mas permitem gerar códigos bem satisfatórios. Os problemas de posicionamento horizontal e alinhamento vertical também ocorrem, porém a resolução é maior e a qualidade da impressão é bem constante durante a vida útil do cartucho. Por outro lado, dependendo da tinta e do papel pode ocorrer dos pontos sairem maiores do que o esperado, tornando as barras ligeiramente mais largas e os espaços mais estreitos.

As impressoras a laser são as que geram melhores códigos de barra entre as impressoras não específicas, apresentando boa resolução, poucos problemas de posicionamento horizontal e vertical ou de borrão.

Para imprimir um código de barras em uma impressora gráfica comum é preciso gerar a imagem do código. Isto pode ser feito através de programas específicos (como o que vou mostrar no final da série). Em algumas simbologias (mas não todas) cada caracter codificado corresponde a uma seqüência fixa de barras, o que possibilita criar uma fonte, neste caso o código pode ser gerado imprimindo diretamente o seu conteúdo com esta fonte.

Impressoras Específicas para Código de Barras

Existem impressoras específicas para quem necessita imprimir quantidades maiores de códigos de barras e/ou deseja uma qualidade maior. Estas impressoras possuem internamento as rotinas necessárias para criar as imagens do código, recebendo do micro (ou outro dispositivo controlador) comandos específicos para isto.

Um primeiro tipo são as impressoras térmicas direta, que usam tecnologia semelhante aos aparelhos de fax mais tradicionais. Estas impressoras possuem uma cabeça composta por uma série linear de elementos que podem ser aquecidos individualmente e assim gerar um ponto escuro em um papel sensível a temperatura (papel térmico). Um tamanhos típico destas cabeças é 10 polegadas, com uma densidade de 150 ou 200 pontos por polegada (6 ou 8 pontos por milímetro). Alguns modelos mais sofisticados chegam a ter cabeça de mais de 20 cm e resolução da ordem de 300 pontos por polegada (12 pontos por milímetro). Estas impressoras têm, portanto, uma boa resolução, nenhum problema de posicionamento horizontal e poucos problemas de alinhamento vertical (já que os elementos são fixo) e contraste praticamente constante. O problema desta tecnologia é a durabilidade da impressão, já que contraste vai caindo com o tempo quando o papel térmico é exposto à luz solar.

A alternativa mais profissional é a impressora de transferência térmica. Ela possui uma cabeça semelhante à térmica direta, porém a temperatura é utilizada para transferir a tinta de uma fita (ribbon) para um papel comum. Ao contrário da impressora matricial, na transferência térmica toda a tinta do ribbon é passada para o papel na primeira (e única) impressão. Isto garante uma qualidade homogênea de impressão, porém significa que para cada metro de papel impresso é gasto um metro de ribbon (independente de ter impressão).

Seguem alguns sites de fabricantes de impressoras específicas para código de barras:

segunda-feira, fevereiro 25, 2008

Código de Barras - Leitura

A leitura de código de barras é quase sempre feita de forma ótica, distinguindo as barras e os espaços pelo contraste. Uma das consequência disto é a necessidade de uma região vazia em torno do código de barras, a chamada margem ou zona de silêncio.

O contraste entre as barras e espaços depende das suas cores e da cor da luz utilizada na leitura. Normalmente a luz usada na leitura é o vermelho, o que significa, por exemplo, que barras vermelhas impressas sobre branco não serão legíveis.

Uma vez distinguidas as barras e espaços, o leitor determina as suas larguras relativas e faz a decodificação, o que inclui determinar qual a simbologia do código. Feita a decodificação, o leitor precisa passar adiante os caracteres decodificados. As forma mais comum são por comunicação serial assíncrona e emulação de teclado. No primeiro caso o sistema que vai utilizar o código precisa ter um tratamento da serial. No segundo caso a leitura é transparente para o sistema, o que tem a desvantagem de impedir um tratamento diferenciado conforme o código foi lido ou digitado.

As formas mais comuns de leitura são:
  • caneta ótica
  • leitor de fenda
  • leitor laser
  • leitor CCD (ou linear imager)
  • leitor de imagem

Vejamos alguns detalhes sobre elas.

Caneta

A caneta é uma forma extremamente barata e pouco confiável. A caneta possui uma fonte e um sensor de luz. A leitura é feito movimentando-se manualmente a caneta por sobre o código. A distância de leitura é muito baixa, tipicamente a ponta da caneta é encostada no código, o que traz desgate para ambos. Uma boa leitura depende principalmente da habilidade de manter uma velocidade constante.

Leitor de Fenda

É praticamemte igual à caneta, porém a fonte/sensor fica fixo e o código é que é movimentado.

Leitor Laser

No leitor laser um diodo laser gera um feixe de luz que incinde sobre um espelho que oscila, fazendo com que o ponto se movimente. O circuito e o mecanismo de um leitor laser pode atualmente ser encapsulado em um módulo de tamanho próximo ao de um apontador.

É comum encontrarmos os leitores laser operando de três formas:
  • Em um dispositivo segurado por um operador, como uma pistola ou coletor. Neste caso cabe ao operador apontar o feixe de luz para o código de barras.
  • Em um dispositivo fixo na frente do qual o qual o operador apresenta ou passa o objeto com código de barras, como nos leitores de supermercado. Para maior agilidade, neste caso é comum termos um leitor omnidirecional, onde são usados mais de um espelho e/ou diodo laser para gerar raios em várias direções de forma a garantir que um deles corte todas as barras do código independente de sua orientação. Existem até mesmo leitores ditos "tridimensionais" compostos de um plano vertical e um horizontal.
  • Em um dispositivo fixo que aponta para uma esteira onde os objetos com códigos de barras passam. Dependendo da libertada de posicionamento dos códigos na esteira, podem ser necessários vários leitores para garantir a leitura, criando os chamados túneis de leitura.
Uma dica sobre a leitura com leitores portáteis: ao incindir um feixe de luz em uma superfície temos um reflexão especular, mais intensa e com igual ângulo em relação à perpendicular, e a reflexão difusa, causada pelas imperfeiçoes da superfície e portanto menos intensa. Os leitores são normalmente projetados para operar com a reflexão difusa e podem ficar "ofuscados" pela reflexão especulara a curta distância. Por este motivo, a leitura costuma ser mais fácil quando o leitor é segurado com uma pequena inclinação em relaçaõ ao código.

Leitor CCD

O leitor CCD se assemelha ao sensor de um scanner de imagem: uma sequência linear de sensores de luz. Originalmente os leitores CCD operavam apenas com distâncias muito curtas (próximas ao contato), mas hoje existem modelos capazes de ler a algumas dezenas de centímetros. Embora o desempenho possa ser um pouco inferior que os leitores a laser, o leitor CCD é mais barato. Além disso, um dos fabricantes possui patentes que lhe garante royalties sobre os leitores laser fabricados pelos seus concorrentes, o que torna o leitor CCD mais atraente para eles.

Leitor de Imagem

O leitor de imagem é basicamente uma câmera digital. Através de processamento de imagem o código é localizado e as barras decodificadas. Normalmente os leitores de imagem permitem decodificação omnidirecional e suportam códigos 2D. É comum também permitirem o seu uso como uma câmera monocromática de baixa resolução. A desvantagem é que é necessário um processamento maior, o que torna a decodificação mais lenta. Graças à Lei de Moore, a cada ano isto é menos problemático.

Desempenho dos Leitores

O desempenho de um leitor é normalmente indicado por diagramas como o abaixo:


Estes diagramas indicam a que distância é possível a leitura de códigos, em função do tamanho da barra mais fina. No caso dos leitores laser, a largura do feixe aumenta com a distância, o que afeta a leitura de códigos largos. Isto também é indicado no diagrama.

Escolhendo um Leitor

O primeiro passo para escolher um leitor é definir os códigos que serão lidos: suas simbologias, quantidade de caracteres e tamanho da barra mais fina (o que junto com as informações anteriores define a largura do código). No caso de leitura em esteira, pode ser importante também a altura do código. Verifique também a necessidade de ler códigos danificados ou sujos.

O segundo passo é definir a forma de leitura (leitor manual ou fixo, etc).

O terceiro passo é definir a forma como o leitor se comunicará com o resto do sistema.

De posse destas informações, uma visita aos sites dos fabricantes indicará quais os modelos que atendem a estas especificações. Seguem alguns dos sites:

sexta-feira, fevereiro 22, 2008

Código de Barras x RFID

Atualmente falar em código de barras acaba gerando perguntas sobre RFID. Neste post vou falar rapidamente sobre o RFID e compará-lo ao código de barras.

É preciso um certo cuidado, pois RFID é uma tecnologia que padece da praga que mais destroi novas tecnologias: o exagero (ou hype). Outro ponto importante é que é uma tecnologia relativamente nova, na qual aperfeiçoamentos podem surgir rapidamente.

De uma forma simplificada RFID é uma tecnologia de AutoID na qual o leitor se comunica via rádio com um tag para obter a sua identificação. Existem dois tipos básicos de tags: os ativos e os passivos. Os ativos possuem uma bateria para acionar o rádio, os tags passivos utilizam a energia do sinal recebido do leitor para enviar a sua identificação. Os tags possuem uma indicação gravada na fábrica e inalterável, esta identificação é numero de cerca de uma centena de bits. Além desta identificação fixa alguns modelos possuem uma memória que pode ser alterada pelo leitor (que neste caso é mais propriamente um leitor/gravador).

A vantagem óbvia do RFID é não necessitar de visada direta. Por outro lado, é preciso uma ou mais antenas e o alcance é limitado (principalmente para os tags passivos). A leitura de vários tags que estejam simultaneamente na área de cobertura do leitor é um recurso relativamente novo e ainda limitado tanto na quantidade de tags suportados como no tempo necessário para a leitura e na taxa de leituras não realizadas com sucesso.

Embora a possibilidade de escrita no tag seja muito interessante, atualmente a quantidade de memória é baixa para os tags passivos (da ordem de uma centena de bits) e o processo de escrita é lento.

A padronização dos tags é também recente e ainda está driblando a questão de patentes (cabe lembrar que também nos leitores a laser de código de barras existem patentes envolvidas).

Periodicamente se fala na 'morte' do código de barras no varejo, com sistemas onde o cliente passaria com o carrinho de supermercado pelo caixa e os códigos dos produtos seriam auto-magicamente lidos. Exitem atualmente vários impecilhos para isto:
  • os tags de RFID são elementos que tem que ser afixados às embalagens. Mesmo que o preço dos tags caiam uma ordem de grandeza nos próximos anos eles continuariam sendo um custo adicional significativo para itens de menor valor.
  • as tecnologias atuais não permitem a leitura 'simultânea' de uma grande quantidade de tags em tempo curto e com taxa de perda próxima de zero
  • é relativamente simples bloquear o sinal RF em torno de um tag, impedindo a sua leitura.
Mesmo a principal vantagem do RFID, que é a leitura sem necessidade de visada, é vista com preocupações por algumas pessoas. A possibilidade da leitura do tag de forma não perceptível tem gerado preocupações de privacidade e segurança.

Resumindo, RFID é uma tecnologia cujas aplicações possuem uma certa intersecção com as do código de barras porém não é apropriada para substituí-lo em todas as situações (da mesma forma como o RFID permite aplicações que não são viáveis com o código de barras).

Encerrada esta pequena digressão, no próximo post vamos falar na leitura de código de barras.

quinta-feira, fevereiro 21, 2008

Volume 33 de Obras Completas de Carl Barks

Uma das coleções mais interessantes dos últimos anos para quem gosta de quadrinhos é "O Melhor da Disney - Obras Completas de Carl Barks" da Abril. Para quem não sabe quem é Carl Barks, recomendo ler a entrada correspondente na Wikipidia. Um resumo é:
  • Ele escreveu e desenhou histórias do Pato Donald e familiares de 1942 a 1966.
  • A qualidade dos seus trabalhos era tal que os fãs reconheciam os seus trabalhos apesar da Disney não publicar os nomes dos artistas.
  • Criou, entre outros, Tio Patinhas, Gastão, Professor Pardal, Maga Patalógica e os Escoteiros Mirins.
  • A qualidade de seus desenhos é ótima e as histórias são realmente engraçadas.
A Abril está publicando a coleção em lotes de 4 volumes. O intervalo entre os volumes de cada lote variam de 1 a 3 semanas e o intervalo entre os lotes tem sido um número randômico de meses. É caro (atualmente R$16,95 o volume), mas a qualidade da impressão é muito boa.

Infelizmente a divulgação tem deixado a desejar. Não encontrei nenhuma referência à quantidade total de volumes e a única forma que encontrei para descobrir quando saiu é ficar de olho nas bancas e no site oficial http://jovem.abril.com.br/ (que não tem feed).

O volume 33 inicia o nono lote, o que significa que é hora de rever o orçamento das próximas semanas. Alguns detalhes adicionais podem ser vistos aqui.

Código de Barras - Introdução

Nesta nova série vou falar um pouco sobre código de barras, comentando a sua leitura e impressão e as características de alguns tipos mais comuns. Ao final talvez me aventure a apresentar um código para gerar imagens destes tipos de códigos de barras.

Código de barras é uma das tecnologias usadas para a "auto identificação" (AutoID), ou seja, a captura de dados de forma automatizada. O objetivo principal da AutoID é a maior confiabilidade da informação capturada quando comparada com a transcrição por uma pessoa.

No código de barras a informação é codificada em uma sequência de barras separadas por espaços. Existem diversas formas padronizadas de fazer esta codificação, são as chamadas simbologias. Na forma mais comum, dita linear, temos uma única linha de barras paralelas. Existem também os chamados códigos 2D, organizados como uma matriz de barras ou pontos. Dependendo da simbologia, a informação pode estar codificada somente nas barras ou nas barras e espaços. O tamanho das barras e espaços pode ser variável porém tipicamente são sempre múltiplos inteiros de um fator. Este fator, que afeta diretamente a distância de leitura, é chamado de módulo ou simplesmente de dimensão X.

Como veremos com mais detalhes em outro post, a leitura dos códigos é ótica, com as barras e espaços sendo distinguidos e seus tamanhos determinados pelo contraste entre eles. Existe uma grande variedade de leitores, com diferentes custos e desempenhos. Alguns leitores são pequenos o suficiente para serem embutidos em coletores portáteis com tamanho e peso semelhante ao dos PDAs.

Respeitadas algumas pequenas restrições, os códigos de barras podem ser impressos pelos meios normais de impressão. Isto é uma vantagem na identificação de artigos para o varejo, pois o código pode ser produzido junto com a embalagem, sem custo adicional. Os códigos podem também ser impressos a custos razoáveis em etiquetas, inclusive sob demanda (com conteúdo determinado no momento da impressão). Os códigos podem também ser gravados em etiquetas de outros materiais (como metálicas) para ter maior durabilidade e resistir a processos de congelamento, aquecimento ou limpeza.

Embora os códigos de barra sejam mais visíveis no varejo, eles estão atualmente em uso em toda a cadeia lojística (nas fábricas, nos depósitos, nos transportes, etc).

Um código linear pode armazenar algumas dezenas de caracteres (e os 2D até mais que 1KByte), mas tipicamente o conteúdo possui cerca de uma dúzia de caracteres. Isto, combinado ao fato de que a atualização do código de barras requer a sua substituição, faz com que tipicamente o código de barras contenha um código que é usado como chave para consulta das informações em uma base de dados. Tomando um exemplo do dia-a-dia, o leitor no caixa do supermercado lê um código que o PDV usa para obter a descrição e o preço do produto.

Normalmente, o conteúdo do código de barras pode ser lido por qualquer um e o código pode ser facilmente duplicado (por exemplo por fotocópia). O primeiro ponto não é necessáriamente crítico, pois o código de barras contém a chave, não os dados, porém a duplicação pode impedir alguns usos (como o controle de acesso). Ocasionalmente é colocada uma máscara vermelho escura sobre o código e a leitura é feita por infra-vermelho para criar um código 'mais seguro'.

A grande limitação dos códigos de barras é a necessidade de visada direta para a leitura.

Frase para Reflexão

"A mãe dos imbecis está sempre grávida"

Franco Buccella, físico da Universidade Frederico 2o de Nápolis, comentando o impedimento da entrada na Espanha de física brasileira que ia a congresso científico em Lisboa.

Fonte: Folha de São Paulo, de 20/fev/08.

quarta-feira, fevereiro 20, 2008

Habilidades Obsoletas

Via slashdot, cheguei a um post de blog a uma wiki sobre habilidades que se tornaram obsoletas nas últimas décadas, principalmente devido aos computadores. Seguem abaixo alguns comentários sobre a minha experiência pessoal:

Regua de Cálculo e Tábua de Logarítimos

Estes eu só olhei por curiosidade, já que as calculadoras eletrônicas se popularizaram quando eu estava no colégial. Guardo como lembrança um livro de logarítmos que inclui o PI com 10.000 casas, cortesia de um cérebro eletrônico.

Máquina de Escrever e Mimeógrafo

A máquina de escrever era um dos meus brinquedos no tempo do ginásio. Cheguei a ter aulas de datilografia na escola e treinar em casa; não deixa de ser útil atualmente. O companheiro da máquina de escrever era um hectógrafo caseiro.

Vitrola e a Fita Cassete

Realmente não dá saudade a luta constante com o pó acumulado no vinil e na agulha, nem a briga com as crianças quando elas desregulavam o contrapeso do braço da vitrola. Tenho ainda encostado em algum canto algumas dezenas de fita cassete com música e em outro canto uma dúzia de fitas com programas para o TK-82C. Naquele tempo a gente 'rippava' música do vinil ou do rádio, o que exigia habilidades específicas (e não permitia acertos posteriores).

Habilidades no Computador

Os cartões perfurados só fizeram parte da minha vida durante a faculdade. Desde o final dos anos 70 vivi os bons tempos de formatar, duplicar e recuperar dados dos disquetes.

Também já fazem 15 anos que parei de usar impressora matricial e todas as técnicas envolvidas (como colocar um micro e a impressora no banheiro na hora de imprimir os fontes como parte do processo de liberação de versão do Z e Zapt).

Desconfio que já deve fazer uma década que não dou uma otimizada em um Autoexec.bat ou Config.sys, muito menos analiso o uso da memória.

Desde o começo dos anos 90 que eu não programo em xBase (será que alguém ainda lembra do Joiner, um compilador xBase nacional?). A programação em assembler durou alguns anos mais.

Uma série de aplicativos se foram, como WordStar, Lotus 123 e o IBM Storyboard. Também já se foram o Videotexto e os BBSs.

No lado do hardware, além do disquete o modem está juntando pó. Acho que ninguém lembra dos scanners manuais (uma espécie de aspirador de pixels).

segunda-feira, fevereiro 11, 2008

Limpando os feeds

Resolvi dar uma limpada nos feeds que consulto diariamente (através do RssOwl), para deixar de acessar alguns feed que não apresentam atividade há muito tempo. Segue abaixo uma lista de alguns sites muito bacanas que não tem mais atualização mas continuam de pé:

quinta-feira, fevereiro 07, 2008

Dica Óbvia de Uso de Impressora

Esta dica provavelmente é óbvia para muitos. O que não impede de muita gente não conhecê-la.

No mês passado fui ao CREA, fazer o recadastramento. Como parte do ritual é impressa uma carteirinha provisória (a definitiva demora nada menos que quatro meses - e insistem para ligar antes de ir buscar pois pode atrasar). A impressão é feita em uma impressora laser, compartilhada pelas várias atendentes, usando um papel pré-impresso. Na hora de imprimir, a atendente colocava o papel e dava o berro "Carteira!", para as demais não mandarem nada para a impressora.

Esta situação não é incomum. No trabalho, ocasionalmente preciso imprimir uma etiqueta para CD em uma impressora compartilhada por todo mundo, inclusive por quem está no outro andar. Após muito tempo trabalhando na base da sorte, um belo dia me veio um "sinal divino", na forma da secretária que não conseguia imprimir na impressora. Examinando o painel, verifiquei que estava acusando falta de papel apesar do alimentador estar com várias folhas. Não sei bem de onde me veio a idéia de colocar folhas na entrada frontal da impressora, mas a impressão da secretária sai na hora (e várias vezes, já que tinha insistido quando deu erro).

O passo seguinte foi entender porque a impressora estava pegando as folhas do outro local. No manual descobri que a impressora, uma Canon PIXMA 2000, possui um botão no painel para selecionar a fonte de papel (como é prache neste mundo globalizado, ao invés de uma legenda que apenas os leitores de uma determinada lingua entendam tem um ícone que todos os leitores de todas as linguas não entendem).

Olhando na configuração da impressora, percebi que o default é a seleção do papel ser feita pelo Paper Feed Switch. Talvez seja útil para quem está do lado da impressora, mas para mim o mais útil são as outras opções. A partir deste dia, quando quero imprimir uma etiqueta eu confiro que a chave está na posição normal, coloco a etiqueta no alimentador frontal e muda a configuração no meu micro. Se mais alguem imprimir, vai pegar o papel normal no Auto Sheet Feeder. Como eu avisei no início, é uma solução óbvia.

Praticamente todas as impressoras tem mais de uma opção de fonte para papel, selecionada pela configuração no micro. Nas impressoras menores, a entrada opcional é para uma ou poucas folhas. Em impressoras mais sérias é comum ter várias bandejas com boa capacidade. Portanto, na hora de imprimir em um papel pré-impresso não é preciso berrar ou contar com a sorte.

quarta-feira, fevereiro 06, 2008

Fuvest 2008 - Primeira Chamada

Atualização de 21/fev/08: A sobrecarga que menciono abaixo durou apenas uma meia hora. Para quem estiver procurando a lista da primeira chamada (ou das demais) recomendo o site oficial. A lista da segunda chamada foi liberada hoje (21/02/2008).


Já que o site da Fuvest parece não estar aguentando a carga, coloquei a lista em http://www.wikifortio.com/719811/publ1.pdf.

Obs: em caso de problemas, acesse http://www.wikifortio.com e forneça o ID 719811.