on the awareness 
of being represented

january 2019
class w/ Thomas Mayfried

artist book







“In front of the lens, I am at the same time: the one I think I am, the one I want others to think I am, the one the photographer thinks I am, and the one he makes use of to exhibit his art.” — Roland Barthes

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 allMetadata = new ArrayList();
       ArrayList directoryList = new ArrayList();
       // ARRAYLIST OF DATES
       ArrayList dateList = new 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);
   }
}