Terca, 24 de Fevereiro de 2004, 09:28:47

fevereiro 24th, 2004 | by Aldrin Leal |

Administrator@mwks-aldrin /c/temp$tail -2 CBR64303.RET | head -1 > /dev/clipboard


Chuta que é Macumba!

“mwks-aldrin” é o notebook, escondido ao canto direito da escrivaninha. O título acima remete a um comando. Alias, esse foi um dos comandos que eu mais digitei nas últimas horas, enquanto eu trabalhava em um processo que, entre outras coisas, estabelece um fluxo de ida e vinda com instituições bancárias. Não, não é nenhuma bandidagem de Parauapebas, e sim o meu projeto atual. Acho…

Muitos suspeitam que o título desse blog tenha a ver com o fato de eu me deixar levar tanto pelas coisas, a ponto de ser capaz de esquecer de dormir, ou dormir nos horários impróprios. Essa conclusão não é engano. A Insônia é fruto da paixão, e essa paixão tem a ver com os desafios que eu encaro no meu dia-a-dia. Me vejo perdido no meio da noite, buscando refúgio numa loja de conveniência ou então em alguma lanhouse (onde eu não toco em computador, e apenas converso com as pessoas, e geralmente nada técnico. Até evito). Durante essas horas eu me vejo perdido, várias vezes, buscando a solução de uma equação difícil, apresentada por uma esfíngie. Quisera eu que essa esfíngie muitas vezes não fosse (ela é) como àquela voz de um esquizofrênico: Irreal, que o consome e o leva à loucura, me distanciando das pessoas que me cercam e criando um mundo completamente a parte, encenando uma peça. Nesta peça, há um diálogo num cenário vazio entre apenas dois atores: O problema, e eu, na condição de coadjuvante. O que muito me enaltece, aliás. :]

Suspeito também que isso esteja chegando ao fim, e que eu possa gozar de um breve período de descanso, antes de partir para uma empreitada. Sempre procurando o problema ideal, sempre procurando a solução adequada. Sempre procurando um bom combate, e sempre procurando… esquecer do mundo?!? Bom, não é o caso.

A questão toda é: Havia prometido a mim mesmo que quando esse projeto acabasse, eu iria fazer um pequeno acerto de contas. Comigo, e com o mundo. Especialmente, com aquelas pessoas que se dedicaram a mim, me dando a mão quando eu sequer pensara em pedir ajuda. E com aquelas pessoas que surgiram causando problemas, mesmo com a leve noção de que eu não estava a buscar isso. As que não fizeram nada, afinal de contas, passar-me-ão da mesma maneira: Na indiferença. Não tenho nada contra isso.

Mas não penso em vingança, e sim em recompensa. Recompensar as pessoas que demonstraram compreensão ao momento em que vivia, e ao esforço que eu dispendera… Essas pessoas consistem, basicamente, na minha família, especialmente pelo fato de me fazer arrepender de ter estourado com o mundo inteiro as vésperas do meu aniversário. Aniversário que passou em branco, aliás. Mas isso não importa. – PORQUE EU DEVERIA COMEMORAR 24 ANOS, PORRA?!? -… pois bem, voltando…

Voltando ao que, mesmo? Ah sim, aos agradecimentos…

Um “puta meu, muito obrigado!” aos verdadeiros amigos que se demonstraram fiéis nesses momento. Vocês moram de cuequinha de seda no meu coração, como certa vez um deles me retificara, pedindo para dizer dessa maneira, heh.

Outro grande obrigado aos novos colegas de batalha que surgiram. Comandar uma equipe pequena, com recursos escassos, para grandes objetivos, não é tarefa fácil, mas com as pessoas que me surgiram no caminho, tornou-se algo na base do “nóis sofre mas nóis goza”. E toma diversão nisso.

Obrigado também aos senhores Johnie Walker, Tarja Preta, à Dona Santa Clara, a do café homônimo, e ao senhor Joe “Jão” Camelo, Genuine Taste, Turkish and American Blend, por me fazerem crer que, se eu não tenho pressa, morrer lentamente não irá ser de todo mal assim, desde que eu possa me desfocar um pouco do mundo. Como diria Lobão: “-Tudo bem se a alegria é química. Só sei que a noite me devora e faz pensar que sei amar”. Bem, ela me faz achar que sei viver. Conforme demonstrado acima, você entende porque eu tenho dúvida com relação à colocação exposta no parágrafo anterior.

E a você, nobre leitor desocupado e vagaba. Abre blog de nerd pra que? Pra ler coisas de nerd? Então pronto. Não gostou? Ah… c sabe, né?… Ok, vamos voltar ao meu projeto atual. A oportunidade de revelar um pouco dos meus tempos de pseudo-esquizofrenia. Não é o todo, se contentem com isso…


SIM! JBuilder X Foundation (Free as in Beer) editando um código fonte jython, vulgo “A Cobra que, além de fumar, ainda toma um cafezinho!”
. Reparem que não tem syntax-highlighting…


Mas nada que o Komodão não resolva!

Queria divagar sobre um tema especial. Se o cobol morreu, não falaram pra quem o usava. Tanto que banco o usa direto. Quer saber se você tem um bom analista java ou não? Mande ele ler um arquivo gerado em cobol, fornecendo a ele apenas um dos copybooks (a estrutura do arquivo). Não que não hajam ferramentas pra isso. Até tem de graça. Mas uma me parece complexa e na verdade se propõe a resolver diretamente um problema que eu já tinha resolvido (usando a melhor solução, acho. Ou ao menos, a mais usada) e indiretamente o que eu queria. Outra, somente complexa, apesar de inicialmente adequada. Na boa, eu queria era um martelo, e não bate-estacas completo.

Ok, decido fazer um. Usar copybooks cobol me parece o fim da picada, visto que passei séculos usando C. Optei por utilizar um pacote de formatação já pronto pra java semelhante ao do C, e dá-lo características de python apesar que poderia ter utilizado o proprio jython. Quem já usou C sabe o que tô falando: “%-25s” é o formato de uma sequência de caracteres, sendo alinhados à esquerda, caso não totalizem 25 caracteres. Em python, é igual, com uma diferença: “%(chave)-25s” equivale a chave de uma variável especificada. É transparente no python e você sequer precisa especificar a função. Na verdade, é um builtin da classe String. Deus abençõe as pessoas que quando fazem OOP, entendem que é tudo ou nada e que não pode ter meio termo: Ou é tudo first-class objects, ou não o é.

Aliás, Sun Microsystems, um desabafo: Ok, 1.5 é do caralho no sentido que criou uma maneira de tudo parecer first-class, mas vocês ainda não me criaram um formatador de String semelhante ao da concorrência, viu?

Voltando ao problema: O nome do milagre, nessas horas, é fazer um bom regex. Utilizando o Jakarta RegExp, implementei a expressão do sprintf/sscanf do C (dica: é "^%(\([a-z][\.\w]+\))?(\-?\d*\.?\d*)([%dsfl]") para fazer o estilo do python, partindo do fato que tempos [d]ecimal, [s]tring, [f]loat e [l]ong). Utilizando esse pacote, além do todo-poderoso Jakarta Commons/BeanUtils (quem usa Struts, Velocity, WebMacro e/ou JSTL-EL [Expression Language] sabe que com essas coisas, é na base do milagre, porque é inexplicável), consegui adaptá-lo e montar um {de,}serializador de beans usando uma String de entrada e uma mascara. Eis o o fonte. Ah, o testcase. Bacana, né?

Feito isso, a parte mais difícil tá concluída. Agora, falta a parte chata: Mapear os registro e as posições. Digo chata porque envolve ler trechos de documentos como esse, do Banco do Brasil para Boletos (a maioria dos bancos usa semelhantes), omitido para fins de clareza (são 17 campos distintos):

Campo Posição Tipo Conteúdo
H1 001-001 9(001) Assume: 0 (zero)
H2 002-002 9(001) Assume: 2 (dois)
H3 003-009 X(007) Assume: RETORNO
H4 010-011 9(002) Assume: 01
H5 012-019 X(008) Assume: COBRANCA
H6 020-026 X(007) Uso Futuro

Que na verdade, refletem-se em isso:

02RETORNO01COBRANCA 00000000000000000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX001BANCO DO BRASIL0302040000000 000000000000000000 000001

Mas há uma diferença de paradigma simples: Eles são contados a partir do 1, e no C, Java são a partir do zero. Logo, não é uma posição, e sim um DESLOCAMENTO. (Pascal não, até aonde eu saiba).

Também é interessante notar que alguns dados são intuitivos, com o passar do tempo. Na minha época de telecom, a minha solução era um arquivinho mágico no Access, aonde eu preenchia essas informações, e ao final, existia uma macro ninja que me gerava o fonte em C para manipular. Claro, ainda precisava passar por mais uma rodada de revisões pra ver se eu não havia errado o COMPRIMENTO (quando me passavam a posição final), e sempre revisar o DESLOCAMENTO (quando da posição inicial. Ou seja, sempre). Alias, adoro macros de office ninja, poder programar um Word ou Powerpoint da vida pra me gerar o texto que eu quero é o motivo mais óbvio para tal.

Mas queria algo mais intuitivo e simples para entrar os dados. São vários formatos e sinto-me abarrotado no meio de tantos deles.

Resultado?

Mapeador Visual. A Tela diz tudo:


Coisa rica do papai…

Agora é arrastar, ou digitar as posições (seja offset, comprimento, ou posição inicio/fim, ou posição inicio/comprimento) e então isolar. Nomear, caso necessário.

O próximo passo agora é criar um programa que gere o fonte de classes abstratas como JavaBeans, usando essas definições e via um code generator, usando Velocity. Dessa forma, a estrutura é flexível. E eu posso ficar preguiçoso e postar mais vezes. :)

Quando acabar tudo isso, empacoto e distribuo. Isso, se não deixar disponível via WebStart para vocês. É uma tecnologia que quero fuçar.

Nada como a preguiça pra agilizar o meu dia-a-dia… hehehehe.

(Ok, a risada foi acidental. Preciso dormir, saca?)

Sorry, comments for this entry are closed at this time.