YouTube selfie
Made by Xin Hui Lim
Made by Xin Hui Lim
Create a data representation that acts as memory cue
Created: January 31st, 2017
YouTube has been a part of my daily routine, and my watch history is often reflective of how busy I am, my mood, my habits and personal preferences, yet I seldom think twice about how much time I actually spend online. Initially I planned to create a data selfie based on the YouTube thumbnails that can then become my online social media profile picture, with the thumbnails acting as a memory cue to quickly recall what each video was about. Later I decided that it would be more interesting to make something; it would be more dynamic, more dimensional. The temporal patterns of my viewing history information (time and date watched, duration) could be abstracted into something one could watch and possibly interact with. My project aims to be a personal reflection tool; a daily reminder of one’s online routine. I imagine this box with LED lights being placed on the dining table which is activated by infrared sensor, where the user can watch and/or interact with the lights as they are eating (alone). The user would feel compelled to tap their finger on the lights and although that would not have any effect on the device, it would encourage recollection and self-reflection through physical engagement and game-like thinking.
Using Arduino, I created a 4x3 grid of lights that would scroll from one end to another based on the data obtained from Google Activity. I decided to convert the hours I spent on YouTube (over a week in January of each year) to an array of Boolean values so that the LEDs can be controlled easily (using Mathematica). For example, if I watched some videos at 5pm and some at 10pm, the corresponding array would have a true value for the corresponding index for those hours (17 and 22).
Before creating the physical prototype, I simulated the circuit and the code using Autodesk’s Electronics Lab. I also enclosed the electrical circuit and breadboards in a box with slits above the lights, so that the effect of scrolling lights would resemble that in Guitar Hero. The device starts up when the USB attached to the Arduino is plugged into the computer.
Data visualization is quite a developed field with many types of representation and many types of information. In particular, for my project, I was interested to see if there were any data visualizations or sculptures for data across time. One of the websites I found was http://survey.timeviz.net/. I also found a few articles by Lev Manovich who plotted Instagram photos over a period of time (http://www-users.cs.umn.edu/~bhecht/geohci2013ps/paper_56.pdf). I felt that the final plot visualization of colored dots and lines over a black background was an interesting and effective method. He also wrote about visual patterns in video games (http://softwarestudies.com/cultural_analytics/visualizing_temporal_patterns.pdf) and this inspired me to make something that was both game-like and represented data.
Jeremy Blum's Arduino tutorial about holiday lights and sounds was also interesting to me and inspired me to use lights to represent patterns in data (http://www.jeremyblum.com/2011/12/25/tutorial-14-for-arduino-holiday-lights-and-sounds/).
I also wanted to see if there were any research on how data visualizations can aid memory (http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=7192708). It identifies "evoking familiarity, expressing subjectivity and addressing people's privacy concerns by obscuring sensitive data" as challenges; participants also "long(ed) for a representation that they can better integrate into their home where it can trigger serendipitous recounters and stimulate communications with friends. Hence, I felt that it would be appropriate to make something physical and possibly engaging different senses (sight, touch), with the eventual goal of encouraging memory recollection.
The initial idea was to make use of viewing history from YouTube in some way; a digital data portrait using thumbnails of images that could be a way to share and reminisce about one's viewing history. At the same time, I was interested in any possible patterns in the viewing history and having a way to visualize that without poring through the data on Google Activity. This prompted me to think about abstracting the watched times from YouTube so that it can be exemplified in a physical form that could reflect the patterns in the data. Lastly, I had the idea to make it more physically engaging for the user rather than just being an ambient piece, even though I didn't actually want to make the device “interactive” per say. The final idea is inspired by Guitar Hero, and is simply a grid of lights that lights up based on my viewing history, with the 3 columns reflecting different years of my life.
I struggled with thinking about how the huge amount and variety of data could be processed and used to create something tangible. Although the final prototype allows one to watch the LEDs light up over a period of time, that limits the amount of data that could be used to control the LEDs (since the loop does not want to be infinitely long). At the same time, every week of my life is different and I might learn more from a 2D static visualization that would incorporate a larger amount of data. I wonder if there could be a way to incorporate temporal interactivity into more data (such as type of video watched) and if there are ways to process data more efficiently.
Through this project, I also realized the importance of designing technology and interfaces; one can always archive data but it is the ability to use the data that matters. At the same time I was interested in exploring the idea that we should not be too reliant on technology; instead, technology serves as a way to trigger memories and our memories can be controlled and sought after. However, I do wonder if there is a way to evaluate how a memory is triggered and what the best trigger is (eg. light vs sound).
I think I learnt quite a bit from this project as I am not very familiar with coding and electronics; implementing the simplest idea required quite a bit of research and testing. For example, this is the first time I've used Electronics Lab and is also my first Arduino project. At the same time the final physical prototype could have been better made and designed (in terms of materials and craft) -- if I had more time I would have measured and lined up the LEDs and the slits better but I'm glad that I managed to get the basic idea across.
Through this project, I also realized the importance of designing technology and interfaces; one can always archive data but it is the ability to use the data that matters. I did not expect that the data I got from YouTube would be the form it was in and it took me more time than expected to convert the data to the arrays for the code.
Cite any sources or materials used in the documentation or composition.
-http://survey.timeviz.net
-Visualizing Spatio-Temporal Social Patterns in Instagram
Photos by Lev Manovich & Nadav Hochman
http://www-users.cs.umn.edu/~bhecht/geohci2013ps/paper_56.pdf
-Visualizing Temporal Patterns in Visual Media by Lev Manovich & Jeremy Douglass
http://softwarestudies.com/cultural_analytics/visualizing_temporal_patterns.pdf
-Electronics Lab
https://circuits.io/lab
-Tutorial 14 for Arduino: Holiday Lights and Sounds
http://www.jeremyblum.com/2011/12/25/tutorial-14-for-arduino-holiday-lights-and-sounds/
#define MaxHours 168 //24 hours 7 days
#define year 3 //Data from 2015, 2016, 2017
// Define the array
const bool theSteps [year] [MaxHours] =
{
{false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, true, false, false, false,
false, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, true, false, false,
false, false, false, false, false, false, false, false, false, false, true, false, false, false, true, true, true, true, false, false, false, false, false, false,
false, false, false, true, true, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, false, false, false, false, false, false, false,
false, false, false, false, false, false, true, true, false, true, true, false, false, false, false, false, false, false, false, false, false, false, true, false}, //2017
{false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}, //2016
{false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, true, true, true, false, false, false,
false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false, false, false, false, true, false, false,
false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false} //2015
};
#define StepDelay 100
void setup()
{
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
int step = 0;
void loop()
{
for (int i=0; i<year; i++){
digitalWrite((i*4)+2, (theSteps[i][step] == true)? HIGH : LOW);
digitalWrite((i*4)+3, (theSteps[i][step-1] == true)? HIGH : LOW);
digitalWrite((i*4)+4, (theSteps[i][step-2] == true)? HIGH : LOW);
digitalWrite((i*4)+5, (theSteps[i][step-3] == true)? HIGH : LOW);
//Serial.print(i*4+5);
}
if (step == MaxHours-1){
step = 0;
} else {
step++;}
Serial.print(step);
delay(StepDelay);
}
Click to Expand