Limpei o suor da minha testa com a pilha de guardanapos de delicatessen que sobrou de comer na frente do meu terminal. A companhia de energia cortou a eletricidade há duas semanas devido ao não pagamento, deixando-me sem A / C bem no meio de uma onda de calor. As coisas estavam lentas para um detetive de código como eu; Eu até comecei a rastrear os anúncios de jornais locais para *shudder*
caixas de wordpress.
Então, uma batida na minha porta. Espiei pelo vidro fosco tentando ver se era um cliente ou um cobrador. Mas ela abriu a porta rápido demais para eu chegar a uma conclusão.
Entrou a dama mais linda que eu já vi. Este não era um cobrador; Eu poderia dizer por seus dedos bem tonificados e mão macia que ela passou a vida toda na linha de frente. Seus olhos brilhantes e curiosos me examinaram por trás dos óculos grossos; os óculos são, sem dúvida, o resultado de muitos fins de semana vasculhando o FreeBSD.
“Como posso ajudá-lo?” Eu perguntei enquanto a avaliava quanto eu poderia cobrar. Enquanto meu cérebro reptiliano pensava em um relacionamento – textos de flerte acidentalmente terminavam :wq
devido à memória muscular vitalizada, debates acalorados sobre as diferenças entre o replicador da Federação e a tecnologia de transporte – meu cérebro de negócios começou a medi-la para quanto eu poderia carregar. Com calor ou não, eu ainda não tinha A / C.
“Estou tendo problemas com Backbone.fetch (). Venho da terra da programação do kernel, então não estou muito familiarizado com essas coisas da web, e é por isso que vim até você.” ela disse.
Eu já havia lidado com Backbone.fetch () antes. Um método frequentemente mal compreendido e abusado, meu arquivo de caso em Backbone.fetch () tinha alguns centímetros de espessura.
“Você pode me contar mais?” Eu perguntei. Tentando assumir uma atitude fria e indiferente, recostei-me na cadeira do escritório.
“Bem, Backbone.fetch () nem sempre aciona o evento ‘reset’. Estou buscando uma coleção”
Droga, este seria um caso simples. Meus sonhos de alto faturamento se dissiparam. Eu sugeri que anexássemos alguma depuração à instância da coleção:
@DameCollection.fetch(
success: (xhr, textStatus) ->
console.log(textStatus)
error: (m, r) ->
console.log('error')
console.log(r.responseText)
“Uau, isso é útil! Obrigado, Detetive GeeTotes!” ela disse, exibindo um sorriso vencedor.
Ela clicou em atualizar no navegador, e responseText
havia um monte de JSON.
“Isso é estranho” eu disse, dando uma olhada rápida no JSON. “Parece-me bem formado. Mas vamos verificar novamente”.
Quando copiei e colei o JSON do depurador do Chrome em http://jsonlint.com/ , não pude deixar de notar que ela não estava executando um gerenciador de janelas tradicional. Ela era um bebê xmonad.
JsonLint retornou um erro … havia um NaN
no JSON. Eu apontei para a tela.
“Bem, aí está o seu problema. Json inválido, então success
nunca dispara e nem dispara reset
“.
” NaN
? Mas estou verificando isso no meu MapReduce – estou usando o MapReduce para gerar o JSON para o Backbone.”
Pedi para ver o MapReduce. Agora que o MapReduce estava envolvido, esse poderia ser um bug particularmente delicado. MapReduce é sempre difícil de depurar, especialmente quando você está lidando com milhares de registros.
Ela abriu o mapa reduzido e me mostrou um trecho.
var averageScore = Math.ceil(score / totalScore);
“Ahh” eu disse, apontando para a tela. “Aí está o seu problema. $ 20 dólares dizem que em algum lugar durante o MapReduce há uma divisão por 0”.
Ela bateu na testa. “Claro! Como eu verificaria NaN
?”
Eu disse a ela sobre a exclusividade do NaN
javascript e como ele não avalia como verdadeiro ou falso nas declarações de controle. Em seguida, mostrei a ela o método embutido de javascript.isNaN()
var averageScore = Math.ceil(score / totalScore);
if(isNaN(averageScore))
averageScore = 0;
Depois disso, o MapReduce funcionou perfeitamente.
“Detetive GeeTotes, você é incrível!”
“Obrigado.” Eu sorri timidamente, não querendo estragar este momento falando sobre minha conta. Então, pensando em seu gerenciador de janelas:
“Então, hum, você gosta de Haskell?”
O FIM