bit invertido
Sempre me disseram que era possível que um bit se invertesse do nada num banco de memória ou num disco rígido, mas eu nunca tinha visto acontecer. Hoje eu vi.
Eu estava trabalhando no
noosfero
quando de repente, não mais que de repente, ao rodar um teste de integração o
Ruby começou a dar um erro de sintaxe num arquivo do
Rails:
terceiro@sede:~/src/noosfero$ rake test:integration
(in /home/terceiro/src/noosfero)
rake aborted!
/home/terceiro/src/noosfero/config/../vendor/rails/actionmailer/lib/action_mailer/vendor/text/format.rb:1456: syntax error, unexpected ',', expecting '\n' or ';'
def hyphenate_to8word, size, formatter)
^
/home/terceiro/src/noosfero/config/../vendor/rails/actionmailer/lib/action_mailer/vendor/text/format.rb:1456: syntax error, unexpected ')', expecting '='
def hyphenate_to8word, size, formatter)
^
/home/terceiro/src/noosfero/config/../vendor/rails/actionmailer/lib/action_mailer/vendor/text/format.rb:1466: syntax error, unexpected kEND, expecting $end
(See full trace by running task with --trace)
Aquele 8 deveria ser um parêntese, ok, mas o Rails não teria saído com um erro
de sintaxe ridículo desse. Fui lá no arquivo e o 8 realmente estava lá, mas não
tava dando erro antes, e eu não tinha mudado nada que pudesse disparar a
inclusão de um arquivo que não estivesse sendo usado ainda. Fui no repositório subversion e
lá o arquivo estava ok.
Diabos, o que é que tinha acontecido? O subversion não reportava o arquivo como
alterado, e a última alteração foi exatamente a inclusão do rails no
repositório:
terceiro@sede:~/src/noosfero$ svn log /home/terceiro/src/noosfero/config/../vendor/rails/actionmailer/lib/action_mailer/vendor/text/format.rb
------------------------------------------------------------------------
r11 | AntonioTerceiro | 2007-07-02 13:00:11 -0300 (Seg, 02 Jul 2007) | 3 lines
adding Rails version 1.2.3 to the repository
"Ah, preciso ir em frente", eu pensei. Apaguei o arquivo e dei um
svn update.
Olhei o arquivo e agora o parêntese estava lá de volta. Não podia ser um bug no
subversion. Daí eu me lembrei da história da inversão de bit e fui conferir:
terceiro@sede:~/src/noosfero$ irb
>> x = '8('
=> "8("
>> x[0]
=> 56
>> x[1]
=> 40
>> 32 + 16 + 2
=> 50
>> 32 + 16 + *
?> 32 + 16 + 8
SyntaxError: compile error
(irb):5: syntax error, unexpected tSTAR
from (irb):6
from :0
>> 32 + 16 + 8
=> 56
>> 32 + 8
=> 40
>>
o caracter "8" é 56 = 8 + 16 + 32, ou em binário:
00011100
Já o "(" é 40 = 8 + 32, ou em binário:
00010100.
Ou seja: por algum motivo aquele quinto bit inverteu no disco! Tomara que isso
não indique que o disco vai abrir o bico ... :-/
- Warning
- Can't INCLUDE '', path is empty or contains illegal characters.