Tuesday, July 31, 2012

Hackeando o Kinect: Instalando o OpenNI no OSX Lion/Mountain Lion

Tutorial para instalar o OpenNI no OS Lion/Mountain Lion (e depois o Osceleton).
I promisse I'll translate this tutorial to english (some day)!

Preparação
Para o OS Lion e Mountain Lion, é preciso instalar (a última versão, preferencialmente) do:
Command line tools para Xcode:
Para instalar o Command Line Tools abra o XCode, vá em XCode>Open Developer Tool> More Developer Tools. Faça login como desenvolvedor da Apple, e baixe o Command Line Tool para seu OS.


XQuartz 2.7.2

Instalação
Com os programas acima instalados, siga a ordem de instalação abaixo.

Libtool
1 Abra o Terminal (Aplicativos > Utilitários > Terminal) e execute o seguinte comando:
sudo port install libtool
Dê enter, Insira sua senha de admnistrador e enter. 

Quando acabar, reinicie o Mac.

LibUsb
Abra o terminal e execute (exatamente) o seguinte comando.
sudo port install libusb +universal

Quando acabar, reinicie o Mac novamente.

OpenNI
Antes de tudo, aconselho criar uma pasta com o nome "kinect" em "documentos" (não é obrigatório, faço isso apenas por motivos de organização). A partir daqui, baixe e extraia tudo que for pedido na pasta "kinect".

Baixe a última versão Unstable do OpenNI em http://www.openni.org/Downloads/OpenNIModules.aspx

  • Selecione OpenNI Binaries no primeiro menu drop down
  • Selecione Unstable no segundo menu drop down
  • OpenNI Unstable Build for Mac OS X 10.7 (última versão)
  • Clique em Download




Abra o Terminal
Mude o diretório para a pasta do OpenNI: "OpenNI-Bin-Dev-MacOSX-v1.5.4.0"
Execute o comando
sudo ./install.sh

Instale o SensorKinect
Baixe a última versão Unstable do SensorKinect em https://github.com/avin2/SensorKinect e extraia-o em sua pasta kinect.
Vá para a pasta "bin". Extraia o arquivo "SensorKinect093-Bin-MacOSX-v5.1.2.1.tar.bz2" na mesma pasta Bin.
No Terminal, vá para a pasta Bin e execute o comando:
sudo ./install.sh

Instale o PrimeSense NITE
Baixe a última versão do PrimeSense em:  http://www.openni.org/Downloads/OpenNIModules.aspx
  • Selecione OpenNI Compliant MIddleware Binaries no primeiro menu drop down
  • Selecione Unstable no segundo menu drop down
  • PrimeSense NITE Unstable Build for Mac OS X 10.7 (última versão)
  • Clique em Download


Extraia o conteúdo na pasta "kinect".
Abra o Terminal, vá para o diretório NITE-Bin-Dev-MacOSX-v1.5.2.21
Execute o comando:
sudo ./install.sh

Para testar os demos, copie todos os arquivos *.xml que estão em "NITE-Bin-Dev-MacOSX-v1.5.2.21/Data"  para "avin2-SensorKinect-15f1975/Data"

Plugue o Kinect no Mac para checar se os demos funcionam.

Rode um dos exemplos do NITE.
Abra o Terminal,
Vá para o diretório "NITE-Bin-Dev-MacOSX-v1.5.2.21/Samples/Bin/x64-Release"
abra o exemplo "PointViewer" com o comando:
./Sample-PointViewer
Agite as mãos para que o OpenNI trackeie sua mão.



Instalando o Osceleton
Baixe o OSCeleton
Extraia o conteúdo na pasta do OpenNI

Abra o terminal
Vá para a pasta "OpenNI-Bin-Dev-MacOSX-v1.5.4.0/Sensebloom-OSCeleton-7307683"
Execute o comando "make"

A partir disso (se tudo deu certo), você já pode testar o OSCeleton:
Na pasta "Sensebloom-OSCeleton-7307683" clique duas vezes no executável "OSCeleton" ou abra-o pelo Terminal.
Fique numa distância de 2 passos do Kinect na posição de calibragem, que é com os dois braços levantados, como na figura abaixo:



Fique de olho no Terminal para ver se você é reconhecido.
Se houver o reconhecimento, a instalação foi um sucesso.

Rodando o OSCeleton e comunicando com o Processing

Você vai precisar antes de tudo do Processing e das bibliotecas oscP5 e pbox2d.

Baixe as bibliotecas, extraia e copie as pastas "oscP5" e "pbox2d" para a pasta Libraries, dentro da pasta do Processing (que normalmente fica em "Documentos")

Extraia e vá para a pasta "Sensebloom-OSCeleton-examples-d56823f 2/processing/MotionCapture3D" e abra o sketch "MotionCapture3D" no Processing.
Clique em "Run" e, se você for reconhecido, aparecerá um avatar digital com um esqueleto de esferas.


É isso. Espero que seja útil!!


Saturday, July 28, 2012

O que é Creative Coding?

Para pensar em creative coding é preciso estabelecer um paralelo com a programação comercial: enquanto esta última desenvolve produtos para solucionar demandas do mercado, o creative coding é o uso da computação para fins criativos, ou como meio de expressão, que pode, ou não, ser um produto comercial. Ambos se valem da programação de computadores.
Creative coding é um termo mais amplo que arte computacional, pois arte computacional refere-se especificamente à aproximação da ciência de computação com as práticas que sejam tradicionalmente classificáveis como artísticas, como pintura, escultura, música, cinema, literatura, entre outras; enquanto o creative coding aborda todo uso criativo das ferramentas computacionais, em específico a programação, incluindo desenvolvimento de jogos, design, arquitetura, engenharia, eletrônica; o que pode não ser enquadrado como arte em sentido estrito.
O creative coding encontra-se numa área limítrofe entre ciência, tecnologia, arte e design (e muitas outras áreas), o que gera muita confusão para o público médio. Apesar do uso criativo da programação não ser recente, já que desde da década de 60 existem experimentos nesse sentido, o termo é pouco conhecido, até mesmo em instituições onde a criatividade é tida como característica básica. Eu estudei na Escola de Belas Artes da UFMG e só fui ouvir desse termo no último semestre, quando o professor Chico Marinho foi meu orientador do Trabalho de Conclusão de Curso (TCC), e mesmo assim, em conversas informais, longe da grade curricular.
Se profesores de arte na maioria desconsideram a computação como ferramenta criativa - ou mesmo agem preconceituosamente contra qualquer forma de expressão que fuja da tradicionalidade, imagine quem está fora do ambiente acadêmico...
O valor estético não é imperativo, assim também como a funcionalidade não é, mas ambos podem estar presentes, e às vezes simultaneamente.

O creative coding pode ser considerado como uma subcultura underground minórica, com características muito próprias, por ser uma comunidade que é atraída pelas ferramentas open source e que operam colaborativamente, desenvolvendo tais ferramentas, compartilhando códigos, bibliotecas, participando ativamente na manutenção, crescimento e desenvolvimento desta comunidade.
As linguagens, apesar de serem (quase que) exclusivamente em inglês, são universais, privilegiando a integração entre pessoas que compartilham interesses e visão de mundo. 
O ferramental é amplo, com diferentes graus de complexidade, propiciando a conquista de novos adeptos a cada dia. O potencial é enorme, variando desde experimentações toscas a obras distintamente profissionais no estado da arte, dependendo do uso que se faz deste ferramental.


Você tem uma opinião distinta? Gostaria de acrescentar alguma coisa? Deixe seu comentário.



Trabalhos em OpenFrameworks


Starry Night (interactive animation) from Petros Vrellis on Vimeo.

iQ font - When driving becomes writing / Full making of from tomgalle on Vimeo.

Interactive Puppet Prototype with Xbox Kinect from Theo Watson on Vimeo.

Faces from arturo castro on Vimeo.

Friday, July 27, 2012

Links super interessantes sobre Creative Coding

Hacking for Artists fonte: hackingforartists.com
P5 = processing, Py = Python, Ar = Arduino, JS = JavaScript, C++ = C++
♥ = HOT!

TOOLS
Processing an open source programming language and environment for people who want to create images, animations, and interactions P5
Cinder C++
openFrameworks C++
Python Py
PyProcessing Python package that creates an environment for graphics applications that closely resembles that of the Processing system P5 Py
NLTK Natural Language Toolkit Py
Regular Expression Generator P5 Py JS C++
MongoDB Scalable, high-performance, open source, document-oriented database JS
Structure Synth a cross-platform application for generating 3D structures by specifying a design grammar
Field an environment for writing code to rapidly and experimentally assemble and explore algorithmic systems
Polycode a free, open-source, cross-platform framework for creative code C++
HYPE framework a collaborative visual framework developed in FDT and AS3
pixeltoaster a library for C++ programmers who want to write their own software rendering routines, reading and writing to an array of pixels C++
NodeBox a Mac OS X application that lets you create 2D visuals (static, animated or interactive) using Python programming code and export them as a PDF or a QuickTime movie Py
vvvv a graphical programming environment for easy prototyping and development

GETTING STARTED
Processing Tutorials A collection of step-by-step lessons covering beginner, intermediate, and advanced topics. P5
Learning Processing A Beginner's guide to programming images, animation, and interation. By Daniel Schiffmann P5
Processing Demos by Prof. Jarek Rossignac for his 3D Graphics, Modeling, Animation and Compression Classes P5
Processing Video Tutorials P5
Hello, Cinder C++

AUDIO
SuperCollider A real time audio synthesis programming language
SuperCollider Reference Manual
ChucK Strongly-timed, Concurrent, and On-the-fly Audio Programming Language
Pure Data a real-time graphical programming environment for audio, video, and graphical processing
maximilian Audio synthesis library C++
Understanding FFT

USING THE INTERNET
Processing.js You write code using the Processing language, include it in your web page, and Processing.js does the rest. P5 JS
Twitter & Processing Accessing the Twitter API with the twitter4j libraryP5
toxiclibs.js Open-source computational design library ported to javascript JS
Multi-threading in JavaScript How to run intense javascript JS
Creepy Application that allows you to gather geolocation related information about users from social networking platforms and image hosting services

ELECTRONICS AND HARDWARE
Arduino Ar
arduino/of/code/class Ar C++
ladyada Ar
Drawing Robot Ar
Attaching a Motorola C168i to an Arduino Ar
Arduino in XCode Ar
TV Out A composite video output library for AVR/Arduino Ar
Arduino Tutorials Ar
Arduino Tutorials Ar
How to Hack Toy EEGs Brain Wave Readers Ar
Microprinter Hacking Receipt Printers Ar
Hacking Nintendo Games Cory Arcangel
MAX232 Serial Level Converter Ar

3D
OpenGL Tutorials
OpenGl The red book
OpenGl on iPhone C++
THREEJS WebGL Graphics Library JS
Meshes in Cinder C++

CONNECTING THINGS
OSCemote Send Open Sound Control messages to other programs using an iPhone or iPod touch
SMS to Email Using text messages with computers Py
VoiceXML 2.0 Helping developers to build the highest quality voice-enabled applications
iPhone Serial Communication C++
iProcessing Open programming framework to help people develop native iPhone applications using the Processing language. P5
Node.js access serial ports through javascript JS

VISUALS WITH MATH AND PHYSICS
The Nature of Code Programming strategies and techniques behind computer simulations of natural systems. By Daniel Shiffman P5
Particles, vector fields, box2d C++
fractals, computer graphics, mathematics, demoscene and more C++
Clever Algorithms Nature-Inspired Programming Recipes C++
outstanding geometry, graphics programming C++
Boids basic flocking model
Easy Ray Tracing P5Sunflow is an easy way to make your Processing sketches look sexy as hell. Well, only three-dimensional ones... P5
Projecting on Quads P5
Python for Math Teachers Py

DATA VISUALIZATION
Getting Started with Processing and Data Visualization P5
JavaScript InfoVis Toolkit JS
dygraphs JavaScript Visualization Library JS
Travel Time Tube Map P5
Map Projections Java applet + code of different map projections P5
geo-location-javascript javascript geo location framework for the mobile web JS
googlemaps python googlemaps module Py
GeoNames Geographical database covers all countries and contains over eight million placenames that are available for download free of charge.
OpenStreetMap Free editable map of the whole world.
Creating Contour Maps P5

COMPUTER VISION
Frame Differencing P5
Kinect and Processing P5
Hand Tracking w/Kinect C++
Computer Vision Algorithms and Applications by Richard Szeliski

TEXT/LANGUAGE
Generating pseudo random text with Markov chains using Python Py

VIDEOGAMES
Pygame Set of Python modules designed for writing games Py
Flixel an open source game-making library

GET HELP
Processing Forum P5
Stack Overflow P5 Py JS C++
OpenFrameworks Forum C++

BOOKS
Processing: A Programming Handbook for Visual Designers and Artists by Casey Reas and Ben Fry
Getting Started with Processing by Casey Reas and Ben Fry
Programming Interactivity: A Designer's Guide to Processing, Arduino, and openFrameworks by Joshua Noble
Visualizing Data by Ben Fry
Getting Started with Arduino by Massimo Banzi
Programming Collective Intelligence: Building Smart Web 2.0 Applications by Toby Segaran
Handmade Electronic Music: The Art of Hardware Hacking by Nicolas Collins
Mining the Social Web by Matthew A. Russell
Generative Art by Matt Pearson

BLOGS/WRITING/THEORY/SHOWCASES
Hack a Day
Rhizome
Vauge Terrain DIGITAL ART / CULTURE / TECHNOLOGY
Creative Applications Apps That Inspire...
OpenProcessing Share Your Sketches!
Generator.x Software and generative strategies in art and design
neural new media art, electronic music, hacktivism
information aesthetics Information Visualization & Visual Communications
runme.org say it with software art!
The Teeming Void generative art and design, data aesthetics, digital materiality; theory, criticism and practice
ctheory.net an international peer-reviewed journal of theory, technology, and culture
Grand Text Auto a group blog about computer narrative, games, poetry, and art
How To Become a Hacker
43 Dodgy Statements on Computer Art
Geoff Cox on Software and Art

ARTISTS
Cory Arcangel
Blast Theory
Mr.doob
Mary Flanagan
Ben Fry
Futurefarmers
Robert Hodgin (Flight 404)
Natalie Jeremijenko
Aaron Koblin
David Kraftsow
Steve Lambert
Caleb Larsen
Rober Lazzarini
Golan Levin
Eva and Franco Mattes
Greg Niemeyer
Josh Nimoy
Marisa Olson
Jon Rafman
Casey Reas
Rafael Rozendaal
Jason Salavon
Daniel Shiffman
Jennifer Steinkamp
Penelope Umbrico
Camille Utterback

IRL
HackerSpace Wiki

Apresentando: OpenFrameworks


O OpenFrameworks é uma plataforma de programação open source baseada em C++. Comparativamente, é muito mais rápida do que o Processing, pois ao compilar, o C++ é diretamente convertido para linguagem de máquina, enquanto o Java precisa ser compilado para bytecode, para então poder passar por uma máquina virtual e então ser entendido pela máquina. 
Isso faz com que o OF seja muito empregado em processamento de vídeo em performances artísticas, quando há o uso de visão computacional, sendo necessárias precisão e velocidade de processamento e de acesso à memória. 
O OF foi criado e é mantido por Zach Lieberman, Theodore Watson, e Arturo Castro, (este último, eu já tive a oportunidade de participar de um workshop com ele).
O OpenFrameworks é na verdade um toolkit para experimentação com a linguagem C++ simplificada, e, para usá-lo, é necessário um IDE "comum", como o Xcode, o Visual Studio, ou o CodeBlocks. Com isto, o OF não é tão simples e intuitivo como o Processing, já que seu uso requer conhecimentos sobre o IDE utilizado.

OpenFrameworks rodando no Xcode (Mac).

Por ser baseado em C++, as sintaxes são menos amigáveis ao usuário, o que complica um pouco o aprendizado de quem está ingressando no mundo da programação.
O caminho "natural" cursado pelos desenvolvedores criativos, segundo minha observação pessoal, se dá de modo que o primeiro contato acontece com o Processing, e, quando o desenvolvedor se sente mais confortável com a programação, ele migra para o OpenFrameworks.

O OF traz uma série de vantagens como:
  • Velocidade
  • Comunidade ativa
  • Muitos Addons
  • Bibliotecas poderosas em C++
  • Facilidades em publicar em IOS e (com o OF 007) em Android
Mas tem desvantagens que complicam a vida de iniciantes como
  • Sintaxe de mais baixo nível
  • Não publica para web
Como o Processing, o OpenFrameworks é muito empregado para desenvolvimento de aplicações interativas, jogos, instalações artísticas e design. 

Informações sobre o OF podem ser acessadas no site oficial do OpenFrameworks http://www.openframeworks.cc/ aonde é possível acessar um Wiki dedicado http://wiki.openframeworks.cc/index.php?title=Main_Page.

O modo de "instalar" varia para cada plataforma. Na verdade, não se instala o OF, mas sim baixa-se uma série de exemplos e addons que são abertos nos IDEs de cada plataforma.
Para criar um aplicativo do zero, é necessário ir na pasta ./apps/myApps, copiar a pasta emptyExample, criar uma pasta e colar a pasta emptyExample nela. É necessário que haja essa hierarquia de 2 níveis, por exemplo ./apps/exemplo/meuExemplo. 
Isso é um pouco complicado, mas entendendo isso, é mais fácil encarar o OF.

O download pode ser feito aqui: http://www.openframeworks.cc/download/. Basta seguir as instruções de setup, nos "setup guides".


O Arturo Castro criou um gerador de projetos de OF que facilita muito a vida ao iniciar um projeto novo e adicionar Addons.

Project Generator para Windows: 

Project Generator para Mac


Trabalhos em PD

Tuesday, July 17, 2012

Apresentando: Pure Data


O Pure Data, comumente chamado de PD, é um ambiente de programação em tempo real baseado em C, mas com interface visual. Foi criado inicialmente para trabalhar com áudio, mas também integrou processamento visual. Ele foi desenvolvido por Miller Puckette no IRCAM.
O PD é open source e gratuito, facilmente instalável.

A interface visual à primeira vista é estranha para quem trabalha com linhas de código e tem costume com fluxos de controle bem delimitados. A principio, o programa é caótico e parece rodar tudo ao mesmo tempo, com emaranhados de ligações, lembrando os antigos sintetizadores. É justamente desse sistema de ligações é que deriva o termo patch, como são chamados os arquivos de PD.

Patching real

Patch do PD

O PD é poderoso para o processamento de áudio e é certamente a primera opção para esse fim, mas, para gráficos, ainda é uma opção secundária, embora em franco desenvolvimento.

Conceitualmente, é possível fazer qualquer coisa no PD, já que é relativamente fácil extendê-lo ao desenvolver classes de objetos (externals) e bibliotecas. Inclusive, o PD possui duas versões, o Vanilla e o Extended, sendo o último uma reunião de extensões e bibliotecas feitas por colaboradores.

Existem bibliotecas que possibilitam a comunicação entre o PD e o Arduíno, possibilitando a integração entre software e hardware e eletrônica. Além disso, por meio de OSC (Open Sound Control), é muito simples a integração entre o PD e qualquer outra plataforma de programação, como Processing e OpenFrameworks. Isso possibilita a complementaridade entre as linguagens, de forma que o Processing ou o OF possam funcionar como o motor visual, enquanto o PD realize o papel de motor de áudio.
Através do protocolo MIDI, é possível conectar o pd a qualquer VST ou dispositivo que comunique através deste protocolo.

O futuro aponta para uma integração mais efetiva, de forma que o PD possa ser uma biblioteca para as demais plataformas. Nesse sentido, já existe o libpd: http://libpd.cc/.


O concorrente direto do PD é o Max/msp, que é um software proprietário.


Mais infomações: 

Trabalhos em Processing



Soundmachines from The Product on Vimeo.

Monday, July 16, 2012

Apresentando: Processing


O Processing é uma linguagem e ambiente de programação open source e grátis, baseada em Java, mas com sintaxe simplificada, o que é ideal para ao primeiro contato com o mundo da programação.
O projeto foi iniciado por Casey Reas e Ben Fry, integrantes do MIT Media Lab em 2001 e agora conta com milhares de colaboradores e usuários em todo mundo.
A versão mais atual é a 2.0a6 (alfa) e a versão estável é a 1.5.1.  O download pode ser feito aqui: http://processing.org/download/.
O Processing é extremamente prático: fácil de instalar, facil de adicionar bibliotecas, conta com um site muito bem estruturado (http://processing.org/), referências bem documentadas, além de ter um IDE extremamente limpo.


Uma de suas maiores virtudes em relação às linguagens de programação comerciais é que o Processing apresenta respostas (visuais ou sonoras) imediatas: basta escrever o código e clicar no botão "run". A compilação é geralmente muito rápida e o resultado aparece na janela que é aberta. Isso torna o aprendizado muito mais fácil e intuitivo.

Uma pergunta pertinente é "o que o Processing faz?". Uma resposta é: tudo o que a imaginação permitir, de meros esboços a jogos completos, aplicativos, instalações artísticas interativas, trabalhos em audio e video, entre outros.

Um porém: o Processing é conhecido por ter limitações importantes: a principal é a lentidão na velocidade de processamento, já que ele roda em uma máquina virtual. Outro gargalo são as bibliotecas, pois algumas vezes o que é cogitado não é alcançado devido a ausência de uma determinada biblioteca que execute alguma função muito específica, mas nada impede que programadores mais avançados escrevam novas bibliotecas que suplantem as necessidades.

Aliás, um ponto forte do Processing é a comunidade, que colabora desenvolvendo bibliotecas, compartilhando códigos, partilhando dúvidas e respondendo perguntas.

Características do Processing:
  • Apesar do IDE limpo, também pode ser compilado no Eclipse ou mesmo em algum outro IDE Java.
  • Possibilita exportar os sketches facilmente para web por javascript. Apesar de exportar para web, as bibliotecas de áudio ainda são limitadas para esse fim. 
  • Exporta diretamente para dispositivos móveis com sistema operacional Android.
  • Com o Iprocessing e o Xcode, é possível exportar para IOS.




Para quem quiser saber a fundo sobre o Processing, uma boa descrição sobre o projeto está na página oficial http://processing.org/.
Há uma breve descrição histórica no Wikipedia http://pt.wikipedia.org/wiki/Processing_(linguagem_de_programa%C3%A7%C3%A3o).

O concorrente direto do Processing é o OpenFrameworks, que falarei mais detalhadamente em outro post. O OF é indiscutivelmente mais rápido que o Processing, pois ele é baseado em C++.

Para quem quiser ver o que o Processing faz, basta ver os vídeos inserido aqui: http://processing.org/exhibition/

Uma forma muito boa de aprender é pelo livro Learning Processing, a Beginner's Guide to Programming Images Animation and Interaction, de Daniel Shiffman.
http://www.learningprocessing.com/

Dúvidas? Poste um comentário!

Friday, July 6, 2012

Intro


Este é um blog dedicado à discussão de creative coding e também é uma vitrine para os trabalhos que fundem programação, design e arte.
Serão abordados principalmente os ambientes de programação open source como Processing, Arduino, Pure Data e Open Frameworks.
Aproveitem!