<file_sep>---
layout: post
selection: music
lang: en
permalink: /music/
---


# Music

Music is one of the things I like the most of all. All about it.<br />
I've struggled a lot to be able to play guitar decently enough. The guitar is my musical instrument, is the one I know the best, I feel comfortable playing it, although I'm far from being a virtuoso. On the other side machines, knobs, technical equiment and the recording process came to me as a very natural and intuitive thing. Its use has never been a struggle. My first approach to these was because I was trying to understand why the recordings I did were so crappy. I began to obsessively research and study music technology and the recording and mixing process. This took me to produce serval records for different bands/projects, altough the first ones were guinea pigs. 

Music production places me in a very similar position as the one I usually take when dealing with visual arts or commissioned/commercial jobs; the one in between the artistic side of things and the technical ones, allowing fluent communication between these, directing the artistic decisions as well as making sure that the technical ones are always taken to according to the artistic direction. More over, on top of this practical functionality it has a very vast territory for expression, becoming an art by itself. I still don't completely understand music, so far I just understand the technical process of recording and producing, yet there's a lot more that I need to understand.

I am a founding member of the online record label [Uva Robot](http://www.uvarobot.cl) through which several of these recordings have been published.

Some of these recordings:

## [variosArtistas](http://www.variosartistas.cl)

This is my band. I produced, recorded, mixed and played guitar

<iframe style="border: 0; width: 600px; height: 120px;" src="https://bandcamp.com/EmbeddedPlayer/album=2628341229/size=large/bgcol=ffffff/linkcol=0687f5/artwork=small/tracklist=false/transparent=true/" seamless><a href="http://uvarobot.cl/album/gol-o-penal">Gol o Penal by VariosArtistas</a></iframe>

<iframe style="border: 0; width: 600px; height: 120px;" src="https://bandcamp.com/EmbeddedPlayer/album=1725314539/size=large/bgcol=ffffff/linkcol=0687f5/tracklist=false/artwork=small/transparent=true/" seamless><a href="http://uvarobot.cl/album/abandonan-europa">Abandonan Europa by VariosArtistas</a></iframe>


## [Tus Amigos Nuevos](http://www.tusamigosnuevos.com)
I produced, recorded, mixed and mastered this album.

<iframe style="border: 0; width: 600px; height: 120px;" src="https://bandcamp.com/EmbeddedPlayer/album=3402165205/size=large/bgcol=ffffff/linkcol=0687f5/tracklist=false/artwork=small/transparent=true/" seamless><a href="http://uvarobot.cl/album/no-s-son">NO SÍ SON by Tus Amigos Nuevos</a></iframe>



## others
There are several others that were not published propperly and can't find online.:(


<file_sep>---
layout: page
title: About

permalink: /about/
---


# Bio

<NAME> is an artist that works with technology in the Arts field; from video and moviemaking, to interactive installations and music, striving to make an intelligent use of it. Code and computers are his primary tools.
His artistic and creative curiosity alongside with his inborn aptitudes for math and sciences as well as for leadership, establishes him in a position in which he can act, both as a, leader and bridge in multidisciplinary teams and endeavors. He enjoys challenges, especially if this means to learn new things and embark towards uncertain results.

He is an active contributor to the artistic oriented coding toolkit [openFrameworks](http://openframeworks.cc).

On 2010 he created his own new-media design studio, called Macrobio, in Santiago, Chile. Here, he and his team work mixing code with motion graphics and video, to create interactive installations and experiences. On early 2014, Macrobio was split up due to different business points of view. Then he refocused his practice from strictly commercial to more artistic oriented and personal work. As such he has just shown his work in just a few collective exhibitions.

On fall 2015 he assisted to the [School For Poetic Computation](http://sfpc.io) in New York City.
He was one of the main developers and artists contributing to [SFPC's Re-coded](https://roymacdonald.github.io//projects/2017/11/15/SFPCs-Recoded-Project.html) collaborative and collective project, which has been shown at Dayfornight festival 2015, Houston, Texas, Google I/O 2016 in Mountain View, California, Sonar Festival 2017, Barcelona, Spain, MicrosoftConnect 2017 and SFPC's 7 years anniversary exhibition (2020) both in New York City.

During March and April 2016 he was teaching creative coding at [OF COURSE](http://http://ofcourse.io/) in Shanghai, China.

Since 2018 Roy has [been](https://roymacdonald.github.io//projects/2018/04/09/Luminus_Prospectus_Mavi.html) [collaborating](https://roymacdonald.github.io//projects/2018/12/19/Invocacion.html) with the Santiago-based light-art collective [Trimex Collective](https://www.trimex.cl).

During the summer of 2018 he was part of the first Computational Arts Residency  setup by the Department of Computing at Goldsmiths, University of London and the Victoria and Albert Museum Digital Programmes. The results of this residency was shown at the Digital Design Weekend exhibition in the Victoria and Albert Museum in London.

On September 2018 [his work](https://roymacdonald.github.io//projects/2018/09/01/Defective-Apparatus_v1.2.html) was shown at Ars Electronica Festival in Linz,Austria.

From August 2019 to late February 2020, was a "Someting in Residence" at [RunwayML](https://runwayml.com/) doing [some](https://roymacdonald.github.io//projects/2020/08/21/SyleGAN_Mixer.html) [experiments](https://roymacdonald.github.io//projects/2020/08/19/How_NOT_to_train_your_GAN.html) with Machine Learning.

Currently he is residing in Santiago, Chile.

Drop me a line: macdonald.roy (at) (the electronic mail from the big G).



# Artist Statement

I’d say that my ultimate interest is knowledge, while my ultimate goal is being able to make something with the knowledge I’ve gained.
As I try to understand the world that surrounds me, I gain knowledge.
Software has become a tool for me to understand my life.

Even when I might change the specific subject of my research, these tend to fall on relatively well defined area; arts, design, sciences and maths. I’ve explored movie-making and video art, interactive installations, motion-graphics design, physics, camera optics, music and electronics among others, all with a heavy emphasis on technology. Code and computers have become my primary tools, creation canvas and exploration vehicles.

Software and code works over digital “matter”, even when it is only comprised of zeros and ones, its possible configurations are nearly infinite. As an artist I have the ability to change the way in which this digital matter is usually presented to us -either by exaggerating, changing the point of view or establishing new relationships between the matter itself- it is possible not only to reveal new aspects of the world but also state our position towards it or the impact of personal experience over this perception.

Coding also allows me to create tools for myself and for others, hopefully providing new or improving the existing ones. As such, sharing -knowledge and experience- has become an important aspect of my artistic practice, which embodies in teaching, giving workshops, working with or helping other artists and creators, as well as actively participating in open-source software communities online.

The way we experience our world has become hugely mediated by electronic technology. Approaching and forcing the limits of technologies is not a practice particular to artists, although I think there is no better position from which to pursue such as it is from the arts field and the artist’s mind set, especially when dealing with nascent technologies. This position is probably the only one where usefulness is not a question, bold moves are encouraged, taking risks is desirable, failure can be a gift and uncertain results can be sublime.
<file_sep>---
layout: blog
selection: blog
title: blog
permalink: /blog/
---


# Blog



<file_sep>---
layout: post
date: 2015-01-01 12:10:00
categories:
 - projects
tags: interactive
thumb: /thumbs/moduloFAV.jpg
title: "Aparato defectuoso: Se rehúsa a comportarse según sus normas originales e insiste en evitar a las personas. parte 1"
WIP: true
FAIL: true
lang: es
---

Fui invitado a mostrar algo en el [Festival de las Artes de Valparaiso, FAV](http://festivalartesvalpo.cl/actividades/aparato-defectuoso/), que ocurrió en Enero de 2015.
En ese entonces me encontraba trabajando en la idea de una máquina defectuosa que no es capaz de hacer su trabajo pero que sigue funcionando, por lo tanto produce algo inútil, en el sentido de su uso original, lo cual en consecuencia cae en el ámbito de las artes.

El rayo láser, según el código hollywoondense, funciona simutáneamente como delimitador de espacios y sistema de detección de intrusos. En el caso de este trabajo el rayo láser pierde su uso original ya que adquiere una fobia hacia las personas, evitandolas constantemente.

Esta instalación consistia en 16 módulos, cada uno con un espejo y dos motores servo. El espejo puede apuntar en cualquier dirección dentro de una semi esfera.
Éstos fueron instalados en una intersección de dos calles en Valparaiso, ubicando 4 módulos en cada una de las cuatro esquinas en postes del alumbrado público. Un láser verde apuntaba a uno de estos espejos y rebotaba hacia otro espejo, luego al siguiente y así sucesivamente hasta rebotar en todos los espejos. Dado que los espejos podían apuntar en cualquier dirección, la ruta de rebotes podía ser modificada; cada vez que alguien o algo bloquea el rayo el sistema reconfigura sus espejos para que el rayo evite la ruta bloqueada, generando una nueva delimitación espacial.

Hasta este punto todo suena muy bien pero desafortunadamente esta instalación fue un fracaso. Tuve muy poco tiempo para construir y programar estoy y un presupuesto bastante escaso.

Dado el escaso presupuesto utilicé motores servos usados, los cuales se comportaron de manera inesperada, haciendo el proceso de calibración imposible. Mi intención era probar todo de antemano en mi estudio pero dado el tiempo limitado no pude hacerlo. Además de esto me di cuenta muy tarde de que la precisión de los motores servo es baja, de hecho sumamente baja, como para poder establecer todas las rutas de rebote posibles. Encima de esto tuve tan solo un día para montar todo el sistema, me demoró más de lo esperado y finalmente cuando estaba calibrando todo el sistema los servo se comportaban erráticamente y finalmente no fue posible configurar todo el sistema. Más aun el aire se encontraba con poquisimas partículas aquel día en particular, donde usualmente hay una leve neblina y humedad ya que Valparaiso es una ciudad costera, lo cual causó que el rayo fuese imperceptible.
Esto no fue divertido. Fue sumamente frustrante. Aun así quiero terminar este proyecto y hacerlo funcionar. Hasta ahora mi limitante es el presupuesto.


### Actualización

Postule este proyecto para desarrollarlo y construirlo en una residencia de artes computacionales en la Universidad de Goldsmiths en Londres, entre Julio y Septiembre de 2018. Esta obra será exhibida en el Museo Victoria and Albert en Londres, en septiembre de 2018.

### Images
![image](/img/modulo1.jpg)
![image](/img/modulo2.jpg)
<file_sep>---
layout: post
date: 2017-09-08 12:10:00
categories:
 - projects
tags: xdefault, data visualization, interactive
thumb: /thumbs/proyectodefault.png
video_vimeo: 238460122
video_width: 958
video_height: 539
title: Default
subtitle: Visualización interactiva de actividad cerebral en reposo.
galery_data: proyectodefault
galery_name: Imágenes Montaje
lang: es
---
Participé del proyecto Default haciendo el diseño y programación de la visualización, así como asesorar en temas de interactividad.


Sitio proyecto [xdefault.cl](xdefault.cl)


Default es una obra interactiva e inmersiva sobre la actividad cerebral en reposo. Fue el resultado de un proyecto de diálogo interdisciplinario entre Manuela Garretón, Diseñadora y Tomás Ossandón, Neurocientífico. Anteriormente se asumía que la actividad basal del cerebro —aquella que precede al estímulo— no tenía importancia. Sin embargo, la evidencia muestra algo sorprendentemente diferente: el cerebro utiliza gran cantidad de energía cuando no responde a estímulos y tales momentos son los que ocupan la mayor parte de nuestras vidas.

Este dinamismo espontáneo depende de la Red Neuronal por Defecto (Default Mode Network-DMN). Se trata de una trama que siempre está activa, a excepción de los períodos dirigidos a realizar tareas o responder a estímulos externos. En dichos momentos se desconecta transitoriamente. Esta red integra memorias de nuestras vidas por lo tanto, podría explicar muchas dudas sobre la autoconciencia y procesos tan importantes como la creatividad.

Default se plantea como un ambiente visual y sonoro a partir de datos registrados en un examen de resonancia magnética functional (el cual se utiliza para estudiar la actividad cerebral) de una persona en estado de reposo. La sala en la que fue expuesto se convirtió en un cerebro que, gracias a una visualización 3D, sonorización de datos y un diseño espacial y de interacción, permiten conocer los estados cerebrales de una experiencia humana que todos vivimos pero sin ser conscientes de ello.

El propósito de Default fue cautivar a la audiencia desde el goce estético y que a la vez despierte la curiosidad sobre los estados más internos de la mente.

Equipo:
* **<NAME>**: Dirección e investigación
* **<NAME>**: co-investigador
* **<NAME>**: Diseño y programación de visualizacion
* **<NAME>**: Diseño sonoro
* **<NAME>**: Investigador Asistente (Diseño)
* **<NAME>**: Programación interacción
* **<NAME>**: Programación interacción



Obra realizada con el aporte de la dirección de Artes y Cultura, Vicerrectoría de Investigación de la Pontificia Universidad Católica de Chile.


## Proceso

<iframe src="https://player.vimeo.com/video/248526680?title=0&byline=0&portrait=0" width="600" height="338"  frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
<file_sep>---
date: 2019-10-16 00:00:00 -0400
layout: post
title: Laser Tools
published: true
categories:
 - code
tags: Laser, ILDA, Activism
thumb: /thumbs/lasertools.jpg
poster_img: /img/lasertools/resistencia.jpg
lang: en
---

Since 2018 I have been collaborating with the Chilean light-art collective [Trimex](https://trimex.cl/), with whom I developed a series of software tools that allow to control ILDA Lasers.

These Laser Tools I developed were intended to process video and generate laser lines that could be overlaid and mapped to a video projection.
As is can be seen in the following videos:

<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/379093206?color=65c1ac&title=0&byline=0&portrait=0" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>
<div style="padding:28.13% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/427470871?title=0&byline=0&portrait=0" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>

<br>
<h2> Laser (and text) as a tool for public manifestation and protest</h2>

With the [huge social protest](https://en.wikipedia.org/wiki/2019%E2%80%9320_Chilean_protests) that happened in Chile from October 18th, 2019 we decided that it would be a good idea to use the laser tools and equipment we as a our form of manifestation in pro of the people's protests. We had access to an ideal spot that would allow to project accross Plaza Dignidad, ground-zero for all the protest, onto a huge corporative bulding. These projections became iconic, yet anonymous, happening every day since the start of the protests for several weeks. 

As the original tools were not inteded to draw typographies, the results were sub-optimal and only very short words could be rendered, as you can see in the following pictures:

<img src="/img/lasertools/unidos.jpg">
<img src="/img/lasertools/sinmiedo.jpg">

Unfortunately I was not in Chile at the time that this happened, so I could not fix it on the spot, yet I was able to grab some code I wrote for another project that was specially made for rendering letters properly and optimize the laser paths for such, allowing it to draw crisp letters with sharp angles and much longer text than before. It took me a few days to nail it as I did not have a laser with me so I had to live test the software via internet while it was actually being projected in the spot. 
The following picture and videos show this new version in use

<img src="/img/lasertools/resistencia.jpg">
<img src="/img/lasertools/resistencia2.jpg">
<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/384540090?color=65c1ac&title=0&byline=0&portrait=0" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>
<iframe width="560" height="315" src="https://www.youtube.com/embed/qRZ_FskRnWw" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<br>
<h2>Code</h2>
I intend to release the code and compiled versions for anyone to use, yet it is in a super beta state which needs a bit more work. I don't like to release software that is not ready for use.

If you want to use these tools for publicly manifesting and protesting please [contact me](https://github.com/roymacdonald/) and I can share the app and provide help.<file_sep>---
layout: post
date: 2013-12-01 12:10:00
categories:
 - work
video_vimeo: 95450098
video_width: 958
video_height: 538
thumb: /thumbs/mim.jpg
title: Interactive Modules Museo Interactivo Mirador
macrobio: true
lang: en
---

We were commissioned to develop 2 interactive games for the "Elige vivir sano" (choose a healthy life)room at the Museo Interactivo Mirador, in Santiago de Chile.

The first station had two static bicycles in front of a large LCD monitor. A piece of food is presented and the users must begin pedaling in order to burn the equivalent presented food's energy.  

The next one was an arcade game inspired on the classic arcade game PacMan. The user must choose the best route for just eating healthy food while keeping itself hydrated.

I developed this work while I was still working at Macrobio (I was one of the owners/partners, lead developer and project director).
<file_sep>---
layout: post
date: 2012-08-21 12:10:00
categories:
 - work
tags: interactive mapping
video_vimeo: 50685633
video_width: 958
video_height: 538
thumb: /thumbs/duckhunt.jpg
title: Duckhunt Interactive Mapping for Dentyne/Trident
macrobio: true
lang: en
---

I developed this work while I was still working at Macrobio (I was one of the owners/partners, lead developer and project director). It was codeveloped with [DelightLab](http://delightlab.com/ "Delight Lab") for the  Dentyne/Trident brand.

The idea was to be able to play a game similar to Nintendo's classic Duckhunt projected over the facade of the Museum of Contemporary Art at Santiago de Chile.

It was not simply projecting the game over the facade, rather every object of the scene was mapped to the building elements out of which several reacted if shot.

Several systems had to be developed for this. The aiming system development was in charge of [Ludique](http://www.ludique.cl "Ludique"). They decided to use the Nintendo Wii remote control along with a special infrared post in order to detect where it was being aimed. This system proved to be excessively precise, thanks to the calibration method being used.

The shotgun was designed and built by [<NAME>](http://www.benedictolopez.com/ "<NAME>") according to my specifications. It simulated the weight and size of a real hunting shotgun. It had the Nintendo Wiimote embedded in its front.

The gaming and mapping system was developed by myself. Because of the need of having the game elements mapped to the building this system had to be unified.

In order to play the game, users had to queue virtually by filling a form with their personal data and taking a photo of them selves using an iPad. This data and photo was transmitted to the game system in order to use it when needed.

Simultaneously there was a DSLR camera shooting photographs every time the shotgun was triggered. This images were automagically composed into a single one and uploaded to the brand's Facebook fan page.

This event took place on August 21, 2012.

There is a detailed technical explanation here.
<file_sep>function enableFutureSketchesMenu()
{
	    let fsMenu = document.getElementById("futureSketchesMenu");
        if(fsMenu)
        {
        	fsMenu.style = "";
            fsMenu.classList.add("current")
        }


        window.localStorage.setItem('showFutureSketches', 'true');	
        

        let nav = document.querySelector(".main-nav");
        if(nav){
            let current = nav.querySelector(".current");
            if(current != fsMenu)
            {
                current.classList.remove("current");
            }
        }
        

}
// document.addEventListener("DOMContentLoaded", function(event) {
window.onload = function() {
    console.log(window.localStorage);
	if(window.location.pathname.includes("future_sketches"))
	{
        console.log("future_sketches");		
		enableFutureSketchesMenu();
	}else{
		let bShowFutureSketches = window.localStorage.getItem('showFutureSketches');
    	console.log(bShowFutureSketches);
    	if (bShowFutureSketches != null && (bShowFutureSketches == "true" || bShowFutureSketches == true)){
            console.log("nojsdfak sm");
    		enableFutureSketchesMenu();
    	}	
	}


}
//);<file_sep>---
layout: post
date: 2017-11-15 12:10:00
categories:
 - projects
tags: sfpc, recoded, collaborative
thumb: /thumbs/recoded.jpg
video_vimeo: 159313947
video_width: 958
video_height: 539
title: SFPC's Re-Coded
subtitle: An open-source, collaborative, educational installation.
lang: en
---

When I was part of the School For Poetic Computation (SFPC), during the Fall of 2015, we got invited, as a collective, to make a piece for being shown at the Day For Night Festival in Houston, TX. I ended up being one of the main coders of the engine we built for it as well as providing several "re-codings". After a very successful first show in Texas, we have shown this same project at Google's IO conference in Palo Alto on 2016, at Sonar Festival in Barcelona, Spain on 2017 and at Microsoft Connect Conference in New York City on 2017. I was able to present this piece, along with some other SFPC classmates, on all these instances but Barcelona. The piece is called Re-Coded.

Re-coded is an homage to innovators such as <NAME> and <NAME> whose work exists in the space between art & technology. Celebrating these pioneers, we present reinterpreted works alongside the code that drives them.

Each sketch - a reinterpreted work - is shown on two screens side by side; the reinterpreted work itself and the code that generates it. Each sketch has several parameters that can be animated or controlled live - via a custom controller we built - that change some visual aspect of the sketch. As any of these parameters changes it highlights on the code, which creates a direct relationship between the changes in code and its visual representation.
Each sketch is on screen for around 40 seconds, then it switches to the next one. When a new sketch is shown the code is animated as if it was being typed alongside some sound effects. Once this typing ends the visuals show up.

The whole project was coded using openFrameworks. Even when it look not really complex it actually is, in order to glue together all the pieces, make it work smoothly and allow to have a lot of coders collaborating on it.


For more info head to the project's site [sfpc.io/recoded](http://sfpc.io/recoded/).
<file_sep>---
layout: post
date: 2015-10-27 12:10:00
categories:
 - projects
tags: data-viz sfpc
thumb: /thumbs/flatNYC.jpg
video_vimeo: 143779655
video_width: 958
video_height: 600
title: New York City is flat... almost
lang: es
---
Esta es una visualización interactiva de las calles de la ciudad de Nueva York, que se mueve a través de éstas siguiendo el camino que realizaba en bicicleta a diario desde el [School For Poetic Computation](http://sfpc.io) (SFPC) ubicado en el East Village de Manhattan hasta Crown Heights en Brooklyn donde estaba viviendo, haciendo énfasis en la elevación de las calles.

Todos los datos de las calles fueron minados y filtrados desde G..... Street View, los cuales luego se entregan a una aplicación hecha a medida. El usuario puede rotar el punto de vista arrastrando el mouse y modificar algunos parámetros de la visualización, de los cuales el más relevante es el factor de multiplicación de la elevación. Esta obra fue presentada en la muestra final de la sesión del SFPC a la cual asistí para la cual utilicé un sistema de realidad virtual Oculus Rift en lugar de una pantalla de computador corriente.

En el otoño de 2015 llegué a la ciudad de Nueva York para asistir al School For Poetic Computation, una residencia/escuela de arte enfocada en el uso expresivo y artístico de la computación. La primera impresión que tuve de la ciudad, al menos de Manhattan, fue que era principalmente plana. No parecía haber colinas (aun cuando muchas partes tienen la palabra "Hill", colina en inglés, en su nombre) o al menos éstas eran casi indistinguibles y estaban completamente ocluidas por los inmensos edificios. Una semana después me compré una bicicleta y mi percepción cambió. Al pedalear uno puede notar las subidas y bajadas, por insignificantes que sean, ya que implica hacer un mayor o menor esfuerzo. Dada la posibilidad de la bicicleta de transladarse distancias bastante largas es que uno comienza a tener una idea más generalizada de la forma y elevación de la ciudad, lo cual desperto mi curiosidad sobre la real topología de las calles de la ciudad de Nueva York.

Visualizar las datos inalterados de las calles revela bastante poco sobre su elevación y solo cuando ésta es exagerada es posible ver y transmitir la idea y sensación de moverse a través de una ciudad en bicicleta.

Hecho con [openFrameworks](http://openframeworks.cc)
Código y aplicación para macos disponible en [https://github.com/roymacdonald/flatCity](https://github.com/roymacdonald/flatCity)
<file_sep>---
layout: post
date: 2017-10-21 12:10:00
categories:
 - projects
tags: kuze, kuzefest, laser, laser mapping
thumb: /thumbs/laserkuze.jpg
video_vimeo: 252066601
video_width: 958
video_height: 539
title: Los que suben, los que bajan y los que miran desde arriba
subtitle: Proyección láser generativa
lang: es
---

Proyección láser generativa mapeada sobre una rotonda en Santiago de Chile. Los trazos de ésta se generan siguiendo el flujo automovilístico al rededor de la rotonda utilizando un sistema de visión computacional hecho a medida. Esta intervención lumínica urbana fue presentada bajo el contexto del [KuzeFest, Festival de Luz, Santiago 2017](http://www.kuzefest.cl/en.html).
Esta obra fue presentada en el evento de cierre del festival en [Galeria Cima](http://www.galeriacima.cl/), desde la cual se ve la rotonda desde la altura.

Para este proyecto se utilizó un proyector láser, el cual tiene  un poderoso láser cuyo rayo es redireccionado con dos espejos que oscilan rápidamente, así creando la ilusión de una línea donde realmente solo hay un punto. Decidí utilizar este aparato por dos razonas principalmente:
* Dada la naturaleza de la luz láser, estos proyectores pueden proyectar a grandes distancias sin perder luminosidad a diferencia de los proyectores de video covencionales, asi mismo pueden abarcar grandes áreas y generar gráficas de gran tamaño, haciendolos ideales para esta obra.
* El rayo láser, según el código Hollywoodense, funciona simultáneamente como un delimitador de espacios y un sistema de detección de intrusos, como parte de un sistema de vigilancia, lo cual se relaciona con los otros aspectos de esta obra, expuestos más adelante

Utilizando la herramienta de programación openFrameworks desarrollé una aplicación computacional que controlaba el láser y hacia el seguimiento de los automóviles. Los datos de una cámara de video USB que tenía una vista elevada de la rotonda enviaba fueron utilizados para el seguimiento de las luces de los automóviles. La información obtenida de este seguimiento fue utilizada para generar los dibujos que se enviaban al proyector láser por medio de una interfaz especial.

Varios artefactos visuales se generaron dada la manera de funcionar de los proyectores láser. La complejidad de lo que éstos pueden dibujar esta limitada por la velocidad de oscilacion de los espejos. Cuando este límite es superado comienza la ilusión de línea contínua comienza a perderse y haciendo visible la "velocidad de refresco" del aparato. Cuando se fuerza al proyector a dibujar ángulos agudos este límite se hace aun más notorio; al no hacer este forzamiento el proyector interpeta las esquinas como curvas suaves, interpolando naturalmente los lados de un ángulo. Este artefacto terminó por gustarme ya que las formas producidas eran más "naturales" e introducia un alto grado de incertidumbre, y es que decidí dejarlo como parte de la obra. Pienso que estos artefactos son la "contribución" del proyector en esta obra.


Cuando fui invitado a participar en este festival de luz me encargaron hacer algo para el evento de clausura. Este evento tendría lugar en una terraza en el último piso de un edificio que tiene una vista cenital privilegiada de la Plaza Baquedano (usualmente mal etiquetada como Plaza Italia), la cual está ubicada en uno de los ejes principales de la ciudad y es usualmente tildada como el punto de la ciudad que divide la clase alta de la baja. Estas dos condiciones de la locación fueron los  conceptos precursores de esta obra.

Aun cuando en la mayoría de las ciudades los sitemas de vigilancia son ubicuos, desde pequeños sistemas caseros de CCTV a los amplios sistemas de control de tráfico, las personas usualmente los ignoran o inclusive no saben de la existencia de éstos. La interacción con estos sistemas es usualmente indeseada e inconciente, y en muchos casos anónima; la identidad de los individuos no es relevante, si no que es su comportamiento dentro de la masa y el comportamiento de la masa lo que importa, desde lo cual se puede extraer información, la que por lo general esta restringida a muy pocas y provilegiadas personas.
De un modo similar, la información que puedo extraer de los automóviles/personas que transitan al rededor de esta rotonda es presentada a los pocos privilegiados que eran capaces de ver la proyección desde la altura ya que ésta no era visible desde el nivel de la calle. Al presentar esta información en una forma estética agradable, casi hipnótica, esta obra intenta, ojalá sin éxito, enmascarar el umbral social que este lugar en la ciudad representa.

Videografía aerea: [<NAME>](https://www.instagram.com/fotosaereas/)

Proveedor proyector laser: <NAME>.

Hecho utilizando [openFrameworks](http://openframeworks.cc/).
<file_sep>---
layout: selector
selection: random

permalink: /random/
---

# Random

Anything that doesn't fit elsewhere.
<file_sep>---
layout: post
date: 2017-01-20 12:10:00
categories:
 - projects
tags: sfpc
thumb: /thumbs/blackmetalizer.jpg
video_vimeo: 200434234
video_width: 958
video_height: 599
galery_data: blackmetalizer
galery_name: Debug Views
title: BLACKMETALIZER
subtitle: An interactive generative Black Metal logo generator
lang: en
---

Black Metal it is intended to be one of the most extreme (in darkness, obscurity, evilness and brutality ) sub-genre of Metal Music; as such, the logos of the Black Metal bands.
Probably in search of such extremes the logos, as well as the music, have become absolutely unreadable. Text turned into just a bunch of apparently random lines that usually look like a texture rather than something written.

By using this Black Metal styled generative typography anyone can create a text that resembles a Black Metal logo, which will be deprived from its original intentions and meaning, only left with its formal attributes. It will be culturally resignified as a message carrier which unfortunately will loose the message -the text- thanks to its inherent unintelligibility leaving it to be resignified, once again, just as an aesthetic form. It is a funny yet compelling sabotage to the self-sabotage of Black Metal bands logos.


This was built using [openFrameworks](http://openframeworks.cc/)

#### FAQs

I've been receiving a lot of emails asking if and when I am going to release the code or app.

**Will I release the app?**

It is my intention, althoug currently is super buggy, outdated and need a lot of work. I'd rather publish it when it is in a state where it performs decently. Publishing broken software is a really bad idea.

**Will I open source the code?**

Sure, but only at the same time that I release the app. 

**When am I going to release the code and/or software?**

I would have liked to have it already released. I have a show later this year, hopefully, where I am showing this piece and I would release the code and software in such event.



<file_sep>---
layout: post
date: 2015-01-01 12:10:00
categories:
 - projects
tags: interactive
thumb: /thumbs/moduloFAV.jpg
title: "Defective apparatus: It refuses to behave according to its original rules and insists on avoiding people. part 1"
WIP: true
FAIL: true
lang: en
---

I was invited to show something at the [Valparaiso Arts Festival (Festival de las Artes de Valparaiso, FAV)](http://festivalartesvalpo.cl/actividades/aparato-defectuoso/), happening on January 2015.
At that time I was working on the idea of the defective machine that can't do it's job yet keeps on working, thus it produces something useless- in the sense of it's original use-, so as consequence it has to fall into the art's scope.

The laser ray, according to the hollywood-esque code, works simultaneously for delimiting space and an intruder detection system. In the case of this work, this laser ray looses its original use because it acquires a fobia towards people, driving it to avoid people constantly.

Each time someone or something blocks the ray, the system reconfigures its mirrors so the ray avoids the blocked route, generating a new spacial delimitation.

The installation consisted on 16 modules, each with a mirror and two servo motors. The mirror could point towards any direction within a semi-sphere.
This installation was placed on the intersection of two streets in Valparaiso. Each of the four corners of the intersection had a post, on each of these posts 4 modules were placed. A green laser was point towards one of these mirror, from where it bounced towards another mirror, then to the next and so on. As the mirrors were able to move, bounce route could be modified; every time the laser was blocked the mirrors created a new bounce route.

So far it sounds very nice but unfortunately this installation failed. I had a very short time to build all this and program it and a scarce budget.
Because of the budget I used used servos, that happened to behave not as expected, making the calibration process impossible. My idea was to test everything at my studio but due to the time constraints I could not. Besides this I realized to late that the servos precision was to low (it is very low actually) wasn't enough to be able to set all the possible bounce routes. All over this I had only one day to mount all the system, it took me more than I expected, and at the time that I was calibrating the whole thing the servos were acting badly and at the end I was unable to setup the whole thing. On top of this the air was very particle-free that specific day, usually there's a bit of fog/moist on the air as Valparaiso is on the seaside, meaning that the laser rays were imperceptible.
It was not fun. It was very frustrating. Although I want to finish this project and make it work. So far budget is my constraint...

### Images
![image](/img/modulo1.jpg)
![image](/img/modulo2.jpg)
<file_sep>---
layout: post
date: 2017-01-20 12:10:00
categories:
 - projects
tags: sfpc
thumb: /thumbs/blackmetalizer.jpg
video_vimeo: 200434234
video_width: 958
video_height: 599
galery_data: blackmetalizer
galery_name: Debug Views
title: BLACKMETALIZER
subtitle: Un generador interactivo de logos de Black Metal
lang: es
---
El Black Metal intenta ser uno de los sub géneros de la música Metal más extrema en cuanto a oscuridad, inaccessibilidad, maldad y brutalidad, lo cual se refleja en los logos de las bandas de este tipo.
Probablemente en la busqueda de tales extremos, los logos, así como la música, se volvieron absolutamente ilegibles - el texto se volvió un una maraña aleatoria de lineas que típicamente parecen ser más una textura que algo escrito.

Al utilizar estas tipografías generativas estilizadas a lo Black Metal cualquiera puede crear un texto que remite a los logos de Black Metal, el cual estará desprovisto de sus intenciones y sentidos originales, quedando solo con sus atributos formales. Este será resignificado culturalmente como un portador de mensajes el cual desafortunadamente pierde el mensaje, el texto, gracias a su ininteligibilidad inherente haciendo que este sea resignificado, una vez más, simplemente como una forma estética. Este es un divertido e irresistible sabotaje al auto sabotaje de los logos de Black Metal.
<file_sep>---
layout: post
date: 2008-03-01 12:10:00
categories:
 - work
tags: motion graphics
thumb: /thumbs/motionGraphics.jpg
title: Motion Graphics 2008-2010
lang: en
---

<iframe src="https://player.vimeo.com/video/19293269?byline=0&portrait=0" width="500" height="331" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

<iframe src="https://player.vimeo.com/video/19293114?byline=0&portrait=0" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

<iframe src="https://player.vimeo.com/video/19293208?byline=0&portrait=0" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
<file_sep>---
layout: post
date: 2018-04-09 12:10:00
categories:
 - projects
tags: luminus prospectu, led mapping, luz, light
thumb: /thumbs/luminus.jpg
video_vimeo: 269480853
video_width: 958
video_height: 539
title: Luminus Prospectu
subtitle:
lang: es
---

Luminus Prospectu significa luz en perspectiva. El campo de acción de esta obra son los sentidos que perciben profundidad abstracta (visión y audición), centrándose en la experimentación sonoro-lumínica de la perspectiva.

En el espacio se ubican distintas fuentes de iluminación y sonido cuya disposición se basa en los diagramas geométricos de Voronoi. La grilla de estos diagramas se genera por relaciones espaciales, estructurales y jerárquicas que se pueden encontrar en la naturaleza y seres vivos, desde lo micro a lo macro; las células sensoriales del ojo y oído humano también se organizan de esta manera.

La luz y el sonido de las composiciones generadas evocan una atmósfera cruda, con 4 momentos de intensidad.

Desde principios de 2018 formo parte del colectivo de arte Trimex y además pasé a ser socio de la empresa del mismo nombre. Fuimos invitados, como colectivo, a realizar esta obra para ser montada en el exterior del Museo de Artes Visuales de Santiago (MAVI), dentro del marco de la inauguración de Barrio Arte, enter el 9 y 16 de Abril de 2018.

Trimex Crew: <NAME>, <NAME>, <NAME> y <NAME>.

Dirección de arte: <NAME>.

Dirección y diseño de montaje: <NAME>.

Desarrollo y programación: <NAME>

Registro video: <NAME>

Música: <NAME>

Asistentes de montaje: <NAME>, <NAME>, <NAME>, <NAME>.


Agradecimientos: <NAME>, <NAME>, <NAME>agal
<file_sep>---
layout: post
date: 2015-03-01 12:10:00
categories:
 - projects
tags: interactive computerVision photo
thumb: /thumbs/CamServos.jpg
title: "Defective aparatus: It refuses to behave according to its original rules and insists on avoiding people. part 0"
WIP: true
galery_data: aparatodefectuoso0
galery_name: Images
poster_img: /img/AparatoDefectuoso0/CamServos.jpg
lang: en
---
<file_sep>---
layout: post
date: 2015-06-01 12:10:00
categories:
 - work
tags:
thumb: /thumbs/byb.jpg
title: Backyard Brains finger muscles analysis app.
lang: en
---

<NAME>, one of the [exceptional] brains behind [BackyardBrains](http://backyardbrains.com) asked me for some help. He was using five of theirs muscle spike interface, stacked together and conected to a single Arduino. With several electrodes stuck into his fore arm he was able to get the signals of the muscles that control each finger. Just using some very simple rules on the arduino and threshold values he was able to trigger an LED when any of the fingers moved.
The problem here was that the he was setting the threshold by hand, actually by the very tedious method of looking at the serial output of the arduino in order to catch more or less where the threshold should be, hence by a lot of trial and error.
The idea was to make a piece of software, that would run idealy on the Arduino (which didn't happen), that could guess these threshold values by itself just using a very simple and guided training. BackyardBrains has several pieces of sortware to be used in conjution with their neuroscience kits, all of these opensourced and available in their github account. Almost all of these were written on Processing. I decided to write my own using openFrameworks as I felt more comfortable in it and could be opensourced as well. It should be published any time soon.


### Muscle Spike detection
As each person is different from each other, there is the need for a custom setting for each. Placing the electrodes might differ on each person, hence the signals that these receive will be different. Yet the electrical signals sent over our neurons to each muscle all behave in a similar way. So when ever a muscle needs to be contracted the electrical signal has a very characteristic peak followed by a decay phase. If the muscle is to be kept tight after the initial spike, the signal holds at about half the value of the peak and once released it continues to decay to the resting state, which usually is zero or very close to it. (This is very much like ADSR syths! a lot of crazy ideas come to my mind!). Detecting this spikes is sort of trivial, just like detecting percusive sound on an audio signal. I just added a few more rules to make this detection a bit more robust and at the same time sensible enough, as these spikes can have a wide range of values. These electrical signals seemed to behave very much the same on all the tested subjects, so theres no need of tweeking parameters for each one.

### Finger muscle signal isolation

In order to know which finger was being moved we decided to use some machine learning. A very easy and short training has to be performed. The software guides the user and tells him to move a certain finger a few times, each time a peak is detected the values of all the electrode readings are associated to a particular finger. This the goes to a machine learning algorithm as a training instance. Once the training is done for all the fingers the software is ready for detecting the finger movements. When the detection is running it only "asks" to the machine learning algorithm when a peak is detected in the signal.

### Hacker hand

The final idea was to use the BackyardBrains product called Hacker Hand. It is just a robotic hand that uses servos to control each finger. If it is attached to the arduino, the software instruct to move a finger when ever it is detected from the incomming muscular signals.

### Further develop

I really enjoyed this project. I learned a lot and a lot of ideas came into my mind, to further develop the software as well as to connect muscular signals to other things.
-Controling a synths AttackDecaySustainRelease controls with the spikes from the muscles, in order to somehow achieve more control over the sounds while playing.
-Using a Leap Motion sensor to train the machine learning algorithm, so instead of just knowing if a finger is moved or not, the algorithm can know how much is being moved, and hopefully it will be able to predict this value just from the muscles signal.
<file_sep>---
date: 2018-12-19 00:00:00 -0400
layout: post
title: Invocación
published: true
video_vimeo: 312154006
categories:
 - projects
video_width: 958
video_height: 539
tags: laser, drone music, ambient, light art, light sculpture
thumb: /thumbs/vimeo_thumbs/312154006.jpg
subtitle:
lang: es
---
INVOCACIÓN , concierto lumínico. Armamos una pieza de arte sonoro basada en la música ambient y noise, la cual hace reaccionar este dispositivo de luz en tiempo real.

Ejecución en vivo, música, conceptualización, dirección de arte, dirección y diseño de montaje, desarrollo y programación por **Colectivo Trimex**, que está formado por **<NAME>, <NAME> y <NAME>.**


Registro video: [**<NAME>**](https://www.instagram.com/rai.barros)

Agradecimientos:
* [Colmado](https://www.instagram.com/colmadocoffee) por el espacio
* [AudioBox](audiobox.cl) por los equipos
<file_sep>---
layout: post
date: 2011-03-01 12:10:00
categories:
 - projects
tags: live-visuals
video_vimeo: 33028685
video_width: 958
video_height: 546
thumb: /thumbs/rafflolla.jpg
title: Live Visuals for DJ <NAME>ile 2011
macrobio: true
lang: en
---
Developed and performed with [Macrobio](http://www.macrobio.cl) and [Oktopus](http://oktopus.tv/)
<file_sep>---
date: 2018-12-19 00:00:00 -0400
layout: post
title: Invocación
published: true
video_vimeo: 312154006
categories:
 - projects
video_width: 958
video_height: 539
tags: laser, drone music, ambient, light art, light sculpture
thumb: /thumbs/vimeo_thumbs/312154006.jpg
subtitle:
lang: en
---
INVOCACIÓN , light concert. This is a live music performance, which takes elements from ambient, drone and noise music. The lights are "performed" live as well both by manual tinkering and using sound reactive parameters.

This piece was developed as a colaborative piece with [**Trimex Collective**](http://trimex.cl/), which is formed by  **<NAME>, <NAME> y <NAME>.**.

Direction, live performance, music, concept, art direction, setup design, coding and development made by Trimex Collective.


Videography: [**<NAME>**](https://www.instagram.com/rai.barros)

Thanks:
* [Colmado](https://www.instagram.com/colmadocoffee) for the venue.
* [AudioBox](audiobox.cl) for the sound and laser equipment.
<file_sep>---
layout: default
lang: en
permalink: /future_sketches/
---
<div class='container clearfix'>
{{ content }}
	<div class="header_port_dma">
        <h2> MIT Media Lab Future Sketches application portfolio</h2>
    </div>
      <div class='posts fl'>
          

<h3>Projects</h3>
{% for proj in site.data.portafoliofs %}
	{% for post in site.posts %}
		{% if post.id == proj.id and proj.category == "projects" %}
			<div class='postbox'>
          	<a href='{{site.url}}{{post.url}}'>
          		<img class="imgBW" alt="{{post.title}}" src="{{site.url}}{{post.thumb}}"> 
          	</a> 
            <p><a href='{{site.url}}{{post.url}}'><span class="TXT-celeste">{{post.title}}</span></a></p>
            </div>     
		{% endif %}
	{% endfor %}
{% endfor %}

<h3>Tools</h3>
{% for proj in site.data.portafoliofs %}
	{% for post in site.posts %}
		{% if post.id == proj.id and proj.category == "tools" %}
			<div class='postbox'>
          	<a href='{{site.url}}{{post.url}}'>
          		<img class="imgBW" alt="{{post.title}}" src="{{site.url}}{{post.thumb}}"> 
          	</a> 
            <p><a href='{{site.url}}{{post.url}}'><span class="TXT-celeste">{{post.title}}</span></a></p>
            </div>     
		{% endif %}
	{% endfor %}
{% endfor %}

    </div>
  </div>
<file_sep>---
layout: post
date: 2012-07-28 00:00:00
categories:
 - projects
tags: rgbd rgbdtoolkit
thumb: /thumbs/kinectRGBD.jpg
title: Kinect + DSLR 3D printable mount
lang: en
---

This 3D printable piece is for putting together a DSLR camera and a Kinect and keep these aligned.
I made it to use it with the RGBD Toolkit. Soon it became the official RGBD Toolkit 3D printable mount and remained as such for a long time until newer versions appeared.
You still can download the 3D model from [here](http://www.thingiverse.com/thing:27510) and print it.


![image](/img/kinectRGBD1.jpg)

![image](/img/kinectRGBD2.jpg)
<file_sep>---
layout: default
---
<div class='container clearfix'>
{{ content }}
      <div class='blog-posts'>
            {% for post in site.posts %}
            	{% assign isBlog = false %}
            	{% for cat in post.categories %}
                	{% if cat == 'blog'  %}
            	        {% assign isBlog = true %}            	    	
            	    {% endif %}
            	{% endfor %}
            	{% if isBlog  %}
                	<div class="blog-post-excerpt">
                    	<a href='{{site.url}}{{post.url}}'><span class="blog-post-title">{{ post.title }}</span></a>
                        <div class="blog-post-content-preview">
                            {{ post.excerpt }}
                        </div>
                    </div>            	
            	{% endif %}
            {% endfor %}
    </div>
  </div><file_sep>---
layout: post
date: 2015-03-01 12:10:00
categories:
 - projects
tags: live-visuals
video_gdrive: https://drive.google.com/file/d/0B5mz90wE4rsMOFdJUjFsLU5qcWc/preview
video_width: 958
video_height: 538
thumb: /thumbs/farmacos.jpg
title: Live Visuals Farmacos Lollapalooza 2015
lang: en
---

I was asked by the chilean band [Fármacos](http://www.ffarmacos.com/) to help them with the visuals for their show in the Lollapalooza Chile music festival.
They wanted something simple and abstract. Mainly geometric shapes. No colors.

I've used Quartz Composer (QC) for several years, but as years pass, new OS versions come out and no QC updates come to light, the performance and stability of QC has decreased immensely. I had some realy bad experiences with QC crashing in the middle of a show so I decided to build my own visuals system.

I coded this system using openFrameworks, and made it modular and extensible. It mainly allows you to nest different transitions for something you want to draw. Then you just trigger this animations by hand or based on BPM. The cameras also had some parameters that could be animated. It worked really well, yet the GUI needs more love.
I'll push it soon to github as the project needs a bit of cleanup to make it useful to anyone.
<file_sep>---
layout: post
date: 2017-11-15 12:10:00
categories:
 - projects
tags: sfpc, recoded, collaborative
thumb: /thumbs/recoded.jpg
video_vimeo: 159313947
video_width: 958
video_height: 539
title: SFPC's Re-Coded
subtitle: Una instalación de código abierto, colaborativa y educacional.
lang: es
---
Cuando asistí al School For Poetic Computation (SFPC) durante el segundo semestre del 2015, fuimos invitados como un colectivo a realizar una obra a presentarse en el festival [Day For Night](https://dayfornight.io/) en Houston, Texas, EE.UU. La ideación y desarrollo de este proyecto fue llevada a cabo por un equipo de 7 personas, del cual yo fui parte y además fui uno de los programadores principales del motor que desarrollamos para éste, así mismo realicé bastantes "re programaciones".
Luego de una sumamente exitosa primera exhibición en Texas, hemos expuesto este proyecto en la conferencia IO de Google en Palo Alto, California el 2016, en el festival Sonar en Barcelona, España el 2017 y en la conferencia Connect de Microsoft en la ciudad de Nueva York el 2017. Yo presenté esta obra, junto con otros miembros del colectivo, en todas estas instancias menos la de Barcelona.

Esta obra se llama Re-Coded (Re-Programado) y es un homenaje a innovadores como <NAME> y <NAME> cuyo trabajo existe en el espacio entre arte y tecnología. Celebrando a estos pioneros, presentamos la reinterpretación de sus obras junto con el código de programación que las genera.

Cada obra reinterpretada o "re programada" se muestra en dos pantallas lado a lado, en una la obra reinterpretada y en la otra el código que la genera. En cada "re programación" hay varios parámetros que pueden ser animados o controlados en vivo (utilizando un controlador hecho a medida que contruimos), los cuales modifican algún aspecto visual de ésta. Cuando cualquiera de estos parámetros es modificado se resalta en el código, lo cual genera una relación directa entre las modificaciones del código y su representación visual.

Cada "re programación" es presentada por cerca de 40 segundos y luego pasa a la siguiente. Cuando una nueva "re programación" es presentada el código es animado, junto con algunos efectos sonoros, como si este estuviese siendo escrito. Cuando esta animación termina aparece la obra visual.

Este proyecto fue programado por completo utilizando openFrameworks. Éste es bastante complejo aun cuando no pareciera serlo, ya que éste debe juntar muchas piezas diferentes, hacer que todo funcione fluidamente y tener muchos colaboradores simultáneos.

Para mayor información visita el sitio de este proyecto (en inglés) [sfpc.io/recoded](http://sfpc.io/recoded/).
<file_sep>---
layout: post
date: 2018-09-01 12:10:00
categories:
 - projects
tags: laser, interactive, machine learning
thumb: /thumbs/defectiveapparatus.jpg
title: Defective apparatus
poster_img: /img/defectiveapparatus/da.jpg
header_img_width: 2000
header_img_height: 1333
subtitle: It refuses to behave according to its original rules and insists on avoiding people. part 1.1.
galery_data: defectiveapparatus
galery_name: Some Images
lang: en
---
This project takes the form of an interactive installation driven by a laser beam which interacts with the audience by bouncing on a number of computer-controlled mirrors in order to avoid people. The laser beam, according to the Hollywood-esque code, works simultaneously for delimiting space and as an intruder-detection system. In the case of this work, this laser beam loses its original use because it “acquired a phobia towards people,” causing it to avoid people constantly. Each time someone or something blocks the beam, the system reconfigures its mirrors so the beam avoids the blocked route, generating a new space delimitation, although this route is originally chosen randomly and fed into a machine learning algorithm, so the next time it can make a better decision. It learns by “trial and error.” The whole learning phase of this work happens during the show, so this relationship between human interaction, errors and learning becomes a new narrative layer of this work.
As such, the poetics of an interactive work are fed from the possibilities of unprejudiced experimentation, assimilating the boundaries where the real meaning of discovery lies, encompassing the sensibilities of experience and assuming the conditions that technology currently offers.


This project was developed during the Computational Arts  residency setup by the Department of Computing at Goldsmiths, University of London and the Victoria and Albert Museum Digital Programmes, during the summer of 2018.
It was presented in 2018  at the Ars Electronica Festival in Linz, Austria and in the Digital Design Weekend at the Victoria and Albert Museum in London.
Unfortunately - and quite ironically- the installation did not work. It was not properly finished and tested by the time of these exhibitions.  But it will be shown soon.

## TL;DR

Some years ago I was working on some not so interesting commercial projects which I tended to avoid; instead, I was constantly working on my own artistic and expressive projects. Art making became my form of procrastination. For one of these commercial projects I had to deal with some really obnoxious machines which often had strange behaviors and sometimes quite interesting results, yet unexpected and useless - in the sense of its original use. Then the idea came, probably out of joking, that this machine was doing just the same as I was: procrastinating and doing some art instead of working. This idea went a lot deeper than a simple joke and opened several questions. What are the relationships between human and machine? What new kinds of understanding can we gain by looking at the similarities in their behaviors? Can these new “intelligent” machines have psychological problems very much as their creator could? Is it possible that machines become obsessed with something and execute a task in a compulsive and repetitive way or is it just their very nature to engage in endless and monotonous routines? At which point can we understand these odd behaviors as something new instead of a malfunction? Is it error what finally provides meaning to the human-machine relationship, and ultimately to the whole human experience?


On 2015 I was invited to participate at the  Valparaiso Arts Festival (Festival de las Artes de Valparaiso, FAV), yet the formal approaches to this new idea were not fit for the festival’s curatorial line; I wanted to work the same idea but had to make something new.
As I had very little time and a really scarce budget, the end result was a failure. Nothing worked at the festival, although I gained some really important knowledge. Tragicomically, its name was Defective Apparatus: It refuses to behave according to its original rules and insists on avoiding people. part 1. It was the first version of this project. Now, on its second version it failed to work once again.
<file_sep>---
layout: post
date: 2015-06-01 12:10:00
categories:
 - random
tags:
poster_img: /img/fourier_studies/fourier_studies_poster.png
thumb: /thumbs/fourier.jpg
title: Fourier Studies[WIP]
lang: en
---

Personal research in order to understand the [Fourier Transform](http://en.wikipedia.org/wiki/Fourier_transform), in particular the [Discrete Fourier Transform](http://en.wikipedia.org/wiki/Discrete_Fourier_transform).

## [2008]

### Intro
Some time ago, circa 2008, when I was just getting into programming I was also doing a lot of stuff with audio, mainly music production. I became very intrigued by some audio analysis tools, in particular with [Melodyne](http://www.celemony.com/en/melodyne/what-is-melodyne) as it was able to decompose polyphonic signals into its musical notes and let you modify each note individually. I wanted to understand how computers were able to detect each note of an instrument with all the harmonics that conform it. The first and almost obvious thing to do was to "play" with the [Fast Fourier Transform](http://en.wikipedia.org/wiki/Fast_Fourier_transform).
By that time I was learning to code using [Processing](https://processing.org/) and I did a lot of experiments and visualizations dealing with FFTs. It was fun and I learned a lot, both about programming, audio analysis and FFTs. I even made my own FFT class from scratch, just looking at the maths involved (of course there are already a big bunch of FFT implementations, probably done much better that what I did, but this was for a learning purpose).

### FFTs and Musical Notes
Quite soon after I began to play with FFTs I realized that these transforms were not giving me musically relevant information, I was not able to "see" musical notes on the output of the FFT. The linear spacing of the FFT output does not work well with the logarithmic one of musical notes. This is, linear means that every element of the FFT output is spaced by the same amount of hertz. On the other hand, musical notes are spaced logarithmically, the easiest way to understand this is by the fact that for each octave (one note and the following one with the same name) you multiply the frequency by a factor of two. For example, the note A5 is 440Hz, then A6 = 880Hz, A7 = 1660Hz and so on. You can easily see that the amount of Hertz (Hz) that space each octave is not the same.

TODO: add image> linear spacing vs log spacing and notes.

#### Linear to Logarithmic
As my interest had to do with musical notes I wanted to have the FFT in a musical scale. Almost always the FFT results are visually displayed using a linear to log spacing, in order to make it more musical, but this means that you have very little information spread across several octaves of the lower, bass range, which happens to be very musically relevant and on the other hand you have an excessive amount of information in the higher, treble range, which at the end happens to be not really useful; having much less will probably provide the same relevant information. If you want to get more resolution on the bass end you need to make your FFT larger, which means more processing power and less time resolution.

TODO:add spectrogram image with annotations.

##### Something Not Nice
As you try to increase the frequency (spectral) resolution of the Discrete Fourier Transform, hence the FFT, by increasing the number of samples needed to perform it (which is called the size of the transform) the  the timing resolution decreases. And on the opposite direction, if you wanted a higher time resolution the spectral resolution went down. This is actually a problem that the [Fourier Transform faces and it has to do with the uncertainty principle](http://en.wikipedia.org/wiki/Fourier_transform# Uncertainty_principle). So this is sort of a dead end. You cant get both, at least with the standard DFT and FFT.

#### First shot: Constant Q Transform
As I was researching over the www, I found out the [Constant Q transform](http://en.wikipedia.org/wiki/Constant_Q_transform), and an [interesting paper](http://academics.wellesley.edu/Physics/brown/pubs/effalgV92P2698-P2701.pdf) about an efficient implementation of it. I wasn't able to find any useful implementation of it, at least for me. I just found a [MatLab implementation](http://wwwmath.uni-muenster.de/logik/Personen/blankertz/constQ/constQ.html), so I decided to code my own implementation for processing using the aforementioned paper and the MatLab implementation as reference. Once done I published the resulting implementation on Google Code (now it is [hosted on my Github account](https://github.com/roymacdonald/p5cq) as Google Code is closing. )
At first it worked, quite well actually.
#### Constant Q explained
The constant Q is actually a quite fancy algorithm, but the idea behind it is quite simple.

So, if you want more resolution on the lower bins of the FFT and discard some of the excessive information on the higher end to make it more musical. Why not just average the information that corresponds to each musical note or in a logarithmic fashion?
Then, how do you make this average? This is the fancy part of the Constant Q. For each bin that you define for the Constant Q (it can be less than a musical note, say 3 bins per musical note) you need perform a weighted average the FFT's bins that correspond to the frequencies of each bin, thus, you need to define these weights. To do such, the weights for each bin averages are defined by a cosine bell curve adjusted so it overlaps nicely with the its neighbor bins, so no info is "lost". Performing this calculations can become very intensive if you just implement straight forwards. So here comes into the game the fancy method that the aforementioned paper described. I will not go further into it, as it is very well explained there.
The calculation of the averaging weights is done once, when de parameters of the Constant Q are defined.
The problem here comes when you want to get bins further down in frequency, thus musical notes, as the FFT needed grows bigger and bigger, and it grows quite fast. At the end the uncertainty problem described before gets worse. :(

TODO: Image> weighting averages
	  Image> FFT Size versus bass range

I tried out several method to overcome this problem, like doing several CQ transforms with different ranges and mixing them up, overlap the samples used, but at the end it means a lot of processing power and, worse, a lot of wasted calculations, as these are being discarded by all the averaging being done.

I felt like hitting a dead end. But, how does this happen in our brains as we are able to detect sound frequencies, notes, different instruments and timbres with an incredible resolution, both temporal and spectral? How did some sound analysis software seemed to overcome this sort of dead end?
There must be something missing or something I haven't understood yet or some obscure knowledge just revealed to a few...

However, I decided to leave this research in stand by, yet it was immensely educational and fun. I almost forgot about it until this year (2015).


## [2015]

### Google code and the Constant Q

As said before, I published the Constant Q Transform implementation I did for Processing on Google Code.

Earlier this year Google announced that it would close the Google Code services as there were other better and more popular alternatives like Github, and it offerer the possibility to automatically move your repos into a Github account. So, I made them do so, and as a consequence the whole Constant Q Transform came back into my mind, yet I the passing years I acquired a lot of knowledge relevant to the subject.

### Hello openFrameworks
As my programming needs and knowledge grew, the Processing environment fell short. I found out that I was not the only one with similar needs and that several of the others with these needs begun another coding platform (the correct word should be toolkit) similar to Processing in its use and philosophy but largely more powerful, name [openFrameworks.](http://openframeworks.cc).
I ditched Processing quite fast in favor of openFrameworks, and became an active user, contributing in its forum, providing code for its core and writing several addons for it. As such I decided to translate the Constant Q Transform implementation made for processing into an addon for openFrameworks. Found [here](https://github.com/roymacdonald/ofxConstantQ). (I had a much cleaner implementation done but lost it on a hard drive wreck, i'll rewrite it and publish as soon as I can.)

### Inside the Fourier Transform
For the Processing version of the Constant Q Transform I used a custom class for the FFT based on the code of the Minim library. While I was implementing it in C++ for using it with openFrameworks, I decided to go through it's maths again. It was then when I realized about how the Fourier Transform works internally: it is really simple and easy to understand.

According to [Fourier](https://en.wikipedia.org/wiki/Fourier_series), any waveform is formed just from superimposed sine waves of different frequencies, phases, durations and magnitudes.
Thus, you can decompose any waveform it into all of the sine waves that form it (which happens to be kind of impossible for complex signals like music), so at least you can try to look for the presence of certain sine waves at fixed frequencies.

### Finding waves frequencies
So, checking any given waveform for the presence of a certain frequency is quite simple. Just compare the waveform you have with a sinusoidal wave with the frequency that you are looking for. Mathematically this is also simple, you just need to multiply each value of the waveform with the according value of the sinusoidal wave and sum all the results. The result will indicate the amount of the searched frequency in the analyzed signal.

### Phase
It might happen that the analyzed wave and the sinusoidal wave are displaced, or do not start at the same point, so when multiplying and summing all up the result might not be the same as if these were aligned or "in phase". To deal with this a second sinusoidal wave is used. This second one is 1/4 cycle displaced in respect to the first one. Actually the first one is produced by the cosine function and the second one by the sine function. The same thing is done with this new wave as it was done with the first one, just multiply and add with the analyzed wave. In this case the value that this operation gives is called the phase. In order to get the real magnitude of the sought out frequency in the analyzed wave the square root of the addition of the square of each resulting value. Just like solving the hypothenuse in the Pythagoras theorem.

There are a lot of analogies with spinning discs to exemplify this, but I think that it gets a bit more confusing.


...to be continued.
![image](/img/fourier_studies/fourier_studies_1.png)
![image](/img/fourier_studies/fourier_studies_2.png)
![image](/img/fourier_studies/fourier_studies_3.png)
![image](/img/fourier_studies/fourier_studies_4.png)
<file_sep>---
layout: post
date: 2017-10-21 12:10:00
categories:
 - projects
tags: kuze, kuzefest, laser, laser mapping
thumb: /thumbs/laserkuze.jpg
video_vimeo: 252066601
video_width: 958
video_height: 539
title: Los que suben, los que bajan y los que miran desde arriba
subtitle: Traffic activity driven generative laser projection.
lang: en
---

Generative laser projection mapped onto roundabout in Santiago de Chile. The drawings were generated by tracking the flow of cars using a custom made computer vision system. This urban light intervention was part of the [KuzeFest Lights Festival of Santiago 2017](http://www.kuzefest.cl/en.html).
This work was presented at the festival's closing party that took place at [Galeria Cima](http://www.galeriacima.cl/) art gallery, that overviewed this roundabout.

This project used a laser projector, which has a powerful laser bounced of 2 mirrors that oscillate very fast, thus moving the laser beam, which create the illusion of a line whereas its just a point.  I chose to use this kind of projector for two reasons:
* Because of the nature of laser light, this projectors can shoot from long distances without becoming dimmer as regular video projectors do, and span over really large areas allowing to deploy quite large graphics making these ideal for this project.
* The laser ray, according to the hollywood-esque code, works simultaneously for delimiting space and an intruder detection system, as part of a larger surveillance system, which closely relates to the other aspects of this work, discussed further down.

I developed an openFrameworks application to control the laser beam and track the cars. The video feed from a USB camera that was overlooking the whole roundabout was used to track the cars lights. The drawing was generated based on all the tracked points, which was then sent to the laser projector through a special interfase.

Several artifacts were generated due to how this kind of laser projectors works. The complexity of what is being drawn is limited by the oscillations of the mirrors. When more complex shapes are drawn the "refresh rate" or "scan line" becomes visible. Forcing the projector to draw sharp corners limits this even further; the projector interpreted corners as smooth curves, naturally interpolating the sides of the corner. As I ended liking this artifacts, which produced more "natural" shapes and introduced a lot of uncertainty, I decided to keep these. I think of these as the projector's "contribution" to the project.

When I got invited to this lights festival I was told to make something at its closing show. It was going to happen on a terrace on the top of a building overlooking Plaza Baquedano (commonly mislabeled as Plaza Italia), which is located in the main avenue/axis of the city and it is usually referred as the point that divides the city between upper and lower social classes. This two aspects of the location are the pivots of this work.

Even when in most major cities surveillance systems are ubiquitous, from small household CCTV networks to city wide traffic control systems, people usually don't care or don't even know about these. The interaction with these systems is usually both unwillingly and unconsciously. In a lot of cases this interaction is anonymous; the individuals identity doesn't matter, it is its behavior within the mass and the mass' behavior that matters, from which data can be extracted. This data is most of the times restricted to very few and privileged people.
In a similar way, the data that I extracted from the cars/people passing through this roundabout was presented to the audience at this event, the few privileged ones that were able to see it from above as it was not visible from street level. By presenting this data in a very pleasing, even hypnotizing aesthetic form this work tries -hopefully without success- to mask the social threshold that this city location represents.

Aereal videography by [<NAME>](https://www.instagram.com/fotosaereas/)

Laser Projector provided by <NAME>.

Made with [openFrameworks](http://openframeworks.cc/)
<file_sep>---
layout: portafolio
lang: en
permalink: /mda/
---

<file_sep>---
date: 2015-08-26 00:00:00 -0400
layout: post
title: ofxSoundObjects
subtitle: Modular sound engine for openFrameworks.
published: true
categories:
 - code
poster_img: /img/ofxSoundObjects_poster.png
thumb: /thumbs/ofxSoundObjects.png
lang: en
---
# [ofxSoundObjects](https://github.com/roymacdonald/ofxSoundObjects/)

## Simple yet super powerful modular sound architecture for [openFrameworks](https://openframeworks.cc/).
It allows to connect any sound source, process, display and output it in any way needed. It is capable of reading and writing audio files. 

This is an addon version for the ofSoundObject implementation originally conceived at the 2013 OFDev Conference held at the Yamaguchi Center For Arts and Media, Japan.
The developers involved in this were:

* [<NAME>](https://github.com/admsyn/)
* [<NAME>](https://github.com/mazbox)
* [<NAME>](https://github.com/arturoc)
* [<NAME>](https://github.com/roymacdonald/)


The original development branch can be found [here](https://github.com/admsyn/openFrameworks/tree/feature-sound-objects).

Made as addon, improoved and updated by Roy Macdonald.

## Code and documentation
[https://github.com/roymacdonald/ofxSoundObjects/](https://github.com/roymacdonald/ofxSoundObjects/)

<file_sep>---
layout: selector
selection: projects

permalink: /projects/
---
# _Art


The following are artworks done for the sake of art.<file_sep>let outputImage;

const imgSize = 512; //our image will be 512x512 pixels, which is what StyleGAN requires
const sliderTop = 512;
const sliderHeight = 200;
const sliderBottom = sliderTop + sliderHeight;

let count = 0;

let aIndex = 0;

let sliderWidth = 1;
let bWasMovingSlider = false;
let prevSliderIndex = 0;
let prevSliderValue = 0;

let bDraggingSlider = false;

let bWaiting = false;


let serverState = "";

let a = new Array(512);
a.fill(0.0, 0);


let randomButton, zeroButton, minButton, maxButton, perlinButton;

function setup() {
  createCanvas(windowWidth, windowHeight);

  getServerState();
  
  generateImage();
  getServerState();
  outputImage = createImg("", "");
  outputImage.hide();

  sliderWidth = windowWidth / float(imgSize);


  let x = 600;

  let y = 120;
  let margin = 20;

  randomButton  = createButton('Random');
  randomButton.position( x, y);
  randomButton.mousePressed(randomButtonPressed);
  
  y += randomButton.height + margin;

  zeroButton  = createButton('Zero');
  zeroButton.position( x, y);
  zeroButton.mousePressed(zeroButtonPressed);
  y += zeroButton.height + margin;
  
  minButton  = createButton('Min');
  minButton.position( x, y);
  minButton.mousePressed(minButtonPressed);
  y += minButton.height + margin;
  
  maxButton  = createButton('Max');
  maxButton.position( x, y);
  maxButton.mousePressed(maxButtonPressed);
  y += maxButton.height + margin;
  
  perlinButton  = createButton('Perlin Noise');
  perlinButton.position( x, y);
  perlinButton.mousePressed(perlinButtonPressed);

  noiseDetail(5, 0.35);




}

function windowResized() {
  resizeCanvas(windowWidth, windowHeight);

  sliderWidth = windowWidth / float(imgSize);
}

function getServerState()
{
  fetch(
    "https://stylegan2mixingconsole.hosted-models.runwayml.cloud/v1",
    {
      method: "GET",
      headers: {
        Accept: "application/json",
        Authorization: "<KEY>
        "Content-Type": "application/json"
      }
    }
  )
  .then(response => response.json())
  .then(myJson => {
    serverState = myJson.status;
    
    // console.log("serverState: " + serverState);
  });
    
}


function setSliderIndex() {
  if (
    mouseY > sliderTop &&
    mouseY < sliderBottom &&
    mouseX >= 0 &&
    mouseX < width
  ) {
    bDraggingSlider = true;
    aIndex = int(mouseX / sliderWidth);
    if (aIndex < 0) aIndex = 0;
    if (aIndex >= 512) aIndex = 511;
    setSelectedSlider();
  }
}

function setSelectedSlider() {
  if (bDraggingSlider) {
    a[aIndex] = map(mouseY, sliderTop, sliderBottom, 1, -1, true);

    if (
      bWasMovingSlider &&
      prevSliderIndex >= 0 &&
      aIndex >= 0 &&
      prevSliderIndex != aIndex
    ) {
      let minInd = min(prevSliderIndex, aIndex);
      let maxInd = max(prevSliderIndex, aIndex);

      // console.log("minInd: " + minInd + "  maxInd: " + maxInd);

      for (let i = minInd; i < maxInd; i++) {
        a[i] = map(i, minInd, maxInd, prevSliderValue, a[aIndex], true);
      }
    }
    bWasMovingSlider = true;
    prevSliderIndex = aIndex;
    prevSliderValue = a[aIndex];
    // generateImage();
  }
}

function mouseDragged() {
  setSliderIndex();
}

function mouseReleased() {
  if(bDraggingSlider)
  {
    generateImage();
  }
  bDraggingSlider = false;
  bWasMovingSlider = false;
  
  
  
}

function mousePressed() {
  setSliderIndex();
}

function generateImage() {
  // if(bWaiting == false)
  //   {
  const data = {
    z: a, //generated latent space vector
    truncation: 0.5 //variation in image generations - higher is more random, lower is more similar
  };

  //// You can use the info() method to see what type of input object the model expects
  // model.info().then(info => console.log(info));
  bWaiting = true;
  fetch(
    "https://stylegan2mixingconsole.hosted-models.runwayml.cloud/v1/query",
    {
      method: "POST",
      headers: {
        Accept: "application/json",
        Authorization: "<KEY>
        "Content-Type": "application/json"
      },
      body: JSON.stringify(data)
    }
  )
    .then(response => response.json())
    .then(outputs => {
      //  const { image } = outputs;
      // use the outputs in your project
      //  console.log(outputs);
      outputImage.attribute("src", outputs.image);
      bWaiting = false;
//      console.log("got image");
      //imageReady();
      // use the outputs in your project
    })
  .catch(function(error) {
  console.log('Hubo un problema con la petición Fetch:' + error.message);
  });
    // }
}

function draw() {
  
  if(frameCount%30 == 0)
    {
      getServerState();
    }
  
  background(255);
  image(outputImage, 0, 0, 512, 512);
    
    let bMouseOverSliders = mouseY < sliderBottom && mouseY >= sliderTop && mouseX >=0 && mouseX < imgSize*sliderWidth;
  for (let i = 0; i < imgSize; i++) {
      
      noStroke();
      fill(240);
    rect(i * sliderWidth, sliderTop, sliderWidth, sliderHeight);
      
      
    let y = map(a[i], 1, -1, sliderTop, sliderBottom);
    if((bMouseOverSliders && mouseX >=i*sliderWidth && mouseX < (i + 1)*sliderWidth ) || (i == aIndex))
    {
        stroke(70);   
    }
    else
    {
        noStroke();
    }
      
    if (i == aIndex) {
      fill(255, 255, 0);
    } else {
      fill(200);
    }
    rect(i * sliderWidth, y, sliderWidth, sliderBottom - y);
    
      
  }

  noStroke();
  fill(200);

  let txt = "Waiting for response: " + ((bWaiting===true)?"YES":"NO");
  txt += "\nServer state: " + serverState;
  txt += "\n\n Use the following buttons to set/reset the sliders into some default values.";
//    txt+= "\nMouseY: " + mouseY;
    
//   let txt = "count: " + count;
//   txt += "\naIndex: " + aIndex;
//   txt += "\na[aIndex]: " + a[aIndex];

//   txt += "\nbDraggingSlider: " + bDraggingSlider;
//   txt += "\nprevSliderIndex: " + prevSliderIndex;

  text(txt, 600, 40);



}


function randomButtonPressed()
{
  for (let i = 0; i < imgSize; i++) {
    a[i] = random(-1, 1);
  }
   generateImage();
}
function zeroButtonPressed()
{
  a.fill(0.0, 0);
  generateImage();
}
function minButtonPressed()
{
  a.fill(-1.0, 0);
  generateImage();

}
function maxButtonPressed()
{
  a.fill(1.0, 0);
  generateImage();

}
function perlinButtonPressed()
{
  let inc = 0.09;
  for (let i = 0; i < imgSize; i++) {
    a[i] = 2 * noise(inc * i) - 1;
  }
  generateImage();
}












<file_sep>---
layout: selector
selection: work

permalink: /work/
---

# $$$


The following are commisioned works which I do in order to make a living out of this.<file_sep>---
layout: post
date: 2017-09-08 12:10:00
categories:
 - projects
tags: xdefault, data visualization, interactive
thumb: /thumbs/proyectodefault.png
video_vimeo: 238460122
video_width: 958
video_height: 539
title: Default
subtitle: Interactive visualization of the brain in default mode.
galery_data: proyectodefault
galery_name: Imágenes Montaje
lang: en
---
I was part of the Default project, for which I designed and coded the visualization, as well as advising about interactivity.  

Project site [xdefault.cl](xdefault.cl)

**Default** is an interactive and immersive piece about the brain's activity while at rest. It was the result of an interdisciplinary dialogue project between <NAME> -Designer- and <NAME> -Neuroscientist.

It used to be assumed that the base brain activity -the one that precedes stimulus- had no relevance. Nevertheless, evidence reveals something astonishingly different: the brain uses a large amount of energy while it is not being stimulated and these moments are the ones that take the largest amount of time through out our life.

This spontaneous dynamism depends on the Default Mode Network (DMN) -a mesh which is always active, except on the periods when doing tasks or reacting to external stimulus, moments in which it briefly disconnects. This network integrates memories of our life, as such it could explain a lot of the unknowns about self-consciousness and relevant processes such as creativity.

Default is conceived as a visual and sounding environment made from the data gathered from a Functional Magnetic Resonance Imaging (fMRI) exam -used for studying brain activity- of a person at a state of rest. The room where this piece was shown was a brain itself, thanks to 3D visualization of data, data based sound design, and space and interaction design, which allows to know the cerebral states of a human experience that everyone unconsciously goes through.

Default's purpose was to captivate the audience through aesthetic enjoyment while at the same time would awake curiosity about the deeper states of the mind.

Team:
* **<NAME>**: Principal investigator
* **<NAME>**: Principal co-investigador
* **<NAME>**: Visualization design and coding
* **<NAME>**: Sound design
* **<NAME>**: Design research assistant
* **<NAME>**: Interaction coding and implementation
* **<NAME>**: Interaction coding and implementation


This project was made with the support of Dirección de Artes y Cultura, Vicerrectoría de Investigación de la Pontificia Universidad Católica de Chile.


## Process

<iframe src="https://player.vimeo.com/video/248526680?title=0&byline=0&portrait=0" width="600" height="338"  frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
<file_sep>---
date: 2020-08-21 00:00:00 -0400
layout: post
title: StyleGAN mixing console
published: true
categories:
 - projects
tags: RunwayML, Residency, Artist-In-Residence, StyleGAN, GAN, AI, Machine Learning
thumb: /thumbs/StyleGANMixer.jpg
lang: en
---

Between October 2019 to February 2020 I spent my time in New York City, as a Something-In-Residence at [RunwayML](https://runwayml.com/). 


## Context

[GAN](https://en.wikipedia.org/wiki/Generative_adversarial_network)s have become very popular recently, particularly [StyleGAN](https://en.wikipedia.org/wiki/StyleGAN), as a method for creating photorealist synthetic images, which are particularly good with human faces. As such, Latent Space interpolation, a technique for visualizing some of the options available from what the GAN has learned has become a quite common visualization method.

The following is a video that shows Latent Space Interpolation using StyleGAN.


<iframe width="560" height="315" src="https://www.youtube.com/embed/djsEKYuiRFE" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>



## Understanding

When looking at how this technique works I realized that it was simply using [Perlin noise](https://en.wikipedia.org/wiki/Perlin_noise) -which is a very common algorithm used in computer graphics for generating pseudo-random numbers that smoothly change from one to the next- to smoothly change each of the 512 parameters that these GANs have. 

As I wanted to play with this parameters I thought of  controlling these with something like a sound mixing console, with 512 vertical faders, where each controls a single parameter of the GAN.

![Sound Mixing console]({{site.url | append: "/img/StyleGAN_Mixer/ssl.jpg"}})

## Experiment

I initially made this experiment using the regular interface between RunwayML and p5js. But then I ported it to use [RunwayML's Hosted Models](https://runwayml.com/web/) feature -which is at not publicly available at the time of writing this-, that allows you to use your RunwayML's models inside regular websites, without needing to download and install the RunwayML app. It is really nice. This is what allows me to have this experiment embedded in this web page. :D

This experiment allows the user (you) to control each of the 512 different parameters that StyleGAN has.

* At the left is the generated image. 
* Below the image are 512 grey vertical bars (sliders), one for each parameter. 
* Drag up and down any of these sliders to modify the single parameter that each control. 
The image will be updated to reflect these changes. 

* If you drag across the sliders you can "draw" their positions.

* Be patient as the changes happen quite fast but not instantly.
* When you first run it the server might need to start so it can take about 30 seconds to start.
* At the right of the image you can see the current status of the server.
* There are 4 buttons, labeled "Random", "Zero", "Min", "Max", "Perlin Noise" which will set some values to the sliders, as it follows:
	* "Random" : Assigns a different random value to each parameter.
	* "Zero" : Sets all the parameters to zero, which actually is the middle position.
	* "Min"  : Sets all the parameters to -1, the lowest possible value for the parameters.
	* "Max"  : Sets all the parameters to 1, the Highest possible value for the parameters.
	* "Perlin Noise" : Sets the values using Perlin Noise. These will be random-ish but these will change smoothly between each parameter.
 * You might find it more convenient to use this experiment without all the rest of things in this website. Click [here](/styleGAN_Mixer.html) to go there.



<div class="inlinestyleGAN">
<iframe class="inlinevideo-iframe" src="{{site.url | append: '/styleGAN_Mixer.html'}}" frameborder="0" scrolling="no"></iframe>
</div>

If you liked this experiment/interface please consider donating as you using it costs money, which comes out of my pocket.
If it does not work it is because my RunwayML account has run out of credits.
Feel free to contact me if you donated and want me to add that as credits for it to work.

<form action="https://www.paypal.com/donate" method="post" target="_top">
<input type="hidden" name="business" value="VRL2TDAMYZYKE" />
<input type="hidden" name="no_recurring" value="0" />
<input type="hidden" name="currency_code" value="USD" />
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" title="PayPal - The safer, easier way to pay online!" alt="Donate with PayPal button" />
<img alt="" border="0" src="https://www.paypal.com/en_CL/i/scr/pixel.gif" width="1" height="1" />
</form>


## Conclusion

At the time I did this and showed it to the people at RunwayML, most said that they had not seen an interface like this for navigating the latent space and they liked it very much.
As well, as far as I know it had not been done. 

This interface allows to see in much better detail how the model works, and you can see that each parameter does not control a specific feature but rather a more undefined one. Yet after fiddling with it a bit you will find patterns of changes and certain areas  in the faders that controlled a specific feature (I remember having found one that, when changed it added or removed glasses from the resulting image). Usually you need to move together a few adjacent sliders in order to have a larger effect over the image generation, yet sometimes you can get quite dramatic changes by slightly moving a single one. Go on and explore it.

Another thing you can perceive are the limits of machine learning in the form of visual artifacts. The model does not really understand what a human face (or what ever thing you used for training it), it simply holds statistical values about how all images of the training data are related. As such you can see strange things happening, like almost appearing earrings or eye glasses. The model does not know what an earring or eye glass is and that it needs to be able to exist in real space, instead it just has the ability to infer what an image should look like given the training data and the parameters used for producing it, which means that the laws of real-world space don't need to apply.

Using javascript proved to be really nice for experiments as this one as it required very short code, as all the requests to RunwayML are made through an http request, which are native to javascript as well as the response format, JSON, so there was no need to parse or use special libraries for such. You can inspect the Javascript code that drives this experiment [here](/stylegan-transition.js)
 
I hope that this small tool allows you to both have fun and get a better understanding on how GANs work.

I also did some other experiments while being Resident at RunwayML which you can read [here](https://roymacdonald.github.io//projects/2020/08/19/How_NOT_to_train_your_GAN.html)

. 🙂 


<file_sep>---
layout: post
date: 2014-03-01 12:10:00
categories:
 - work
tags: interactive mapping
thumb: /thumbs/mappingRancagua.jpg
title: Interactive video mapping Mall Rancagua
lang: en
---

Three projectors were used to project over a conical column inside a mall in Rancagua, Chile.
When users standed in a marked spot and looked to the camera placed above the column a photo was taken automatically using face detection, the face was cropped, masked and placed over the characters of an animation. This project was co-developed with [DelightLab](http://www.delightlab.com).
To export the data from the animation made in After Effects I made a script that took all nested transformations and "flattened" them. This exported data was read by an openFrameworks application. I[ published ](https://github.com/roymacdonald/ofxAfterEffectsTransforms)an openFrameworks addon to allows this.
<file_sep>---
layout: post
date: 2013-03-01 12:10:00
categories:
 - work
tags: interactive android
video_vimeo: 63744681
video_width: 958
video_height: 538
thumb: /thumbs/LGLolla.jpg
title: App LG Lollapalooza Chile 2013
macrobio: true
lang: en
---


Android app developed for the LG Optimus G at Lollapalooza Chile 2013.
This app used the phones sensors (gyro, compass, accelerometer) to determine where it was pointing to allowing the user to paint over a big LCD monitor. The phone's touch interface allowed to witch between different brush styles and colors.
<file_sep>---
layout: post
date: 2013-02-01 12:10:00
categories:
 - work
tags: interactive  kinect
video_vimeo: 57096403
video_width: 958
video_height: 538
thumb: /thumbs/cocacola.jpg
title: Kinect Games Fábrica de la Felicidad CocaCola
macrobio: true
lang: en
---

We were commissioned to develop a game/installation using the Microsoft Kinect sensor.

The user had to help the narrator advancing chapters using arm gestures, while he was telling about the history of CocaCola in Chile.

At a certain point during the story the narrator invites the user to play some soccer penalty shots. The user just kicks the air, while the system detects the kicks and analyzes its direction and velocity in order to display the correct animations.

I developed this work while I was still working at Macrobio (I was one of the owners/partners, lead developer and project director).
<file_sep>---
layout: blogpost
date: 2015-11-06 15:15:00
categories:
 - blog
tags: sfpc
show_in_home: false
title: SFPC Exhibition proposal
lang: en
---
# Probe

## Assignment for Concept & Theory Class [Taeyoon Choi]

#### Exhibition curation:

This exhibition would consist on artwork sent by mail by artists around the world. Artists should be SFPC students, alumni, teachers or fellows.
The artworks to be submitted should be focused towards presenting to the audience the point of view of the artist [or the artwork] and somehow taking them into experiencing a different point of view of something else hopefully in real time and/or using technology and any kind of media. All the artwork should be sent by mail. 10  artists will be invited to participate in the show. Artwork should be capable of somehow documenting it's stay in the exhibition so to provide some feedback to the artist. Once the exhibition is done, the artwork will be shipped back to the artist.

#### Purpose
Each individual has its own perspective and point of view of the world, thus its path and journey through space, time and life is unique. Trying to put someone else in the point of view of another is usually quite hard as it involves having one to abstract from its own POV and place into someone else's that must be transmitted somehow. The idea behind this exhibition is to expose the process of changing points of view and providing a critical insight about it.

#### Artwork packaging

The packaging of artwork must be part of the artwork itself. It must be capable of withstanding the shipping processes in order to arrive in good conditions to the exhibition space.
It must be capable of self deploying or using really simple instructions to be performed by any person. Actually there wont be any specially assigned person on assisting the unboxing and deployment of each package. It will have to rely on  the "good will" of the audience if assistance is needed. If any hazardous process is needed to be perform it must be warned hysterically to the audience. Dangerous and harmful artwork is encouraged!.

Artwork must be reshipable, thus it must be able to get packaged by itself or by minimal assistance.

Each art piece will be assigned a special space in either a shared or individual room.

![image](http://d.ibtimes.co.uk/en/full/1419434/beagle-2.jpg?w=1000)
![image](http://wwwwwwwwwwwwwwwwwwwwww.bitnik.org/assange/img/assange/assange_parcel_small.png)

<iframe width="560" height="315" src="https://www.youtube.com/embed/zlZTghhCuxg" frameborder="0" allowfullscreen></iframe>

<iframe src="https://embed.theguardian.com/embed/video/science/video/2015/jul/16/pluto-timelapse-video-nasa" width="560" height="315" frameborder="0" allowfullscreen></iframe>

#### Budget
$500 per artist for creating artwork, any materials needed and shipping costs.
$1000 everything else


#### Schedule

All the artwork is expected to arrive at time for the exhibition, not before not after but in time, just like the audience for the opening.
The exhibition will be open for a week. There will be a closing event at which each artwork will be repackaged and shipped back to the artist.
<file_sep>---
date: 2020-08-19 00:00:00 -0400
layout: post
title: How NOT to train your GAN
published: true
categories:
 - projects
tags: RunwayML, Residency, Artist-In-Residence, StyleGAN, GAN, AI, Machine Larning
thumb: /thumbs/GAN.jpg
lang: en
---

Between October 2019 to February 2020 I spent my time in New York City, as a Something-In-Residence at [RunwayML](https://runwayml.com/). 

Among other things I did a 3 experiments with the by-then unreleased [GAN](https://en.wikipedia.org/wiki/Generative_adversarial_network) training feature that RunwayML had. Now it is available to anyone. It particularly uses the [StyleGAN](https://en.wikipedia.org/wiki/StyleGAN) model. 

## Experiment #1

**Context**

Just after I left Chile and before starting my residency at RunwayML a [huge Chile social revolt begun](https://en.wikipedia.org/wiki/2019%E2%80%9320_Chilean_protests) (still ongoing, currently on standby because of COVID-19). This kept me quite distracted from the residency at RunwayML. I wanted to explore RunwayML’s tools to produce a socially aware, critical and timely project but could not figure it out. Yet, as I wanted to train a GAN I needed images; the images of Chile’s President <NAME> were constantly appearing while drifting though the internet and social media. So I decided as an act of protest to train a GAN on him, but in the wrong way. 

In order to get “good” results from any kind of ML process you need to teach it “correctly”. StyleGAN, the particular GAN that RunwayML allows you to train, it is not different.
Thus, if you want to train it on faces, to get “good” and photo-realistic results you need to use images of faces that are as similar as possible; same pose, similar illumination, have all the faces aligned so the features are in the same coordinates, etc. The least amount of unwanted variation is best. 

But now how to get a “bad” result that it is still good in some other twisted (artistic?) sense? Easy, train it wrongly but not too much.

**Step 1. Getting images.**

In order to train the GAN, I did a Google image search for the word “Piñera” and took the first 500 images. I used [this](https://serpapi.com/images-results) service which returns a [JSON](https://en.wikipedia.org/wiki/JSON) file with the results instead of getting these through the regular interface. I wrote a [short bash script](https://gist.github.com/roymacdonald/fc808144d46fc499d654d05209f2495a), which searches for all the lines containing `"original":` as it was the keyword in the JSON file containing the URL of the original image, the one I wanted. Then I use [c](https://en.wikipedia.org/wiki/CURL)[URL](https://en.wikipedia.org/wiki/CURL) to download each one of these.

**Step 2. Finding faces and cropping.**

Among the results I got most were images of Chile’s president, but not all, and these were all kinds of images, close ups, full body, alone, with more people, different facial expressions and poses, etc. I made an app using [openFrameworks](http://openframeworks.cc/), that would find only faces that were front facing -which is one of the most basic face finding algorithms-, then crop and normalize these, so all the faces of each cropped face were aligned. You can find the [code for it here](https://github.com/roymacdonald/faceCropAndNormalize)

This step was the improper one, as I only took care of aligning faces so I would get as a result an image that resembled a face but without making sure that each image was actually the person I wanted nor that it was in the correct pose or anything else. I did not want to go through an exhaustive process of hand picking each image or making a very complex workflow in order to filter these, I just wanted what Google gave me, filtering the least possible, in order to only have normalized faces.

The following are all the images I used for training.

![](https://paper-attachments.dropbox.com/s_21F393265B10C06E160C3C058466E7B7B53C6C1210A89C67C03DC15FE1B7A8B2_1597020051999_gridIMGS.jpg)


**Step 3. Training StyleGAN.**

This one was easy. Simply feeding the images to RunwayML and let it run for a while (I think it was about 3 hours) and… *voila!*

The following are some of the images produced by it:


<div class="galery">
     {% for img in site.data['piranas'] %}
  		<div class="galery_thumb">
  		<a href="{{site.url}}{{img.img}}" data-lightbox="img-set" data-title="img">
  		<img src="{{site.url}}{{img.thumb}}" width="100%" height="100%"/>
  		</a>
  		</div>
  	{% endfor %}
  </div>




The results were great, I mean very bad from the “correct” point of view, but I really like the images as these all are some kind of representation of the president, with a painting-look and a resemblance to [<NAME>](https://es.wikipedia.org/wiki/Freddy_Krueger) (which I find quite fit for all the hell that this president has brought and been unable to manage diligently).

Another of the many super nice features RunwayML has is that you can share your trained StyleGAN. This one is named Pirañas. 

The following is the training video of it:

<div class="inlinevideo">
<iframe class="inlinevideo-iframe" src="https://player.vimeo.com/video/449852980" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>
</div>


## Experiment #2

So now I thought, if the idea is to have a data set with the least possible unwanted variations, then that data set should be only copies of the same image. So I simply copied the same image 500 times and used these to train the GAN.

I was already fed up with Piñera so I chose not to use his image anymore.

I found a nice photo of my niece I had taken recently during a family trip, which I decided to use.

The original image is the following.


![](https://paper-attachments.dropbox.com/s_21F393265B10C06E160C3C058466E7B7B53C6C1210A89C67C03DC15FE1B7A8B2_1597021068866_domi+copy+2.png)


Duplicated 500 times and used to train StyleGAN produced the following



![](https://paper-attachments.dropbox.com/s_21F393265B10C06E160C3C058466E7B7B53C6C1210A89C67C03DC15FE1B7A8B2_1597021152742_Training-Experiment-8-+-+December+4th+2019+at+10.33.46+AM.jpeg)


Not bad for a synthetic image yet totally useless as a method for re-creating (compressing-decompressing) the original image. I was suspecting something like this would happen, but as obvious that it might have seemed I thought it was a necessary experiment. There are so many cases in history where great discoveries have been done simply by doing what everyone skipped because its result was obvious, yet nobody had tried it before. As such I like to do such kind of obvious as well as “wrong” things.

In the following video you can see how the images from the starting point converge into the image of my niece.

<div class="inlinevideo">
<iframe class="inlinevideo-iframe" src="https://player.vimeo.com/video/449864961" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>
</div>

 About halfway through the video some really interesting and creepy looking faces appear.
 As the following. (this is probably the only interesting thing about this mostly uninteresting experiment)

![](https://paper-attachments.dropbox.com/s_21F393265B10C06E160C3C058466E7B7B53C6C1210A89C67C03DC15FE1B7A8B2_1597022621420_vlcsnap-2020-08-09-21h21m24s795.png)


 

## Experiment #3

Now, the mathematical representation of a specific face must be quite large and complex, so what would happen if instead I would try the simplest image possible. A completely white image did not sound so interesting so I opted for a black square in a white background.
I did the same thing as before, copy the image 500 times and feed it to RunwayML.
I thought that it would easily converge into the square, just as it did with the image of my niece, but I was wrong.

![Black square over white. Copied 500 times to make the data set feed into StyleGAN](https://paper-attachments.dropbox.com/s_21F393265B10C06E160C3C058466E7B7B53C6C1210A89C67C03DC15FE1B7A8B2_1597022942565_sq+copy+2.png)

  

Before continuing I need to explain something about the **training** **starting** **points.**

In extremely reductionist terms, in order to train a GAN, its algorithm's variables are initialized with placeholders, in the form of noise (random data). During training, these placeholder values are modified -a small amount on each training step- and it generates an image using these variables. The resulting image is then compared to the trainning data. If such modification gives a result that resembles more to the training data than before, the modification will be kept, other wise it will be ditched. Thus, this takes an enormous amount of computational power as it is essentially guessing, trying to move in all directions blindly but systematically. The longest part of this process is the beginning, going from noise into something. In order to avoid such long processing times, in RunwayML you have to choose a starting point for the training that it is not noise. You are provided by a series of categories of things commonly used, which can be thought of as faces (people), objects and places. 

In the previous experiment the choice of the starting point was trivial, I chose the people faces (although I should have tried using the other starting points but it costs money). In this experiment there was nothing similar as a starting point to the black square over white. So I simply tried out a lot of these. And now interesting things happened.

The following are the progress videos of these. Watch these in full screen and full quality and resolution, as the details are the nice things.


<!-- https://www.dropbox.com/s/tohvow2c9vo876d/sq_cats.mp4?dl=0 -->
<div class="inlinevideo">
<iframe class="inlinevideo-iframe" src="https://player.vimeo.com/video/449865983" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>
</div>

<!-- https://www.dropbox.com/s/a9zee9y3b5tk79v/sq_bedrooms.mp4?dl=0 -->
<div class="inlinevideo">
<iframe class="inlinevideo-iframe" src="https://player.vimeo.com/video/449866027" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>
</div>

<!-- https://www.dropbox.com/s/69znflb39hia546/sq_cars.mp4?dl=0 -->
<div class="inlinevideo">
<iframe class="inlinevideo-iframe" src="https://player.vimeo.com/video/449865991" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>
</div>

<!-- https://www.dropbox.com/s/aks2bxb3zhb0lfa/sq_portraits.mp4?dl=0 -->
<div class="inlinevideo">
<iframe class="inlinevideo-iframe" src="https://player.vimeo.com/video/449866078" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>
</div>

<!-- https://www.dropbox.com/s/yup6unlw95exg4i/sq_nebulas.mp4?dl=0 -->
<div class="inlinevideo">
<iframe class="inlinevideo-iframe" src="https://player.vimeo.com/video/449866122" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>
</div>

<!-- https://www.dropbox.com/s/iv99redoisb3lhj/sq_flowers.mp4?dl=0 -->
<div class="inlinevideo">
<iframe class="inlinevideo-iframe" src="https://player.vimeo.com/video/449866133" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>
</div>

As you might have noticed the algorithm converged at something quite close to the original image several times but overshot and had then to compensate, so it got into some sort of oscillation around the “correct” result, each time giving different results, which are really interesting. 
But what I found most interesting was what happened during the early steps of each training, where the original data set still had a lot of influence over the result, yet it was producing a shape that was quite close to a square, but these had a special paint like effect that I really like. Even, the one that starts from cats looks like a pencil drawn sketch. :)
Some of my favorites are the following:


![Flowers]({{site.url | append: "/img/HowNotToTrainYourGAN/GAN_sq_flowers.jpg"}})

![Nebulas]({{site.url | append: "/img/HowNotToTrainYourGAN/GAN_sq_nebula.png"}})

![Cats]({{site.url | append: "/img/HowNotToTrainYourGAN/GAN_sq_cats.png"}})

## Conclusion

These were some experiments I made besides the main project I was working on while I was a resident at RunwayML. Were these useful? I am not sure, at least I tried and got some interesting results. I would have liked to try out a lot of other options but each experiment costs money, as it has to be run on a remote server way much more powerful than my own computer, yet I am immensely grateful with the RunwayML team as they allowed to do these experiments. 🙂 


<file_sep>---
layout: post
date: 2015-10-27 12:10:00
categories:
 - projects
tags: data-viz sfpc
thumb: /thumbs/redimensional.jpg
video_vimeo: 200435042
video_width: 958
video_height: 599
title: REDIMENSIONAL
lang: en
---

Time is often thought, in physics, as our fourth dimension. Time and images, formally speaking, are the building blocks of movies. As images only have two dimensions, time becomes the third dimension of movies. This condition allows us to create a single three dimensional object that represents the whole movie, although because of the opaque nature of the pixels only the external faces of this objects become visible. Just like in medical CT Scans, we can slice this object in order to reveal its internal features. The slices can be on any plane of this object. As we keep on slicing and watching at each slice as a new frame of the movie we become able to watch the  movie from a completely different perspective. The inner workings of the movie shot are revealed somehow; camera movements, actors movements, scenery, or simply strange yet very appealing abstract images. There is an infinite number of possible slices; images become infinite which transcend the original, never changing, movie.


This is an interactive application which allows the user to view any video file as a
three dimensional object made by stacking the video frames. The user can slice this object on any plane. By set a beginning and an end plane it will animate the slicing which will have the same duration as the original video piece.
Because of the limited amount of memory on the graphics card, it is only possible to load short pieces of video, so this app will automatically detect scene cuts and load scene by scene.

This application was made using [openFrameworks](http://openframeworks.cc) and its code will be soon available as open source.
<file_sep>---
layout: post
date: 2015-10-2 12:10:00
categories:
 - random
tags: sfpc
show_in_home: false
title: From Deleuze's Societies of Control to America is hard to see
lang: en
---

# From Deleuze's Societies of Control to America is hard to see.


*This is a writting assingment made by <NAME> for his Concept and Theory Studio class at the School For Poetic Computation while I was attending it during Fall 2015. In this a connection is ment to be drawn between <NAME>'s [Postscript on the Societies of Control](https://cidadeinseguranca.files.wordpress.com/2012/02/deleuze_control.pdf) and the [America is hard](http://whitney.org/Exhibitions/AmericaIsHardToSee) to see exhibition at the Whitney Museum in NYC.*

*Deleuze* describes societies as machines; from simple mechanical ones -lever, pulleys and clocks- to complex information driven ones -like the one in which we live now. These machines, like any other of any kind, exist to perform something *useful* -although arguable, it usualy will be something that benefits the owner of the machine or the one in control of it.

Most human practices can be seen as an *useful* piece of this machine by almost directly relating its outcome, or its importance as a piece of it, to the benefit of the *controler*. Even though, Art -as an esential practice of human kind- is usualy hard to be labeled as *useful*; The outcome of art when seen from human expression -its essential motivation- has to go through other human being, its emotions, feelings, thoughts, culture and history, conciously and unconciously, before it can provoke a reaction on it. This reaction can be something catastrophic or highly benefical for the *controler*; like triggering a massive social revolution that becomes a fatal failure of the machinery or providing huge economical gain and market movent, yet usualy from derivates of the artwork itself. From Whitney's *America is hard to see* exhibition, take as example <NAME>'s *Shapolsky et al. Manhattan Real Estate Holdings, a Real-Time Social System, as of May 1, 1971* and <NAME>'s artwork usualy seen as t-shirts and other products of mass consumption. Thus, Art within the machine is a double sided blade, for which the *controler* must be cautious about.

The lines between the different Art's practices and those that aren't, thus their produce, has become progresively more blury, specially since <NAME> irrupted in the art world. As of today I can say that this lines have become not only completly blured but erased -yet there still are the Fine Arts practices (painting, sculpture, drawing, etc) it is more and more common to find artwork in mixed field; not only between the Art's fields but with fields outside of it (Art and Computer Programing anyone?). Before Duchamp's dusruption, Art was a very well defined and distinguishable piece within the *machine*, as well as its internal elements -disciplines- were clearly separables. Although it had this double-sided knife quality it was quite easily managed into its *useful* state and keep its practicioners well identified, like gears and mechanical, solid pieces in an old machine. Nowadays Art has become an *aether*, a gaseous substance, within the machine, not only hard to identify but also capable of penetrating other pieces of the *machine*  bluring their boundaries.

By using this ideas is quite easy to tell, conceptually speaking, what is Art; Art is any produce that is not clearly *useful*. But actually discriminating Art from non-Art, when such becomes an issue, is not easy because of the *useful* quality being highly subjective and because in many cases something just needs to be named as Art in order to become such.

This untamable eathereal quality of contemporary art is the new weapon. Rather more than a weapon itself it is camouflage; a highly sophisticated one that uses human perception and interpretation capacity as its vehicle.
<file_sep>---
layout: selector
selection: code

permalink: /code/
---

<div>
<h1>CODE</h1>
I usually upload code to my <a href="https://github.com/roymacdonald/">github account</a>
<br />
Although I pretend to put here more thorough explanations of what I've shared on github.
</div>
<file_sep>---
layout: portafolio
lang: en
permalink: /dma/
---

<file_sep>---
layout: post
date: 2018-04-09 12:10:00
categories:
 - projects
tags: luminus prospectu, led mapping, luz, light
thumb: /thumbs/luminus.jpg
video_vimeo: 269480853
video_width: 958
video_height: 539
title: Luminus Prospectu
subtitle:
lang: en
---
Luminus Prospectu means light in perspective.
The scope of action of this work are the senses that perceive abstract depth -sound and vision-, focusing on the sound-and-light experimentation of perspective.

Different sound and light sources are set up in the space, whose arangement is based on Voronoi's geometric diagrams. These diagram's patterns are generated by spacial, structural and hierarchical relationships and can be found in nature and living beings, from micro to macro; human's sight and hearing sensing cells are aranged following this paterns.

The created compositions' light and sound evoke a raw atmosphere with 4 moments of intensity.

---

On the begining of 2018 I joined Trimex, an art collective and studio, of which I also became an associate. As a collective we were invited to make this piece to be shown in the Museo de Artes Visuales de Santiago (MAVI) (Museum of Visual Arts of Santiago), in the context of the inauguration of Barrio Arte (Art Neighborhood) between April 9th and 16th of 2018.

Trimex Crew: <NAME>, <NAME>, <NAME> y <NAME>.

Direction, Art direction: Andrés Terrisse.

Direction, architecture : <NAME>.

Direction, software coding: Roy Macdonald

Video documentation: Diego Miranda

Music: <NAME>

Set-up assistants: <NAME>, <NAME>, <NAME>, <NAME>.


Thanks: <NAME>, <NAME>, <NAME>agal
<file_sep>---
layout: post
date: 2007-03-01 12:10:00
categories:
 - projects
tags: video
lang: en
thumb: /thumbs/videosu.jpg
title: Videoworks 2005-2007
---

All this works were done while I was attending the arts school.
I've always liked movies and moviemaking, but sometimes the process behind the movie catches my attention much more than the movie itself.

I began to research a lot about all the processes behind making a movie; scripting, filming, photography, montage, compositing, visual effects, etc.
With this research a lot of experiments came to life, some of which ended up being art pieces I used while I was studying in the art school.

In the two following videos I was playing with image compositing, tracking and stabilization in order to create a new view over certain scene.

### Choque

<iframe src="https://player.vimeo.com/video/1218997?byline=0&portrait=0" width="500" height="230" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

### Still

<iframe src="https://player.vimeo.com/video/1221671?byline=0&portrait=0" width="500" height="333" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

### B----

The following works around script, timing and multiple views of the same scene in order to create a dramatic tension. A lot of it is achieved during the montage, by removing and reordering parts of the original video material.
Chilean spanish is spoken on it; it wont make much sense to you if you don't understand Chilean Spanish.

<iframe src="https://player.vimeo.com/video/2372246?byline=0&portrait=0" width="500" height="333" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

### Untitled
The following is the work I presented in order to get my BA degree.

Arguably, amateur video recording can be perceived as the most objective kind of documentation or less mediated. The viewer tends to overcome the technology implied in it and can sense it as he was doing such recording, thus making it believable. Based on this premise and the fact that the "amateur" quality of such recordings is nothing more that a series of technical conditions, hence this conditions can get manipulated in order to create something that looks amateur but that depicts unbelievable scenes.
Although Chilean Spanish is spoken on it, it is not necessary to completely understand it in order to understand the whole.

<iframe src="https://player.vimeo.com/video/2373013?byline=0&portrait=0" width="500" height="333" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
<file_sep>---
layout: post
date: 2012-02-01 12:10:00
categories:
 - work
tags: interactive  kinect
video_vimeo: 29583432
video_width: 958
video_height: 538
thumb: /thumbs/estrellitas.jpg
title: Nestlé's Estrellitas Cereal Kinect Game
macrobio: true
lang: en
---

We were commissioned to develop a game using the Microsoft Kinect sensor for an AD campaign of Nestlé's Estrellitas Cereal.

As far as I understand this was the first use of the Kinect Sensor in an AD campaign in Chile.

By detecting arm gestures, the user had to free a spaceship trapped by space debris, by throwing tiny stars (Estrellitas) towards it.

I developed this work while I was still working at Macrobio (I was one of the owners/partners, lead developer and project director).
<file_sep>---
layout: post
date: 2013-03-01 12:10:00
categories:
 - work
tags: ios
thumb: /thumbs/appios.jpg
title: iOS Apps
lang: en
---

I've developed several iOS apps for specific events. From networked games to invitee registry to interactive brochures.

<iframe src="https://player.vimeo.com/video/63762719?byline=0&portrait=0" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

<iframe src="https://player.vimeo.com/video/63751065?byline=0&portrait=0" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

<iframe src="https://player.vimeo.com/video/36101746?byline=0&portrait=0" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

<iframe src="https://player.vimeo.com/video/25483555?byline=0&portrait=0" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
