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.

00:21:59.080 --> 00:22:18.120
So it's a bit like processing the famous Java-based application from the MIT people, from John Maeda, who was the professor at MIT who created this thing called Design by Numbers, which was pretty much an experimental thing to teach graphic designers some things about programming.

00:22:18.120 --> 00:22:21.540
And that was a very simple thing, maybe almost like Turtle Graphics.

00:22:21.540 --> 00:22:22.500
I forgot the details.

00:22:22.500 --> 00:22:23.840
He made a very nice book about it.

00:22:24.140 --> 00:22:31.460
Anyway, his students, Casey Reyes and other people, wrote processing, which became hugely successful.

00:22:31.460 --> 00:22:39.940
But I wrote this little thing called DrawBot, which is not really equivalent because it's very simple and primitive and much more 2D and vector-based.

00:22:39.940 --> 00:22:48.060
That allows people to write a small program and get a vector-based graphic output that you can save as a PDF or maybe also as pixel images.

00:22:48.060 --> 00:22:51.020
And I use that on my students in The Hague.

00:22:51.020 --> 00:22:56.540
Well, I teach at the Bachelor of Graphic Design Department, but I only recently started teaching coding there.

00:22:56.540 --> 00:23:03.040
We have a master program for type designers where people from all over the world come to The Hague and study type design for a year.

00:23:03.040 --> 00:23:08.360
So that's between 10 and 12 people who really intensively study type design.

00:23:08.600 --> 00:23:15.000
And the whole tool issue, we think tools are – digital tools are important to have control over.

00:23:15.000 --> 00:23:19.040
So we want them to at least learn the basics of programming.

00:23:19.040 --> 00:23:19.540
Right.

00:23:19.540 --> 00:23:24.260
They're definitely not going to become professional programmers, but they should be empowered, right?

00:23:24.260 --> 00:23:30.280
Some people, indeed, you know, some people are just not wired for programming and they will actually struggle to get something going.

00:23:30.280 --> 00:23:31.320
That's fine, too.

00:23:31.320 --> 00:23:33.200
And they still learn a thing or two.

00:23:33.540 --> 00:23:38.800
One student I should single out specifically, that is Frederik Berlan from Ghent in Belgium.

00:23:38.800 --> 00:23:44.720
Well, he had a decent math background, but really no programming background when he started studying with us.

00:23:44.720 --> 00:23:50.180
And he turned out to be super fast in picking up Python and making awesome stuff.

00:23:50.180 --> 00:23:57.500
And he went on to author a font editor called RoboFont, which was published like a couple years ago only.

00:23:57.500 --> 00:23:58.740
It's fairly successful.

00:23:58.740 --> 00:24:01.320
It's written in Python, obviously, and very extensible.

00:24:01.620 --> 00:24:01.940
That's cool.

00:24:01.940 --> 00:24:03.400
Yeah, I was going to ask you about RoboFont.

00:24:03.400 --> 00:24:04.680
I didn't realize the connection.

00:24:04.680 --> 00:24:05.240
That's cool.

00:24:05.240 --> 00:24:06.020
Yeah, but okay.

00:24:06.020 --> 00:24:12.640
But let's get back to Drawbots because it was a primitive tool that taught our students the basics of programming.

00:24:12.640 --> 00:24:19.780
But also there, I mean, I didn't really maintain it properly and it fell apart a little bit.

00:24:19.780 --> 00:24:35.580
And at some point, actually, Frederik picked it up and pretty much rewrote it almost from scratch, adding all sorts of new features, adding support that we can export animations and animated GIFs and a much nicer preview of the graphic output.

00:24:35.580 --> 00:24:37.580
So that's been a lot of fun.

00:24:37.580 --> 00:24:39.520
It's been a great – that's the generation three.

00:24:39.520 --> 00:24:41.700
It's completely open source now.

00:24:41.920 --> 00:24:46.280
It's – I think the main site – drawbot.com is the main website.

00:24:46.280 --> 00:24:48.960
There is – the source is on GitHub.

00:24:48.960 --> 00:24:51.460
Unfortunately, it's a Mac-only application at the moment.

00:24:51.460 --> 00:25:00.380
We're still hoping that someone will at least pick up the drawing API and make cross-platform or Linux and or Windows versions of that.

00:25:00.380 --> 00:25:03.600
So that's – because it's a simple drawing API.

00:25:03.600 --> 00:25:06.300
I'm not saying it's perfect, but it's small.

00:25:06.300 --> 00:25:10.980
And you can do cool things with it, with color and shapes and text even.

00:25:10.980 --> 00:25:15.660
Yeah, I've seen a lot of really cool pictures that people have generated within.

00:25:15.660 --> 00:25:17.220
They're pretty detailed.

00:25:17.220 --> 00:25:17.800
Yeah.

00:25:17.800 --> 00:25:19.660
Even fractal-looking things.

00:25:19.660 --> 00:25:20.140
Right.

00:25:20.140 --> 00:25:20.960
Yeah, yeah, yeah.

00:25:20.960 --> 00:25:24.420
Well, you can write your loops in Python or even recursive things.

00:25:24.420 --> 00:25:26.700
People tend to pick that up relatively quickly.

00:25:26.920 --> 00:25:33.160
So it's been a really nice little tool for our type design students to get started with Python.

00:25:33.160 --> 00:25:37.980
And then they move over to do the serious scripting work for font editors.

00:25:37.980 --> 00:25:39.780
Well, that used to be FontLab.

00:25:39.780 --> 00:25:41.540
Now, obviously, RoboFont.

00:25:41.540 --> 00:25:47.560
But also, there's yet another commercial font editor called Glyphs from Georg Seifert, a guy in Berlin.

00:25:47.560 --> 00:25:48.560
He's a very smart programmer.

00:25:48.560 --> 00:25:53.560
So now there are actually three commercial font editors out there that all support Python.

00:25:53.560 --> 00:25:56.740
I mean, only one, only RoboFont, is written in Python.

00:25:57.620 --> 00:25:59.900
And there's actually, there is an open source one.

00:25:59.900 --> 00:26:05.500
I don't know how alive that is called FontForge that also has some Python support.

00:26:05.500 --> 00:26:12.300
So yeah, somehow, Python is all over the place in font development land, if I can call it that.

00:26:12.300 --> 00:26:13.020
Yeah, yeah.

00:26:13.020 --> 00:26:14.220
That's really interesting.

00:26:14.220 --> 00:26:22.080
And so it makes perfect sense you would teach the students Python so that they can basically script these editors they have to work with, right?

00:26:22.220 --> 00:26:22.840
Yeah, exactly.

00:26:22.840 --> 00:26:23.200
Yeah.

00:26:23.440 --> 00:26:27.820
And, you know, yeah, maybe one little bit of background, like why do these guys need that?

00:26:27.820 --> 00:26:33.960
Well, imagine developing a font family that has several weights or many weights, has to support many languages.

00:26:33.960 --> 00:26:35.420
So there are many characters in there.

00:26:35.420 --> 00:26:38.940
Well, then imagine all the European accented letters.

00:26:38.940 --> 00:26:41.880
There's a whole bunch of, it's just one example.

00:26:42.000 --> 00:26:50.500
Like there's a whole bunch of letters that are derived from normal Latin letters, but have an accent placed on them or several accents placed under them or on top of them or underneath them.

00:26:50.500 --> 00:26:53.220
Well, there are all kinds of tools to work with that.

00:26:53.300 --> 00:27:00.300
But this is just one example of things that are pretty tedious to make by hand in a font editor.

00:27:00.300 --> 00:27:08.500
So you want to have to write maybe some rules of how to build those characters that you're not going to draw them one by one by hand.

00:27:08.500 --> 00:27:10.340
That's just going to take too long.

00:27:10.340 --> 00:27:14.080
And things have to be consistent within a font.

00:27:14.080 --> 00:27:19.700
So you can write tools that check certain things, metrics, whether certain things align or whatever.

00:27:19.700 --> 00:27:32.040
There's all kinds of things that you want to control or check or build in ways that can vary greatly from designer to designer to or could change from design to design.

00:27:32.040 --> 00:27:37.880
So the approaches and philosophies or design principles that people apply can be different.

00:27:37.880 --> 00:27:43.480
So to have this programmable environment is a real boon for many, many of our colleagues.

00:27:43.900 --> 00:27:44.580
That makes a lot of sense.

00:27:44.580 --> 00:27:50.180
Do you have problems where, like, you've got, say, an O with an umlaut and a regular O?

00:27:50.180 --> 00:27:57.280
And if you change the O, you want to obviously change all the sort of O derivative ones and you want to script that.

00:27:57.280 --> 00:27:59.060
So maybe as you're developing fonts.

00:27:59.060 --> 00:28:04.880
Yeah, well, that particular problem has actually been solved for a long time in a non-programming way,

00:28:04.880 --> 00:28:13.880
because indeed, that's a good question, but it's such a common problem that, in fact, in most editors, you can build a glyph referencing other glyphs.

00:28:13.880 --> 00:28:14.800
Right, okay.

00:28:14.940 --> 00:28:19.760
Yeah, so those things will stay pretty much consistent if you're not completely careless.

00:28:19.760 --> 00:28:24.040
But indeed, but that is the kind of things, indeed, that you can do with these tools.

00:28:24.040 --> 00:28:29.180
One of the things I ran across looking through this space was these things called UFOs.

00:28:29.180 --> 00:28:29.460
Right.

00:28:30.100 --> 00:28:33.500
Not the ones with aliens in them, but unified font objects, right?

00:28:33.500 --> 00:28:34.080
Exactly.

00:28:34.080 --> 00:28:35.840
Yeah, that's an interesting thing.

00:28:35.840 --> 00:28:37.420
This is a file format.

00:28:37.420 --> 00:28:39.080
Yeah, unified font object.

00:28:39.080 --> 00:28:42.660
It's also more or less an API if you want to deal with those files.

00:28:42.660 --> 00:28:49.980
It's pretty much it's actually me and my colleague Eric from Blockland started a precursor of this thing,

00:28:49.980 --> 00:28:54.440
because we lived in different cities and we were working on a font project together.

00:28:54.440 --> 00:28:58.360
And we needed a way to share the glyph data.

00:28:58.360 --> 00:29:01.560
And we were actually using CVS.

00:29:01.560 --> 00:29:03.420
This is like early 2000s.

00:29:03.420 --> 00:29:04.660
I remember CVS.

00:29:04.660 --> 00:29:05.500
Remember that?

00:29:05.500 --> 00:29:07.320
That is like before Subversion.

00:29:07.320 --> 00:29:07.700
Yes.

00:29:07.780 --> 00:29:08.600
It was pretty awesome.

00:29:08.600 --> 00:29:11.820
It was a super old and clumsy version control system.

00:29:11.820 --> 00:29:16.600
But we decided we needed a version control system for our glyph.

00:29:16.600 --> 00:29:20.820
So we defined a text format for glyph outline data.

00:29:20.820 --> 00:29:27.820
And, well, we put it in XML format at a single file under version control for each glyph.

00:29:27.820 --> 00:29:31.920
And that way we could cooperate on one font remotely.

00:29:32.200 --> 00:29:39.740
So this tool, which was made by and for programmers for code, we started to use for outline data, which was pretty nice.

00:29:39.740 --> 00:29:44.240
But that idea kind of caught on and or people thought, hey, we could use that as well.

00:29:44.240 --> 00:29:52.480
And we teamed up with a guy called Tel Lemming in the U.S., who was at the time working for a small font company called House Industries.

00:29:52.980 --> 00:30:02.860
And the three of us went on and developed this a little more seriously with a place for meta info and all kinds of metrics data.

00:30:02.860 --> 00:30:09.560
And we improved the glyph formats that would be more generally useful because it started as this ad hoc homemade.

00:30:09.560 --> 00:30:11.880
You know how all these things probably start.

00:30:11.880 --> 00:30:18.980
And still, yeah, we're amateur programmers and definitely not experienced in the specification of file formats.

00:30:18.980 --> 00:30:22.660
We pretty much winged it with some XML knowledge.

00:30:22.660 --> 00:30:26.380
And in the end, it's a UFO file.

00:30:26.380 --> 00:30:27.160
It's not really a file.

00:30:27.160 --> 00:30:30.500
It's a folder or a directory containing a bunch of files.

00:30:30.500 --> 00:30:35.740
And you need this so that you can put it in version control and diff it and not have it always come to it, right?

00:30:35.740 --> 00:30:36.160
Yeah.

00:30:36.160 --> 00:30:37.580
That was the starting point.

00:30:37.580 --> 00:30:44.100
Actually, so we made an import-export tool for FontLab, the dominant font editor at the time.

00:30:44.100 --> 00:30:54.680
And then it kind of became an exchange format because people started writing other tools that were not necessarily complete font editors.

00:30:54.680 --> 00:31:03.440
For instance, Tal Lemming, the guy I just mentioned, one of the co-authors of the UFO specification, he wrote a very cool tool to edit metrics.

00:31:03.440 --> 00:31:10.940
Well, within font editing, you can say editing spacing and kerning metrics is another specialization.

00:31:10.940 --> 00:31:13.340
And it's a tedious kind of work.

00:31:13.340 --> 00:31:18.300
So to have a good tool for that that makes things easier was really much needed.

00:31:18.300 --> 00:31:19.100
And he wrote that.

00:31:19.100 --> 00:31:20.120
It's called Metrics Machine.

00:31:20.120 --> 00:31:20.800
It's still around.

00:31:21.600 --> 00:31:34.240
So we needed a way to transfer data from FontLab, which used its own proprietary binary GU unspecified unpublished format, to Metrics Machine and other tools.

00:31:34.240 --> 00:31:38.060
So the UFO format was just the thing for that.

00:31:38.060 --> 00:31:47.380
So to just go back and forth between those applications because we needed FontLab to edit outlines and, well, we needed Metrics Machine to do the proper metrics editing.

00:31:47.980 --> 00:31:53.440
So it became this exchange format and caught on a little further.

00:31:53.440 --> 00:32:00.360
Tal Lemming pretty much took over the specification and wrote a really nice formal specification for that.

00:32:00.360 --> 00:32:02.500
He learned how to do all that.

00:32:02.500 --> 00:32:06.320
Spent many, many, many hours getting that done.

00:32:06.320 --> 00:32:07.300
Getting it just right.

00:32:07.300 --> 00:32:09.020
Yeah, I'm sure.

00:32:09.020 --> 00:32:09.780
Yeah, yeah.

00:32:09.780 --> 00:32:12.400
The world of specification writing is also wonderful.

00:32:12.400 --> 00:32:20.540
Well, he and Eric from Blockland were also involved in the development of the WOFF format, the W-O-F-F, web fonts format.

00:32:20.540 --> 00:32:29.500
So they got into the W3C world of writing specifications, which, well, I wasn't involved with that.

00:32:29.500 --> 00:32:30.820
I've seen it from the sideline.

00:32:30.820 --> 00:32:33.060
And it's, well, a lot of work.

00:32:33.060 --> 00:32:33.940
It's very tedious.

00:32:33.940 --> 00:32:36.400
It's very important work.

00:32:36.560 --> 00:32:38.320
I don't want to underestimate that.

00:32:38.320 --> 00:32:44.180
But it's not easy for us simple graphic designers, if I can put it that way.

00:32:44.180 --> 00:32:45.500
Yeah, I'm sure.

00:32:45.500 --> 00:32:50.040
When it gets down to that, you've got to, you know, exactly the right detail and so on.

00:32:50.040 --> 00:32:50.740
Yeah, everything.

00:32:50.740 --> 00:32:54.020
Yeah, the terminology, like, this must be like that.

00:32:54.020 --> 00:32:58.360
That should be like that with the right to use of capital letters in your language.

00:32:58.820 --> 00:33:02.200
It's, you almost have to become a lawyer for that stuff.

00:33:02.200 --> 00:33:03.040
It's very interesting.

00:33:03.040 --> 00:33:04.540
Yeah, it sounds a little bit like that.

00:33:19.660 --> 00:33:24.980
Gone are the days of tweaking your server, merging your code, and just hoping it works in your production environment.

00:33:24.980 --> 00:33:34.900
With SnapCI's cloud-based, hosted, continuous delivery tool, you simply do a get push, and they auto-detect and run all the necessary tests through their multi-stage pipelines.

00:33:34.900 --> 00:33:38.400
Something fails, you can even debug it directly in the browser.

00:33:38.400 --> 00:33:46.360
With a one-click deployment that you can do from your desk or from 30,000 feet in the air, Snap offers flexibility and ease of mind.

00:33:46.360 --> 00:33:48.200
Imagine all the time you'll save.

00:33:48.880 --> 00:33:55.000
Thanks, SnapCI, for sponsoring this episode by trying them for free at snap.ci slash talkpython.

00:33:55.000 --> 00:34:14.140
So, can you talk about what it's like to, like, create fonts for these embeddable web, like the WAF font type things, versus, say, print, versus computer screen?

00:34:14.140 --> 00:34:16.800
Is this all the same, or how do you think about that?

00:34:16.800 --> 00:34:20.220
I'm not that active in creating web fonts and stuff.

00:34:20.220 --> 00:34:22.040
I know roughly how this stuff works.

00:34:22.040 --> 00:34:24.040
There are different philosophies.

00:34:24.040 --> 00:34:28.800
I mean, on the one hand, technology is always important for type design.

00:34:28.800 --> 00:34:40.860
And, like, even historically, this is a very interesting story that starts pretty much at Gutenberg, like how this whole invention of print and how that goes through analog typesetting systems through digital.

00:34:41.220 --> 00:34:44.460
Anyway, ending up now at fonts for applications and websites.

00:34:44.460 --> 00:34:51.520
Yeah, somehow, to get the best results, you have to have some grasp of the technology, right?

00:34:51.520 --> 00:35:01.820
So, as a type designer, you better know to a fairly deep level how things work, how rasterizers work, what kind of rasterizers are there.

00:35:02.040 --> 00:35:07.220
Well, it may become less and less relevant with screens getting better and higher resolutions.

00:35:07.220 --> 00:35:14.060
I mean, I'm looking at a retina screen here that I cannot literally, with my old eyes, distinguish the individual pixels anymore.

00:35:14.060 --> 00:35:14.380
Yeah.

00:35:14.460 --> 00:35:18.260
So, in some sense, maybe font design is getting a little bit easier than it used to be.

00:35:18.260 --> 00:35:19.080
Oh, yeah.

00:35:19.080 --> 00:35:20.880
Or is that a controversial question?

00:35:20.880 --> 00:35:21.860
No, no, no, no, no, no.

00:35:21.860 --> 00:35:23.540
Well, tools are getting more accessible.

00:35:23.540 --> 00:35:30.440
But that's with all, like, you can give an amateur a high-end digital camera and they can make technical great, great photos.

00:35:30.440 --> 00:35:36.880
And there will be some talents who have a flair for that or natural talent for that and become great photographers.

00:35:37.880 --> 00:35:39.500
That's the same pretty much.

00:35:39.500 --> 00:35:41.880
I think that's a fair parallel to my profession.

00:35:41.880 --> 00:35:51.940
But most of the time, people will work hard and have an education and learn about the basics, not only technical, but on a visual level, on a design level.

00:35:51.940 --> 00:35:56.940
Like what makes a font work well, especially in text sizes, for instance.

00:35:56.940 --> 00:36:07.500
That is just not a simple thing that even if an amateur can relatively easily learn the tools, that will not allow that person to create a high-quality font easily.

00:36:07.500 --> 00:36:09.360
That's kind of an interesting thing.

00:36:09.360 --> 00:36:19.320
Yeah, there's a lot of non-obvious things that make it really different on reading something or how it's even – how easy is it for you to absorb, right?

00:36:19.320 --> 00:36:19.860
Yeah.

00:36:19.860 --> 00:36:24.280
One of the favorite aspects of type design is the paradox.

00:36:24.280 --> 00:36:30.580
You're designing a group of shapes that are letters that are designed to be used in context and in different orders.

00:36:30.580 --> 00:36:34.280
So the set of shapes, they belong together, right?

00:36:34.280 --> 00:36:35.080
They have to work together.

00:36:35.160 --> 00:36:38.100
They have to form words and sentences and people need to read that.

00:36:38.100 --> 00:36:45.300
So on that level, they have to be very similar and equal and nicely balanced to make it work as a group of shapes.

00:36:45.300 --> 00:36:53.960
On the other hand, if you make everything as the same as possible, things become illegible because the letters need to be – you need to be able to distinguish the letters, right?

00:36:53.960 --> 00:36:59.000
So on another level, you have to make the letters as different from each other as possible.

00:36:59.480 --> 00:37:03.720
So that's kind of like this whole paradox that we try to balance in between.

00:37:03.720 --> 00:37:08.960
And it kind of totally depends on the application of your typeface.

00:37:08.960 --> 00:37:25.280
I mean, if you're designing a wild headline thing for the hippest magazine or flyers or whatever, then obviously you'll have a very different set of rules to work with than if you're designing a typeface for a newspaper that needs to use the paper as efficiently as possible.

00:37:25.280 --> 00:37:28.460
So to cram as much text on there without becoming illegible.

00:37:28.460 --> 00:37:29.500
Yeah, that's really interesting.

00:37:29.500 --> 00:37:41.420
I've always appreciated fonts and being able to look at the screen and see – you can look at some and they're beautiful and others you'd rather not have when you're writing your paper or whatever when I was younger.

00:37:41.420 --> 00:37:43.920
But then I watched the movie Helvetica.

00:37:43.920 --> 00:37:44.580
Have you seen that?

00:37:44.580 --> 00:37:44.900
Right.

00:37:44.900 --> 00:37:45.740
Yeah, yeah, yeah.

00:37:45.740 --> 00:37:46.760
That's an awesome movie.

00:37:46.880 --> 00:37:47.540
Oh my gosh.

00:37:47.540 --> 00:37:55.120
I have ten times as much respect for fonts and the history and the thought and the detail that goes into it.

00:37:55.120 --> 00:37:56.320
Do you like that show?

00:37:56.320 --> 00:37:57.720
It was a fantastic movie.

00:37:57.720 --> 00:38:00.200
And it actually has – I saw a lecture of the director of that.

00:38:00.200 --> 00:38:09.060
I mean, it was very obviously popular within my field because, you know, it was the first big full-length documentary that really shows something – well, I don't know if it's really the first.

00:38:09.060 --> 00:38:21.300
But it was an important documentary for our field and I'm glad that it got out there outside of our field as well, that people saw it and learned something about that and make people realize what it is.

00:38:21.300 --> 00:38:27.080
I remember a long time ago on a party, I think I was still studying, but I was already deeply into type design.

00:38:27.080 --> 00:38:29.220
Someone asked, type design?

00:38:29.220 --> 00:38:32.260
Isn't that something like macaroni design?

00:38:33.040 --> 00:38:42.560
So it's like, well, not quite, but that's indeed – yeah, but that was probably at a time where people in Word now, they know you have your font menu.

00:38:42.560 --> 00:38:45.180
Everyone knows there's a font menu and there's stuff in there.

00:38:45.180 --> 00:38:48.860
But not everyone realizes that that comes from people who make those things, right?

00:38:48.860 --> 00:38:54.860
Yeah, and I didn't really appreciate the depth of thought that goes into these things.

00:38:55.640 --> 00:39:04.140
And so now when I'm looking at something and I really think about the fonts and how much must be behind it and I'm just enjoying working in it or reading it or whatever.

00:39:04.140 --> 00:39:07.000
So if people are out there listening, definitely check out Helvetica.

00:39:07.000 --> 00:39:08.100
It's an awesome movie.

00:39:08.100 --> 00:39:08.960
Yeah, it's really good.

00:39:08.960 --> 00:39:11.260
I think it might be on Netflix, but it's definitely online.

00:39:11.260 --> 00:39:12.580
You can stream it from somewhere.

00:39:12.580 --> 00:39:13.140
Absolutely.

00:39:13.140 --> 00:39:13.820
All right.

00:39:13.820 --> 00:39:15.980
We're sort of coming up to the end of the show.

00:39:15.980 --> 00:39:20.000
There's a couple of questions I ask everybody on the way out the door.

00:39:20.000 --> 00:39:25.560
So let me ask you, if you're going to sit down and write some Python code, what editor do you open up?

00:39:25.560 --> 00:39:30.000
Well, I'm on a Mac and actually I'm a little out of date.

00:39:30.000 --> 00:39:34.160
I'm still using TextMate, which is an awesome text editor, I think.

00:39:34.160 --> 00:39:38.000
But most of my colleagues have switched to Sublime, which is apparently awesome.

00:39:38.000 --> 00:39:44.420
But within my frame of reference, VI and Vim and Emacs don't really exist.

00:39:44.420 --> 00:39:48.980
Yeah, those are definitely popular programmer choices for the main devs.

00:39:49.200 --> 00:39:50.160
TextMate, that's cool.

00:39:50.160 --> 00:39:54.120
Are you going to ask about tabs versus spaces or is that probably a done deal?

00:39:54.120 --> 00:39:55.640
Yeah, it's a done deal.

00:39:55.640 --> 00:39:57.920
Oh, no, I won't ask about tabs and spaces.

00:39:57.920 --> 00:40:06.120
My other question, though, I will ask you is, if you go out to the Python package index, there are thousands, 60, 70,000, whatever.

00:40:06.120 --> 00:40:10.380
I haven't looked at the top numbers right now, but many, many packages that are amazing.

00:40:10.380 --> 00:40:12.600
Are there any that you can think of?

00:40:12.600 --> 00:40:16.460
You're like, I just found this and I really love it and I should tell the world about it.

00:40:16.820 --> 00:40:20.000
Well, you know, I'm not a heavy user of external packages.

00:40:20.000 --> 00:40:26.780
But, I mean, I've been a longtime user of NumPy, which I have probably used like half a percent of its functionality.

00:40:26.780 --> 00:40:28.960
I don't have a background in math.

00:40:29.060 --> 00:40:34.740
But like many of the features, the vector multidimensional array stuff is just super awesome.

00:40:34.740 --> 00:40:43.160
But I've recently, only for the first time I've heard of it for a long time, I've actually used some code from the SciPy module or package.

00:40:43.160 --> 00:40:50.680
Because it has some really neat, like triangulation algorithms and the Voronoi tiling algorithms.

00:40:50.680 --> 00:40:54.480
It's just in there that I actually use to create some funny graphic animations.

00:40:54.480 --> 00:40:54.960
Oh, yeah.

00:40:54.960 --> 00:40:55.420
How nice.

00:40:55.420 --> 00:40:57.220
I know it's a huge package.

00:40:57.220 --> 00:41:03.340
And again, from that, I probably use like, well, even less than what I use from NumPy.

00:41:03.700 --> 00:41:08.440
But I've been recently having a lot of fun with this tiny part of the SciPy package.

00:41:08.440 --> 00:41:09.380
Yeah, that's really cool.

00:41:09.380 --> 00:41:12.880
I suspect that most people that use those packages don't use all of it.

00:41:12.880 --> 00:41:18.220
Or I can imagine, even as a scientist, you probably have your slice that really applies to your problem, right?

00:41:18.220 --> 00:41:19.160
Probably, yeah.

00:41:19.160 --> 00:41:26.800
And then there's this whole plotting stuff that's in there that I'm not even sure if that works well within the environments that I use.

00:41:26.800 --> 00:41:30.060
I use a lot of Mac-specific UI stuff.

00:41:30.060 --> 00:41:36.960
So, like, TK Inter, for instance, somehow not an option in my – I mean, technically it works on Mac.

00:41:36.960 --> 00:41:39.900
It's not a lovely UI experience, no.

00:41:39.900 --> 00:41:40.760
No, yeah.

00:41:40.760 --> 00:41:44.740
Somehow, you know, within my field still, I have mixed feelings about that.

00:41:44.740 --> 00:41:48.120
I don't want to be seen as an Apple fanboy at all.

00:41:48.580 --> 00:41:52.840
But within my field, the Macs are so dominantly around.

00:41:52.840 --> 00:41:54.820
So, your tools have to support it, right?

00:41:54.820 --> 00:41:59.620
For the tools that we write, to not have Windows or Linux support is totally fine.

00:41:59.620 --> 00:42:01.440
Yeah, so I'm recording on a Mac as well.

00:42:01.440 --> 00:42:04.640
So, they're nice pieces of software.

00:42:04.640 --> 00:42:05.680
They definitely are.

00:42:05.680 --> 00:42:09.600
But actually, the Fontools library that I've been working on, that is completely welcome.

00:42:09.600 --> 00:42:11.400
It's mostly cross-platform.

00:42:11.400 --> 00:42:16.980
I mean, it's – so I'm very open to – I've been a Linux user to some extent.

00:42:18.000 --> 00:42:21.300
I'm very in favor of cross-platform code as much as possible.

00:42:21.300 --> 00:42:26.460
But for user interface, for GUI stuff, it's just difficult to get the right look and feel.

00:42:26.460 --> 00:42:28.000
Yeah, that's actually a big challenge.

00:42:28.000 --> 00:42:34.560
And people that listen to the show, they've written me recently and said, can we have, like, a conversation on how to do this well?

00:42:34.560 --> 00:42:38.640
Because it really is hard to do it, both cross-platform and nicely, I think.

00:42:38.640 --> 00:42:39.240
Exactly.

00:42:39.240 --> 00:42:40.300
I have no answer to that.

00:42:40.300 --> 00:42:41.760
I've seen nice results from Qt.

00:42:42.940 --> 00:42:46.860
I hear things about GTK, but I know nothing about it.

00:42:46.860 --> 00:42:47.980
So, anyway.

00:42:47.980 --> 00:42:51.060
Yeah, it sounds like Qt is a good bet from what I hear as well.

00:42:51.060 --> 00:42:53.260
This has been fantastic.

00:42:53.260 --> 00:42:58.160
I now know a lot more about how Python and fonts go together, and it's fascinating.

00:42:58.160 --> 00:42:58.600
Thank you.

00:42:58.600 --> 00:42:59.520
Thank you very much.

00:42:59.520 --> 00:43:00.620
Pleasure to talk to you.

00:43:00.620 --> 00:43:01.480
Yeah, you as well.

00:43:01.480 --> 00:43:01.920
See you later.

00:43:01.920 --> 00:43:02.380
Bye.

00:43:03.180 --> 00:43:05.780
This has been another episode of Talk Python To Me.

00:43:05.780 --> 00:43:10.760
Today's guest has been Jus Tfendrassen, and this episode has been sponsored by Hired and SnapCI.

00:43:10.760 --> 00:43:12.660
Thank you guys for supporting the show.

00:43:12.660 --> 00:43:15.480
Hired wants to help you find your next big thing.

00:43:15.480 --> 00:43:21.280
Visit Hired.com slash Talk Python To Me to get five or more offers with salary and equity presented right up front,

00:43:21.280 --> 00:43:23.440
and a special listener signing bonus of $2,000.

00:43:23.440 --> 00:43:27.740
SnapCI is modern, continuous integration, and delivery.

00:43:27.740 --> 00:43:31.400
Build, test, and deploy your code directly from GitHub, all in your browser,

00:43:31.660 --> 00:43:33.740
with debugging, Docker, and parallelism included.

00:43:33.740 --> 00:43:36.720
Try them for free at snap.ci slash Talk Python.

00:43:36.720 --> 00:43:39.020
Do check out the video course I'm building.

00:43:39.020 --> 00:43:44.900
The Kickstarter is open until March 18th, and you'll find all the details at talkpython.fm/course.

00:43:44.900 --> 00:43:50.920
You can find the links from today's show at talkpython.fm/episodes slash show slash 47.

00:43:50.920 --> 00:43:53.160
Be sure to subscribe to the show.

00:43:53.160 --> 00:43:55.440
Open your favorite podcatcher and search for Python.

00:43:55.440 --> 00:43:56.500
We should be right at the top.

00:43:56.500 --> 00:44:00.680
You can also find the iTunes and direct RSS feeds in the footer of the website.

00:44:00.680 --> 00:44:05.980
Our theme music is Developers, Developers, Developers by Corey Smith, who goes by Smix.

00:44:05.980 --> 00:44:08.260
And if you like his song, check it out.

00:44:08.260 --> 00:44:10.540
You can hear the whole thing on talkpython.fm.

00:44:10.540 --> 00:44:12.660
This is your host, Michael Kennedy.

00:44:12.660 --> 00:44:14.240
Thank you so much for listening.

00:44:14.240 --> 00:44:16.360
Smix takes us out of here.

00:44:17.140 --> 00:44:18.640
I'm stating with my voice.

00:44:18.640 --> 00:44:20.460
There's no norm that I can fill it in.

00:44:20.460 --> 00:44:21.680
Haven't been sleeping.

00:44:21.680 --> 00:44:23.280
I've been using lots of rest.

00:44:23.280 --> 00:44:26.200
I'll pass the mic back to who rocked his best.

00:44:26.200 --> 00:44:38.440
I'll pass the mic back to who rocked his best.

00:44:38.440 --> 00:45:08.420
Thank you.

