Processing y...
Jesús Gollonet
Desarrollador interactivo
Yo
- Jesús Gollonet Bailén
- Estudié Psicología y luego Multimedia
- He trabajado como programador flash, diseñador/desarrollador web...
- Trabajo en Herraizsoto
- Escribo el blog Hola, Mundo
Programador de juegos, diseñador y desarrollador con estándares. Varios lenguajes....
Por qué uso Processing
- Entorno de aprendizaje ideal
Entorno de aprendizaje ideal
- Sintaxis simple
- Programación visual
- Resultados inmediatamente visibles
- Cantidad y calidad de ejemplos
- Allana el camino hacia Java
Por qué uso Processing
- Entorno de aprendizaje ideal
- Cuaderno de bocetos de programación
Sketching:
For a process to be sketchy, or like sketching, it should be immediate, quick to engage or start up in and incremental, easy to save and resume working on
Graham Coleman
(como coger una guitarra)
Siempre que retomo processing pienso "¿esto se hacía así?". Con otros lenguajes la respuesta es "no". Con processing, si.
Cuaderno de bocetos de programación
- Interfaz pequeña y minimalista
- Facilita el boceto rápido de ideas
- Inmediato
- Adictivo
- Fácil de guardar/recuperar
(como coger una guitarra)
Siempre que retomo processing pienso "¿esto se hacía así?". Con otros lenguajes la respuesta es "no". Con processing, si.
Por qué uso Processing
- Entorno de aprendizaje ideal
- Cuaderno de bocetos de programación
- Integración de multiples medios y tecnologías
Multiples medios - tecnologías
- audio
- video
- datos
- interactividad física
- conexión con otros programas:
- exportación / importación
Sin salir del mismo programa
Por qué uso Processing
- Entorno de aprendizaje ideal
- Cuaderno de bocetos de programación
- Integración de multiples medios y tecnologías
- Comunidad valiosa
Gente
- Comunidad activa
- Interesada por la educación
- Dispuesta a ayudar.
Por qué uso Processing
- Entorno de aprendizaje ideal
- Cuaderno de bocetos de programación
- Integración de multiples medios y tecnologías
- Comunidad valiosa
- Potencia
Potencia
- Manejo de gran cantidad de elementos
- Java
Lenguaje de programación "de personas mayores"
----------------------------------------------
Processing vs Web Comercial
Processing no se usa en entornos comerciales
Razones
- El plugin de Java es poco conocido
- Su instalación es tediosa
- Poca gente lo tiene instalado
Por lo qué...
Mucha gente piensa que aprenderlo es una pérdida de tiempo
Casos prácticos
¿Sirve para algo aprenderlo?
Presentaré algunos ejemplos donde lo uso como tecnología intermedia, aunque el output final sea flash.
Seat León Wtcc.
Efecto para el menú de un microsite:
En flash, obviamente
Problema
¿Cómo consigo crear las siluetas que formarán las avispas?
- Hacerlo a mano no es una opción
- Flash 7 no tenía acceso a datos de color de pixel
- ...processing si.
Solución
- Escribir un pequeño programa que me permita convertir cualquier forma a coordenadas
- Exportar las coordenadas de cada figura
- Asignarlas en flash a cada insecto.
Quick and Dirty
- En publicidad todo es para ayer
- Queremos que funcione rápido
No podemos pensar en opciones muy elaboradas
Leer formas en processing
- Cargar una imagen en blanco y negro.
- Leer pixeles según un intervalo determinado
- Si el pixel actual es negro, pinta sus coordenadas
- println()
Flash
- Copy + Paste de las coordenadas generadas en processing
- Asignalas a cada avispa
Demo
archivos:
- _01_leerFormas_wtcc
- menu_wtcc
- site_wtcc
Processing...
- Lectura de coordenadas
- "Exportación" -println()-
...flash
- Pegar coordenadas
- Asignar a cada cuadro
DEMO
Lollevasescrito
Briefing:
Microsite promocional en el que el usuario "conduce" a través de muchas imágenes de carácter emocional y/o sugerente.
"Al final del microsite queremos que todas las imágenes se junten en 3D y conformen un mosaico con la foto de el coche"
:|
- ¿Decenas de imágenes?
- ¿3d?
- ¿En flash?
Processing al rescate
- Soporta mayor número de elementos en movimiento.
- Soporta 3d de manera nativa (en flash habría que programar un motor)
- Podemos exportar un jpg de cada fotograma e importarlo en flash
HS UPLOAD
Idea:
Instalar una cámara en la oficina de herraizsoto e ir subiendo imágenes a la web según un intervalo determinado para que los usuarios puedan ver y comunicarse en tiempo real con los que trabajamos allí.
¿Cómo subimos las imágenes?
- Hay muchos pequeños programas que lo hacen.
- Pero habría que buscarlos,
- instalarlos,
- aprender a usarlos,
- y conformarse con sus limitaciones.
¿Hay alguna otra opción?
- Processing puede capturar imágenes de una webcam
- Java permite hacer uploads de archivos, y processing ES Java.
Conclusión
- Facilita mentalidad abierta y resolutiva
- Permite resultados rápidos con poco código
- Hay mucha probabilidad de que cuando necesites algo, alguien ya lo haya hecho.
Ascii Video

Un amigo me preguntó si sería difícil hacer algo de ascii video con processing.
Ascii Video 0. Antes...
Conseguir que funcione la webcam
- Instalar Quicktime (actualmente junto con Itunes)
- Instalar winvdig
- Cruzar los dedos
Es uno de los procesos más... truculentos de processing
Ascii Video 1 Importar librería.
Setup general e importación de video
- Importar librería de video
import processing.video.*;
Es uno de los procesos más... truculentos de processing
Ascii Video 1. Capture
Setup general e importación de video
- Crear variable de tipo Capture
- Instanciar la captura en el setup()
Capture capt;
void setup() {
capt = new Capture (this, w, h, fps);
}
Ascii Video 1. Métodos Capture
Setup general e importación de video
- Añadir el método captureEvent
- Pintar la imagen en el draw()
void captureEvent(Capture capt_) {
capt_.read();
}
void draw() {
image(capt, 0, 0);
}
Ascii Video 2. Leer pixeles.
Lectura de valores de pixel. En cada frame:
- Recorremos la pantalla con un for anidado
- Leemos el valor de uno de cada doce pixeles
int pixelSize = 12;
void draw() {
for (int i = 0; i < w; i+= pixelSize) {
for (int j = 0; j < w; j+= pixelSize) {
// acciones
}
}
}
No se asusten con el bucle for anidado.
Ascii Video 2. Cuadrados Color
Lectura de valores de pixel. Pixelizador
- Leemos el color del pixel
- Lo establecemos como color de relleno
- Y creamos un rectangulo del tamaño especificado en pixelSize
...
color c = capt.get(i,j);
fill(c);
rect(i, j, pixelSize, pixelSize);
...
Alterar el tamaño de pixel
Ascii Video 3. Brillo
No nos interesa el color de pixel, sino el brillo.
- Extraemos el valor mediante brightness()
- Lo establecemos como color de relleno
...
color c = capt.get(i,j);
float brillo = brightness(c);
fill(brillo);
rect(i, j, pixelSize, pixelSize);
...
Alterar el tamaño de pixel
Ascii Video 4. Font
Introducir una fuente:
- Declarar la variable PFont
- Instanciarla con createFont()
- Establecerla como fuente predeterminada con textFont()
PFont font;
void setup() {
font = createFont("Arial", pixelSize);
textFont(font);
}
Ascii Video 4. Texto
En lugar de un cuadrado de color, pintaremos una letra:
- Rellenamos el fondo de blanco
- Escribimos la letra "a" mediante text()
void draw() {
background (255);
for...
text("a", i,j, pixelSize, pixelSize);
}
}
Ascii Video 5. Método
En vez de usar una letra con diferentes colores, usaremos distintas letras en función de su oscuridad
.'`,^:";~-_+<>i!lI?/\|()1{}[]rcvunxzjftLCJUYXZO0Qoahkbdpqwm*WMB8&;%$#@
Ascii Video 5. División según Brillo
Dado que no tenemos tantas letras como posibles valores de brillo (256), reduciremos:
- Usaremos 7 letras distintas
- 256 / 7 = 40 (+ ó -) valores de brillo para cada letra
Ascii Video 5. Sustitución
Las letras se sustituirán del siguiente modo:
- "@": 0 - 40
- "w": 40 - 80
- "X": 80 - 120
- "z": 120 - 160
- "l": 160 - 200
- "+": 200 - 240
- ".": 240 - 255
Ascii Video 5. Código
- Comprobamos si el brillo se haya entre los valores acordados
- Asignamos un valor de letra para la función text()
String letra="";
if (brillo > 0 && brillo < 40) {
letra = "@";
} else if (brillo > 40 && brillo < 80) {
letra = "w";
....// ...
} else {
letra = ".";
}
text(letra, i,j, pixelSize, pixelSize);
Ascii Video 6. Mejoras código
- Las letras están ahora en un array
- Usamos una función eligeLetra() que, dado un valor de brillo, nos devuelve la letra correspondiente
Sobre la presentación
- Hecha con s5
- Basada en estándares xhtml + css + javascript