forked from mikeckennedy/talk-python-transcripts
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy path047_fonts_and_python.vtt
2006 lines (1337 loc) · 63.3 KB
/
047_fonts_and_python.vtt
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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
WEBVTT
00:00:00.001 --> 00:00:04.780
This week on Talk Python to Me, we'll dive into the world of typeface and font development.
00:00:04.780 --> 00:00:11.040
Even though we spend our days immersed in fonts, from computer interfaces, signs, books, televisions, and more,
00:00:11.040 --> 00:00:14.900
much of the process and thinking about fonts is invisible to us.
00:00:14.900 --> 00:00:20.740
If we did dig into font development, we'd see that Python is a key component of the Font Developers Toolkit.
00:00:20.740 --> 00:00:24.620
This week, we have a very special guest to tell us all about it.
00:00:24.620 --> 00:00:30.220
We'll talk to Jost van Rossum about how he has helped pioneer the use of Python for font development.
00:00:30.220 --> 00:00:35.040
This is episode number 47, recorded February 3rd, 2016.
00:00:49.240 --> 00:01:05.760
Welcome to Talk Python to Me, a weekly podcast on Python, the language, the libraries, the ecosystem, and the personalities.
00:01:05.760 --> 00:01:07.900
This is your host, Michael Kennedy.
00:01:07.900 --> 00:01:09.900
Follow me on Twitter, where I'm @mkennedy.
00:01:09.900 --> 00:01:16.360
Keep up with the show and listen to past episodes at talkpython.fm, and follow the show on Twitter via at Talk Python.
00:01:16.360 --> 00:01:19.820
This episode is brought to you by Hired and SnapCI.
00:01:19.820 --> 00:01:26.540
Thank them for supporting the show on Twitter via at Hired underscore HQ and at Snap underscore CI.
00:01:26.540 --> 00:01:28.160
Hey, everyone.
00:01:28.160 --> 00:01:30.680
I have a great conversation with Jost on Tap today.
00:01:30.680 --> 00:01:34.620
But before we get to that, I want to give you a quick update on my online course project.
00:01:34.940 --> 00:01:40.480
Recall from last week, I announced I'm starting work on a large set of online training courses for Python.
00:01:40.480 --> 00:01:44.380
You can read about the whole story on my blog post, which I'll add to the show notes.
00:01:44.380 --> 00:01:52.280
To launch this project, I put the first course, an intro to Python course called Python Jumpstart by building 10 apps, on Kickstarter.
00:01:52.280 --> 00:01:56.160
The campaign has been out for a week, and the response has been amazing.
00:01:56.160 --> 00:02:01.480
The Kickstarter was funded in 12 hours, met almost all of its stretch goals, and is still going strong.
00:02:01.480 --> 00:02:03.640
I want to say thanks to all of you who backed it.
00:02:03.640 --> 00:02:06.260
I know many of the backers are podcast listeners.
00:02:06.260 --> 00:02:10.900
If this sounds interesting, check out the course at talkpython.fm/course.
00:02:10.900 --> 00:02:14.920
And if someone you know or work with would benefit from it, send them a link.
00:02:14.920 --> 00:02:20.680
Speaking of great ways to learn more about Python, EuroPython 2016 has announced their call for proposals.
00:02:20.680 --> 00:02:25.940
If you're interested in speaking there, just visit europython.eu and click on Speakers in the menu bar.
00:02:25.940 --> 00:02:29.700
Now, let's hear from Jost van Rossum about fonts and Python.
00:02:29.700 --> 00:02:31.720
Jost, welcome to the show.
00:02:31.720 --> 00:02:32.140
Thank you.
00:02:32.140 --> 00:02:32.920
Thanks for having me.
00:02:32.920 --> 00:02:38.760
Yeah, I'm really interested to learn about how Python is involved with font development.
00:02:38.760 --> 00:02:44.600
This is something I knew nothing about, and one of the listeners, Chris Simpkins, sent me a message and said,
00:02:44.600 --> 00:02:46.340
oh, you have to have Jost on the show?
00:02:46.340 --> 00:02:51.500
He's doing all these cool things with Python and fonts, and so I'm ready to learn all about it.
00:02:51.500 --> 00:02:52.840
Huh, that's cool.
00:02:52.840 --> 00:02:59.900
Well, font production is a pretty rare profession or field, so it's kind of a niche market for tools.
00:03:00.140 --> 00:03:12.860
I mean, there are many graphic designers and that group there are, there's a smaller group of typographic designers, and within that group, there's an even smaller group of type designers who are designing typefaces, which become fonts.
00:03:13.020 --> 00:03:15.900
I tend to make a distinction between the word typeface and font.
00:03:15.900 --> 00:03:19.660
It might be a technicality, but I mean, we see the word font.
00:03:19.660 --> 00:03:22.400
A font is a technical representation of a typeface.
00:03:22.400 --> 00:03:25.060
We design a typeface and we produce a font.
00:03:25.440 --> 00:03:25.660
I see.
00:03:25.660 --> 00:03:29.660
So, like, font might be, that's the thing, like, in the TTF file.
00:03:29.660 --> 00:03:30.120
Right.
00:03:30.120 --> 00:03:38.580
The TTF file is the font, and the font describes the typeface with coordinates and curves and splines and bases, whatever the format does.
00:03:38.580 --> 00:03:39.040
Awesome.
00:03:39.040 --> 00:03:41.020
So, I totally want to dig into that.
00:03:41.020 --> 00:03:43.940
Before we do, though, maybe we could hear your story.
00:03:43.940 --> 00:03:46.340
How did you get into programming and then Python?
00:03:46.340 --> 00:03:51.720
You know, I'm the younger brother of Guido, Guido van Rossen, the inventor of Python, as you know.
00:03:51.720 --> 00:03:53.560
We're about 10 years apart.
00:03:53.560 --> 00:03:55.120
He just turned 60.
00:03:55.120 --> 00:03:56.400
I will be 50 soon.
00:03:56.400 --> 00:04:01.540
But when I was 15, so this must have been calculating, 1981.
00:04:01.540 --> 00:04:05.340
This is like a pioneering time of home computers.
00:04:05.340 --> 00:04:11.700
Our dad bought a little Sinclair 81, a ZX81 computer, which I hooked up to your television.
00:04:12.420 --> 00:04:20.480
The only thing you could do with that is to program it, and my brother had already been studying math and or computer science.
00:04:20.480 --> 00:04:22.920
I don't even know exactly, and he was working in that field.
00:04:22.920 --> 00:04:27.800
So, he wasn't living at home anymore, but he was close by enough to teach me the basics.
00:04:27.800 --> 00:04:30.260
Like, what do you do with such a machine?
00:04:30.260 --> 00:04:34.240
How does, it was a variation of basic that computer did.
00:04:34.240 --> 00:04:39.220
So, I had a nice introduction of a relatively experienced programmer.
00:04:39.220 --> 00:04:41.860
Somehow, yeah, that fascinated me.
00:04:41.860 --> 00:04:44.740
I liked working with that at the age of 15.
00:04:44.740 --> 00:04:50.160
So, actually, I got into programming before I got into graphic design, a typographic designer.
00:04:50.160 --> 00:04:53.860
I started so that I was trained as a graphic designer, typographic designer.
00:04:53.860 --> 00:04:57.800
Later on, I never got a formal training as a programmer.
00:04:57.800 --> 00:04:58.360
Interesting.
00:04:58.360 --> 00:05:03.120
So, you got into programming first, and then you got into this font development.
00:05:03.120 --> 00:05:03.380
Yeah.
00:05:03.380 --> 00:05:05.880
I'm sure you're thinking, like, how can we automate this?
00:05:05.880 --> 00:05:08.140
How can we build tools to do all these things, right?
00:05:08.240 --> 00:05:09.880
Well, that is what happened later.
00:05:09.880 --> 00:05:16.700
While studying graphic design, I had an awesome teacher called Gerard Nortzey, who was a type
00:05:16.700 --> 00:05:18.260
design and calligraphy teacher.
00:05:18.260 --> 00:05:20.940
And he had a very open mind for technology.
00:05:21.940 --> 00:05:28.760
And, you know, at some point, I was still playing with that old computer when I was 18 and produced some experiments that I programmed.
00:05:28.760 --> 00:05:32.900
I programmed some letter forms and showed it to class and showed it to my teacher.
00:05:33.860 --> 00:05:36.120
And, yeah, he was supportive of that.
00:05:36.120 --> 00:05:38.400
It was kind of a new thing at the time.
00:05:38.400 --> 00:05:40.680
People didn't have PCs at home yet.
00:05:40.680 --> 00:05:43.580
So, to work with a computer was a very nerdish thing.
00:05:43.580 --> 00:05:45.640
So, that's kind of the context.
00:05:45.640 --> 00:05:46.020
Yeah.
00:05:46.020 --> 00:05:50.580
So, that's like back when, like you said, you had to program the computer to get it to do anything.
00:05:50.580 --> 00:05:52.020
That's before they had programs.
00:05:52.020 --> 00:05:52.960
And so, that's crazy.
00:05:52.960 --> 00:05:53.320
Yeah.
00:05:53.320 --> 00:05:54.060
But very cool.
00:05:54.060 --> 00:05:54.500
Right.
00:05:54.780 --> 00:05:57.460
How did that evolve into working with Python?
00:05:57.460 --> 00:06:04.500
I mean, obviously, your brother invented it, which is, you've got to be just so amazed at how that's going, which is cool.
00:06:04.500 --> 00:06:12.700
But it seems like it's not just, hey, you're using Python for font development, but the font industry is.
00:06:12.700 --> 00:06:15.940
I was working with Peter from Blockland and also Eric from Blockland.
00:06:15.940 --> 00:06:21.180
Those are two brothers that actually are in age similarly as me and my brother.
00:06:21.180 --> 00:06:22.280
So, Peter is the older one.
00:06:22.280 --> 00:06:24.580
Eric is the one of my generation, pretty much.
00:06:24.580 --> 00:06:29.360
And we were making fonts and exploring the technology.
00:06:29.360 --> 00:06:36.200
And Peter actually had been involved in the development of a font editor called MacIcarus or Icarus M.
00:06:36.200 --> 00:06:40.020
It was a MacIcarus version of the Icarus font digitizing software.
00:06:40.020 --> 00:06:45.380
He was really experienced with that stuff and actually had started writing another font editor.
00:06:45.380 --> 00:06:47.900
He was never happy with the font editors that were out there.
00:06:47.900 --> 00:06:53.120
And so, he created his own stuff, well, several times, actually.
00:06:53.400 --> 00:06:59.480
And he is also a graphic designer that somehow accidentally got into programming without a formal training.
00:06:59.780 --> 00:07:03.820
So, we're kind of a small group of graphic people who happen to be programming.
00:07:03.820 --> 00:07:07.760
And, well, we do our best, but we're amateurs at best.
00:07:07.760 --> 00:07:13.460
But Peter realized that it's such a specific thing to do.
00:07:13.460 --> 00:07:15.360
You have to have control over your tools.
00:07:15.360 --> 00:07:19.220
So, he was really – like I said, he wasn't happy with the tools that were there.
00:07:19.840 --> 00:07:22.520
It's very difficult to make a full working application.
00:07:22.520 --> 00:07:25.280
A font editor is actually a pretty difficult thing to make.
00:07:25.280 --> 00:07:29.560
And being the busy person he is, he never got around to completely finishing it.
00:07:29.560 --> 00:07:34.480
So, he realized, well, maybe we should start with an existing font editor and make it programmable.
00:07:34.480 --> 00:07:39.980
And that is how Robofog came about in the mid-90s, 95.
00:07:40.220 --> 00:07:42.080
I think we started roughly with that project.
00:07:42.080 --> 00:07:46.120
It's based on Fontographer, which was a very popular font editor at the time.
00:07:46.120 --> 00:07:51.960
Made by the same people who made Freehand, which is like – was a competitor to Illustrator.
00:07:51.960 --> 00:07:53.220
Really smart people.
00:07:53.220 --> 00:07:56.140
A nice small company from Texas who developed that.
00:07:56.560 --> 00:08:07.060
And somehow through contacts at the Font Bureau, this is Font Foundry in Boston, and David Burlow, the founder and owner of that company, we were in contact with those people.
00:08:07.060 --> 00:08:14.140
And they allowed us to use their source code and build this programmable font editor.
00:08:14.140 --> 00:08:15.700
It was actually the old version.
00:08:15.700 --> 00:08:19.780
They had a new generation lined up, which was a complete rewrite in C++.
00:08:19.780 --> 00:08:21.580
But the old version was written in C.
00:08:21.800 --> 00:08:27.780
And Peter from Blockland was playing – I'm sorry, I'm getting perhaps a little long-minded about this, if you want to interrupt.
00:08:27.780 --> 00:08:31.860
No, it's interesting, though, that you contacted this company.
00:08:31.860 --> 00:08:33.540
And this was a commercial product at the time?
00:08:33.540 --> 00:08:33.900
Yeah.
00:08:33.900 --> 00:08:37.540
And then they gave you the source code to build an API.
00:08:37.540 --> 00:08:39.520
That's really interesting.
00:08:39.520 --> 00:08:42.680
Yeah, it was their obsolete version, pretty much, right?
00:08:42.680 --> 00:08:46.360
So, they had the new generation, which was much nicer and fancier and whatever.
00:08:46.360 --> 00:08:52.960
But they allowed us to use their old code base, not to publish the code base, but we were allowed to play with that.
00:08:52.960 --> 00:08:57.100
And Peter initially started – he realized I wanted to hook it up to a scripting language.
00:08:57.100 --> 00:08:59.200
And he wasn't into Python yet.
00:08:59.200 --> 00:09:03.900
He tried AUK, which, well, it was awkward at best, I suppose.
00:09:03.900 --> 00:09:04.980
It's all in the name already.
00:09:04.980 --> 00:09:06.220
You knew it was a bad idea.
00:09:06.220 --> 00:09:07.460
Yeah, it's all in the name.
00:09:07.460 --> 00:09:07.840
Exactly.
00:09:07.840 --> 00:09:10.660
And somehow I had just gotten seriously into Python.
00:09:10.660 --> 00:09:15.380
I think the first Python version I had on my computer was maybe version 1.2.
00:09:15.380 --> 00:09:20.480
And the first version that I did some serious work with, I think, was Python 1.3.
00:09:20.480 --> 00:09:21.860
I just looked it up before the interview.
00:09:21.860 --> 00:09:26.060
I think it must have been around 1995 when Python 1.3 was released.
00:09:26.060 --> 00:09:30.320
I think 1.4 became even better with a Mac support.
00:09:30.320 --> 00:09:35.740
Anyway, because this photographer application was written in C, CPython is written in C.
00:09:35.740 --> 00:09:45.400
And I infected Peter from Blockland with the Python virus and showed him that we could compile this stuff with C compiler for Macintosh.
00:09:45.400 --> 00:09:49.780
And we actually managed to compile those two worlds into one application.
00:09:49.780 --> 00:09:54.200
And so once that physically worked, which was pretty hard for us because we're not really programmers,
00:09:54.200 --> 00:10:02.040
once that physically worked, we could start making the connections, making the API indeed, making Photographer scriptable.
00:10:02.040 --> 00:10:08.980
So that turned became Robofog, which was, well, minorly successful within a niche market.
00:10:08.980 --> 00:10:13.780
We had some colleagues and friends in our business that really could use those features.
00:10:13.780 --> 00:10:20.240
We managed to build a little toolkit so you could build your own UI on top of that in pure Python.
00:10:20.240 --> 00:10:27.700
So people had a lot of fun with it and produced really useful tools for their production work, font production workflow.
00:10:27.700 --> 00:10:28.660
That's cool.
00:10:28.660 --> 00:10:31.360
So you actually took like the CPython interpreter.
00:10:31.360 --> 00:10:31.920
Yeah.
00:10:31.920 --> 00:10:34.680
And compiled it straight into their C app.
00:10:34.680 --> 00:10:35.040
Exactly.
00:10:35.040 --> 00:10:39.080
Oh, that's pretty good work for formally trained programmers, right?
00:10:39.080 --> 00:10:42.180
Yeah, we were pretty proud that we got that, that we pulled that off indeed.
00:10:42.180 --> 00:10:43.640
Yeah, that's really cool.
00:10:43.640 --> 00:10:44.240
That's really cool.
00:10:44.240 --> 00:10:48.560
So that worked really well for a while, but then it was showing its age, right?
00:10:48.560 --> 00:10:49.220
Exactly.
00:10:49.220 --> 00:10:54.160
Yeah, we started, the version of Photography we used was pretty much obsolete at the time we started using it.
00:10:54.220 --> 00:10:58.620
So obviously it suffered a bit rot, but also a lack of new features.
00:10:58.620 --> 00:11:02.580
This is a time when Unicode became more and more important.
00:11:02.580 --> 00:11:05.000
The international encoding standards.
00:11:05.000 --> 00:11:07.540
I should probably not have to introduce that for this audience.
00:11:08.000 --> 00:11:28.780
New type technology came about called OpenType, which came largely from Microsoft, but was a cooperation between Adobe and Microsoft, allowing all kinds of fancy typesetting stuff, but also non-Latin support for all kinds of languages that were not available for us simple font developers earlier.
00:11:28.780 --> 00:11:37.080
So larger character sets, Unicode features, OpenType stuff, that was just no longer, it was not possible in Robofog.
00:11:37.080 --> 00:11:39.860
And we were pretty much at the same problem.
00:11:39.860 --> 00:11:45.060
I mean, it would pretty much require a full rewrite of Photographer to support those things that we needed.
00:11:45.060 --> 00:11:48.020
And yeah, we were kind of not up to that.
00:11:48.020 --> 00:11:55.980
But then there was a program called FontLab from Yuri Yarmola, a very smart programmer from St. Petersburg in Russia.
00:11:55.980 --> 00:12:01.940
It came from the Windows world, but it was ported to macOS at some point, becoming more and more popular.
00:12:01.940 --> 00:12:07.220
And we met him at a conference in 97 in Moscow, and we showed him Robofog.
00:12:07.220 --> 00:12:16.640
And he was actually looking or shopping around for a scripting language because he realized that that's indeed something that is needed within this kind of workflow.
00:12:16.640 --> 00:12:19.180
Again, that's a little sidebar.
00:12:19.180 --> 00:12:25.240
I mean, it's a very specialized profession, but there are not many people who are doing it at that high level.
00:12:25.240 --> 00:12:26.600
So there's not a huge market.
00:12:26.600 --> 00:12:33.180
So like a company like Adobe, it's not interesting for them to develop a font editor at such a scale.
00:12:33.180 --> 00:12:33.620
Right.
00:12:33.620 --> 00:12:35.980
Maybe they'd make something like Illustrator.
00:12:35.980 --> 00:12:36.880
Exactly.
00:12:37.140 --> 00:12:39.260
But not really completely focused.
00:12:39.260 --> 00:12:43.600
So it sounds like you have these smaller companies written by one or two guys, right?
00:12:43.600 --> 00:12:44.220
Exactly.
00:12:44.220 --> 00:12:48.080
And type designers are very, well, it's a specialized thing, but they're also very stubborn people.
00:12:48.080 --> 00:12:54.600
But you ask 10 type designers a question, you will get 10 different, they will not agree with each other, simply, especially regarding tools.
00:12:54.840 --> 00:13:05.460
So to have this editor that you can enhance or can script or automate or write plugins for is just the thing because people can just make their own stuff, right?
00:13:05.460 --> 00:13:12.880
And Python is awesome for that because people with little or no programming experience can get into it relatively quickly.
00:13:12.880 --> 00:13:17.460
So that whole model proved for us pretty successful.
00:13:17.460 --> 00:13:25.680
So the Russian guy, Yuri Ramola, saw that and realized, yeah, Python is a cool language, easy to learn, and it's easy to integrate in C.
00:13:25.680 --> 00:13:30.160
And I think his application was written in C++, but still that integrates pretty well.
00:13:30.160 --> 00:13:32.460
So he chose Python as a scripting language for that.
00:13:32.460 --> 00:13:32.840
Yeah.
00:13:32.840 --> 00:13:36.440
And he had a working example from Robofog as well.
00:13:36.440 --> 00:13:38.820
So he's like, let's just do that again over here, right?
00:13:38.820 --> 00:13:39.620
Yeah, exactly.
00:13:39.620 --> 00:13:46.620
But it was a cool thing because suddenly, I mean, we could use our own thing less and less because it was missing the features that we desperately needed.
00:13:47.280 --> 00:13:48.180
In the late 90s.
00:13:48.180 --> 00:13:50.200
So he wrote an API for that.
00:13:50.200 --> 00:13:55.260
And actually, we weren't quite happy with the way he wrote that API because we were used to our way.
00:13:55.260 --> 00:13:59.300
So we actually wrote a whole library on top of his API.
00:13:59.300 --> 00:14:00.860
His API was a little low level.
00:14:00.860 --> 00:14:06.580
We wanted to have something more high level as far as scripting API is concerned.
00:14:06.580 --> 00:14:08.040
We called that Robofab.
00:14:08.040 --> 00:14:12.340
I forgot where that name came from, but it must have been something pretty meaningless.
00:14:12.340 --> 00:14:13.300
Yeah.
00:14:13.300 --> 00:14:16.040
So we worked with that for better or for worse.
00:14:16.200 --> 00:14:22.900
I mean, it was at that time the only tool on the market at all that supported all the features we needed.
00:14:22.900 --> 00:14:27.660
So they were a bit in a monopoly position at the time.
00:14:27.660 --> 00:14:28.000
Yeah.
00:14:28.000 --> 00:14:29.580
And that was another commercial product.
00:14:29.800 --> 00:14:30.020
Yeah.
00:14:30.020 --> 00:14:31.580
That's another commercial product.
00:14:31.580 --> 00:14:34.620
Roughly at the same time, I should have looked that up before the interview.
00:14:34.620 --> 00:14:38.020
I have written a library called Font Tools slash TTX.
00:14:38.020 --> 00:14:48.680
TTX is more like the tool side, the user end of the tool, which is a library that deals with several font formats, but mostly true type and open type.
00:14:48.920 --> 00:14:56.380
And can read binary data.
00:14:56.380 --> 00:14:57.600
And also that's the TTX part.
00:14:57.600 --> 00:15:04.720
It can convert a whole binary font to an improvised XML format.
00:15:04.720 --> 00:15:05.720
It can be able to do that.
00:15:05.720 --> 00:15:18.540
So that's the two things that that library does, which was great for reverse engineering things, for fixing up things that editors, font editors didn't generate correctly to learn about the formats.
00:15:19.040 --> 00:15:21.580
I open sourced that, so that was not a commercial thing.
00:15:21.580 --> 00:15:25.080
I put it on SourceForge, if anyone remembers that.
00:15:25.080 --> 00:15:25.880
I've heard of that thing.
00:15:25.880 --> 00:15:26.160
Yeah.
00:15:26.160 --> 00:15:30.020
It was like the MySpace of version control, right?
00:15:30.020 --> 00:15:30.920
Yeah, exactly.
00:15:30.920 --> 00:15:31.940
It was a cool time.
00:15:31.940 --> 00:15:33.140
And we had some contributors.
00:15:33.140 --> 00:15:35.340
Werner Lemberg got involved.
00:15:35.340 --> 00:15:39.240
I think he's now doing some work for Google for true type auto hinting stuff.
00:15:39.240 --> 00:15:41.940
Adam Twardock, who's actually on the FontLab team.
00:15:41.940 --> 00:15:45.840
At the time, there was a small community of people who used that stuff.
00:15:45.840 --> 00:15:58.000
And actually, even for the non-programmers, non-programming type or font developers, they could use that tool to decompile fonts, peek and poke to the insides, and then compile it back to a working font.
00:15:58.000 --> 00:16:01.220
So that was a pretty neat tool to have.
00:16:01.220 --> 00:16:02.900
And it's on GitHub now, is that right?
00:16:02.900 --> 00:16:03.540
Yeah, yeah, yeah.
00:16:03.540 --> 00:16:06.660
By now, it's maintained by Bedat.
00:16:06.660 --> 00:16:08.500
I can't pronounce his last name.
00:16:08.500 --> 00:16:09.600
He works for Google.
00:16:09.600 --> 00:16:13.920
So if you actually Google for font tools GitHub, you should end up at his repository.
00:16:14.780 --> 00:16:20.840
He kind of took over the maintenance together with a fresh young team of people.
00:16:20.840 --> 00:16:25.220
In my professional life, I had less and less direct use for it.
00:16:25.220 --> 00:16:29.440
And the kind of things that I needed, it did in a fairly stable way.
00:16:29.440 --> 00:16:32.960
So I kind of backed out of developing it.
00:16:32.960 --> 00:16:35.400
I was kind of the, well, what do you call it?
00:16:35.400 --> 00:16:37.620
The maintainer that disappeared.
00:16:37.620 --> 00:16:40.780
The spark that created the project that other people ran off.
00:16:40.780 --> 00:16:41.140
There you go.
00:16:41.140 --> 00:16:42.000
Right, yeah.
00:16:42.400 --> 00:16:49.920
So one thing I saw that you can do with that that's interesting and I wanted to ask you about is you said you can debug fonts.
00:16:49.920 --> 00:16:51.900
What does debugging fonts involve?
00:16:51.900 --> 00:16:52.580
What does that mean?
00:16:52.580 --> 00:16:58.280
Fonts is an interesting technology, fonts in general, because they are supposed to have a long lifetime.
00:16:58.960 --> 00:17:02.120
People do not tend to upgrade their fonts.
00:17:02.120 --> 00:17:05.240
And they're still there pieces of software if you look at it.
00:17:05.240 --> 00:17:10.200
I mean, to an extent it's data, but there's actually some aspects of various font formats.
00:17:10.200 --> 00:17:11.880
You can really call it software.
00:17:11.880 --> 00:17:12.540
It is software.
00:17:12.540 --> 00:17:19.140
So, yeah, different operating systems and different applications have different quirks with respect to handling fonts.
00:17:19.280 --> 00:17:22.800
Like a font may work in one application and fail in another.
00:17:22.800 --> 00:17:26.640
Well, if they're made properly, then they work everywhere, obviously.
00:17:26.640 --> 00:17:29.400
But that is not how the real world works.
00:17:29.520 --> 00:17:32.880
So there's this whole bunch of vaguely documented things.
00:17:32.880 --> 00:17:44.240
Like if you want your fonts to also work in Word from Windows 95, then you should make sure that that value in that specific table is set in this particular way.
00:17:44.240 --> 00:17:45.360
Otherwise, it will not work.
00:17:45.360 --> 00:17:47.800
It's a whole bunch of legacy.
00:17:48.560 --> 00:17:49.440
I was going to say crap.
00:17:49.440 --> 00:17:50.840
I don't know if I can say that on your show.
00:17:50.840 --> 00:17:52.680
But it's really fairly chaotic.
00:17:52.680 --> 00:17:57.900
For instance, the TrueType specification is very well maintained by Microsoft these days.
00:17:57.900 --> 00:18:01.060
TrueType is an invention from Apple, and they maintain their own documentation.
00:18:01.060 --> 00:18:04.500
But there's different versions also of the specification.
00:18:04.500 --> 00:18:05.680
That's interesting.
00:18:05.680 --> 00:18:13.100
It sounds a little bit like the issues you run into when you're doing like CSS and web design, but across different browsers, right?
00:18:13.100 --> 00:18:14.180
Yeah, probably.
00:18:14.180 --> 00:18:16.720
Yeah, I know of those issues, but I'm not a web developer.
00:18:16.720 --> 00:18:18.960
So I don't run into them on a day-to-day basis.
00:18:18.960 --> 00:18:27.560
But the cool thing is, I mean, there are fonts that were generated by font editors 25 years ago, and they still work in some contexts.
00:18:27.560 --> 00:18:28.760
Maybe not everywhere.
00:18:28.760 --> 00:18:36.260
But like PostScript Type 1 fonts, I mean, yeah, on macOS, you can still install those old fonts, and they will work.
00:18:36.260 --> 00:18:37.960
Well, it's limited, of course.
00:18:37.960 --> 00:18:39.320
They will have a small character set.
00:18:39.320 --> 00:18:43.460
People expect, especially graphic designers who actually buy fonts, right?
00:18:43.460 --> 00:18:45.620
So fonts are often a commercial product.
00:18:46.120 --> 00:18:50.820
They don't expect to have to upgrade their stuff every couple years like they are.
00:18:50.820 --> 00:18:52.880
Well, they are familiar with that with their applications.
00:18:52.880 --> 00:18:56.860
I mean, Adobe pretty much pushes their InDesign and Illustrator upgrades.
00:18:56.860 --> 00:19:02.300
And, well, everyone knows the annoying Acrobat upgrade messages.
00:19:02.300 --> 00:19:02.980
Oh, yeah.
00:19:03.080 --> 00:19:06.220
So that stuff just doesn't happen in the font world as much.
00:19:06.220 --> 00:19:08.120
I mean, if people need new characters.
00:19:08.120 --> 00:19:11.600
Like an interesting time was when the euro was introduced in Europe.
00:19:11.600 --> 00:19:18.260
Suddenly, well, the European Union had decided, well, hey, if U.S. dollars, they have a nice dollar sign.
00:19:18.260 --> 00:19:20.320
We have to have a sign for the euro.
00:19:20.620 --> 00:19:24.780
So they had this logo designed for the euro, which we now all roughly know.
00:19:24.780 --> 00:19:30.620
But initially, they thought it's really a logo that was formally specified with a compass and rulers and measurements.
00:19:31.360 --> 00:19:38.380
And that's what we were supposed to use, not realizing that there is a different dollar sign in every font out there.
00:19:38.380 --> 00:19:44.480
So the font designers soon ignored the specification and just designed their own euro sign.
00:19:44.480 --> 00:19:52.900
But, yeah, all commercials, all fonts out there had to be upgraded to contain the euro symbol, which was a huge amount of work, which cost the font industry a lot of money.
00:19:52.900 --> 00:19:55.620
But I think there was also some opportunities there.
00:19:55.620 --> 00:20:01.400
So those relatively ridiculous stories are fairly common in the font world.
00:20:01.400 --> 00:20:06.920
Yeah, that's, I guess I never really thought about it, that new symbols appear and you need them to show up.
00:20:06.920 --> 00:20:13.140
With every update of Unicode, we look a little bit like, okay, are we really going to support that?
00:20:13.140 --> 00:20:21.140
Then suddenly math people decided that there is a bold variation of lowercase letters that are semantically different from regular.
00:20:21.140 --> 00:20:24.440
So they need their own Unicode code points in Unicode.
00:20:24.440 --> 00:20:32.220
So suddenly there's a whole set of lowercase letters or maybe even capital, I don't know, that are just bold because math people want that.
00:20:32.220 --> 00:20:33.660
I don't know.
00:20:33.660 --> 00:20:36.760
I'm not convinced of the making sense part of that.
00:20:37.400 --> 00:20:38.980
Anyway, that's from my perspective, at least.
00:20:38.980 --> 00:20:39.380
Sure.
00:20:39.380 --> 00:20:39.920
Interesting.
00:20:50.920 --> 00:20:53.040
This episode is brought to you by Hired.
00:20:53.140 --> 00:20:58.640
Hired is a two-sided, curated marketplace that connects the world's knowledge workers to the best opportunities.
00:20:58.640 --> 00:21:06.120
Each offer you receive has salary and equity presented right up front, and you can view the offers to accept or reject them before you even talk to the company.
00:21:06.120 --> 00:21:11.860
Typically, candidates receive five or more offers within the first week, and there are no obligations ever.
00:21:11.860 --> 00:21:13.420
Sounds awesome, doesn't it?
00:21:13.620 --> 00:21:15.100
Well, did I mention the signing bonus?
00:21:15.100 --> 00:21:18.480
Everyone who accepts a job from Hired gets a $1,000 signing bonus.
00:21:18.480 --> 00:21:21.280
And as Talk Python listeners, it gets way sweeter.
00:21:21.280 --> 00:21:26.980
Use the link Hired.com slash Talk Python To Me, and Hired will double the signing bonus to $2,000.
00:21:26.980 --> 00:21:29.120
Opportunity's knocking.
00:21:29.120 --> 00:21:32.560
Visit Hired.com slash Talk Python To Me and answer the call.
00:21:38.340 --> 00:21:45.740
So another thing that is sort of related to the font tools is this thing called DrawBot, and that's more of a visual editor, right?
00:21:45.740 --> 00:21:47.040
Well, yeah.
00:21:47.040 --> 00:21:59.080
No, it's not directly related to the font part, but it's a little application for macOS that is pretty much a Python editor, and you run some code, and you can get some textual output, but also visual output.