quarta-feira, 26 de janeiro de 2011

quarta-feira, 12 de novembro de 2008

Frustração número X

Olá a todos, aqui quem vos escreve é o pseudônimo de um cara tímido, #Dandy-Br. Um aspirante a programador com sonhos muito viajados então Qualquer devaneio meu não será mera coincidência...

Comecei a fazer este Blog mais por preguiça de montar um site próprio. Até tentei uma vez pelo CJB, mas não tive mais motivações (entendam como tempo disponível) para tal “trabalho”.

O objetivo deste Blog é divulgar alguns trabalhos e frustrações minhas neste mundo maldito informatizado.


Para começar falarei aqui do projeto em Java WordSoup.

WordSoup se trata de um utilitário feito em Java (fui redundante?) para contabilizar caracteres de um arquivo qualquer selecionado pelo usuário.

A idéia principal era auxiliar (este grande preguiçoso que aqui escreve) na tradução do jogo de NES (Nintendo Entertainment System, Nintendinho, Nitendo 8Bits, Nintendo,... dependendo da sua região provavelmente ele teve um nome diferente) Silver Surfer/Surfista Prateado.

E confesso que não usei a ferramenta ainda (frustração nº 1 – na casa do ferreiro o a colher é de madeira...) mas terei de usar na tradução de Aero Fighters de SNES (Super Nintendo Entertainment System, teve outros nomes? Aliás a Nintendo é muito criativa com o nome do próprio console e o elo em seus futuros jogos...).

Sobre o programa a Engine é bem simples:

Para cada arquivo carregado pelo usuário o programa armazena o dito cujo em uma String (String em Java é uma classe e não um tipo primitivo como em outras linguagens – tem suas vantagens mas as vezes dá uma certa dor de cabeça...).

E para cada vetor nesta String o programa faz uma consulta no arquivo perguntando qual é o caractere na posição X na busca.

O programa tem uma eficiência legal mesmo com arquivos relativamente grandes para somente texto (“.txt”,”.xml”,”.rtf”,”.html”,...) mas (sempre os “mas” acho que vou bani-los de meu dicionário...) há um certo limite.

O testei tinha 7.00 MB (mais ou menos) era um arquivo no formato “.mp3” o programa conseguiu fazer a busca e gerar o relatório. E o maior arquivo testado foi um “.mp3” de uns 40.00 MB (sim, uma das faixas convertidas do meu DVD do Dream Theater tem esse tamanho ai mesmo...). O programa não travou, porém não conseguiu fazer o relatório.
Testando uma String com um algoritmo simples apenas preenchendo um atributo com um caractere qualquer o retorno máximo desta foi de 8.388.608 caracteres (Oito milhões trezentos e oitenta e oito mil seiscentos e oito posições no vetor de String do Java) após isso o programa encerra com java.lang.OutOfMemoryError. Em alguns fóruns outras pessoas testaram o mesmo algoritmo (alias não foi eu quem o criou, apenas peguei para testar também) e conseguiram 13.220.000 (Treze milhões duzentos e vinte mil caracteres!). Acho que isso pode depender da sua memória e ou do tamanho reservado para a JVM instalada no PC.

Mas sinceramente se você precisar de um arquivo com mais de 8.388.608 caracteres (Oito milhões trezentos e oitenta e oito mil seiscentos caracteres) ou 13.220.000 (Treze milhões duzentos e vinte mil caracteres) divida o arquivo e ou escreva menos...

Não faço idéia (por preguiça) do tamanho de um arquivo desse (pois todas as tentativas de saber isso FALHARAM), mas não culpe o programa por não conseguir ler um absurdo desses.

Futuramente eu tentarei trabalhar com String Buffer, sem esperanças de conseguir... mas eu tentarei sim.

Bom até a próxima frustração.