A máquina de Shannon

Terminei de ler recentemente o livro “Decoding the Universe”, de Charles Seife. É um livro muito bacana sobre teoria da informação e como ela se relaciona com a termodinâmica, com a relatividade e com a física quântica, chegando à informação quântica. Em linguagem bem acessível 🙂

Nesse livro fiquei sabendo de um engenho bem-humorado idealizado pelo matemático Claude Shannon, considerado o pai da teoria de informação. Esse engenho se chama “The ultimate machine” e era basicamente uma caixa onde você mexia no interruptor para ligá-la e uma “mão” emergia da caixa para desligá-la. Nas palavras (aproximadas) do escritor Arthur Clarke, “tem algo de sinistro numa máquina que não faz absolutamente nada, exceto desligar-se”. Você pode ver o vídeo de um desses engenhos em ação:

Se você quiser construir sua própria “Ultimate machine”, tente aqui.

Sinistro? Divertido? Você que decide 🙂

Publicado em Computação | 2 Comentários

Tidbits de computação #1

Achei alguns links bem interessantes para quem é da área de computação. Costumo compartilhá-los pelo twitter, mas tem alguns que merecem destaque aqui, então vamos lá 🙂

if you are starting your research in the field of object recognition / object detection… – Esse post leva a um artigo e a um código fonte que visa a facilitar pesquisas na área de reconhecimento de objetos. Como o cara diz lá, pode ser que não entenda 100% do artigo, mas é bom tentar ler e depois olhar o código, para você mesmo tentar escrever, se quiser ser um Jedi na área de visão computacional (o que pretendo ser).

Clever Algorithms – Um livro (gratuito!) que lista vários algoritmos inspirados na natureza, como os de redes neurais, de enxame, de sistemas imunológicos e por aí vai. Indispensável 🙂

The Next Mainstream Programming Language: A Game Developer’s Perspective – Apesar de ser focado no desenvolvimento de games, é bom ler o pdf para ver quais as principais características que uma linguagem de programação precisa ter, hoje em dia, para ser amplamente usada e aproveitada ao máximo.

Mais uma coisa… faz pouco tempo que passei a visitar o site reddit, e descobri que ele tem uma seção só de ciências da computação (além de subseções em machine learning e visão, mas não tão atualizadas frequentemente). Foi por lá que descobri esse pdf do Clever Algorithms, então vale a pena visitar de vez em quando.

Publicado em Computação | Marcado com , | 1 Comentário

Robô que dobra roupas

Puxa, agora só falta aprender a passar a roupa que já temos um protótipo da empregada dos Jetsons! 😀

Link para o artigo e mais detalhes aqui.

Publicado em inteligência artificial | Marcado com | 3 Comentários

Começando com o OpenCV

Alguns de vocês já devem saber que estou usando o OpenCV para minha pós-graduação 🙂 Resolvi fazer um post a respeito (e criar uma nova categoria no blog, opencv) de como instalá-lo e configurá-lo não apenas para eu me lembrar (e parar de perder as anotações) e também ser útil a outros que queiram brincar com ele.

O OpenCV é um conjunto de bibliotecas em C/C++ que tem vários algoritmos comumente usados em visão prontos, sem a necessidade de reinventar a roda. E claro, você até poderia mexer nessas bibliotecas, se quiser modificar algo. Tem tanto para Linux como Windows. Aqui só falarei da parte do Linux.

Para começar, você pode baixar a versão atual, que é a 2.2, aqui. Antes de instalá-lo, porém, é necessário já ter previamente instalado um compilador de C++ (g++) e o CMake. Para quem usa Ubuntu, como eu, é só digitar esses nomes no gerenciador de pacotes (quem disse que ubuntu é complicado?). Tem mais uns pré-requisitos opcionais, dê uma olhada no guia de instalação.

Depois é só descompactar o arquivo baixado em um diretório de sua escolha, e ao abrir esse diretório, crie dentro dele um diretório onde o opencv será compilado (como release ou build):
cd ~/opencv
(supondo que descompactou no diretório /home/user/opencv)

mkdir release
cd release

Aí é só configurar com o CMake:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON ..

E os passos finais, para compilar e instalar:

make -j 2
sudo make install
sudo ldconfig

Depois disso, é só começar a brincar com o OpenCV 🙂 Para verificar se a instalação foi efetivada, tente rodar um dos exemplos que vem em samples, dentro do opencv.

É recomendado usar alguma IDE, como o Eclipse (meu preferido), para facilitar a vida… É só usar o plugin para C++ do Eclipse (CDT) e na hora de criar um projeto novo, ir em propriedades, depois ir nas configurações de build. Aí para o include, só incluir o caminho /home/user/opencv/include/opencv. E para as libraries, a partir da versão 2.2, tem que incluir as seguintes:

opencv_core
opencv_imgproc
opencv_highgui
opencv_ml
opencv_features2d
opencv_video
opencv_objdetect
opencv_calib3d
opencv_flann
(tem mais algumas aqui, mas essas são as principais)

E depois, especificar o caminho dessas libraries, como /home/user/opencv/release/lib.

O post pode não ser sido muito ilustrado, mas espero que os passos sejam suficientes para deixá-lo rodando 🙂 Deixa eu continuar a implementar os algoritmos de visão para a Skynet.

Publicado em opencv | Marcado com | 3 Comentários

Tidbits de matemática

Algumas coisas legais relacionadas à matemática que vi pelo mar de bits.

Top ten transcendental numbers – Lista dos 10 mais em números transcendentais. Não são números que almejam o nirvana matemático por meio de meditação transcendental e sim, números irracionais que não são raízes de uma equação polinomial com coeficientes inteiros.

Exotic spheres, or why 4-dimensional space is a crazy place – Post bem bacana sobre o espaço 4-dimensional.

65 attempts to solve P vs NP – Esse post leva a outro link detalhando os papers, mas o mencionei por causa das estatísticas que aparecem lá. E aí, quer tentar resolver?

Rejecta Mathematica – Site para hospedar papers rejeitados por jornais (do tipo peer-reviewed) em ciências matemáticas.

Publicado em Matemática | Marcado com | 2 Comentários