Aliot-Book

My book is called “What I Was Doing When You Texted Me.” It’s a personal text-photo memoir of the last two years of my life and also a look-up table for texts that my friends have sent me. It’s very personal project so my opinion is very biased, but I thought the content and the juxtaposition of certain texts and photos were very compelling. Because of the sheer amount of data I had produced, there were upwards of 20 photos/texts that were received/taken within one second of each other, so the “what I was doing when you texted me” question is very literally and accurately answered. The answer was “I was looking at this thing.” (Unsurprisingly many of the photos were screenshots, photos of my boyfriend, or selfies).

In order to generate my book, I cross referenced the time stamps of all of my photos using the EXIF metadata with the time stamps to all of my received texts. After scraping this data, I used processing to create a CSV containing all of the texts received with the photo with the closest time stamp. After ordering the data according to temporal proximity, it was easy to compile a book showcasing the information.

What I Was Doing When You Texted Me (PDF)

Table data;
Table final_data;
Table final_no_repeats;
StringList used_pics;

void setup(){
  final_data = new Table();
  final_data.addColumn("pic_file");
  final_data.addColumn("pic_time");
  final_data.addColumn("text_time");
  final_data.addColumn("text");
  final_data.addColumn("to");
  final_data.addColumn("from");

  data = loadTable("combined_pic_text.csv", "header");
  
  for (int i = 0; i<500; i++){
    for (TableRow row: data.rows()){
      if (int(row.getString("dif")) == i) {
        println(row.getString("dif"));
        String file = row.getString("pic_file");
        String pic_time = row.getString("pic_date_time");
        String text_time = row.getString("text_date_time");
        String text = row.getString("text");
        String to = row.getString("to");
        String from = row.getString("from");
        String dif = row.getString("dif");      
        
        TableRow newRow = final_data.addRow();
        newRow.setString("pic_file", file);
        newRow.setString("pic_time", pic_time);
        newRow.setString("text_time", text_time);
        newRow.setString("text",text);
        newRow.setString("from", to);
        newRow.setString("to",from);
        newRow.setString("dif", dif);
        
        saveTable(data, "data/data_sorted.csv");
      }
    }
  }
  
  saveTable(final_data, "data/data_sorted.csv");
  
  remove_duplicates();
}

void remove_duplicates(){
  final_no_repeats = new Table();
  final_no_repeats.addColumn("pic_file");
  final_no_repeats.addColumn("pic_time");
  final_no_repeats.addColumn("text_time");
  final_no_repeats.addColumn("text");
  final_no_repeats.addColumn("to");
  final_no_repeats.addColumn("from");
  final_no_repeats.addColumn("dif");

  for (TableRow row: final_data.rows()){
    String file = row.getString("pic_file");
    if (!used_pics.hasValue(file)){
      used_pics.append(file);
      TableRow newRow = final_no_repeats.addRow();
      newRow.setString("pic_file", row.getString("pic_file"));
      newRow.setString("pic_time",  row.getString("pic_time"));
      newRow.setString("text_time",  row.getString("text_time"));
      newRow.setString("text", row.getString("text"));
      newRow.setString("from",  row.getString("from"));
      newRow.setString("to", row.getString("to"));
      newRow.setString("dif",  row.getString("dif"));
    }
  }
}