Bugs mais velhos do que eu! (ou você!)

09/07/2008

Dois meses atrás eu fiquei espantado com a idade do bug do BSD que tinha sido corrigido: 25 anos. Pois não é que hoje eu fico sabendo de um bug no yacc do OpenBSD que remonta há 33 anos? Mais velho que eu!


Email por Walter Cruz em Geek life
Tags: bsd, bug, slashdot, yacc

Semana Complicada

10/07/2006

Já tiveram uma semana complicada, de bug atrás de bug? Os meus últimos dias da semana passada foram assim.

Eu e o Ricardo pegamos a missão de passar um certo trecho de código de Delphi para PHP. Como nem eu nem ele lembramos muito de Delphi, e o código estava bem esquisito, ficamos empacados. O Diogo, que acabou de entrar aqui, ficou com a missão de entender o código. E saiu-se bem.

E lá vamos, o Ricardo e eu implementar o código em PHP.

Porém, devido às conversões automáticas do PHP, travamos aqui:


$parte = 138147;
$resultado = pow($parte,3);
$modulo = $resultado % 777777;  
echo($modulo);
 

A váriavel $modulo, que deveria ser 228957 se transformou em 418495.

Poderíamos fazer em python, e apesar deu ter feito um esboço de código em python, esbarramos no fato de não termos um servidor apache com mod_python, e também com o fato as outras pessoas da equipe (ainda) não conhecem muito python.

O código em python:


parte = 138147;
resultado = pow(parte,3)
modulo = resultado % 777777
print(modulo)
 

Ficamos num impasse - nossa intenção de fazer em PHP tinha ido por água abaixo. Em python, ainda não era viável. Como o sistema roda em Delphi + SQL Server, optamos por fazer uma função no SQL Server.

Porém, precisávamos de usar um array(na verdade, uma hash) na função. E, pra nossa alegria, o SQL Server não suporta arrays!

O Diogo já estava instalando o Tomcat para fazer em Java(!), quando eu finalmente reparei: um hash é uma tabela de duas colunas.. E lá vamos nós de novo...

Para quem acha que a novela acabou por aqui, ledo engano: ao usar o DbVisualizer, usando o driver jTDS para SQL Server, aparecia uma mensagem de erro maluca ao tentar criar a função no banco, dizendo que tal arquivo não existia (mas quem estava mexendo, com arquivos? Eu só queria criar uma função no banco!).

Mas, ao tentar fazer a implementação em python, eu havia baixado o pymssql (extensão do Python para conectar ao SQLServer). E foi assim, executando na mão dois arquivos, um que apagava a função no banco e outro que a criava, que conseguimos fazer a função.

Não que os nossos problemas tivessem acabado. Na verdade, eu não conheço nada de Transact-SQL (a variante SQL do SQL Server). Conheço um pouco mais as variantes do MySQL e do Postgres (PL/PgSQL). Mas que diferença! Transact-SQL, não tem loop for, todas as atribuições de variáveis tem de ter a palavra SET antes, é uma linguagem muito feia mesmo. Resultado: uma função que levou um pouco mais de uma hora para ser feita em php (e em python) levou um dia inteiro para ser feita em Transact-SQL.


Email por Walter Cruz em PHP, PostgreSQL, SQL Server
Tags: bancos de dados, bug, linguagens, php, postgresql, sql server