diseño aplicado en instalaciones multimedia

design aplicado a instalações multimídia com projeção

entre los días 13, 14 y 15 de marzo,  estaré en san pablo, brasil, en el centro cultural trackers, proponiendo un corto taller cuyo objetivo es armar un intenso y productivo espacio de estudio de proyetos multimedia que involucran la tecnología de proyección. el taller está basado en otras previas versiones, con foco específico en los benefícios del diseño como metodología de producción y gestión de conocimiento acerca de instalaciones de tal especificidad.

serán utlizadas, fundamentalmente, tres herramientas: vpt – ya conocida aplicación abierta para mapeamento de proyección desarrollada por hc gilje -, lpmt – otra aplicación abierta para la adecuación de imágenes, interesante en especial para usuarios linux – y google sketchup para el dibujo de posibles situaciones instalativas.

el así llamado “videomapping”, o “proyección mapeada” (término que prefiero utilizar) denomina una serie de manifestaciones en las cuales el lenguaje visual es utilizado de manera inusitada y creativa en soportes no convencionales. la tecnología despierta el interés de una diversidad de profesionales, entusiastas e investigadores, con distintas bases de conocimiento. en este panorama de interdisciplinaridad, la aplicación de un método de diseño propio se vuelve necesaria, visto la diversidad de técnicas y equipamientos que estos proyectos frecuentemente involucran. se hace necesario conocer, por lo menos a nivel básico, el funcionamiento de un proyector y sus componentes, las formas de adecuación de una imagen proyectada a un soporte, la formatación de vídeo en situaciones de proyección site-specific, el cálculo de distancias y lentes en la relación entre proyector y soporte, etc.

el taller, por lo tanto, tiene como programación la que sigue:

día 1 (13/03): introducción a la metodología del diseño aplicado a la tecnología de proyección

¿qué tipos de conocimientos están relacionados con la tecnología de mapeamento de soportes para proyección?¿ qué es un proyector, y cómo funciona?¿qué tipos de equipamiento se utilizan en tales proyectos?¿ qué se debe considerar al formatar un vídeo para este tipo de situación? estas preguntas frecuentes serán planteadas en una introducción a una metodología de diseño que comprenda las diversas situaciones de uso de la tecnología de proyección. se propondrá un ejercicio en lo cual los participantes son invitados a dibujar una situación instalativa utilizando del google sketchup.

día 2 (14/03): vpt y lpmt  - adecuación de imágenes a superficies

en este día se realizará una introducción a las herramientas de mapeamento de soportes para proyección, mientras son abordadas diferencias y similitudes entre texturización “virtual” y “real”. se hará un recorrido por técnicas típicas del mapeamento, tales como la distorsión por ajuste de vértices, mascaras y frame blending. como ejercicio, los participantes serán invitados a adecuaren una imagen o vídeo de su preferencia al soporte seleccionado en el proyecto iniciado en el día anterior.

día 3 (15/03): cierre

el último día de encuentro está reservado para el término de la instalación y para esclarecimientos específicos que no fueron planteados en los días anteriores.

para inscripciones y más información, por favor, consultá el sitio web del taller.

nos vemos ahí!

 

..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

fatto in casa en el panoramica 2012

fatto in casa - panoramica 2012

y arrancamos 2012 con una presentación de fatto in casa, junto al amigo y maestro, jorge crowe. la performance participará del festival panoramica, en el espacio fundación telefonica de buenos aires (arenales 1540), sábado, 10 de marzo, a las 19hs. ahí verán algunas implementaciones nuevas: sincronía audiovisual via arduino + pduino, juguetes que se iluminan cuando sobre la jugetomatica (interfaz que utilizo para el remix de imágenes en tiempo real), y otras cositas más ;)

por favor consulte el sitio web oficial del evento para más info:

http://panoramica.cc/ed_2012_jam.php

http://www.panoramica.cc/ed_2012.php

hasta pronto!

..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

juguetes modificados ocupan bsas

fatto in casa medul.la jorge crowe

en los próximos días, buenos aires va a ser ocupada por juguetes modificados (sí, un chiste oportunista, pero bueno). jorge crowe y yo estaremos presentando la performance audiovisual fatto in casa en cuatro eventos zarpados.

para los que no conocen la performance, se trata de una plataforma audiovisual hecha a partir de juguetes y objetos reciclados y modificados. jorge produce paisajes sonoros con un enorme set de pequeños frankensteins, mientras yo modifico en tempo real imágenes de una cámara que graba en vivo sus juguetes, por intermedio de un prototipo – bastante improvisado – del conocido proyecto reactableya performamos dos veces este año, y ahora invitamos a todos para que vengan a conferir nuestros próximos quilombos :)

el primer toque será el 10, sábado, en el street a delika, a ser realizado en el zafra espacio de formación artística (sarmiento 3096), a las 17:00.

street a delika

el domingo, 11/12, estaremos en el E.A.S.T.encuentro de arte sonoro en transito, promovido por la galería patio del liceo (santa fé 2729), desde las 16:00.

encuentro de arte sonoro en transito

el jueves, 15/12, estaremos en el espacio ecléctico, para el interesante encuentro genealogía del objeto. nuestro ruido empieza a las 20:00.

genealogía del objeto

la invasión de juguetes se termina el 17, sábado, en la tercera edición del conocido dorkbot buenos aires. el horário del toque está por ser confirmado todavía, así que fíjense en el blog o en mi facebook que más adelante lo estaré informando.

dorkbot 3 buenos aires

para adelantar lo que estamos armando para esta semana, les dejo con unas imágenes de las performances de septiembre. hay un vídeo de estas presentaciones que publicaré en los próximos días.

nos vemos!

..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

fatto in casa

fatto in casa

es con mucho gusto que anuncio que estaré jugando con algunas imágenes en tiempo real, junto a jorge crowe, en el sabado, 10 de septiembre, en la performance/instalación fatto in casa. será una doble noche: la primera presentación ocurre en el centro cultural recoleta, a las 8pm, como parte del seminario de narrativas hiper/textuales. luego, seguimos para el centro cultural zaguán, donde performamos en la fiesta sintomatica a las 1am.

nos vemos por ahí! abajo sigue un video de jorge performando en el encuentro panoramica, en marzo de 2011, en el espacio telefonica.

..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

presentación del proceso de la residencia demolición/ construcción

presentación del proyecto loci - demolición/construcción

¿qué significa historiar hoy? ¿cómo los mecanismos de almacenamiento y transmisión de información modifican la manera como opera la memoria humana? estas son algunas de las cuestiones que el proyecto loci intenta plantear.

el nombre se viene del sustantivo plural del termino en latín locus, que se puede asociar a un largo conjunto de conceptos, como lugar, situación, estado. el proyecto fue presentado en el sábado, 16 de julio, en el espacio de memoria la perla, como parte de mi participación en la residencia del proyecto demolición/construcción. aún en desarrollo, la aplicación web fue presentada como prototipo para su discusión en conjunto con los demás artistas y pensadores participantes.

mi aporte al asunto de la residencia no considera lo que se puede llamar de ‘aspectos más icónicos’, o sea, toda la imagen aparente acerca del contexto de la dictadura militar argentina – que estuvo activa por lo menos 20 años en el país. en cambio, adopté una concepción de giorgio agamben acerca de una imposibilidad de concebir el inhumano. preferí entonces plantear lo que considero problemas más amplios, que residen en las intersecciones entre la memoria, el arte y la política. esto gradualmente tomó forma mientras leía a lo que queda de auschwitz, de agamben, y cultura_RAM, de jose luis brea. basado en la idea de testimonio como “una relación entre el decible y el indecible” y de archivo como “un sistema de relaciones entre el dicho y el no dicho” (AGAMBEN, 199: p. 45), la cuestión de las dimensiones de memoria en la contemporaneidad me pareció bastante digna para la temática de la residencia, y así me puso a desconstruirla.

propuse así un meta-medio que referencia algunas características de modelos computacionales y humanos de archivo y rescate de información. como nos recuerda luis brea, después de los medios electrónicos y digitales, la memoria humana pasa a adaptarse a un complejo paisaje mediático, en un continuo cambio de un mecanismo de recuperación a un canal de juzgamiento de experiencias recientes y simultáneas. en este sentido, el aspecto moralizante de la memoria – la iconización del pasado – ha decaído en favor de necesidades más urgentes, como la preterización del futuro y el entendimiento construido en red de patrones informacionales instantaneos y metamorficos. así relaciona luis brea las ‘obsoletas’ formas de historia con la memoria computacional de tipo ROM (Read Only Memory), lo diferenciando de un panorama más reciente que puede ser asociado a la memoria de tipo RAM (Random Access Memory), afirmando que la noción de verdad histórica como producto de su materialidad – es decir, formas archivadas como patrimonio cultural – o de su credibilidad – soportada por el testigo de grupos específicos – da lugar a otro tipo de concepción, producto de una red sistemática de procesos inter-proyectivos, de los cuales emergen perspectivas antes a parte de la historia institucionalizada, que inter-actuan entre si y proponen alternativas multi-discursivas de lo que es status quo. en este sentido, se algo es verdadero o no, poco importa: si este algo contiene afectividad y es capaz de transitar por diferentes redes, entonces este algo es digno, no importando la naturaleza de su discurso.

loci

loci sugiere una desterritorialización de las formas objetivadas de historia: archivos de diferentes formatos digitalizados de medios (radio, televisión, recortes de periódicos, libros, et cetera) son procesados por un software que opera en tres niveles. el primero es matemático, un continuo flujo de texturas de datos que son resultados instantáneos de cálculos algorítmicos, yuxtaponiendo y sobreponiendo diferentes capas y tipos de medios; el segundo es lingüístico, lo cual relaciona los meta-datos asociados a toda la información presente en el banco – como fechas, palabras-llave -, reconfigurando la red semántica por intermedio de comparaciones en el nivel textual de los signos, determinando, sin embargo, que informaciones son “recordadas” y, por supuesto, la interfaz en todos sus niveles perceptivos. estos caracterizan el tercer nivel de operación de loci, o sea, los fragmentos de imágenes, textos y sonidos que componen un continuo porvenir de discontinuidades. una meta-forma.

el banco de datos para la versión 1.0 de loci contiene ejemplos de información presente en los medios masivos de la argentina de los años 70 y 80, periodo profundamente marcado por la represión sistemática del gobierno militar. grande parte de este material fue obtenido mediante investigación en el archivo provincial de la memoria de córdoba, en el cispren y en el archivo del servicio de radio y televisión de la universidad nacional de córdoba. también tuve la ayuda de amigos que colaboraron con referencias culturales populares en la época. un poco de youtube también tuvo su importancia :)

ese banco de datos no es de forma alguna permanente o único. loci no será caracterizado por la información que gerencia, sino por la in-formación como una metáfora sistemática de procesos de memoria contemporáneos. eso significa que, en versiones futuras, loci posibilitará el uso de diferentes bancos de datos que estoy proponiendo para la residencia, además de posibilitar integración con otros disponibles en la red.

mapa mental loci

en otras palabras, loci es propuesto como una proto-memoria, una máquina de recordar que, en su curso, genera ficciones y contra-hechos (o hiper-hechos, como me gusta definirlos) al salvar sus “memorias” destorcidas por el proceso como nuevos “hechos” en el banco. sin embargo, loci busca por informaciones presentes en bancos de datos abiertos en la web por intermedio de APIs (Application Programming Interfaces), de servicios como flickr o twitter, extendiendo su espectro histórico y semántico a otros limites, tal vez a lugares cercanos de los que wittgenstein definió como barreras de lenguaje.

la aplicación estará disponible en un sitio web así que la versión 1.0 se quede lista, lo que debe ocurrir en las próximas semanas. el anuncio de su disponibilidad será hecho en este blog. el desarrollo está siendo hecho en processing, y el código-fuente de la aplicación estará disponible en la misma pagina.

más detalles cuanto al proceso de desarrollo serán revelados luego. es también de mi intención publicar acá un texto que soporta conceptualmente algunas de las cuestiones tratadas por el proyecto (conforme anuncié un par de semanas atrás).

la presentación del proyecto fue muy constructiva justo por el retorno que obtuve de los otros artistas y pensadores presentes, y me gustaría expresar mi gratitud por eso. un agradecimiento especial va para lina lopes – a quien debo agradecer por el registro de la presentación -, gabriela halacgraciela de oliveiraeugenia almeida por su interés y contribución a los temas del proyecto. gracias también a ángel poyónfhernando poyónedgar calel por los geniales intercambios de ideas mientras nuestra estadía en la fundación pluja, la cual debo agradecer por la hospitalidad.

me gustaría también agradecer al espacio de memoria la perla, al cispren, al archivo provincial de la memoria de córdoba y a la universidad nacional de córdoba por abrir sus puertas y su material para mi investigación.

y por supuesto, un enorme agradecimiento a graciela de oliveira e a soledad sanchez por la predisposición en organizar la residencia phronesis criolla.

acá están algunas fotos y un video del día de presentación de loci. fijense en el blog para los futuros pasos del proyecto.

 

..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

visualización de cámara y sonar

como ultimo ejercicio propuesto para el taller datajockey, los códigos para processing y arduino abajo generan una representación visual de dos fenómenos distintos: en primero lugarm la imágen de una cámara conectada a una computadora es cambiada, via processing, en una matriz de pixels coloridos. estos pixels tienen sus propriedades modificadas en tiempo real, segundo la distancia de un objeto en relación a un sonar, conectado a una placa arduino.

el código para aplicación en processing es este. como biblioteca de vídeo, se eligió gsvideo, ya que es baseada en gstreamer, portanto, funciona en linux.

 
//camera-sonar module visualization
//by medul.la
//based on the example 'mirror', of the gsvideo processing library,
//and the code found in this forum post by dvnanness:
//http://forum.processing.org/topic/multiple-sonar-reading-from-arduino-to-processing
 
import processing.serial.*;
import codeanticode.gsvideo.*;
 
// Number of columns and rows in our system
int cols, rows;
// Variable for capture device
GSCapture video;
 
Serial myPort;
int numSensors = 1;
int linefeed = 10;
int sensors[];
float read1;
int cellZFactor; 
 
// Size of each cell in the grid
int cellSize = 15;
 
void setup() {
  size(640, 480, P3D);
  //set up columns and rows
  cols = width / cellSize;
  rows = height / cellSize;
  colorMode(RGB, 255, 255, 255, 100);
  rectMode(CENTER);
 
  // uses the default video input, see the reference if this causes an error
  video = new GSCapture(this, width, height, 30);
 
  // list all the available serial ports
  println(Serial.list());
 
  // change the 0 to the appropriate number of the serial port
  // that your microcontroller is attached to.
  myPort = new Serial(this, Serial.list()[0], 9600);
  myPort.bufferUntil(linefeed);
}
 
void draw() {
  if (sensors != null) { 
 
    // if valid data arrays are not null
    // compare each sensor value with the previuos reading 
    // to establish change
 
    read1 = map(sensors[0], 0, 600, 1, 30);
    cellZFactor = int(read1);
  }
  if (video.available()) {
    video.read();
    video.loadPixels();
 
    background(0);
 
    // begin loop for columns
    for (int i = 0; i < cols;i++) {
      // begin loop for rows
      for (int j = 0; j < rows;j++) {
 
        // where are we, pixel-wise?
        int x = i * cellSize;
        int y = j * cellSize;
        int loc = (video.width - x - 1) + y*video.width; // reversing x to mirror the image
 
        // the rects' color and z position depends on the information from the sonar input, 
        // the brightness and the colors captured by the camera
        color c = video.pixels[loc];
        float sz = (brightness(c) / 255.0) * cellSize + cellZFactor;
        fill(red(c)/cellZFactor,(blue(c)+(cellZFactor)), (green(c)*(cellZFactor)/3));
        noStroke();
        rect(x + cellSize/2, y + cellSize/2, sz, sz);
      }
    }
  }
}
 
void serialEvent(Serial myPort) {
 
  // read the serial buf
 
//camera-sonar mfer:
  String myString = myPort.readStringUntil(linefeed);
 
  // if you got any bytes other than the linefeed:
  if (myString != null) {
 
    myString = trim(myString);
 
    // split the string at the commas
    // and convert the sections into integers:
 
    sensors = int(split(myString, '\n'));
 
    // print out the values you got:
 
    for (int sensorNum = 0; sensorNum < sensors.length; sensorNum++) {
      print("Sensor " + sensorNum + ": " + sensors[sensorNum] + "\t");
    }
    // add a linefeed after all the sensor values are printed:
    println();
  }
}

y este es el codigo para obtener la información del sonar, por intermedio de un arduino. para el código abajo, el modelo del sonar debe ser similar al HC-SR04.

 
//defining ports
const int pingPin = 7;
const int pingPin8 = 8;
 
void setup() {
  Serial.begin(9600);
}
 
void loop(){
  long duration, inches, cm;
  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);
 
  pinMode(pingPin8, INPUT);
  duration = pulseIn(pingPin8, HIGH);
 
  inches = microsecondsToInches(duration);
  cm = microsecondsToCentimeters(duration);
  Serial.println(cm);
 
  delay(100);
}
 
long microsecondsToInches(long microseconds){
  return microseconds / 74 / 2;
}
 
long microsecondsToCentimeters(long microseconds){
  return microseconds / 29 / 2;
}

más detalles acerca de como enchufar un HC-SR04 en un arduino acá.

..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

visualización de datos de twitter

visualización de datos 3D de las últimas mensajes de twitter que contienen un término o un conjunto de terminos. la aplicación fue hecha en processing, utilizando una versión resumida de la biblioteca twitter4j y el twitter API. este fue un ejercicio propuesto para el taller datajockey, que ocurrió durante los días 17 y 31 de mayo de 2011, en el Museo de la Imagen y del Sonido de San Pablo, Brasil.

el sketch hace una búsqueda por un término en los últimos tweets almacenados en el banco de datos de twitter, exhibiendo los resultados en un espacio 3D. la posición y el color son atribuidos de acuerdo con el horario en que cada tweet fue almacenado en el banco. si dos o más tweets fueron almacenados en horarios próximos, una línea los conecta en el espacio 3D de visualización, generando estructuras. el tamaño de los cubos es atribuido segundo el valor respectivo a los minutos del horario en que el tweet fue almacenado en el banco.

una lástima que no puedo exhibir la propia aplicación acá, debido a limitaciones del processing.js. pero el código-fuente se encuentra abajo. fíjese que, antes de testarlo en processing, es necesario bajar la biblioteca de twitter4j y inserir el archivo en una carpeta llamada ‘code’, que debe quedarse adentro de la carpeta de tu sketch de processing. es necesario también inserir algunas claves de acceso al banco de datos del twitter, registrando una nueva aplicación en el sitio del API. después, injerí las respectivas claves en las variables indicadas en el código.

//twitter 3D data visualization
//by medul.la
//http://medul.la
//based on the sketch '3D Processing World', by Josue Page
//http://www.openprocessing.org/visuals/?visualID=19216
//the twitter connection is made by using the twitter4j java library:
//http://twitter4j.org
 
// Before you use this sketch, register your Twitter application at dev.twitter.com
// Once registered, you will have the info for the OAuth tokens
 
//setting twitter API info:
static String OAuthConsumerKey = "PUT YOUR CONSUMER KEY HERE";
static String OAuthConsumerSecret = "PUT YOUR CONSUMER SECRET KEY HERE";
static String AccessToken = "PUT YOUR ACCESS TOKEN HERE";
static String AccessTokenSecret = "PUT YOUR ACCESS TOKEN SECRET HERE";
 
//define parameters
//a word to search for in the tweets database:
String searchTerm = "PUT YOUR SEARCH TERM HERE";
//a number of tweets to work with (you can choose any number up to 100) :
int numOfTweets = 50;
 
java.util.List statuses = null;
Twitter twitter = new TwitterFactory().getInstance();
RequestToken requestToken;
String[] theSearchTweets = new String[numOfTweets];
Date[] tweetTimeData = new Date[numOfTweets];
String[] tweetTimeStrings = new String[0];
int[] tweetTimeInts = new int[0];
color[] colors = new color[0];
int[] coords = new int[0];
int objects = numOfTweets, zoom = -300, xCube, yCube, zCube;
Pts[] cubes = new Pts[objects];
color bgColor = 0, lineColor = 255;
float R, G, B;
PFont theFont;
 
void setup() {
  size(1024, 750, P3D);
  connectTwitter();
  getSearchTweets(searchTerm);
  convertDateToString();
  convertStringToInts();
  convertIntsToColor();
  convertIntsToPosition();
  checkColors();
  checkCoords();
  background(255);
  translate(width, 0, 0);
  theFont = createFont("Arial",1000);
  for (int i = 0; i < numOfTweets ; i++) {
    String t = theSearchTweets[i];
    //println(t);
    cubes[i] = new Pts(coords[i], coords[i+1], coords[i+2], colors[i], 1, t);
  }
}
 
void draw() {
  translate(width/2, height/2, width/2+zoom);
  rotateX(map(mouseY, 0, height, -2*PI, 2*PI));
  rotateY(map(mouseX, 0, width, -2*PI, 2*PI));
  background(bgColor, 50);
  for (int u = 0; u < objects ; u++) {
    cubes[u].drawCubes();
    for (int v=0;v<objects;v++) {
      if (abs(cubes[u].z-cubes[v].z)<200) {
        if (abs(cubes[u].x-cubes[v].x)<200) {
          if (abs(cubes[u].y-cubes[v].y)<200) {
            stroke(lineColor, 50);
            beginShape(LINES);
            vertex(cubes[u].x, cubes[u].y, cubes[u].z);
            vertex(cubes[v].x, cubes[v].y, cubes[v].z);
            endShape();
          }
        }
      }
    }
    cubes[u].change();
  }
 
  if (mousePressed) {
    bgColor = 255;
    lineColor = color(255, 0, 0);
  }
  else {
    bgColor = 0;
    lineColor = 255;
  }
}
 
class Pts {
  int x, y, z;
  float tem;
  color cubeColorC;
  String theText;
 
  Pts(int a, int b, int c, color d, float e, String t) {
  x = a;
  y = b;
  z = c;
  cubeColorC = d;
  tem = b/20;
  theText = t;
 
  }
 
  void drawCubes() {
    if (mousePressed) {
      fill(0, 50);
    }
    else {
      fill(lineColor, 50);
    }
    noStroke();
    fill(cubeColorC);
    text(theText, x+30, y, 100, 1000, z);
    pushMatrix();
    translate(x, y, z); 
    fill(cubeColorC);
    box(tem);
    popMatrix();
  }
 
  void change() {
    if (x <- width) {
      x =- width + 10;
    }
    else {
      if (x > height) {
        x = height - 10;
      }
      else {
        x = x + int(random(-3, 3));
      }
    }
    if (y <- height) {
      y =- height+10;
    }
    else {
      if (y > width) {
        y = width - 10;
      }
      else {
        y = y + int(random(-5, 5));
      }
      if (z > width) {
        z = width - 10;
      }
      else {
        z = z + int(random(-5, 5));
      }
      if ( z<- width) {
        z =- width + 10;
      }
    }
  }
}
 
void keyPressed() {
  if (keyCode == 40) {
    zoom -= 300;
  }
  if (keyCode == 38) {
    zoom += 300;
  }
}
 
//twitter API functions
 
// Initial connection
void connectTwitter() {
  twitter.setOAuthConsumer(OAuthConsumerKey, OAuthConsumerSecret);
  AccessToken accessToken = loadAccessToken();
  twitter.setOAuthAccessToken(accessToken);
}
 
// Loading up the access token
private static AccessToken loadAccessToken() {
  return new AccessToken(AccessToken, AccessTokenSecret);
}
 
// Search for tweets
void getSearchTweets(String searchTerm) {
 
  String queryStr = searchTerm;
 
  try {
    Query query = new Query(queryStr);    
    query.setRpp(numOfTweets); // Get 10 of the 100 search results  
    QueryResult result = twitter.search(query);    
    ArrayList tweets = (ArrayList) result.getTweets();    
 
    for (int i=0; i<tweets.size(); i++) {	
      Tweet t = (Tweet)tweets.get(i);	
      String user = t.getFromUser();
      String msg = t.getText();
      Date d = t.getCreatedAt();	
      theSearchTweets[i] = msg;
      tweetTimeData[i] = d;
      println(theSearchTweets[i]);
      println("----------------");
      println("Tweet by " + user + " at " + d);
      println("----------------");
      println(tweetTimeData[i]);
      println("----------------");
    }
 
  } catch (TwitterException e) {    
    println("Search tweets: " + e);  
  }
 
}
 
void convertDateToString(){
   for (int i = 0; i < tweetTimeData.length; i++){
    SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy/HH/mm/ss");
    String s = df.format(tweetTimeData[i]);
    String sArray[] = new String [0];
    sArray = splitTokens(s, "/");
    for (int j = 0; j < sArray.length; j++){
      tweetTimeStrings = append(tweetTimeStrings, sArray[j]);
      println(tweetTimeStrings[j]);
    } 
   }
}
 
void convertStringToInts(){
   for (int i = 0; i < tweetTimeStrings.length; i++){
    int num = int(tweetTimeStrings[i]);
    tweetTimeInts = append(tweetTimeInts, num);
    println("tweetTimeInts at the index of " + i + " is: " + num);
   }
}
 
void convertIntsToColor(){
   for (int i = 3; i < tweetTimeInts.length; i = i+6){
      R = map (tweetTimeInts[i], 0, 24, 0, 255);
      G = map (tweetTimeInts[(i+1)], 0, 60, 0, 255);
      B = map (tweetTimeInts[(i+2)], 0, 60, 0, 255);
      color clr = color (R, G, B); 
      colors = append (colors, clr);
      //println("color stored is = R " + red(clr) + ", G " + green(clr) + ", B " + blue(clr));   
   }
}
 
void convertIntsToPosition(){
   for (int i = 3; i < tweetTimeInts.length; i = i+6){
      xCube = int(map (tweetTimeInts[i], 0, 24, -width, width));
      yCube = int(map (tweetTimeInts[(i+1)], 0, 60, -height, height));
      zCube = int(map (tweetTimeInts[(i+2)], 0, 60, -width, width));
      coords = append (coords, xCube);
      coords = append (coords, yCube);
      coords = append (coords, zCube);
      //println("position stored is = xCube " + xCube + ", yCube " + yCube + ", zCube " + zCube);   
   }
}
 
void checkColors(){
   for (int i = 0; i < objects; i++){
      println("color stored is = R " + red(colors[i]) + ", G " + green(colors[i]) + ", B " + blue(colors[i]));
   }
}
 
void checkCoords(){
   for (int i = 0; i < coords.length; i=i+3){
      println("position stored is = xCube " + coords[i] + ", yCube " + coords[i+1] + ", zCube " + coords[i+2]);
   }
}

..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

visualización de datos textuales

visualizing text data

hice un upload de un sketch hecho en  processing en la plataforma openprocessing, que propuse como ejercicio del taller datajockey. el sketch puede ser utilizado como forma de representar datos textuales en diferentes tipos de representación geométrica.

presione “C” para círculos, “S” para cuadrados e rectángulos, “A” para arcos e “L” para líneas.

el ejemplo arriba es una representación visual de algunos párrafos presentes en la novela de machado de assis, dom casmurro.

el código funte y el propio sketch pueden ser encontrados acá.

..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................