on the awareness
of
being represented
january 2019
class w/ Thomas Mayfried
artist book
How does a person act as themselves in front of a camera? Is it possible to capture their “essence” in a picture? What role does the awareness of the photographer and his lens play in altering the subject?
18 people were photographed in a place where they felt comfortable, while staring at themselves through a mirror for as long as they wanted. The photos are arranged chronologically on a long strip running between the pages along the entire length of the book. Each distance between two photos has been calculated with a Javascript code in order to visually render the actual time gap between shots.
Continuously shifting between self-awareness and awareness of the camera, most of the subjects experienced a sense of detachment and introspection, always interrupted by the shutter sound.
849 pictures, 23 x 23 x 2.5cm — 348 pages
print run: 1
javascript by Giacomo Melacini:
public class PhotoSet {
private long[] times;
private String name;
private double[] intervals;
public PhotoSet (long[] times, String name) {
this.times = times;
this.name = name;
}
public long[] getTimes() {
return times;
}
public void setIntervals(double[] intervals) {
this.intervals = intervals;
}
public String toString() {
String toReturn = name + "\n";
for (int i = 0; i < intervals.length; i++) {
toReturn += intervals[i] + "\n";
}
return toReturn;
}
}
import java.io.*;
import java.util.*;
import com.drew.imaging.*;
import com.drew.metadata.*;
import com.drew.metadata.exif.ExifSubIFDDirectory;
public class Project {
public static void main(String[] args) throws ImageProcessingException, IOException {
// Finding all the folders containing sets of photo
File parentFolder = new File("C:\\Users\\Giacomo\\eclipse-workspace\\MatteoExifProj\\Resources");
File[] folders = findFolders(parentFolder);
// finding the times photo were taken for each set
PhotoSet[] sets = new PhotoSet[folders.length];
for (int i = 0; i < sets.length; i++) {
sets[i] = new PhotoSet(findTimes(folders[i]), folders[i].toString());
}
// finding the absolute minimum interval
long minInterval = findMinInterval(sets);
System.out.println("Minimum interval within all the sets: " + minInterval + "\n\n");
// find intervals for each photoset
for (int i = 0; i < sets.length; i++) {
sets[i].setIntervals(findIntervals(sets[i].getTimes(), minInterval));
}
// printing info for every set
for (int i = 0; i < sets.length; i++) {
System.out.println(sets[i].toString());
}
findAbsoluteMax(sets);
findMeanInterval(sets);
}
public static File[] findFolders(File parentFolder) {
File[] folders = parentFolder.listFiles();
return folders;
}
public static long[] findTimes(File folder) throws ImageProcessingException, IOException {
// TAKE FILE FROM FOLDER
File[] listOfFiles = folder.listFiles();
// ARRAYLIST OF METADATA
ArrayList
ArrayList
// ARRAYLIST OF DATES
ArrayList
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
// System.out.println(listOfFiles[i].getName());
allMetadata.add(ImageMetadataReader.readMetadata(listOfFiles[i]));
directoryList.add(allMetadata.get(i).getFirstDirectoryOfType(ExifSubIFDDirectory.class));
dateList.add(directoryList.get(i).getDate(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL));
// System.out.print(listOfFiles[i] + "\t");
// System.out.println(dateList.get(i));
}
}
// RESCALED ABSOLUTE TIME FROM DATES
long[] times = new long[dateList.size()];
for (int i = 0; i < times.length; i++) {
// System.out.println(dateList.get(i) + "\t" + dateList.get(i).getTime());
times[i] = dateList.get(i).getTime();
}
insertionSort(times, times.length);
long min = times[0];
for (int i = 0; i < times.length; i++) {
times[i] = times[i] - min;
// System.out.println(times[i]);
}
return times;
}
public static long findMinInterval(PhotoSet[] list) {
int l = list.length;
long interval = list[0].getTimes()[1] - list[0].getTimes()[0];
long[] timesI;
for (int i = 0; i < l; i++) {
timesI = list[i].getTimes();
for (int j = 0; j < list[i].getTimes().length - 1; j++) {
if (timesI[j + 1] - timesI[j] < interval)
interval = timesI[j + 1] - timesI[j];
}
}
return interval;
}
public static double[] findIntervals(long[] list, long minInterval) {
double[] intervals = new double[list.length - 1];
for (int i = 0; i < intervals.length; i++) {
intervals[i] = list[i + 1] - list[i];
intervals[i] = intervals[i] / minInterval;
}
return intervals;
}
public static void insertionSort(long arr[], int n) {
int i, j;
long key;
for (i = 1; i < n; i++) {
key = arr[i];
j = i - 1;
/*
* Move elements of arr[0..i-1], that are greater than key, to one position
* ahead of their current position
*/
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
public static void findAbsoluteMax(PhotoSet[] list) {
int l = list.length;
long interval = list[0].getTimes()[1] - list[0].getTimes()[0];
long[] timesI;
for (int i = 0; i < l; i++) {
timesI = list[i].getTimes();
for (int j = 0; j < list[i].getTimes().length - 1; j++) {
if (timesI[j + 1] - timesI[j] > interval)
interval = timesI[j + 1] - timesI[j];
}
}
System.out.println("Intervallo massimo: " + interval);
}
public static void findMeanInterval(PhotoSet[] list) {
int l = list.length, c = 0;
long interval = 0;
long[] timesI;
for (int i = 0; i < l; i++) {
timesI = list[i].getTimes();
for (int j = 0; j < list[i].getTimes().length - 1; j++) {
c++;
interval += timesI[j + 1] - timesI[j];
}
}
interval = interval/c;
System.out.println("Intervallo medio: " + interval);
}
}