Chapter Title:
"A-Z...or something like that"
A cautionary introduction to existential crisis for the timid teen, based on what the internet thinks Nietzsche and others have to say about it.




Gif(will fix later):

Interactive Version(updated):

I initially wanted to create some fake government documents or conspiracies, or fanfiction based on fake books. I liked the idea of a machine generating something that sounded like it could plausibly come from a crazy person, or a tween with bad writing. I ended up doing an alphabet book of existentialism, but with the same kind of mocking/cringe-viewing lens. I originally planned on using actual works of Nietzche and existential philosophers, but I thought it would make more sense to grab quotes from questionable sources like "101 Existential Quotes that'll Make you Question Everything." These included curated quotes from actual philosophers, but whether they were accurate or taken out of context, I didn't know. And that was the point. Unfortunately I couldn't find an elegant way to find it, so it was just Google Search and copy-paste.

My intention with the aesthetics was just to have something that looked images I used to find all over Facebook, of just "deep" thoughts stylized in an "edgy" way--so dingy white type-writer text on black it was.

In general, most choices were guided by my experience/appreciation of the "uses-irony-incorrectly, edgy teenager" stereotype. I wanted it to read like something a 13-year-old would make in their free time back in 2012, because I was probably that 13-year-old.

Evaluation of Results:
In my opinion, the results are, mixed. There are some gems that are nonsensical in just the right way("Beware of letters. They are gay.") or are common seemingly "deep" statements often found and shared on the internet. The concept is really simple, but I think there was a lot I could have done with it, had I had time to play around with it. I think it's fun to look through some pages, but maybe not a whole 26 pages.

Because I didn't fine tune it, there are a lot of bugs that make their way on to the page too, like occasionally the program thinks "an" and "such" are adjectives. Also, I attempted to purposefully use every letter in order, but I think it just came off as laziness. There are also a lot of repeats because I had a rather small data set to draw from.

I made something that appealed to my sense of humor, and I'm not sure if the humor or intentions translate to other people, or if it seems mean-spirited in the way it mocks a certain type of person( or if it seems mocking at all).

Extra thoughts:
I had some observations while I was making the project. After I posted the first link, I added in a few full works by Nietzche(because I assume that's most people's immediate association with existentialism). This kind of messes up the idea of getting just the information cherry picked by internet folk, but it actually turned out more varied sentences, and had the same effect. I forgot that, obviously, shoving complex and nuanced ideas into this simple and narrow template would produce comical contradictions and nonsense. I also thought of my program as a 3rd "dumbness" filter of sorts. First the internet gets their hands on the original pieces, and then it goes through my program, and then we get this nonsense.

Rita, for generating text, with rhyming template provided by Char Stiles.

var rhymes, word, data, wordy, tit, letter;
var numS;
var pagesArr = [];
var t = 0;
var tmax = 7000;
class Page {
	constructor(title, text){
  	this.title = title;
    this.text = text;
function setup()
  createCanvas(300, 300);
  textFont("Courier New");
  //lexicon = new RiLexicon();
  data = loadStrings('such_deep.txt');
 // words = data.split(' ');
  console.log('data loaded');
  //setInterval(findRhymes, 2000);
function keyPressed(){
  console.log("getting pages...");
function getPages(){
  console.log("getting pages...");
  for (var i=0; i<26; i++){
    console.log("got rhymes");
		var p = new Page(tit, rhymes);
    pagesArr[i] = p;
  var jsonObj = {};
  jsonObj.pages = pagesArr;
  //saveJSON(jsonObj, 'angst_pages.json');
  createButton('SAVE THE ANGST')
    .position(width/2, height/2)
    .mousePressed(function() {
    saveJSON(jsonObj, 'angst_pages.json');
function draw()
  text("hit  to deprive\nyourself of some meaning.",10,height-30);
	if(data == undefined){
  text(tit, 30, 40);
  text(rhymes, 280, 100);
function newWord(){
  console.log("new word...");
  var w = data[floor(random(data.length))];
  if (!w)
    return "";
  w = w.split(' ');
    console.log("split word...");
  w = w[floor(random(w.length))];
  w = RiTa.stripPunctuation(w);
  return w;
function numSyllables(w){
  var syll = RiTa.getSyllables(w);
  var count = 0;
  for (var x = 0; x < syll.length; x++){
    if (syll.charAt(x) == '-')
  return count;
function rightWord(w){
	return RiTa.isAdjective(w) && 
     //w.charAt(0) == word.charAt(0) &&
		!RiTa.isAdverb(w) && 
		!RiTa.isNoun(w) &&
    (w != 'an') &&
    (w != 'such') &&
		!RiTa.isVerb(w) ;
    //(numS == numSyllables(w)) && 
function findRhymes() { // called by timer
	if(data == undefined){
      console.log('undef data');
  	word = newWord();
  } while(!RiTa.isNoun(word));
  word = RiTa.singularize(word).toLowerCase();
  numS = numSyllables(word);
  letter = word.charAt(0);
  console.log("got word");
  do {
  	wordy = newWord();
  } while(!rightWord(wordy) && t<tmax);
  //wordy = RiTa.singularize(wordy).toLowerCase();
  wordy = wordy.toLowerCase();
    console.log("got wordy");
  tit = letter.toUpperCase() + " is for\n " + word.toUpperCase() + ".";
  rhymes = "Beware of " + RiTa.pluralize(word) + ".\nThey are " + wordy + ".";

Basil.js, for creating the pages in InDesign

#include "../../bundle/basil.js";
// Version for basil.js v.1.1.0
// Golan Levin, November 2018

function makePage(i) {
  // Load a JSON file containing your book's content. This is expected
  // to be located in the "data" folder adjacent to your .indd and .jsx. 
  var j = i + 1;
  var jsonString;
  if (j > 9)
    jsonString = b.loadString("angst_pages_" + j + ".json");
    jsonString = b.loadString("angst_pages_0" + j + ".json");

function makeSamplePage(){
  jsonString = b.loadString("angst_pages_sample.json");

function makePage_fromFile(jsonString){
  // Clear the document at the very start. 
  b.clear (b.doc());

  // Parse the JSON file into the jsonData array
  var jsonData = b.JSON.decode( jsonString );
  //var poems = jsonData.poems; 
  var poems = jsonData.pages; 
  b.println("Number of poems: " + poems.length);

  // Initialize some variables for element placement positions.
  // Remember that the units are "points", 72 points = 1 inch.
  var inch = 72;

  var titleW = inch * 5.0;
  var titleH = inch * 5;
  var titleX = (b.width / 2) - 3*(titleW / 5) ; // centered 
  var titleY = inch * 1.0;

  var textX = inch * -2; 
  var textY = inch * 5.0;
  var textW = inch * 7.0;
  var textH = inch * 3.0;

  // Loop over every element of the book content array
  // (Here assumed to be separate pages)
  for (var i = 0; i < poems.length; i++) {
      // draw the background first
    var r = 3/4;
    b.rect(b.width/2, b.height/2, r*b.width, r*b.height);
    // Format and display the "title" field.
    var poemTitle = poems[i].title;
    b.textFont("Special Elite","Regular"); 
    b.textAlign(Justification.CENTER_ALIGN, VerticalJustification.CENTER_ALIGN );
    var thePoemTitleFrame = b.text(poemTitle, titleX,titleY,titleW,titleH);
    var titleWords = b.words(thePoemTitleFrame);
    b.typo(titleWords[0], 'pointSize', 150);
    b.typo(titleWords[titleWords.length-2], 'underline');

    // Format and display the poem's "text" field. 
    // This time, let's do some typographic tricks.
    //b.textFont("Special Elite","Regular"); 
    b.textAlign(Justification.RIGHT_ALIGN, VerticalJustification.CENTER_ALIGN );
    // Get the text of the i'th poem
    var poemText = poems[i].text;
    // Create an InDesign TextFrame from this text
    var thePoemTextFrame = b.text(poemText, textX,textY,textW,textH);
    // Fetch the individual words in this TextFrame; 
    // Underline the first (0'th) word. 
    var poemWords = b.words (thePoemTextFrame);
    //b.typo(poemWords[0],'pointSize', 100);

    // Create the next page. 
    if (i < (poems.length-1)){ b.addPage(); } } // Ensure that there are an even // number of pages in the document. if ((poems.length % 2) > 0){

function remPages(){
  while(b.pageCount() > 1){

function savePage(i){

  if (i > 9)
    b.savePDF(i + "-nerual.pdf");
    b.savePDF('0' + i + "-nerual.pdf");

function saveSamplePage(){

function setup(){
  b.clear (b.doc());
  // var numPages = 1;
  // for( var i=0; i < numPages; i++) {
    // makePage(i);
    // savePage(i);
  // }  

// This makes it all happen: