Bugs mais velhos do que eu! (ou você!)
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!
Semana Complicada
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:
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.
