Dez Maneiras de Destruir a Imaginação do seu Filho

Comecei a ler esse excelente livro (Ten Ways to Destroy the Imagination of Your Child, no original) durante essa semana. Nele o autor expõe de maneira brilhante como aperfeiçoamos o processo de destruição da imaginação de nossas crianças, ao mesmo tempo em que anunciamos fazer exatamente o oposto.

O que mais me marcou até o momento foi um trecho que fala sobre a memória (tradução minha):

“Como, então, nós nos livramos dos Fatos? O primeiro passo é manter a memória fraca e vazia.

Isso pode parecer ir contra a intuição. “Nós não ensinamos mais através da memorização por repetição,” dizem os nossos educadores hoje em dia, empinando  orgulhosamente seus narizes. “Nós preferimos ensinar o pensamento crítico. Nós preferimos mexer com a imaginação.”

Enquanto os professores continuarem batendo nessa mesma tecla, nós não precisaremos temer que o próximo Dante ou Mozart se forme em nossas escolas. Isso porque uma memória desenvolvida é um maravilhoso e terrível armazém de coisas vistas, ouvidas e feitas. Ela consegue fazer o que nenhum mero motor de busca na internet consegue. Ela pode reunir ao mesmo tempo coisas aparentemente sem relação, moldando uma impressão completa, ou um novo pensamento. […] Sem a biblioteca da memória, a imaginação simplesmente não tem muito sobre o que pensar, ou coisas com as quais brincar.”

Algoritmos de busca em grafo em Ruby

Parecido com o parser de grafos que fiz em C, só que este funciona com grafos valorados. Implementei breadth-first search (busca em amplitude), depth-first search (busca em profundidade) e o algoritmo de Dijkstra. Está tudo no repositório graph_ruby, junto com a minha primeira tentativa de gerar documentação com o rdoc.

Script para renomear PDFs

Meu primeiro script em Ruby que faz algo útil, feito para ser utilizado a partir do shell. Utilizei a biblioteca pdf-reader. Só funciona se o pdf tiver informações de título e autor. Por padrão ele renomeia o pdf para o formato “título [autor]”, se quiser mudar é só alterar a linha 15.

Exemplo de uso (tenta renomear todos os arquivos pdf do diretório atual):
ruby pdf_rename.rb *.pdf

require 'pdf-reader'

if ARGV.empty?
    puts "Usage: ruby pdf_rename.rb 'file.pdf'"
    exit 1
end

ARGV.each do |arg|
    filename = arg
    nfilename = ""

    begin
        PDF::Reader.open(filename) do |reader|
            if reader.info[:Author] && reader.info[:Title]
                nfilename = reader.info[:Title] + " [" + reader.info[:Author] + "].pdf"
            end
        end
    rescue
        puts "Could not read PDF '#{filename}'."
        next
    end

    if nfilename != ""
        begin
            File.rename(filename, nfilename)
        rescue
            puts "Could not rename file '#{filename}' to '#{nfilename}'."
            next
        end
    else
        puts "Could not extract author and title information from PDF '#{filename}'."
        next
    end
end