WEBVTT

NOTE
This file was generated by switchtitle

1
00:00:14.000 --> 00:00:15.583
This is Self-Directed Research.

2
00:00:16.000 --> 00:00:17.041
James and Amos are back with

3
00:00:17.041 --> 00:00:18.291
hyper-focused deep dives.

4
00:00:18.875 --> 00:00:19.666
James is up this week

5
00:00:19.666 --> 00:00:21.333
with "Typst is pretty neat."

6
00:00:22.166 --> 00:00:23.500
Make sure to like, follow, and subscribe

7
00:00:23.500 --> 00:00:24.500
wherever you find us.

8
00:00:24.750 --> 00:00:25.666
And as always, visit

9
00:00:25.666 --> 00:00:28.750
sdr-podcast.com/episodes for all the

10
00:00:28.750 --> 00:00:29.833
presentations, videos,

11
00:00:30.250 --> 00:00:31.208
show notes, and transcripts.

12
00:00:32.000 --> 00:00:33.583
Stay tuned to the end to hear more about

13
00:00:33.583 --> 00:00:35.208
Depot, the sponsor of this episode.

14
00:00:42.666 --> 00:00:42.916
<v Amos Wenger>Cool.

15
00:00:43.625 --> 00:00:45.208
Trying a slightly different mic position.

16
00:00:45.458 --> 00:00:46.583
Hopefully, that's not an issue.

17
00:00:47.166 --> 00:00:48.000
<v James Munns>I need something to go

18
00:00:48.000 --> 00:00:49.416
with my ask for the audience.

19
00:00:49.416 --> 00:00:51.333
I just need to have a big red band over

20
00:00:51.333 --> 00:00:52.375
here that's just like,

21
00:00:52.375 --> 00:00:53.208
"Don't look over here.

22
00:00:53.541 --> 00:00:54.541
Just don't."

23
00:00:54.875 --> 00:00:55.125
Right.

24
00:00:55.166 --> 00:00:57.458
No head turn further than

25
00:00:57.458 --> 00:00:58.708
like, "Face the camera."

26
00:00:59.625 --> 00:01:03.333
<v Amos Wenger>There's a scene in Orange Mécanique.

27
00:01:03.666 --> 00:01:05.291
I forget the name of the English thing.

28
00:01:05.416 --> 00:01:06.166
<v Amanda Majorowicz>A Clockwork Orange?

29
00:01:06.250 --> 00:01:07.375
<v Amos Wenger>A Clockwork Orange.

30
00:01:08.500 --> 00:01:10.291
Where he's like like this and

31
00:01:10.291 --> 00:01:11.333
they make him look at things.

32
00:01:11.333 --> 00:01:12.583
I don't know what they're making him look

33
00:01:12.583 --> 00:01:14.000
at, I forget, but you should put whatever

34
00:01:14.000 --> 00:01:15.250
that is where you

35
00:01:15.250 --> 00:01:16.208
shouldn't look, whatever.

36
00:01:17.458 --> 00:01:19.625
Well, if you had the big, the big, the big...

37
00:01:19.750 --> 00:01:20.708
<v James Munns>I'll put a jump-scare over here

38
00:01:20.875 --> 00:01:21.833
<v Amos Wenger>You should put those

39
00:01:21.833 --> 00:01:23.458
on and crank up the gain.

40
00:01:23.500 --> 00:01:25.458
Because then if you plosive, you will

41
00:01:25.458 --> 00:01:26.083
hear it immediately.

42
00:01:26.458 --> 00:01:27.125
It will punish you.

43
00:01:27.125 --> 00:01:27.333
That's fair.

44
00:01:27.916 --> 00:01:28.333
<v James Munns>That's fair.

45
00:01:28.333 --> 00:01:30.416
I have no immediate feedback because it's

46
00:01:30.416 --> 00:01:31.166
distracting and it

47
00:01:31.166 --> 00:01:32.916
breaks my train of thought.

48
00:01:33.291 --> 00:01:33.583
<v Amos Wenger>Really?

49
00:01:33.958 --> 00:01:35.875
Well, with any delay, yes.

50
00:01:36.375 --> 00:01:37.708
But with direct monitoring through the

51
00:01:37.708 --> 00:01:39.375
USB interface, I'm well...

52
00:01:40.083 --> 00:01:41.250
<v James Munns>It's probably just a habit.

53
00:01:41.250 --> 00:01:42.041
Like because I never

54
00:01:42.041 --> 00:01:43.375
have it, I'm not used to it.

55
00:01:43.375 --> 00:01:44.458
I'm sure if I did it for a

56
00:01:44.458 --> 00:01:45.458
week, it would make sense.

57
00:01:45.458 --> 00:01:46.416
Or if I recorded as many

58
00:01:46.416 --> 00:01:48.583
videos as you have, I would.

59
00:01:48.583 --> 00:01:50.541
<v Amos Wenger>Well, I don't have feedback when I record

60
00:01:50.541 --> 00:01:51.833
videos because I'm just

61
00:01:51.833 --> 00:01:53.541
standing below a boom mic.

62
00:01:53.875 --> 00:01:54.708
But yeah,

63
00:01:55.125 --> 00:01:56.500
<v James Munns>I think I just need a boom mic is

64
00:01:56.500 --> 00:01:57.333
probably what I need.

65
00:01:57.625 --> 00:01:59.208
<v Amos Wenger>No! Not for this.

66
00:01:59.708 --> 00:02:01.000
<v James Munns>I have a big fuzzy shotgun.

67
00:02:01.333 --> 00:02:02.166
Just mount it to...

68
00:02:02.916 --> 00:02:03.125
<v JAmos Wenger>No.

69
00:02:03.583 --> 00:02:04.166
<v Amos Wenger>Oh, yes.

70
00:02:04.416 --> 00:02:04.958
OK, yes.

71
00:02:05.250 --> 00:02:06.500
But only if you treat your

72
00:02:06.500 --> 00:02:08.333
entire room acoustically.

73
00:02:08.333 --> 00:02:08.625
Oh, OK.

74
00:02:09.166 --> 00:02:09.750
<v James Munns>Are you telling me that

75
00:02:09.750 --> 00:02:11.208
the hard plastic and wood...

76
00:02:11.458 --> 00:02:11.916
<v Amanda Majorowicz>Doesn't have a nice

77
00:02:11.916 --> 00:02:14.166
sound dampening material?

78
00:02:14.458 --> 00:02:15.958
<v James Munns>No, but I just need to put crushed velvet

79
00:02:15.958 --> 00:02:17.041
all over everything.

80
00:02:17.041 --> 00:02:18.833
<v Amos Wenger>It's not as bad as where I record, where

81
00:02:18.833 --> 00:02:20.250
it's mirrors and glass.

82
00:02:21.375 --> 00:02:23.750
So wood is already not that bad...

83
00:02:23.750 --> 00:02:24.916
<v James Munns>Do you record in a dance studio?

84
00:02:25.458 --> 00:02:27.625
<v Amos Wenger>I will show you my studio eventually.

85
00:02:28.291 --> 00:02:29.958
No, no, no, it's just a room, but it has

86
00:02:29.958 --> 00:02:31.291
those big open windows.

87
00:02:31.291 --> 00:02:32.708
<v James Munns>You have like hard walls and stuff.

88
00:02:33.041 --> 00:02:33.416
<v Amos Wenger>Yeah.

89
00:02:33.416 --> 00:02:33.875
And hard walls.

90
00:02:34.125 --> 00:02:36.916
And it's not even a cube because the roof

91
00:02:36.916 --> 00:02:37.750
is at an angle because

92
00:02:37.750 --> 00:02:38.875
it's right below the roof.

93
00:02:39.208 --> 00:02:40.083
The ceiling is at an angle.

94
00:02:40.416 --> 00:02:41.958
<v James Munns>I have a friend who's like an audio and

95
00:02:41.958 --> 00:02:44.666
mastering engineer, and he built a like

96
00:02:44.666 --> 00:02:46.458
shed studio for himself.

97
00:02:46.666 --> 00:02:50.375
And they actually built the walls not at

98
00:02:50.375 --> 00:02:53.541
90 degree angles on purpose because it's

99
00:02:53.541 --> 00:02:55.250
better for diffusing--

100
00:02:55.250 --> 00:02:56.666
So like he treated the whole room, but

101
00:02:56.666 --> 00:02:59.541
also all the walls are like slightly-- like

102
00:02:59.541 --> 00:03:01.375
five degrees off on purpose.

103
00:03:03.125 --> 00:03:04.083
<v Amos Wenger>That's a good shirt idea.

104
00:03:05.000 --> 00:03:06.041
"Five degrees off on purpose."

105
00:03:07.208 --> 00:03:08.458
<v Amanda Majorowicz>Merch, merch, merch!

106
00:03:09.458 --> 00:03:09.750
<v James Munns>All right.

107
00:03:10.000 --> 00:03:11.500
This is an episode where I am more

108
00:03:11.500 --> 00:03:13.250
excited than informed.

109
00:03:13.583 --> 00:03:14.208
Are you ready, Amos?

110
00:03:14.583 --> 00:03:15.666
<v Amos Wenger>That is the whole

111
00:03:15.666 --> 00:03:17.125
entire idea of this podcast.

112
00:03:17.416 --> 00:03:18.333
I am so ready.

113
00:03:18.666 --> 00:03:21.125
<v James Munns>I feel like some days we're informed and

114
00:03:21.125 --> 00:03:22.166
reluctantly excited.

115
00:03:22.500 --> 00:03:24.291
And then some days, some days we come

116
00:03:24.291 --> 00:03:26.500
firing in like "I learned a thing!"

117
00:03:26.750 --> 00:03:27.958
And this is one of those.

118
00:03:27.958 --> 00:03:29.333
This is one of those days because last

119
00:03:29.333 --> 00:03:32.666
week I picked up a tool called Typst,

120
00:03:33.166 --> 00:03:35.375
which I've been having an eye on for a

121
00:03:35.375 --> 00:03:37.333
long while, but finally came up with a

122
00:03:37.333 --> 00:03:38.916
couple of things that I needed it for.

123
00:03:38.916 --> 00:03:41.500
And it's that classic like I can't learn

124
00:03:41.500 --> 00:03:43.541
something new until I have like two

125
00:03:43.541 --> 00:03:45.500
specific projects that I need it for.

126
00:03:45.958 --> 00:03:46.958
Because otherwise I'll just read all the

127
00:03:46.958 --> 00:03:47.791
docs for forever and

128
00:03:47.791 --> 00:03:48.708
go, "Yeah, yeah, yeah.

129
00:03:48.708 --> 00:03:51.375
Makes sense." and retain none of it.

130
00:03:51.583 --> 00:03:52.916
And then the moment that I have real

131
00:03:52.916 --> 00:03:55.833
projects to put together with it's, "Oh, OK.

132
00:03:55.833 --> 00:03:56.458
Now it sticks."

133
00:03:56.875 --> 00:03:57.791
So this is Typst.

134
00:03:57.791 --> 00:04:00.458
<v Amos Wenger>I thought it was pronounced "tipst" actually...

135
00:04:00.458 --> 00:04:01.041
<v James Munns>I don't know.

136
00:04:01.291 --> 00:04:02.375
This is one of those that I've never

137
00:04:02.375 --> 00:04:03.875
talked to someone in person about it.

138
00:04:03.875 --> 00:04:05.666
So I'm saying like type like type.

139
00:04:05.666 --> 00:04:06.916
<v Amos Wenger>It is T-Y-P-S-T.

140
00:04:07.208 --> 00:04:07.541
<v James Munns>Yeah.

141
00:04:08.000 --> 00:04:09.625
<v Amos Wenger>Just for the readers who are not reading

142
00:04:09.625 --> 00:04:11.083
the slides available at

143
00:04:11.125 --> 00:04:14.250
sdr-podcast.com/episodes

144
00:04:15.833 --> 00:04:17.083
<v James Munns>Well, I mean, they're based out of

145
00:04:17.083 --> 00:04:18.541
Berlin, so it might be "Typst" (German accent).

146
00:04:18.916 --> 00:04:19.500
I don't know.

147
00:04:19.500 --> 00:04:19.875
We'll see.

148
00:04:20.458 --> 00:04:22.250
But I think Typst is pretty neat.

149
00:04:23.125 --> 00:04:25.333
So as a TLDR for someone who hasn't heard

150
00:04:25.333 --> 00:04:27.708
of it before, Typst is basically a

151
00:04:27.708 --> 00:04:29.083
programming language for documents.

152
00:04:29.791 --> 00:04:31.500
And this isn't a particularly

153
00:04:31.500 --> 00:04:33.291
revolutionary thing.

154
00:04:34.000 --> 00:04:35.958
You might have heard of LaTeX before.

155
00:04:36.291 --> 00:04:38.000
LaTeX is one of those like what is it?

156
00:04:38.625 --> 00:04:39.416
It wasn't Kernighan.

157
00:04:39.666 --> 00:04:41.708
It was the other C guy.

158
00:04:41.916 --> 00:04:43.000
But it was it's one of those he made it

159
00:04:43.000 --> 00:04:44.750
in a cave out of a box of scraps.

160
00:04:45.000 --> 00:04:47.208
Like he was typesetting the um... it was

161
00:04:47.208 --> 00:04:48.875
Ritchie, I think, because it's K&R.

162
00:04:48.875 --> 00:04:50.208
It was when Ritchie was typesetting.

163
00:04:50.208 --> 00:04:51.791
I think the original one of the original

164
00:04:51.791 --> 00:04:52.958
textbooks was like --

165
00:04:53.041 --> 00:04:53.791
<v Amos Wenger>Knuth.

166
00:04:53.875 --> 00:04:54.625
<v James Munns>What, was it Knuth?

167
00:04:54.625 --> 00:04:55.000
You're right.

168
00:04:55.000 --> 00:04:57.083
It was Donald Knuth who made TeX.

169
00:04:57.125 --> 00:04:57.708
Yeah.

170
00:04:57.916 --> 00:04:59.541
I'm forgetting my C

171
00:04:59.541 --> 00:05:01.083
language luminaries here.

172
00:05:01.291 --> 00:05:02.416
Or I'm getting them muddled up.

173
00:05:02.416 --> 00:05:03.250
But yeah, it's one of those

174
00:05:03.250 --> 00:05:05.666
needed a typesetting tool.

175
00:05:05.833 --> 00:05:09.500
So wrote one and basically the entire

176
00:05:09.500 --> 00:05:12.833
like university paper writer and a lot of

177
00:05:12.833 --> 00:05:14.333
professional bookmakers and stuff have

178
00:05:14.333 --> 00:05:15.916
been using something not

179
00:05:15.916 --> 00:05:18.625
terribly far out of the TeX family.

180
00:05:18.625 --> 00:05:20.708
So it's about LaTeX but it's I guess

181
00:05:20.708 --> 00:05:23.875
it's T-E-X like tex and then

182
00:05:23.875 --> 00:05:25.958
LaTeX is how I always see it.

183
00:05:25.958 --> 00:05:28.000
But I never really learned LaTeX even

184
00:05:28.000 --> 00:05:29.708
because I never did a PhD in university.

185
00:05:30.125 --> 00:05:32.208
So I was never a researcher and I never

186
00:05:32.208 --> 00:05:32.958
had to actually

187
00:05:32.958 --> 00:05:35.041
typeset anything seriously.

188
00:05:35.708 --> 00:05:37.375
So I've managed to go almost my entire

189
00:05:37.375 --> 00:05:39.666
software career using either graphical

190
00:05:39.666 --> 00:05:42.416
editors like Word or like Google Docs or

191
00:05:42.416 --> 00:05:43.750
whatever or Markdown.

192
00:05:44.416 --> 00:05:45.416
Tremendous amount of my customers

193
00:05:45.416 --> 00:05:47.625
actually just prefer Markdown for even

194
00:05:47.625 --> 00:05:50.250
serious reports because they stick it in

195
00:05:50.250 --> 00:05:52.000
the docs folder of their repos and then

196
00:05:52.000 --> 00:05:53.708
no one has to worry about losing it.

197
00:05:53.708 --> 00:05:55.416
And if I'm making architecture diagrams

198
00:05:55.416 --> 00:05:57.000
and stuff, it's great because it goes in

199
00:05:57.000 --> 00:05:59.541
the repo or I end up copying and pasting

200
00:05:59.541 --> 00:06:01.375
it into their wiki or

201
00:06:01.375 --> 00:06:02.583
whatever I end up using it for.

202
00:06:02.833 --> 00:06:04.375
<v Amos Wenger>And you can diff it and everything.

203
00:06:04.708 --> 00:06:05.125
<v James Munns>Yeah.

204
00:06:05.208 --> 00:06:05.666
Yeah.

205
00:06:06.083 --> 00:06:08.000
And so this is always the benefit of

206
00:06:08.000 --> 00:06:12.625
using Markdown over Word or .docx or just

207
00:06:12.625 --> 00:06:14.583
PDFs really is that it's easy to diff.

208
00:06:15.041 --> 00:06:16.958
And there are some tools for diffing PDFs

209
00:06:16.958 --> 00:06:18.375
and there's change tracking, but they

210
00:06:18.375 --> 00:06:20.125
don't jive well with the normal software

211
00:06:20.125 --> 00:06:21.083
development practice.

212
00:06:21.375 --> 00:06:23.208
But yeah, these are languages that are

213
00:06:23.208 --> 00:06:24.291
used for typesetting.

214
00:06:24.583 --> 00:06:26.958
So you write your actual text, but you

215
00:06:26.958 --> 00:06:28.625
also write things like: hey, I want a

216
00:06:28.625 --> 00:06:30.958
table here with this many columns and

217
00:06:30.958 --> 00:06:32.708
this width of the column or I want my

218
00:06:32.708 --> 00:06:34.291
margins to be this, my

219
00:06:34.291 --> 00:06:35.666
number of columns to be whatever.

220
00:06:35.958 --> 00:06:37.541
And it's a programming language and it

221
00:06:37.541 --> 00:06:38.833
has a compiler and you

222
00:06:38.833 --> 00:06:40.041
run the compiler on it.

223
00:06:40.041 --> 00:06:42.208
And instead of putting out a binary, it

224
00:06:42.208 --> 00:06:45.916
spits out a PDF or an SVG or whatever

225
00:06:45.916 --> 00:06:46.833
you'd like it to be.

226
00:06:47.125 --> 00:06:49.166
So these are interesting because they do

227
00:06:49.166 --> 00:06:51.041
sort of then come back around to the

228
00:06:51.041 --> 00:06:53.291
programming workflow where you can put

229
00:06:53.291 --> 00:06:55.041
them in a Git repo and you can have

230
00:06:55.041 --> 00:06:57.583
shared components and you can have all of

231
00:06:57.583 --> 00:06:58.541
these kind of things.

232
00:06:58.541 --> 00:07:00.208
And I've not ever used

233
00:07:00.208 --> 00:07:01.625
LaTeX, but have you, Amos?

234
00:07:02.083 --> 00:07:04.500
<v Amos Wenger>I have, but I've never been

235
00:07:04.500 --> 00:07:05.791
a serious researcher either.

236
00:07:06.208 --> 00:07:07.083
I think the name for

237
00:07:07.083 --> 00:07:08.125
this podcast is a fraud.

238
00:07:08.666 --> 00:07:09.666
Neither of us have been researchers.

239
00:07:10.000 --> 00:07:11.083
<v James Munns>We're independent researchers.

240
00:07:11.458 --> 00:07:11.791
<v Amos Wenger>We are.

241
00:07:12.000 --> 00:07:12.625
<v James Munns>We decided to do

242
00:07:12.625 --> 00:07:14.375
consulting instead of PhDs.

243
00:07:14.375 --> 00:07:16.958
<v Amos Wenger>So you floated this topic recently and I

244
00:07:16.958 --> 00:07:19.666
said my own experience is through LyX,

245
00:07:19.958 --> 00:07:22.291
L-Y-X, which was a

246
00:07:22.291 --> 00:07:23.458
WYSIWYG editor for LaTeX.

247
00:07:23.916 --> 00:07:25.375
What I think very funny about the history

248
00:07:25.375 --> 00:07:27.083
of TeX, if I may interject for a second,

249
00:07:27.083 --> 00:07:30.250
is that Knuth made it because the first--

250
00:07:30.250 --> 00:07:31.791
I'm going to read straight up from

251
00:07:31.791 --> 00:07:33.125
Wikipedia, which is 50% of

252
00:07:33.125 --> 00:07:34.250
what making a podcast is.

253
00:07:34.500 --> 00:07:36.708
The first edition of his book was typeset

254
00:07:36.708 --> 00:07:37.500
using hot metal

255
00:07:37.500 --> 00:07:39.333
typesetting on a monotype machine.

256
00:07:39.541 --> 00:07:40.583
I have no idea what it looks like.

257
00:07:41.125 --> 00:07:43.000
It's a method dating by the 19th century,

258
00:07:43.000 --> 00:07:45.041
produced a classic style that he liked.

259
00:07:45.333 --> 00:07:46.500
And when the second edition was

260
00:07:46.500 --> 00:07:48.208
published, they had to typeset everything

261
00:07:48.208 --> 00:07:49.875
again because the monotype technology had

262
00:07:49.875 --> 00:07:51.583
been replaced by photo typesetting.

263
00:07:52.000 --> 00:07:53.500
And he looked at it.

264
00:07:53.708 --> 00:07:55.875
So from from 68 to 77, they switched to a

265
00:07:55.875 --> 00:07:56.708
new typesetting system.

266
00:07:56.708 --> 00:07:57.333
He looked at it and was

267
00:07:57.333 --> 00:07:59.000
like, "I liked it better before."

268
00:07:59.833 --> 00:08:00.666
So he just made his

269
00:08:00.666 --> 00:08:01.916
entire typesetting system.

270
00:08:01.916 --> 00:08:03.166
And then if you're wondering the

271
00:08:03.166 --> 00:08:05.125
difference between TeX and LaTeX, the

272
00:08:05.125 --> 00:08:07.791
'La' part is mostly a set of macros.

273
00:08:08.083 --> 00:08:09.416
It's just like it's really

274
00:08:09.416 --> 00:08:10.916
just the maths behind it.

275
00:08:10.916 --> 00:08:12.708
And then you need to build kind of an

276
00:08:12.708 --> 00:08:14.458
ecosystem, a standard library or

277
00:08:14.458 --> 00:08:16.333
something of things you can use on there.

278
00:08:16.583 --> 00:08:18.666
<v James Munns>Yeah, because there's a whole bunch of

279
00:08:18.666 --> 00:08:19.666
plug-ins and things like that.

280
00:08:19.666 --> 00:08:21.000
And this is why it gets used in a bunch

281
00:08:21.000 --> 00:08:22.125
of scientific writing.

282
00:08:22.375 --> 00:08:23.666
One, like universities will typically

283
00:08:23.666 --> 00:08:25.625
have like a standard template so that

284
00:08:25.625 --> 00:08:27.416
everyone writing a paper uses the same

285
00:08:27.416 --> 00:08:29.208
template and it gets imported like a

286
00:08:29.208 --> 00:08:30.375
macro or a library or

287
00:08:30.375 --> 00:08:31.041
something like that.

288
00:08:31.541 --> 00:08:33.416
And then same for graphs and tables and

289
00:08:33.416 --> 00:08:35.000
anything else that you put in there.

290
00:08:35.125 --> 00:08:37.875
So it has like a consistent looking voice

291
00:08:37.875 --> 00:08:39.958
is the wrong thing to use for text, but a

292
00:08:39.958 --> 00:08:40.875
consistent looking style.

293
00:08:41.291 --> 00:08:42.833
And, you know, that way, even if you have

294
00:08:42.833 --> 00:08:44.500
just PhD researchers, they end up with

295
00:08:44.500 --> 00:08:46.125
something that looks consistent for the

296
00:08:46.125 --> 00:08:47.625
university and stuff like that.

297
00:08:47.625 --> 00:08:49.625
But like I said, I only did my my

298
00:08:49.625 --> 00:08:52.000
bachelor's, so I missed out on that.

299
00:08:52.000 --> 00:08:53.541
For my bachelor's, we didn't have a

300
00:08:53.541 --> 00:08:54.500
bachelor's thesis, but we

301
00:08:54.500 --> 00:08:55.708
had like a final project.

302
00:08:55.708 --> 00:08:57.375
And I think I just used Google Docs for

303
00:08:57.375 --> 00:08:58.416
that, if I remember correctly.

304
00:08:58.833 --> 00:09:01.041
Serious, serious intent on on that.

305
00:09:01.041 --> 00:09:02.750
But it was a much different audience than

306
00:09:02.791 --> 00:09:04.208
publishing in a research paper or

307
00:09:04.208 --> 00:09:04.833
something like that.

308
00:09:05.083 --> 00:09:05.458
<v Amos Wenger>True.

309
00:09:05.750 --> 00:09:06.041
I do.

310
00:09:06.041 --> 00:09:07.875
I do find it interesting that unless I'm

311
00:09:07.875 --> 00:09:09.708
misreading this and if I'm wrong, we will

312
00:09:09.708 --> 00:09:10.750
get emails about it.

313
00:09:10.750 --> 00:09:13.291
But I don't think it was out of... it's not

314
00:09:13.291 --> 00:09:14.833
like the free software story.

315
00:09:14.833 --> 00:09:16.000
It's not like, you know,

316
00:09:16.458 --> 00:09:17.125
I want to use a printer.

317
00:09:17.416 --> 00:09:18.833
I couldn't because software was fucky.

318
00:09:18.833 --> 00:09:20.000
So I just started a whole movement.

319
00:09:20.291 --> 00:09:21.875
It's more like there's

320
00:09:21.875 --> 00:09:23.583
nothing that can do this right.

321
00:09:23.791 --> 00:09:24.750
So it's not even about

322
00:09:24.750 --> 00:09:25.791
making it open or whatever.

323
00:09:25.916 --> 00:09:27.791
It's just like I want to make my own

324
00:09:27.791 --> 00:09:29.166
because I know I can do this better.

325
00:09:29.333 --> 00:09:30.333
<v James Munns>This is like back in

326
00:09:30.333 --> 00:09:31.500
the Bell Labs days, right?

327
00:09:31.833 --> 00:09:34.916
Like this is when... Knuth wasn't... I don't

328
00:09:34.916 --> 00:09:36.791
remember if Knuth was at Bell Labs, but I

329
00:09:36.791 --> 00:09:38.083
think it predates like the--

330
00:09:38.083 --> 00:09:39.833
well, LaTeX probably doesn't.

331
00:09:39.833 --> 00:09:40.333
But I don't know.

332
00:09:40.333 --> 00:09:41.916
I'm going to speak on-- off the cuff here.

333
00:09:41.916 --> 00:09:43.375
But I think it's older than that.

334
00:09:43.583 --> 00:09:44.916
But yeah, I do think it was one of those

335
00:09:44.916 --> 00:09:46.333
yakshaves of like, "Oh, well,

336
00:09:46.333 --> 00:09:47.250
there's no software for that.

337
00:09:47.250 --> 00:09:48.791
So I guess I'll just write an entire

338
00:09:48.791 --> 00:09:49.333
typesetting

339
00:09:49.333 --> 00:09:51.500
programming language," as you do.

340
00:09:51.958 --> 00:09:54.916
<v Amos Wenger>Yeah, I'm fact-checking you as we go.

341
00:09:55.000 --> 00:09:56.791
And I see mostly-- I

342
00:09:56.791 --> 00:09:58.208
see Stanford University.

343
00:09:58.208 --> 00:09:59.416
I see University of Oslo.

344
00:10:00.000 --> 00:10:00.833
I don't think he's part

345
00:10:00.833 --> 00:10:01.916
of the Bell Labs people.

346
00:10:02.708 --> 00:10:04.125
<v James Munns>OK, like I said, I'm probably muddling up

347
00:10:04.125 --> 00:10:05.583
my C luminaries again.

348
00:10:06.625 --> 00:10:08.083
<v Amos Wenger>Yep, you gotta get mixed up.

349
00:10:08.500 --> 00:10:09.750
<v James Munns>But also, if you've heard people talk

350
00:10:09.750 --> 00:10:11.916
about LaTeX, everyone I know who's used

351
00:10:11.916 --> 00:10:14.166
LaTeX also has complaints about LaTeX in

352
00:10:14.166 --> 00:10:15.791
that it is very like macro heavy.

353
00:10:16.375 --> 00:10:18.666
It's an artifact of its time, as far as I

354
00:10:18.666 --> 00:10:19.875
know, in that it's one of those things

355
00:10:19.875 --> 00:10:22.875
that it made sense at the time and it's

356
00:10:22.875 --> 00:10:24.833
just been grown and things added to it.

357
00:10:24.833 --> 00:10:27.250
And macros that were reasonable are less

358
00:10:27.250 --> 00:10:30.666
reasonable when you're a decade away from

359
00:10:30.666 --> 00:10:31.916
the person who wrote it or

360
00:10:31.916 --> 00:10:33.208
people who are in university.

361
00:10:33.416 --> 00:10:35.166
It's like, well, who wrote the macros

362
00:10:35.166 --> 00:10:36.208
that our university uses?

363
00:10:36.583 --> 00:10:39.166
Some third year undergrad student who is

364
00:10:39.166 --> 00:10:41.208
the only person who figured out how LaTeX

365
00:10:41.208 --> 00:10:43.250
worked and could write macros for it.

366
00:10:43.250 --> 00:10:43.875
And now if you ever have

367
00:10:43.875 --> 00:10:45.083
to debug it, it's horrible.

368
00:10:45.375 --> 00:10:48.041
Or, you know, I can't give that many

369
00:10:48.041 --> 00:10:49.458
directed complaints because I've never

370
00:10:49.458 --> 00:10:50.833
used it, so I'm not very informed.

371
00:10:50.958 --> 00:10:53.208
But every single person who I've talked

372
00:10:53.208 --> 00:10:55.666
to who has used LaTeX always has a love

373
00:10:55.666 --> 00:10:57.208
hate relationship with it and that they

374
00:10:57.208 --> 00:10:58.791
love what it's supposed to do.

375
00:10:59.125 --> 00:11:02.125
And then as soon as a table overflows or

376
00:11:02.125 --> 00:11:04.250
you have to debug a macro or you import

377
00:11:04.250 --> 00:11:06.083
two macros that interfere with each other

378
00:11:06.083 --> 00:11:08.250
or whatever, everything goes to hell.

379
00:11:08.791 --> 00:11:10.708
And the actual workflow that a lot of

380
00:11:10.708 --> 00:11:12.291
people require to get it working requires

381
00:11:12.291 --> 00:11:14.708
like, OK, I have to install 37 Perl

382
00:11:14.708 --> 00:11:17.916
packages and two Python packages and

383
00:11:17.916 --> 00:11:19.166
whatever, because I guess however these

384
00:11:19.166 --> 00:11:20.750
macros are written, it's-- there's

385
00:11:20.750 --> 00:11:22.083
just a lot of processing step.

386
00:11:22.291 --> 00:11:23.833
And one, it's a tool that people have

387
00:11:23.833 --> 00:11:25.416
used, but a lot of different people have

388
00:11:25.416 --> 00:11:26.583
used and it's been this

389
00:11:26.583 --> 00:11:28.291
whole like bazaar of ecosystem.

390
00:11:28.791 --> 00:11:29.875
So it's yeah, I don't know.

391
00:11:29.875 --> 00:11:31.000
Like I said, it's it's something that's

392
00:11:31.000 --> 00:11:32.333
always struck me as a love hate

393
00:11:32.375 --> 00:11:35.166
relationship that people love the idea of

394
00:11:35.166 --> 00:11:37.666
it and then just paper cuts all day every

395
00:11:37.666 --> 00:11:38.833
day, which is part of the reason why I

396
00:11:38.833 --> 00:11:40.416
never picked it up, because I heard every

397
00:11:40.416 --> 00:11:41.750
time I heard something good about it, I

398
00:11:41.750 --> 00:11:43.333
heard just as many complaints about it.

399
00:11:43.333 --> 00:11:43.916
And I went, I guess my

400
00:11:43.916 --> 00:11:45.208
Markdown is not so bad.

401
00:11:45.208 --> 00:11:47.833
Like I can do Markdown render to HTML or

402
00:11:47.833 --> 00:11:49.041
like Markdown render to PDF.

403
00:11:49.333 --> 00:11:50.625
And I can live with that.

404
00:11:50.875 --> 00:11:51.791
<v Amos Wenger>Yeah, I definitely have

405
00:11:51.791 --> 00:11:52.916
heard the same complaints.

406
00:11:53.708 --> 00:11:55.208
And it is definitely a part of its time.

407
00:11:55.458 --> 00:11:56.583
There's so many more

408
00:11:56.583 --> 00:11:57.958
fun tidbits around it.

409
00:11:57.958 --> 00:12:00.000
For example, Knuth didn't just invent TeX.

410
00:12:00.250 --> 00:12:01.875
He invented the concept of literate

411
00:12:01.875 --> 00:12:03.541
programming where you essentially write a

412
00:12:03.541 --> 00:12:05.125
document and then you can compile a

413
00:12:05.125 --> 00:12:06.666
document to source code because it

414
00:12:06.666 --> 00:12:08.041
extracts the code that's in there.

415
00:12:08.041 --> 00:12:10.291
So explain what you do and the pros, the

416
00:12:10.291 --> 00:12:12.583
explanation for humans is kind of the

417
00:12:12.583 --> 00:12:14.333
main thing, the main focus.

418
00:12:14.583 --> 00:12:16.916
And then the code is a product of that is

419
00:12:16.916 --> 00:12:18.166
something you can compile.

420
00:12:18.333 --> 00:12:20.041
He originally wrote TeX in a language

421
00:12:20.041 --> 00:12:22.583
called WEB, W-E-B, all capital.

422
00:12:23.125 --> 00:12:23.791
And that produced

423
00:12:23.791 --> 00:12:26.625
programs in DEC PDP-10 Pascal.

424
00:12:27.583 --> 00:12:28.208
Maybe a CDC.

425
00:12:28.791 --> 00:12:31.208
So yes, it was released 47 years ago.

426
00:12:31.208 --> 00:12:32.125
It is it is old and

427
00:12:32.125 --> 00:12:33.833
extremely old in computer years.

428
00:12:34.000 --> 00:12:34.916
<v James Munns>Yeah, but this is Typst.

429
00:12:35.500 --> 00:12:36.666
And so LaTeX is LaTeX.

430
00:12:37.166 --> 00:12:38.583
Like I said, I never learned it, but this

431
00:12:38.583 --> 00:12:39.833
is Typst, which is a

432
00:12:39.833 --> 00:12:41.000
much more modern program.

433
00:12:41.333 --> 00:12:43.583
It's written in Rust, which: always great.

434
00:12:43.791 --> 00:12:44.875
I love using tools that are written in

435
00:12:44.875 --> 00:12:46.458
Rust because it means that I have a

436
00:12:46.458 --> 00:12:48.083
chance in hell at debugging it in case

437
00:12:48.083 --> 00:12:49.833
something goes wrong or just, you know,

438
00:12:50.125 --> 00:12:51.041
supporting people doing that.

439
00:12:51.250 --> 00:12:52.833
And it's actually local for me because it

440
00:12:52.833 --> 00:12:54.833
comes out of TU Berlin, which is one of

441
00:12:54.833 --> 00:12:56.000
the big universities here.

442
00:12:56.000 --> 00:12:57.333
And it started as a side

443
00:12:57.333 --> 00:12:59.833
project from a student in 2019,

444
00:13:00.916 --> 00:13:01.958
maybe one or two people.

445
00:13:01.958 --> 00:13:03.500
I know there are two main developers who

446
00:13:03.500 --> 00:13:04.333
are working on it now.

447
00:13:04.833 --> 00:13:07.000
And since then, they've been making it

448
00:13:07.000 --> 00:13:08.791
basically their full time thing of

449
00:13:08.791 --> 00:13:11.041
building the command line version of it.

450
00:13:11.041 --> 00:13:12.250
Well, I'll get into the different forms

451
00:13:12.250 --> 00:13:14.125
that it comes in, but making the language

452
00:13:14.166 --> 00:13:14.916
itself and all the

453
00:13:14.916 --> 00:13:16.458
tooling that relates to it.

454
00:13:16.500 --> 00:13:18.416
And so it's something that I've had on my

455
00:13:18.416 --> 00:13:20.166
radar because in Rust, everyone talks

456
00:13:20.166 --> 00:13:20.958
about like, "Hey, I just

457
00:13:20.958 --> 00:13:22.125
built this new thing in Rust."

458
00:13:22.875 --> 00:13:24.958
So I've seen it on the like, you know,

459
00:13:25.250 --> 00:13:26.250
various announcements.

460
00:13:26.250 --> 00:13:28.875
And I think a year or two ago, I kind of

461
00:13:28.875 --> 00:13:30.000
looked at bringing it up because I was

462
00:13:30.000 --> 00:13:31.375
like, well, maybe I do want to do more

463
00:13:31.375 --> 00:13:32.416
formal reports for

464
00:13:32.416 --> 00:13:33.750
customers and stuff like that.

465
00:13:33.750 --> 00:13:35.041
So maybe I'll pick it up.

466
00:13:35.041 --> 00:13:36.083
But I didn't have anything at

467
00:13:36.083 --> 00:13:37.333
hand, which means I dropped it.

468
00:13:37.541 --> 00:13:39.458
And then I think like six months ago, I

469
00:13:39.458 --> 00:13:41.875
tried again because I found... what I

470
00:13:41.875 --> 00:13:42.666
actually found was the

471
00:13:42.666 --> 00:13:45.291
NASA design and style manual.

472
00:13:45.458 --> 00:13:47.250
So someone just printed a PDF of it.

473
00:13:47.250 --> 00:13:49.125
And it's like the whole guide of how you

474
00:13:49.125 --> 00:13:51.750
do typesetting and logos and fonts and

475
00:13:51.791 --> 00:13:53.416
everything like that for NASA.

476
00:13:53.916 --> 00:13:54.916
And it was a really

477
00:13:54.916 --> 00:13:56.208
interesting style guide.

478
00:13:56.208 --> 00:13:58.166
And it was I was like, "Oh, I want to make

479
00:13:58.166 --> 00:13:59.958
pretty technical documents like that!"

480
00:13:59.958 --> 00:14:00.833
Like there was a very like

481
00:14:00.833 --> 00:14:03.333
cool style and inspiring style.

482
00:14:03.333 --> 00:14:05.791
So I started picking up Typst about six

483
00:14:05.791 --> 00:14:07.333
months ago because I was like, OK, if I

484
00:14:07.333 --> 00:14:09.458
want pretty like laid out documents like

485
00:14:09.458 --> 00:14:11.666
that with images set and, you know, all

486
00:14:11.666 --> 00:14:12.791
that, then I'm going to need something

487
00:14:12.791 --> 00:14:14.291
more powerful than Word

488
00:14:14.291 --> 00:14:15.708
or Google Docs or whatever.

489
00:14:16.041 --> 00:14:17.208
And so I sort of picked it up, did the

490
00:14:17.208 --> 00:14:19.458
tutorials, went really fine, but then I

491
00:14:19.458 --> 00:14:20.458
didn't use it. Went back on

492
00:14:20.458 --> 00:14:22.041
vacation and didn't touch it.

493
00:14:22.041 --> 00:14:23.750
But I recently got back into it because

494
00:14:23.750 --> 00:14:25.625
my company, OneVariable is going to

495
00:14:25.625 --> 00:14:27.458
Embedded World and we need either a big

496
00:14:27.458 --> 00:14:28.583
poster or like one of

497
00:14:28.583 --> 00:14:29.958
those roll up banners for it.

498
00:14:29.958 --> 00:14:31.500
And I was like: well, how do you design a

499
00:14:31.500 --> 00:14:33.833
two by one meter banner?

500
00:14:33.833 --> 00:14:35.541
Because I don't know how I would approach

501
00:14:35.541 --> 00:14:37.000
that in any of the tools that I know how

502
00:14:37.000 --> 00:14:38.250
to use like Google Docs.

503
00:14:38.250 --> 00:14:39.375
I guess I could make a really big

504
00:14:39.375 --> 00:14:41.208
PowerPoint slide for it or something?

505
00:14:41.291 --> 00:14:41.833
I don't know.

506
00:14:41.833 --> 00:14:43.583
But it seemed like a perfect opportunity

507
00:14:43.583 --> 00:14:45.250
because we didn't need that much text and

508
00:14:45.250 --> 00:14:46.416
style because it's something you want to

509
00:14:46.416 --> 00:14:48.333
be able to see from like across the hall.

510
00:14:48.916 --> 00:14:50.125
And I was just like, I wonder if Typst

511
00:14:50.125 --> 00:14:51.250
can just handle a two

512
00:14:51.250 --> 00:14:52.625
meter by one meter document.

513
00:14:52.958 --> 00:14:54.416
Absolutely no problem with it.

514
00:14:54.416 --> 00:14:56.708
I opened it up, did like Hello World and

515
00:14:56.708 --> 00:14:58.500
it rendered a giant PDF that looked

516
00:14:58.500 --> 00:15:00.291
perfectly fine at 300 PPI.

517
00:15:00.708 --> 00:15:01.791
And I was like, "Oh. Cool."

518
00:15:02.041 --> 00:15:03.833
And then I think that was on a Friday.

519
00:15:04.000 --> 00:15:05.416
And I just sat the rest of the evening

520
00:15:05.416 --> 00:15:07.666
and was like, "OK, how do I make a pretty

521
00:15:07.666 --> 00:15:08.625
gradient background?" and

522
00:15:08.625 --> 00:15:09.541
just messed around with it.

523
00:15:09.583 --> 00:15:10.625
Because it has this really nice.

524
00:15:10.791 --> 00:15:12.000
What you see is what you get.

525
00:15:12.000 --> 00:15:12.375
Web editor.

526
00:15:12.875 --> 00:15:14.083
It's sort of like if you've ever seen any

527
00:15:14.083 --> 00:15:16.208
of those-- like HackMD is one of those

528
00:15:16.208 --> 00:15:17.625
websites where you've got Markdown in one

529
00:15:17.625 --> 00:15:19.333
pane and you've got like pretty rendered

530
00:15:19.333 --> 00:15:20.500
version on the right side.

531
00:15:20.833 --> 00:15:21.833
Typst has the same thing.

532
00:15:21.833 --> 00:15:23.166
So you've got all your code on the left.

533
00:15:23.708 --> 00:15:25.291
It's even got like syntax highlighting

534
00:15:25.291 --> 00:15:26.916
and it'll do autocomplete

535
00:15:26.916 --> 00:15:29.250
sort of like a LSP sort of thing.

536
00:15:29.250 --> 00:15:31.125
So like it'll autocomplete things and you

537
00:15:31.125 --> 00:15:32.791
can hover over things and see it.

538
00:15:32.791 --> 00:15:34.791
And it caught me in exactly the right way

539
00:15:34.791 --> 00:15:36.208
where I just spent like the next six

540
00:15:36.208 --> 00:15:38.208
hours like, "OK, how do I make a title?

541
00:15:38.708 --> 00:15:39.000
Cool.

542
00:15:39.000 --> 00:15:39.958
How do I make a gradient?

543
00:15:40.291 --> 00:15:41.208
How do I make a shape

544
00:15:41.208 --> 00:15:42.208
on top of a gradient?

545
00:15:42.208 --> 00:15:44.291
How do I do stacking shapes?" and just it

546
00:15:44.291 --> 00:15:46.166
was fun to just play around with.

547
00:15:46.166 --> 00:15:48.041
So, I mean, it took having a very

548
00:15:48.041 --> 00:15:49.583
specific task to do.

549
00:15:49.583 --> 00:15:52.125
It was neat because I just had the editor

550
00:15:52.125 --> 00:15:53.708
open in one window and the docs open

551
00:15:53.708 --> 00:15:54.916
another and they have

552
00:15:54.916 --> 00:15:56.208
really good searchable docs.

553
00:15:56.458 --> 00:15:59.083
So I'm like: gradients. Type 'gradient' and

554
00:15:59.083 --> 00:15:59.666
it's like "function

555
00:15:59.666 --> 00:16:00.916
gradient: looks like this.

556
00:16:01.250 --> 00:16:02.125
Call it with these methods."

557
00:16:02.125 --> 00:16:03.041
And I was like, "Oh, cool!"

558
00:16:03.375 --> 00:16:04.083
And you just paste that

559
00:16:04.083 --> 00:16:05.000
in and you iterate on it.

560
00:16:05.041 --> 00:16:07.708
So I have some very like some of the

561
00:16:07.708 --> 00:16:09.625
intermediate documents I made.

562
00:16:09.625 --> 00:16:11.166
I was like, OK, I am approaching the

563
00:16:11.166 --> 00:16:12.083
level of competency.

564
00:16:12.291 --> 00:16:14.500
So my documents now look like PowerPoint

565
00:16:14.500 --> 00:16:17.125
in the late 90s because it had like, you

566
00:16:17.125 --> 00:16:19.791
know: big text, rectangle behind it,

567
00:16:19.791 --> 00:16:21.416
gradient as a background.

568
00:16:22.000 --> 00:16:23.791
But over the course of like six hours, I

569
00:16:23.791 --> 00:16:25.375
went from like black text on white

570
00:16:25.375 --> 00:16:27.458
background to PowerPoint to something

571
00:16:27.458 --> 00:16:29.500
that I was like, OK, if we printed this,

572
00:16:29.500 --> 00:16:30.958
I wouldn't be ashamed to have it at my

573
00:16:30.958 --> 00:16:32.875
booth in like six hours, which was

574
00:16:32.875 --> 00:16:34.000
really, really neat.

575
00:16:34.041 --> 00:16:36.250
<v Amos Wenger>So I wonder because you're talking about

576
00:16:36.250 --> 00:16:38.083
gradients and I'm trying to think of the

577
00:16:38.083 --> 00:16:40.333
whole pipeline because rendering to a

578
00:16:40.333 --> 00:16:41.750
bitmap so that you can see

579
00:16:41.750 --> 00:16:43.000
it in your browser is easy.

580
00:16:43.291 --> 00:16:44.500
I'm wondering what's what's the thing

581
00:16:44.500 --> 00:16:45.500
they standardize on?

582
00:16:45.500 --> 00:16:47.000
What's the lowest common denominator?

583
00:16:47.000 --> 00:16:47.833
And I think it has to

584
00:16:47.833 --> 00:16:48.958
be PostScript, right?

585
00:16:49.250 --> 00:16:50.833
Because that's what you send to printers.

586
00:16:51.250 --> 00:16:52.041
<v James Munns>I have no idea.

587
00:16:52.291 --> 00:16:53.583
<v Amos Wenger>And by printers, I mean both the physical

588
00:16:53.583 --> 00:16:55.333
device and the people whose job it is to

589
00:16:55.333 --> 00:16:56.208
print things because

590
00:16:56.208 --> 00:16:57.625
well, I don't know either.

591
00:16:57.625 --> 00:16:59.708
But I have an interesting tidbit that

592
00:16:59.708 --> 00:17:02.833
TeX was released initially in 1978.

593
00:17:02.958 --> 00:17:05.000
So 47 years ago, but PostScript was

594
00:17:05.000 --> 00:17:06.541
released in 1982, which

595
00:17:06.541 --> 00:17:07.875
was only 43 years ago.

596
00:17:08.208 --> 00:17:09.791
So that means that for four

597
00:17:09.791 --> 00:17:11.208
years, TeX was the thing.

598
00:17:11.208 --> 00:17:12.208
But PostScript wasn't.

599
00:17:12.208 --> 00:17:13.750
And how PostScript is not even the thing

600
00:17:13.750 --> 00:17:14.666
people actually use.

601
00:17:14.666 --> 00:17:16.208
They use PDF, which has PostScript

602
00:17:16.208 --> 00:17:17.500
inside, if I understand correctly.

603
00:17:18.208 --> 00:17:19.625
So it's it's fun to see.

604
00:17:19.625 --> 00:17:20.166
<v James Munns>PostScript is great.

605
00:17:20.375 --> 00:17:21.041
PostScript is a Forth.

606
00:17:21.416 --> 00:17:22.958
Well, it's not exactly a Forth, but it's

607
00:17:22.958 --> 00:17:24.416
basically a Forth, which is great.

608
00:17:24.416 --> 00:17:25.541
And that was back in the day when

609
00:17:25.541 --> 00:17:28.666
printers were big, expensive machines and

610
00:17:28.666 --> 00:17:30.750
user terminals were dumb machines.

611
00:17:31.333 --> 00:17:33.041
So you would have basically a big, beefy

612
00:17:33.041 --> 00:17:34.916
computer that was running the printer.

613
00:17:35.541 --> 00:17:36.958
So instead of sending it rasterized

614
00:17:36.958 --> 00:17:38.708
images because your network wasn't fast

615
00:17:38.708 --> 00:17:40.625
enough and your computer wasn't fast

616
00:17:40.625 --> 00:17:42.000
enough to rasterize the image.

617
00:17:42.291 --> 00:17:43.750
So rasterizing is like turning it from

618
00:17:43.750 --> 00:17:45.541
vectors into like a

619
00:17:45.541 --> 00:17:46.833
bitmap like we think of.

620
00:17:47.291 --> 00:17:48.958
So you would just send PostScript, which

621
00:17:48.958 --> 00:17:51.208
is a program over the network to the

622
00:17:51.208 --> 00:17:53.666
computer that would then render in the

623
00:17:53.666 --> 00:17:55.708
giant RAM buffers that your printer had

624
00:17:55.708 --> 00:17:56.791
because the printer was the

625
00:17:56.791 --> 00:17:58.000
expensive piece of equipment.

626
00:17:58.416 --> 00:17:59.958
<v Amos Wenger>Wait, do people do code

627
00:17:59.958 --> 00:18:01.125
golfing with PostScript?

628
00:18:01.458 --> 00:18:03.458
Like try to make a document in as few

629
00:18:03.458 --> 00:18:04.458
bytes as possible because you

630
00:18:04.458 --> 00:18:05.583
can write PostScript by hand.

631
00:18:05.583 --> 00:18:06.375
<v James Munns>Got to be doing code

632
00:18:06.375 --> 00:18:08.083
golfing with with PostScript.

633
00:18:08.083 --> 00:18:09.041
I'm sure that's a thing.

634
00:18:10.083 --> 00:18:10.291
Yeah.

635
00:18:10.500 --> 00:18:11.208
So I don't know.

636
00:18:11.458 --> 00:18:13.208
I did look into a little bit how it works

637
00:18:13.208 --> 00:18:14.458
because it isn't just a Rust crate.

638
00:18:14.791 --> 00:18:16.083
It renders into sort of

639
00:18:16.083 --> 00:18:17.333
it's like any other compiler.

640
00:18:17.541 --> 00:18:18.625
It has like a million

641
00:18:18.625 --> 00:18:19.791
intermediate formats.

642
00:18:20.000 --> 00:18:20.791
And so it renders

643
00:18:20.791 --> 00:18:22.083
into some document model.

644
00:18:22.500 --> 00:18:24.916
It does the rendering and then you give

645
00:18:24.916 --> 00:18:26.416
it to the next step, which is either

646
00:18:26.416 --> 00:18:28.416
render to PDF or render

647
00:18:28.416 --> 00:18:30.625
to PNG or render to bitmap.

648
00:18:30.958 --> 00:18:33.541
And like I ended up using one-- spoiler for

649
00:18:33.541 --> 00:18:36.000
later-- that renders to like tiny-skia.

650
00:18:36.333 --> 00:18:38.208
So it creates essentially just like a

651
00:18:38.208 --> 00:18:39.333
bitmap image where it

652
00:18:39.333 --> 00:18:40.333
gives me an array of pixels.

653
00:18:40.666 --> 00:18:44.250
So I'm sure it has some plug in for like,

654
00:18:44.250 --> 00:18:45.500
OK, we get to the intermediate

655
00:18:45.500 --> 00:18:48.541
representation, the IR with the document

656
00:18:48.541 --> 00:18:50.666
model and like things that have been

657
00:18:50.666 --> 00:18:52.000
applied and things that haven't.

658
00:18:52.333 --> 00:18:53.916
And then if you're going to PDF, you

659
00:18:53.916 --> 00:18:56.208
might apply those to create the PDF in

660
00:18:56.208 --> 00:18:58.375
one way or do a PNG or a bitmap.

661
00:18:58.375 --> 00:18:59.333
You might do it a different way.

662
00:18:59.333 --> 00:19:00.916
I haven't looked really under the hood,

663
00:19:00.916 --> 00:19:01.916
just enough to plug it

664
00:19:01.916 --> 00:19:02.833
into some other stuff.

665
00:19:03.125 --> 00:19:05.041
But yeah, the web editor is super nice.

666
00:19:05.041 --> 00:19:06.291
Like I said, if you're looking at the

667
00:19:06.291 --> 00:19:08.375
slides now, I have an actual picture.

668
00:19:08.625 --> 00:19:09.625
So Amanda probably has had

669
00:19:09.625 --> 00:19:10.666
this picture on the slides.

670
00:19:10.958 --> 00:19:12.791
If you're watching the video for the last

671
00:19:12.791 --> 00:19:14.166
five minutes, we've been talking instead

672
00:19:14.166 --> 00:19:15.541
of just the slide that

673
00:19:15.541 --> 00:19:17.250
says it has a nice GUI editor.

674
00:19:17.458 --> 00:19:19.416
But you can see exactly the slides we're

675
00:19:19.416 --> 00:19:20.750
looking at right now, basically.

676
00:19:21.208 --> 00:19:22.750
And you can see the text over on the left

677
00:19:22.750 --> 00:19:24.000
and a preview of the

678
00:19:24.000 --> 00:19:25.958
previous slide on the right.

679
00:19:26.000 --> 00:19:27.000
And it looks really nice.

680
00:19:27.250 --> 00:19:28.000
It's about what you would

681
00:19:28.000 --> 00:19:29.791
expect from a visual editor.

682
00:19:30.166 --> 00:19:32.416
But because it's still usable in all the

683
00:19:32.416 --> 00:19:34.958
places that LaTeX was, it also comes as a

684
00:19:35.083 --> 00:19:36.166
command line interface tool.

685
00:19:36.458 --> 00:19:38.333
So you just can type 'typst compile

686
00:19:38.333 --> 00:19:41.375
input source file output PDF' or 'output

687
00:19:41.375 --> 00:19:43.833
PNG,' and it'll just spit that out.

688
00:19:44.083 --> 00:19:45.583
And because it's in Rust, it runs

689
00:19:45.583 --> 00:19:48.291
stupidly fast and it's fairly instant.

690
00:19:48.291 --> 00:19:49.208
So I've done things like

691
00:19:49.208 --> 00:19:51.083
just run watch exec on this.

692
00:19:51.083 --> 00:19:52.500
So every time I hit save on the file, it

693
00:19:52.500 --> 00:19:54.125
immediately regenerates the PDF, which

694
00:19:54.125 --> 00:19:55.208
you can do with LaTeX as well.

695
00:19:55.541 --> 00:19:57.708
But it just is nice and snappy, like I

696
00:19:57.708 --> 00:19:59.833
said, because it's in Rust and I didn't

697
00:19:59.833 --> 00:20:00.416
mention it: the

698
00:20:00.416 --> 00:20:01.333
entire thing's open source.

699
00:20:01.541 --> 00:20:02.625
I don't think their web

700
00:20:02.625 --> 00:20:03.875
GUI tool is open source.

701
00:20:03.875 --> 00:20:04.500
I'm not sure.

702
00:20:04.500 --> 00:20:06.250
But like the core engine in the language

703
00:20:06.250 --> 00:20:09.583
itself are open source and now fairly

704
00:20:09.583 --> 00:20:12.166
recently published as a crate, which

705
00:20:12.166 --> 00:20:13.166
means you can just

706
00:20:13.166 --> 00:20:14.416
add it to your project.

707
00:20:14.958 --> 00:20:16.416
And I'll show you what I did with this,

708
00:20:16.416 --> 00:20:18.625
but it it works pretty simply as well.

709
00:20:18.625 --> 00:20:19.625
Like you give it the text.

710
00:20:19.916 --> 00:20:21.000
It has this concept of a

711
00:20:21.000 --> 00:20:22.333
world that you need to give it.

712
00:20:22.375 --> 00:20:24.208
And that's how you handle like loading

713
00:20:24.208 --> 00:20:26.041
plugins and fonts and things like that.

714
00:20:26.041 --> 00:20:27.375
So you can make a really minimal one that

715
00:20:27.375 --> 00:20:29.791
has like the one font you need and then

716
00:20:29.791 --> 00:20:30.666
you just do compile.

717
00:20:31.125 --> 00:20:32.958
<v Amos Wenger>So I'm looking into their their pricing

718
00:20:32.958 --> 00:20:34.291
to see what the model is because it's

719
00:20:34.291 --> 00:20:36.083
always a question to ask.

720
00:20:36.083 --> 00:20:37.333
You find a tool, it's cool.

721
00:20:37.875 --> 00:20:39.291
The source is available, but especially

722
00:20:39.291 --> 00:20:42.291
now in 2025, you know, in the in the wake

723
00:20:42.291 --> 00:20:43.750
of all the business

724
00:20:43.750 --> 00:20:45.625
source available license.

725
00:20:46.166 --> 00:20:48.291
The BSL, I forget exactly the name, but

726
00:20:48.291 --> 00:20:49.333
there's a lot of software.

727
00:20:49.416 --> 00:20:51.291
The source is there, but it's not

728
00:20:51.291 --> 00:20:53.416
necessarily open source in the sense that

729
00:20:53.416 --> 00:20:55.958
you can't change it, you can't recompile,

730
00:20:55.958 --> 00:20:57.208
you can't distribute the changes.

731
00:20:57.666 --> 00:20:59.958
And also just you should be interested in

732
00:20:59.958 --> 00:21:01.125
the in the future of

733
00:21:01.125 --> 00:21:02.083
the software you use.

734
00:21:02.083 --> 00:21:03.291
And by you, I don't mean you, James,

735
00:21:03.291 --> 00:21:04.083
specifically, I mean

736
00:21:04.083 --> 00:21:05.166
everyone listening to this.

737
00:21:05.250 --> 00:21:05.833
Anyone using a tool.

738
00:21:06.250 --> 00:21:06.458
Exactly.

739
00:21:06.833 --> 00:21:08.708
So I think they're going for an open core

740
00:21:08.708 --> 00:21:10.833
model where the whole technology, because

741
00:21:10.833 --> 00:21:12.166
you have to reassure people, people are

742
00:21:12.166 --> 00:21:13.291
going to write a lot

743
00:21:13.291 --> 00:21:14.333
of documents with this.

744
00:21:14.666 --> 00:21:16.375
So they have to know that even the

745
00:21:16.375 --> 00:21:17.875
company goes out of business, they still

746
00:21:17.875 --> 00:21:19.875
can do something with

747
00:21:19.875 --> 00:21:21.375
all that Typst source code.

748
00:21:21.708 --> 00:21:23.125
So that I think that's why it's open

749
00:21:23.125 --> 00:21:24.416
source and also because then

750
00:21:24.416 --> 00:21:25.375
they get free contributions.

751
00:21:26.208 --> 00:21:27.625
But then I think what they're trying to

752
00:21:27.625 --> 00:21:29.875
monetize is the whole collaborative

753
00:21:30.000 --> 00:21:31.208
editing experience on the

754
00:21:31.208 --> 00:21:32.458
web thing and cloud storage.

755
00:21:32.458 --> 00:21:33.250
And so cloud storage

756
00:21:33.250 --> 00:21:34.875
itself is not enough.

757
00:21:35.666 --> 00:21:36.666
It's hard to make a

758
00:21:36.666 --> 00:21:38.208
living just selling that.

759
00:21:38.416 --> 00:21:40.500
It's Google Docs level of collaboration

760
00:21:40.500 --> 00:21:42.250
where many people can have the same

761
00:21:42.250 --> 00:21:43.333
document open at the same time.

762
00:21:43.333 --> 00:21:44.083
You see people editing.

763
00:21:44.083 --> 00:21:45.416
They're using CRDT under

764
00:21:45.416 --> 00:21:46.541
the the hood to do that.

765
00:21:46.583 --> 00:21:48.041
So I think that's what they're going for.

766
00:21:48.375 --> 00:21:50.166
And I have no idea if they're profitable

767
00:21:50.166 --> 00:21:52.416
or not, but we'll ask

768
00:21:52.416 --> 00:21:53.625
them and get back to you.

769
00:21:53.625 --> 00:21:54.250
No, we won't.

770
00:21:54.250 --> 00:21:54.500
Yeah.

771
00:21:54.500 --> 00:21:55.958
<v James Munns>I know they've also gotten some funding

772
00:21:55.958 --> 00:21:58.750
from like some European grants and stuff.

773
00:21:58.750 --> 00:21:59.791
And I think from their university,

774
00:22:00.041 --> 00:22:00.666
they're going through this

775
00:22:00.666 --> 00:22:01.791
process are always difficult.

776
00:22:01.791 --> 00:22:02.416
So I'm sure they're

777
00:22:02.416 --> 00:22:04.250
they're aiming to be profitable.

778
00:22:04.500 --> 00:22:05.375
I haven't talked to them.

779
00:22:05.375 --> 00:22:06.875
But yeah, it does make sense to me that

780
00:22:06.875 --> 00:22:08.416
like you have sort of this core engine

781
00:22:08.416 --> 00:22:10.333
that the really like tech focused people

782
00:22:10.333 --> 00:22:11.833
can just download the open source version

783
00:22:11.833 --> 00:22:12.791
and install it and run it.

784
00:22:13.041 --> 00:22:14.333
But if you want it to be more applicable

785
00:22:14.333 --> 00:22:16.541
to more industries, having a really nice

786
00:22:16.541 --> 00:22:17.958
collaborative editor because you want

787
00:22:17.958 --> 00:22:20.833
this to be useful for teams that don't

788
00:22:20.833 --> 00:22:21.666
know source control.

789
00:22:21.958 --> 00:22:23.250
You want to be able to say, "I have 10

790
00:22:23.250 --> 00:22:24.750
accounts for the people in my newsroom

791
00:22:24.750 --> 00:22:26.291
and we can collaborate on this and we can

792
00:22:26.291 --> 00:22:28.708
kick out a newspaper every day or every

793
00:22:28.708 --> 00:22:29.875
week," or something like that.

794
00:22:29.875 --> 00:22:31.833
So I definitely see that as being the

795
00:22:31.833 --> 00:22:33.583
like you want people to go and run with

796
00:22:33.583 --> 00:22:36.000
it in open source, but then monetize the

797
00:22:36.000 --> 00:22:37.041
ones where it's like, hey, if you're a

798
00:22:37.041 --> 00:22:38.583
business using this, if I've used this

799
00:22:38.583 --> 00:22:39.958
for more than a week, we'll probably

800
00:22:39.958 --> 00:22:40.750
start looking to that

801
00:22:40.750 --> 00:22:41.833
because they also accept sponsors.

802
00:22:42.166 --> 00:22:43.375
So I know they have a GitHub Sponsors.

803
00:22:43.791 --> 00:22:45.875
So if that's something that becomes a

804
00:22:45.875 --> 00:22:47.833
serious part of my workflow more than

805
00:22:47.833 --> 00:22:50.333
this slide deck and a couple of the other

806
00:22:50.333 --> 00:22:51.541
things that I'm going to show off, then

807
00:22:51.541 --> 00:22:52.833
chances are we'll probably--

808
00:22:52.833 --> 00:22:54.958
<v Amos Wenger>So this slide deck is made with Typst.

809
00:22:54.958 --> 00:22:55.416
<v James Munns>Yep.

810
00:22:55.500 --> 00:22:56.458
<v Amos Wenger>But the other ones were not.

811
00:22:56.458 --> 00:22:56.916
<v James Munns>No.

812
00:22:56.916 --> 00:22:57.541
<v Amos Wenger>Just this one.

813
00:22:57.541 --> 00:22:59.333
<v James Munns>The history of my slides: I was using

814
00:22:59.333 --> 00:23:00.750
Google Docs for a while.

815
00:23:00.916 --> 00:23:02.500
And then after some of your presentations

816
00:23:02.500 --> 00:23:05.166
where you showed Keynote handling some

817
00:23:05.166 --> 00:23:07.125
stuff better, I started using Keynote and

818
00:23:07.166 --> 00:23:08.833
I went, "Well, this is kind of nice." And then...

819
00:23:08.833 --> 00:23:09.583
<v Amos Wenger>And then I

820
00:23:09.583 --> 00:23:10.666
switched back to Google Docs.

821
00:23:10.666 --> 00:23:11.958
<v James Munns>You switched back to Google Docs, and now--

822
00:23:11.958 --> 00:23:13.666
<v Amos Wenger>I'm a real influencer, I'm

823
00:23:13.666 --> 00:23:15.458
like, "Everyone's doing this new thing."

824
00:23:15.458 --> 00:23:16.250
And then I don't use it.

825
00:23:16.500 --> 00:23:17.875
<v James Munns>And then now I'm switching over to Typst.

826
00:23:17.875 --> 00:23:18.375
So we'll see.

827
00:23:18.375 --> 00:23:19.833
I don't know if it's going to stick, but

828
00:23:19.833 --> 00:23:22.166
I aim to make it fairly similar.

829
00:23:22.166 --> 00:23:23.791
You probably can tell some difference

830
00:23:23.791 --> 00:23:25.000
between the two of them, but

831
00:23:25.000 --> 00:23:26.375
<v Amos Wenger>I like the way it looks.

832
00:23:26.375 --> 00:23:27.958
<v James Munns>I was just eyeballing the font sizes and

833
00:23:27.958 --> 00:23:29.541
stuff, but the vibes are the same.

834
00:23:29.541 --> 00:23:30.916
<v Amos Wenger>I might follow you on this one.

835
00:23:30.916 --> 00:23:31.458
We'll see.

836
00:23:31.458 --> 00:23:31.708
<v James Munns>Nice.

837
00:23:32.291 --> 00:23:33.833
So what does the extra source code look

838
00:23:33.833 --> 00:23:35.875
like, especially for people who haven't

839
00:23:35.875 --> 00:23:37.583
like myself, haven't done

840
00:23:37.583 --> 00:23:39.083
programming in LaTeX or whatever.

841
00:23:39.083 --> 00:23:40.583
So I won't be able to contrast this, but...

842
00:23:40.583 --> 00:23:43.250
This is all of the source code necessary

843
00:23:43.250 --> 00:23:44.875
to render up to the first

844
00:23:44.875 --> 00:23:46.458
slide of this presentation.

845
00:23:46.916 --> 00:23:48.416
So a couple of things are going on.

846
00:23:48.791 --> 00:23:50.541
Function calls typically happen with a

847
00:23:50.541 --> 00:23:53.375
pound sign or a hashtag and then the name

848
00:23:53.375 --> 00:23:55.333
of a function, but you can also set

849
00:23:55.333 --> 00:23:57.333
essentially like the default values to

850
00:23:57.333 --> 00:24:00.166
all of these by doing hash set and then

851
00:24:00.166 --> 00:24:01.541
the name of the function.

852
00:24:02.083 --> 00:24:05.041
So I type hash set page and then I fill

853
00:24:05.041 --> 00:24:06.958
in a ton of parameters like the width of

854
00:24:06.958 --> 00:24:08.875
the page, the background fill, which is

855
00:24:08.875 --> 00:24:09.791
black, the margin

856
00:24:09.791 --> 00:24:10.833
that I want on the page.

857
00:24:11.458 --> 00:24:13.583
And then I can set the header here.

858
00:24:14.000 --> 00:24:16.000
And so I can actually put a chunk of code

859
00:24:16.000 --> 00:24:17.958
in here that is going to be rendered as

860
00:24:17.958 --> 00:24:19.291
the header on all of my pages.

861
00:24:19.833 --> 00:24:21.375
The other main like syntax thing that

862
00:24:21.375 --> 00:24:23.458
you'll see here is when you see square

863
00:24:23.458 --> 00:24:24.958
brackets, that's saying

864
00:24:24.958 --> 00:24:27.708
here's a chunk of text, basically.

865
00:24:28.083 --> 00:24:28.791
It's like almost like a

866
00:24:28.791 --> 00:24:30.291
closure almost for text.

867
00:24:30.708 --> 00:24:32.583
So it's saying like the header parameter

868
00:24:32.583 --> 00:24:33.791
here would take some

869
00:24:33.791 --> 00:24:35.333
text or some content here.

870
00:24:35.833 --> 00:24:37.458
And if I want to have a multi-line thing

871
00:24:37.458 --> 00:24:39.125
where maybe I call other functions and

872
00:24:39.125 --> 00:24:41.333
set some stuff, I put those inside of

873
00:24:41.333 --> 00:24:44.166
square brackets, which will kind of

874
00:24:44.166 --> 00:24:46.250
encapsulate the thing that I'm running.

875
00:24:46.250 --> 00:24:46.791
So I can set

876
00:24:46.791 --> 00:24:48.333
alignment, I make a rectangle.

877
00:24:48.833 --> 00:24:50.416
And then in the rectangle, you can see

878
00:24:50.416 --> 00:24:51.583
one more piece of syntax.

879
00:24:52.375 --> 00:24:53.458
Most functions take

880
00:24:53.458 --> 00:24:55.625
content as their last argument.

881
00:24:56.166 --> 00:24:58.583
And you can either put it inside the

882
00:24:58.583 --> 00:25:00.708
parentheses of the function call, or you

883
00:25:00.708 --> 00:25:02.333
can put it as a square bracket

884
00:25:02.333 --> 00:25:04.625
immediately after the function call.

885
00:25:04.625 --> 00:25:06.583
And it becomes essentially the last parameter of that

886
00:25:06.583 --> 00:25:08.625
<v Amos Wenger>That reminds me of Ruby blocks.

887
00:25:09.041 --> 00:25:10.041
Have you have you done Ruby?

888
00:25:10.291 --> 00:25:11.791
Do you have any Ruby experience?

889
00:25:11.791 --> 00:25:12.333
<v James Munns>No, I haven't.

890
00:25:12.333 --> 00:25:13.875
<v Amos Wenger>They have this weird thing that I've

891
00:25:13.875 --> 00:25:15.250
always hated, actually.

892
00:25:15.583 --> 00:25:16.458
I like when languages

893
00:25:16.458 --> 00:25:17.625
explicitly take closure.

894
00:25:17.833 --> 00:25:19.416
So I like Rust, I like some others.

895
00:25:19.791 --> 00:25:20.750
I don't know what Python does.

896
00:25:21.000 --> 00:25:23.583
But for Ruby, you do... I forget the exact

897
00:25:23.583 --> 00:25:25.375
syntax, but you can

898
00:25:25.375 --> 00:25:26.875
pass a block to a function.

899
00:25:27.125 --> 00:25:28.458
And it's not an argument.

900
00:25:28.458 --> 00:25:29.666
It's something else.

901
00:25:29.666 --> 00:25:30.833
And it has a weird syntax.

902
00:25:31.250 --> 00:25:32.916
And sure, it looks it feels nice to

903
00:25:32.916 --> 00:25:34.458
write, but it's-- I don't know.

904
00:25:34.791 --> 00:25:36.083
And this feels like the same thing. You

905
00:25:36.083 --> 00:25:37.666
can either-- but you can have it

906
00:25:37.666 --> 00:25:38.833
both ways here, because you can either

907
00:25:38.833 --> 00:25:41.500
pass it as an argument or use that kind

908
00:25:41.500 --> 00:25:43.250
of square bracket block syntax, right?

909
00:25:43.458 --> 00:25:45.500
<v James Munns>Yeah, so if I-- you can also like save

910
00:25:45.500 --> 00:25:47.333
content off in a variable name.

911
00:25:47.333 --> 00:25:49.333
So if I was doing that, I might just pass

912
00:25:49.333 --> 00:25:50.875
it as the last argument to rectangle.

913
00:25:51.291 --> 00:25:53.000
Since I'm writing it in line, I'll

914
00:25:53.000 --> 00:25:55.125
probably put it after, and this is just

915
00:25:55.125 --> 00:25:57.208
saying so like rectangle when you give it

916
00:25:57.208 --> 00:25:58.333
content, it puts that

917
00:25:58.333 --> 00:25:59.875
content inside the rectangle.

918
00:26:00.333 --> 00:26:01.791
So this content that I'm putting there,

919
00:26:01.791 --> 00:26:03.458
I'm putting in a stack, which is

920
00:26:03.458 --> 00:26:04.375
basically like three

921
00:26:04.375 --> 00:26:05.708
things right next to each other.

922
00:26:06.000 --> 00:26:08.208
And it's the direction is left to right.

923
00:26:08.625 --> 00:26:10.166
So you could have TTB, which is top to

924
00:26:10.166 --> 00:26:14.500
bottom or LTR or RTL or BTT, I guess, but

925
00:26:14.500 --> 00:26:16.375
I'm just saying, okay, I need the text,

926
00:26:16.958 --> 00:26:19.166
which is 24 point font that says "Self-

927
00:26:19.166 --> 00:26:21.791
Directed Research," a small rectangle,

928
00:26:21.791 --> 00:26:23.291
which just gives me some spacing between

929
00:26:23.291 --> 00:26:26.458
the text and the image, and then the

930
00:26:26.458 --> 00:26:28.583
image, and I'm telling it to scale that

931
00:26:28.583 --> 00:26:30.166
to the height, which is the

932
00:26:30.166 --> 00:26:31.500
height of the header 100%.

933
00:26:31.791 --> 00:26:33.416
So I just say, Okay, these are the three

934
00:26:33.416 --> 00:26:34.333
things that go in there.

935
00:26:34.666 --> 00:26:35.541
It's aligned right.

936
00:26:35.833 --> 00:26:36.416
And then these three

937
00:26:36.416 --> 00:26:37.416
things in this order.

938
00:26:37.750 --> 00:26:39.000
<v Amos Wenger>So can I ask a question?

939
00:26:39.375 --> 00:26:39.791
<v James Munns>Sure.

940
00:26:39.958 --> 00:26:40.583
<v Amos Wenger>Everything makes

941
00:26:40.583 --> 00:26:41.791
sense to me in this code.

942
00:26:42.500 --> 00:26:44.000
But if you're listening to this podcast,

943
00:26:44.000 --> 00:26:45.875
you should be looking at this podcast, go

944
00:26:45.875 --> 00:26:47.166
on YouTube or the website to get the

945
00:26:47.166 --> 00:26:48.833
slides because it's really hard to just

946
00:26:48.833 --> 00:26:50.500
describe with sounds.

947
00:26:50.875 --> 00:26:51.791
But I'm looking at the

948
00:26:51.791 --> 00:26:52.916
slide that this produces.

949
00:26:52.916 --> 00:26:55.208
And I don't understand height 80% on the

950
00:26:55.208 --> 00:26:56.833
rectangle because you're making a header

951
00:26:56.833 --> 00:26:58.041
the width is 100%.

952
00:26:58.291 --> 00:27:00.375
I understand that... 80% of what

953
00:27:00.375 --> 00:27:01.416
because it's not--

954
00:27:01.416 --> 00:27:03.416
<v James Munns>Yeah, it's 80% of the parent context.

955
00:27:03.750 --> 00:27:06.208
So of the height of the header, the

956
00:27:06.208 --> 00:27:08.250
rectangle that's inside of it is 80%.

957
00:27:08.750 --> 00:27:10.875
And then the stack of three items then

958
00:27:10.875 --> 00:27:11.875
exist within the

959
00:27:11.875 --> 00:27:13.208
bounds of that rectangle.

960
00:27:13.208 --> 00:27:14.666
<v Amos Wenger>So there's a built in

961
00:27:14.666 --> 00:27:15.833
header thingy for pages?

962
00:27:16.250 --> 00:27:16.500
<v James Munns>Yes.

963
00:27:17.000 --> 00:27:19.000
Yeah, I think there's a footer as well.

964
00:27:19.416 --> 00:27:22.500
<v Amos Wenger>But okay, so there's a preset size for

965
00:27:22.500 --> 00:27:25.458
headers that are part of every page that

966
00:27:25.458 --> 00:27:27.750
you just stuff the rectangle in there.

967
00:27:27.958 --> 00:27:28.666
<v James Munns>Yep, exactly.

968
00:27:28.833 --> 00:27:29.250
<v Amos Wenger>I see.

969
00:27:29.250 --> 00:27:30.541
<v James Munns>And I think they're-- I was actually

970
00:27:30.541 --> 00:27:31.791
looking at how to tweak that.

971
00:27:31.791 --> 00:27:32.791
I don't know, because I'm

972
00:27:32.791 --> 00:27:34.250
only like four days into this.

973
00:27:34.250 --> 00:27:34.916
So I don't know how you

974
00:27:34.916 --> 00:27:36.041
change the size of the header.

975
00:27:36.416 --> 00:27:37.666
But I know that it obeys

976
00:27:37.666 --> 00:27:38.750
the margins of the page.

977
00:27:38.958 --> 00:27:40.791
So that's why I have my margin set so

978
00:27:40.791 --> 00:27:41.916
wide is because I wanted the

979
00:27:41.916 --> 00:27:42.791
header to be over to the right

980
00:27:42.791 --> 00:27:44.541
<v Amos Wenger>It's interesting, because it feels like you're

981
00:27:44.541 --> 00:27:46.291
building the page from first principles

982
00:27:46.291 --> 00:27:48.416
like you're making rectangles and then

983
00:27:48.416 --> 00:27:50.708
alignments and everything and... but also

984
00:27:50.708 --> 00:27:52.583
there's a hard coded header and footer.

985
00:27:52.875 --> 00:27:54.875
Like those concepts are so deeply

986
00:27:54.875 --> 00:27:56.750
embedded into how we think about

987
00:27:56.750 --> 00:27:58.458
documents that they're just there by

988
00:27:58.458 --> 00:27:59.833
default. It feels like something they

989
00:27:59.833 --> 00:28:01.541
would have added to the standard library

990
00:28:01.541 --> 00:28:03.416
instead of baked in. I don't know,

991
00:28:03.416 --> 00:28:04.333
<v James Munns>Maybe! It's just how

992
00:28:04.333 --> 00:28:05.541
you... Yeah, I don't know.

993
00:28:05.541 --> 00:28:06.166
Fair disclaimer.

994
00:28:06.458 --> 00:28:07.500
If you're more experienced than me,

995
00:28:07.500 --> 00:28:08.916
you're probably like, "Oh, why are

996
00:28:08.916 --> 00:28:10.083
you doing it like that?

997
00:28:10.083 --> 00:28:11.958
You really are like- you're gluing rocks

998
00:28:11.958 --> 00:28:13.083
together at this point."

999
00:28:13.083 --> 00:28:15.875
So this is with like three days of

1000
00:28:15.875 --> 00:28:17.125
actually working on this.

1001
00:28:17.541 --> 00:28:19.500
But to the point where I'm-- I know just

1002
00:28:19.500 --> 00:28:20.500
enough to be dangerous.

1003
00:28:20.750 --> 00:28:22.083
So I was able to put together a whole

1004
00:28:22.083 --> 00:28:24.625
slide deck in one sitting for this.

1005
00:28:25.083 --> 00:28:26.833
And then so we come out of the page

1006
00:28:26.833 --> 00:28:28.666
setup, I set some other stuff like okay,

1007
00:28:28.958 --> 00:28:29.625
I'm setting the align

1008
00:28:29.708 --> 00:28:30.625
to center and horizon.

1009
00:28:30.958 --> 00:28:33.041
So it's going to be aligned left to right

1010
00:28:33.041 --> 00:28:35.333
center and also top to bottom center, and

1011
00:28:35.333 --> 00:28:37.208
my text is going to be white with the

1012
00:28:37.208 --> 00:28:39.375
font Departure Mono on this size.

1013
00:28:39.833 --> 00:28:41.583
And then I just start typing text like

1014
00:28:41.583 --> 00:28:44.125
"Typst" line break "is pretty neat."

1015
00:28:44.125 --> 00:28:45.208
And we get that first slide

1016
00:28:45.208 --> 00:28:46.166
where you get that over that.

1017
00:28:46.375 --> 00:28:48.250
And then to make more slides, it's just

1018
00:28:48.250 --> 00:28:50.083
hash page break parentheses

1019
00:28:50.083 --> 00:28:51.875
because each slide is a page.

1020
00:28:52.583 --> 00:28:53.833
So from here on, it's

1021
00:28:53.833 --> 00:28:55.291
pretty much just text.

1022
00:28:55.708 --> 00:28:58.791
<v Amos Wenger>So horizon is just horizontal alignment?

1023
00:28:59.500 --> 00:29:01.166
<v James Munns>Yeah, it's horizontal center.

1024
00:29:01.583 --> 00:29:03.541
It's like the up down version of

1025
00:29:03.541 --> 00:29:04.708
center, if that makes sense.

1026
00:29:05.166 --> 00:29:08.000
<v Amos Wenger>Yeah, I built a GUI with egui recently

1027
00:29:08.000 --> 00:29:09.708
doing immediate mode layout.

1028
00:29:10.125 --> 00:29:10.958
And I had to think about

1029
00:29:10.958 --> 00:29:12.208
that for one week straight.

1030
00:29:12.583 --> 00:29:14.583
So I have no... I have no spoons left.

1031
00:29:14.583 --> 00:29:15.666
I will trust you on that one.

1032
00:29:15.666 --> 00:29:15.875
<v James Munns>Okay.

1033
00:29:16.291 --> 00:29:16.625
Yeah.

1034
00:29:16.625 --> 00:29:17.791
So I mean, the rest of the slide, it's

1035
00:29:17.791 --> 00:29:19.833
got some other cool things like it takes

1036
00:29:19.833 --> 00:29:22.791
themes for... so I mean, like, what we're

1037
00:29:22.791 --> 00:29:24.250
looking at now is a syntax highlighted

1038
00:29:24.250 --> 00:29:25.458
block, which is just

1039
00:29:25.458 --> 00:29:26.958
text in my actual slides.

1040
00:29:27.541 --> 00:29:30.875
And you can import themes and it uses the

1041
00:29:30.875 --> 00:29:32.708
dot TM theme format,

1042
00:29:33.000 --> 00:29:34.791
which Sublime takes as well.

1043
00:29:35.250 --> 00:29:37.375
So I exported the the Monokai theme that

1044
00:29:37.375 --> 00:29:38.500
I use in my Sublime text

1045
00:29:38.500 --> 00:29:40.458
editor, imported into that.

1046
00:29:40.750 --> 00:29:43.666
And then all of a sudden now my slides

1047
00:29:43.666 --> 00:29:46.416
code formatting looks exactly like my

1048
00:29:46.416 --> 00:29:48.750
text editor does and Amos won't yell at

1049
00:29:48.750 --> 00:29:50.000
me anymore because I'm not taking

1050
00:29:50.000 --> 00:29:51.791
screenshots of my text

1051
00:29:51.791 --> 00:29:53.083
editor, which is great!

1052
00:29:53.625 --> 00:29:54.916
<v Amos Wenger>Yes and no.

1053
00:29:54.916 --> 00:29:55.125
Yes.

1054
00:29:56.375 --> 00:29:56.583
Yes, this--

1055
00:29:56.791 --> 00:29:58.625
<v Amanda Majorowicz>Amos was still yell at us.

1056
00:29:58.625 --> 00:29:59.083
Don't worry.

1057
00:29:59.083 --> 00:29:59.458
<v James Munns>Yeah.

1058
00:29:59.458 --> 00:30:01.125
<v Amos Wenger>First of all, I don't yell.

1059
00:30:01.500 --> 00:30:02.958
I use my inside voice.

1060
00:30:04.250 --> 00:30:06.500
This is so much better.

1061
00:30:07.083 --> 00:30:08.458
And I'm so happy for you, James.

1062
00:30:08.791 --> 00:30:12.416
But it's still I don't like text made

1063
00:30:12.416 --> 00:30:14.375
grammars, because they're just basically

1064
00:30:14.375 --> 00:30:16.000
regular expressions.

1065
00:30:17.333 --> 00:30:19.958
And this would have been the status quo

1066
00:30:19.958 --> 00:30:22.250
still today if the Tree-sitter

1067
00:30:22.250 --> 00:30:23.625
project hadn't been made.

1068
00:30:23.625 --> 00:30:25.375
And I wish I could credit the people.

1069
00:30:25.583 --> 00:30:27.500
Give me one hot second to look up the

1070
00:30:27.500 --> 00:30:29.833
people behind Tree-sitter who's

1071
00:30:29.833 --> 00:30:31.583
responsible for-- because like they wrote

1072
00:30:31.583 --> 00:30:32.875
actual parsers, they

1073
00:30:32.875 --> 00:30:34.041
wrote actual grammars.

1074
00:30:34.458 --> 00:30:36.791
And now you can have actual good--

1075
00:30:36.791 --> 00:30:37.875
<v James Munns>They're also great because they're

1076
00:30:37.875 --> 00:30:40.583
generated and they do one generated C

1077
00:30:40.583 --> 00:30:42.291
file per language, which means some

1078
00:30:42.291 --> 00:30:45.375
languages like Rust or Haskell and stuff

1079
00:30:45.375 --> 00:30:46.458
end up generating

1080
00:30:46.458 --> 00:30:49.333
like 90,000 line C files.

1081
00:30:49.666 --> 00:30:52.375
And it makes the GitHub view of those

1082
00:30:52.375 --> 00:30:53.833
files just fall over.

1083
00:30:54.208 --> 00:30:57.083
<v Amos Wenger>So the presentation, the initial

1084
00:30:57.083 --> 00:30:58.583
presentation of Tree-sitter at GitHub

1085
00:30:58.583 --> 00:31:00.791
Universe 2017 was by Max Brunsfeld.

1086
00:31:00.791 --> 00:31:01.291
And I know we've

1087
00:31:01.291 --> 00:31:02.416
interacted online before.

1088
00:31:02.666 --> 00:31:03.875
Max, you're a real one.

1089
00:31:03.875 --> 00:31:04.583
Thank you so much.

1090
00:31:05.125 --> 00:31:06.041
James, try again.

1091
00:31:06.916 --> 00:31:07.416
Do better.

1092
00:31:07.666 --> 00:31:08.333
<v James Munns>I got to look up.

1093
00:31:08.333 --> 00:31:10.208
I don't know how Typst actually does code

1094
00:31:10.208 --> 00:31:11.333
highlighting because it like

1095
00:31:11.333 --> 00:31:13.833
it takes the TM theme option.

1096
00:31:13.833 --> 00:31:15.375
That's what I don't actually know what

1097
00:31:15.375 --> 00:31:18.125
the engine that uses to do that.

1098
00:31:18.208 --> 00:31:19.833
<v Amos Wenger>Right - maybe it's just taking the theme and not

1099
00:31:19.833 --> 00:31:22.875
the actual grammars.

1100
00:31:22.875 --> 00:31:23.666
<v James Munns>Yeah, I don't know.

1101
00:31:23.833 --> 00:31:25.041
But it is also written in Rust.

1102
00:31:25.041 --> 00:31:26.666
So I'm sure if we wanted to glue in Tree-sitter

1103
00:31:26.666 --> 00:31:27.666
onto it, then they could.

1104
00:31:27.958 --> 00:31:28.333
Yeah, yeah.

1105
00:31:28.333 --> 00:31:29.000
<v Amos Wenger>It would be surprising

1106
00:31:29.000 --> 00:31:30.250
if they didn't actually.

1107
00:31:31.000 --> 00:31:31.208
<v James Munns>Yeah.

1108
00:31:31.333 --> 00:31:33.416
But like I said, I've learned just enough

1109
00:31:33.416 --> 00:31:34.583
to become dangerous in it.

1110
00:31:34.958 --> 00:31:37.166
And because... this is how my brain works,

1111
00:31:37.166 --> 00:31:38.833
once I get a new tool, it's great.

1112
00:31:38.833 --> 00:31:40.500
Because all these problems where I went,

1113
00:31:40.500 --> 00:31:41.583
I don't know how to solve it.

1114
00:31:41.833 --> 00:31:43.458
My brain immediately starts applying it

1115
00:31:43.458 --> 00:31:44.208
to that, even if it's

1116
00:31:44.208 --> 00:31:45.291
not the best fit tool.

1117
00:31:45.291 --> 00:31:47.291
But I've never had a tool for building

1118
00:31:47.291 --> 00:31:49.125
like UI designs before.

1119
00:31:50.250 --> 00:31:51.958
Which means even on embedded systems and

1120
00:31:51.958 --> 00:31:54.291
stuff, I've always just been, you know,

1121
00:31:54.625 --> 00:31:55.958
bare minimum text and

1122
00:31:55.958 --> 00:31:57.041
rectangles and stuff.

1123
00:31:57.041 --> 00:31:58.625
My minimalism isn't

1124
00:31:58.625 --> 00:32:00.500
some design principle.

1125
00:32:00.708 --> 00:32:01.583
It's like this is literally

1126
00:32:01.583 --> 00:32:03.000
literally the best I can do.

1127
00:32:03.000 --> 00:32:03.958
And somehow it looks clean

1128
00:32:03.958 --> 00:32:05.291
and nice most of the time.

1129
00:32:05.666 --> 00:32:07.791
And that project for me was I'm building

1130
00:32:07.791 --> 00:32:08.750
a little E-paper

1131
00:32:08.750 --> 00:32:11.083
display clock for my house.

1132
00:32:11.083 --> 00:32:11.833
<v Amos Wenger>That's so cute!

1133
00:32:11.833 --> 00:32:13.333
<v James Munns>And this is built on all

1134
00:32:13.333 --> 00:32:14.541
the PostStation stuff.

1135
00:32:14.541 --> 00:32:15.291
<v Amos Wenger>That's why the E-paper

1136
00:32:15.291 --> 00:32:18.750
thingy you posted about was for.

1137
00:32:18.750 --> 00:32:19.000
<v James Munns>Yeah.

1138
00:32:19.458 --> 00:32:21.583
So I have PostStation, which is usually

1139
00:32:21.583 --> 00:32:23.250
set up so that you have like a Linux

1140
00:32:23.250 --> 00:32:25.333
computer running the show and you've got

1141
00:32:25.333 --> 00:32:26.833
like devices out on the edge.

1142
00:32:27.500 --> 00:32:29.916
So what I do is once a minute on my

1143
00:32:29.916 --> 00:32:32.250
laptop, it generates this image.

1144
00:32:32.250 --> 00:32:34.625
It knows that it's a 400 by 300 pixel

1145
00:32:34.625 --> 00:32:35.875
black and white picture.

1146
00:32:35.875 --> 00:32:37.541
And I use Typst typesetting.

1147
00:32:38.000 --> 00:32:40.750
And I actually fill in the time and

1148
00:32:40.750 --> 00:32:42.125
whatever the values are.

1149
00:32:42.125 --> 00:32:44.083
Because in that screenshot before where I

1150
00:32:44.083 --> 00:32:45.708
showed you building it as a crate, I can

1151
00:32:45.708 --> 00:32:49.166
just use a Rust string and format in the

1152
00:32:49.166 --> 00:32:52.208
numbers and words you see here and then

1153
00:32:52.208 --> 00:32:54.166
take that formatted string, run it

1154
00:32:54.166 --> 00:32:57.541
through Typst as a rendering engine, spit

1155
00:32:57.541 --> 00:32:59.666
it out into a bitmap, compress it so I

1156
00:32:59.666 --> 00:33:01.500
can put it over my wireless network and

1157
00:33:01.500 --> 00:33:03.000
then send the compressed black and white

1158
00:33:03.000 --> 00:33:06.000
image to my device, which reassembles it,

1159
00:33:06.000 --> 00:33:07.875
shoves it onto the E-paper display and

1160
00:33:07.875 --> 00:33:08.541
then puts the E-paper

1161
00:33:08.541 --> 00:33:09.416
display back to sleep.

1162
00:33:09.958 --> 00:33:12.083
So now I have this whole new world of

1163
00:33:12.083 --> 00:33:14.041
user interfaces open to me because I've

1164
00:33:14.041 --> 00:33:16.041
never learned HTML or CSS really.

1165
00:33:16.625 --> 00:33:19.000
So now I have one tool in that field and

1166
00:33:19.000 --> 00:33:20.250
I want to apply it to

1167
00:33:20.250 --> 00:33:22.041
literally everything.

1168
00:33:22.500 --> 00:33:24.000
<v Amos Wenger>That's very fun.

1169
00:33:24.375 --> 00:33:25.291
How do you deal with the,

1170
00:33:26.708 --> 00:33:27.416
well, you don't have

1171
00:33:27.416 --> 00:33:28.625
user supplied inputs.

1172
00:33:28.833 --> 00:33:30.250
So you're not, this is not a security

1173
00:33:30.250 --> 00:33:32.083
problem, but I'm just curious, do you

1174
00:33:32.083 --> 00:33:34.916
just do formats or do you have something

1175
00:33:34.916 --> 00:33:36.375
more fancy to do the templating and

1176
00:33:36.375 --> 00:33:39.375
actually replace placeholders with the

1177
00:33:39.375 --> 00:33:40.708
current time, et cetera?

1178
00:33:40.708 --> 00:33:41.916
<v James Munns>So right now I just use format.

1179
00:33:42.291 --> 00:33:44.000
I know Typst itself, I'm not sure about

1180
00:33:44.000 --> 00:33:46.375
it as a library, but as a language, it

1181
00:33:46.375 --> 00:33:47.791
has some concept of being

1182
00:33:47.791 --> 00:33:49.208
able to import documents.

1183
00:33:49.208 --> 00:33:52.000
So you can import JSON content or Toml or

1184
00:33:52.000 --> 00:33:55.583
YAML content and tell it to query a field

1185
00:33:55.583 --> 00:33:58.041
in a JSON document or a Toml document.

1186
00:33:58.375 --> 00:33:59.750
So I think the idea is that you're able

1187
00:33:59.750 --> 00:34:02.416
to like glue that to API requests or, you

1188
00:34:02.416 --> 00:34:03.708
know, other metadata.

1189
00:34:03.708 --> 00:34:04.333
So there's probably a

1190
00:34:04.333 --> 00:34:05.500
more clever way to do it.

1191
00:34:05.958 --> 00:34:07.333
For me, the most expedient thing was

1192
00:34:07.333 --> 00:34:09.416
format because it's just, I'm taking from

1193
00:34:09.416 --> 00:34:12.125
chrono hour and minute and then using

1194
00:34:12.125 --> 00:34:13.791
that, you know, two digit

1195
00:34:13.791 --> 00:34:16.375
padded, put it here kind of thing.

1196
00:34:16.583 --> 00:34:18.416
But it does as a language have some

1197
00:34:18.416 --> 00:34:20.125
ability, like I think at the compilation

1198
00:34:20.125 --> 00:34:22.541
stage, you can tell it to load this JSON

1199
00:34:22.541 --> 00:34:24.625
file and pull this, you

1200
00:34:24.625 --> 00:34:25.708
know, sort of like a JQ.

1201
00:34:26.333 --> 00:34:28.166
<v Amos Wenger>It does this concept of variables or

1202
00:34:28.166 --> 00:34:29.916
environment or something like that.

1203
00:34:30.291 --> 00:34:31.416
<v James Munns>So there's definitely room for that.

1204
00:34:31.625 --> 00:34:32.958
It probably depending on how I was

1205
00:34:32.958 --> 00:34:34.625
driving it. If I'm pulling it as a crate,

1206
00:34:34.625 --> 00:34:36.333
as a Rust library, I'd probably just have

1207
00:34:36.333 --> 00:34:37.166
the Rust library do

1208
00:34:37.166 --> 00:34:38.416
the smartness on that.

1209
00:34:38.416 --> 00:34:39.916
If I was using it as a command line tool,

1210
00:34:40.458 --> 00:34:42.791
it might be more amenable to scripting to

1211
00:34:42.791 --> 00:34:44.291
say like pull it, I'll make sure that

1212
00:34:44.291 --> 00:34:45.625
I've prepared data.json.

1213
00:34:46.125 --> 00:34:47.458
And then I tell it to pull this

1214
00:34:47.458 --> 00:34:49.958
information out of data.json or something

1215
00:34:49.958 --> 00:34:51.833
in my bash script before

1216
00:34:51.833 --> 00:34:53.833
I call the compile step.

1217
00:34:53.958 --> 00:34:54.833
<v Amos Wenger>This is very cool.

1218
00:34:55.250 --> 00:34:56.875
By the way, I just checked on the

1219
00:34:56.875 --> 00:34:58.583
official website and it is 'Typst.'

1220
00:34:58.875 --> 00:34:59.750
You are correct.

1221
00:34:59.750 --> 00:35:03.541
There is the IPA in the crates page, which

1222
00:35:03.541 --> 00:35:05.375
everyone should do, honestly, just put

1223
00:35:05.375 --> 00:35:07.500
the internet- international phonetic

1224
00:35:07.500 --> 00:35:09.250
alphabet of your name so

1225
00:35:09.250 --> 00:35:10.291
people know how to pronounce it.

1226
00:35:10.583 --> 00:35:10.791
<v James Munns>Nice.

1227
00:35:10.916 --> 00:35:12.208
Yeah, this is where I'm at.

1228
00:35:12.208 --> 00:35:13.416
I've been enjoying it heavily.

1229
00:35:13.791 --> 00:35:16.416
We'll see in a couple more episodes if

1230
00:35:16.416 --> 00:35:19.250
I'm still using this for this, but I am

1231
00:35:19.250 --> 00:35:21.250
absolutely chuffed with it so far.

1232
00:35:21.250 --> 00:35:23.375
And I wanted to share my excitement with

1233
00:35:23.375 --> 00:35:24.666
you because I know we've talked a lot

1234
00:35:24.666 --> 00:35:26.416
about layouting and how

1235
00:35:26.416 --> 00:35:28.333
to get pretty content.

1236
00:35:28.833 --> 00:35:29.333
<v Amos Wenger>We have.

1237
00:35:29.791 --> 00:35:32.583
And I have been doing some, like I said,

1238
00:35:32.583 --> 00:35:34.291
I built an application with egui.

1239
00:35:34.791 --> 00:35:36.791
And in my typical fashion, it's an

1240
00:35:36.791 --> 00:35:37.791
article about something completely

1241
00:35:37.791 --> 00:35:39.875
different, but I dedicate several pages

1242
00:35:39.875 --> 00:35:41.875
to rendering a timestamp.

1243
00:35:42.166 --> 00:35:43.250
So exactly like you have here.

1244
00:35:43.250 --> 00:35:45.416
That's why my mind's thinking about that.

1245
00:35:45.791 --> 00:35:48.708
You have 12 colon 34 and I'm looking at

1246
00:35:48.708 --> 00:35:50.291
it and the colon is too wide.

1247
00:35:50.291 --> 00:35:52.208
There's too much space on either end

1248
00:35:52.208 --> 00:35:53.875
because you're just using a monospace

1249
00:35:53.958 --> 00:35:55.375
font, which is the

1250
00:35:55.375 --> 00:35:56.666
second best thing you can do.

1251
00:35:57.125 --> 00:35:58.458
And you like this font.

1252
00:35:59.500 --> 00:36:01.291
But for me, I wanted to have consistent

1253
00:36:01.291 --> 00:36:02.791
spacing and not have the numbers jump

1254
00:36:02.791 --> 00:36:04.125
around when the time changes.

1255
00:36:04.541 --> 00:36:08.583
But one is narrower than seven, which is

1256
00:36:08.583 --> 00:36:11.083
narrower than eight, et cetera.

1257
00:36:11.500 --> 00:36:13.458
So there's a yeah, there's an entire

1258
00:36:13.458 --> 00:36:15.166
section in one of my articles just about

1259
00:36:15.166 --> 00:36:17.375
rendering timestamps correctly with serif

1260
00:36:17.375 --> 00:36:18.541
non-monospace fonts.

1261
00:36:19.250 --> 00:36:20.208
<v James Munns>And it made me think of that.

1262
00:36:20.208 --> 00:36:21.416
I was just saying, I haven't gotten to

1263
00:36:21.416 --> 00:36:23.458
messing with the kerning of anything yet,

1264
00:36:23.458 --> 00:36:24.458
but I know it's possible.

1265
00:36:25.708 --> 00:36:27.958
<v Amos Wenger>I don't know if you maybe you pretend to

1266
00:36:27.958 --> 00:36:29.208
like this font just because it's

1267
00:36:29.208 --> 00:36:30.333
monospace and that makes

1268
00:36:30.333 --> 00:36:31.458
everything so much simpler.

1269
00:36:32.000 --> 00:36:32.958
You know, little column A,

1270
00:36:32.958 --> 00:36:34.916
little column B, you know.

1271
00:36:35.458 --> 00:36:36.875
But yeah, Typst is interesting for this

1272
00:36:36.875 --> 00:36:39.083
because like, you mentioned tiny-skia.

1273
00:36:39.541 --> 00:36:41.833
Skia is the- correct me if I'm wrong-

1274
00:36:41.833 --> 00:36:43.291
I think it's the rendering library.

1275
00:36:43.708 --> 00:36:46.375
Think of it as HTML5 canvas, but that's

1276
00:36:46.375 --> 00:36:49.666
actually what backs that in Chromium.

1277
00:36:50.000 --> 00:36:52.083
I believe there's two competing ones.

1278
00:36:52.416 --> 00:36:55.750
There's like Cairo, the GTK thingy and

1279
00:36:55.750 --> 00:36:57.666
Skia, I think is the one from Chromium.

1280
00:36:58.208 --> 00:37:00.500
And tiny-skia is a subset that drops a

1281
00:37:00.500 --> 00:37:02.708
bunch of features that

1282
00:37:02.708 --> 00:37:03.666
are hard to implement.

1283
00:37:04.166 --> 00:37:06.791
Like it's an 80 20% thingy.

1284
00:37:06.791 --> 00:37:08.250
They dropped like the 20% of features

1285
00:37:08.250 --> 00:37:08.750
that were responsible

1286
00:37:08.750 --> 00:37:09.791
for 80% of the code.

1287
00:37:10.416 --> 00:37:13.333
And so it's all safe Rust and only

1288
00:37:13.333 --> 00:37:15.833
slightly slower, something like that.

1289
00:37:16.041 --> 00:37:18.125
And that gives you like, you can do text

1290
00:37:18.125 --> 00:37:19.041
rendering, you can render

1291
00:37:19.041 --> 00:37:21.583
gradients and various shapes.

1292
00:37:22.083 --> 00:37:23.583
The round ones are the hard ones to

1293
00:37:23.583 --> 00:37:24.833
render, but then you still

1294
00:37:24.833 --> 00:37:25.916
have to do the typesetting.

1295
00:37:25.916 --> 00:37:26.833
You still have to do the layout.

1296
00:37:26.833 --> 00:37:27.583
And I'm assuming that's

1297
00:37:27.583 --> 00:37:28.875
where Typst actually comes in.

1298
00:37:28.875 --> 00:37:30.000
And it makes a ton of sense.

1299
00:37:30.000 --> 00:37:31.500
I've been wondering how I can generate

1300
00:37:31.500 --> 00:37:33.500
open graph previews for links from my

1301
00:37:33.500 --> 00:37:35.458
websites with like title and the

1302
00:37:35.458 --> 00:37:36.250
description and everything.

1303
00:37:36.250 --> 00:37:36.916
I think Typst would be

1304
00:37:36.916 --> 00:37:37.833
actually great for that.

1305
00:37:37.875 --> 00:37:38.958
<v James Munns>I think it'd be perfect for that.

1306
00:37:38.958 --> 00:37:39.333
Yeah.

1307
00:37:39.333 --> 00:37:40.833
<v Amos Wenger>Because you can generate an SVG as well.

1308
00:37:40.833 --> 00:37:42.416
Because some browsers support that.

1309
00:37:42.416 --> 00:37:43.541
So you can you can serve both.

1310
00:37:43.541 --> 00:37:44.541
<v James Munns>Yeah, built in, they have

1311
00:37:44.541 --> 00:37:47.541
export to PDF, SVG and PNG.

1312
00:37:48.500 --> 00:37:50.708
And then, like I said, there are other

1313
00:37:50.708 --> 00:37:51.541
crates that handle

1314
00:37:51.541 --> 00:37:52.541
like the rendering step.

1315
00:37:52.541 --> 00:37:54.333
So the one that I had is like, I forget

1316
00:37:54.333 --> 00:37:56.125
what it's called, but it's-- it renders

1317
00:37:56.125 --> 00:37:59.041
to a tiny-skia buffer, which means you

1318
00:37:59.041 --> 00:38:01.625
just get an array of RGBA pixels.

1319
00:38:01.625 --> 00:38:02.833
And you can do

1320
00:38:02.833 --> 00:38:03.958
whatever you'd like with them.

1321
00:38:03.958 --> 00:38:06.291
But-- you'd probably be good to go with

1322
00:38:06.291 --> 00:38:08.333
just the command line application, which

1323
00:38:08.333 --> 00:38:10.833
will dump out XML, PNG or whatever.

1324
00:38:10.833 --> 00:38:12.083
<v Amos Wenger>Oh, no, I would link against it.

1325
00:38:12.083 --> 00:38:12.791
It's a Rust crate.

1326
00:38:12.791 --> 00:38:13.833
I'm pulling it in.

1327
00:38:13.833 --> 00:38:16.500
I'm-- I have 900 crates in my graph.

1328
00:38:17.041 --> 00:38:17.333
Originally.

1329
00:38:17.333 --> 00:38:18.708
Why do you think I split

1330
00:38:18.708 --> 00:38:20.083
things by dynamic libraries?

1331
00:38:20.375 --> 00:38:21.166
It's gotten out of

1332
00:38:21.166 --> 00:38:22.166
control a long time ago.

1333
00:38:22.750 --> 00:38:24.083
I think my previous strategy would have

1334
00:38:24.083 --> 00:38:26.458
been to just make an SVG and then use an

1335
00:38:26.458 --> 00:38:28.125
SVG rendering engine to do that.

1336
00:38:28.125 --> 00:38:29.750
But the thing with the SVG is that it's

1337
00:38:29.750 --> 00:38:32.791
really not made for typesetting and

1338
00:38:32.791 --> 00:38:34.291
layouting and all that.

1339
00:38:34.291 --> 00:38:37.208
It's much closer to something like

1340
00:38:37.208 --> 00:38:39.875
PostScript than it is to something like,

1341
00:38:40.416 --> 00:38:41.541
like Typst, I guess,

1342
00:38:41.541 --> 00:38:44.500
because it's just put some text here, but--

1343
00:38:44.500 --> 00:38:46.333
<v James Munns>It's not all the way to rasterizing, but

1344
00:38:46.333 --> 00:38:47.500
it's one step down of

1345
00:38:47.500 --> 00:38:48.916
preprocessing or something.

1346
00:38:48.916 --> 00:38:49.750
<v Amos Wenger>There's so little you

1347
00:38:49.750 --> 00:38:50.875
can do with formatting.

1348
00:38:50.875 --> 00:38:52.333
Like if you place each individual

1349
00:38:52.333 --> 00:38:53.958
character, then it's fine, right?

1350
00:38:53.958 --> 00:38:55.875
Because it is able to pull a glyph from a

1351
00:38:55.875 --> 00:38:56.916
font and put it somewhere.

1352
00:38:56.916 --> 00:38:58.833
And then you can give it a

1353
00:38:58.833 --> 00:39:00.166
font weight or something.

1354
00:39:00.166 --> 00:39:01.791
But you can't really... in

1355
00:39:01.791 --> 00:39:03.000
HTML, you can do a lot.

1356
00:39:03.000 --> 00:39:05.000
You can do a lot of topography.

1357
00:39:05.500 --> 00:39:06.583
I've never said that word out loud.

1358
00:39:06.666 --> 00:39:07.125
Wow.

1359
00:39:07.375 --> 00:39:09.000
But in SVG is very, very limited.

1360
00:39:09.000 --> 00:39:10.666
And so, for example, the diagrams on my

1361
00:39:10.666 --> 00:39:12.333
website right now are exported from

1362
00:39:12.333 --> 00:39:14.416
draw.io, which is a diagramming software.

1363
00:39:14.958 --> 00:39:16.833
And they used to be first converted to

1364
00:39:16.833 --> 00:39:19.333
paths and then converted to SVG.

1365
00:39:19.333 --> 00:39:22.375
So I did like PDF paths and then SVG so

1366
00:39:22.375 --> 00:39:22.958
that it would render

1367
00:39:22.958 --> 00:39:24.041
exactly the same every where.

1368
00:39:24.041 --> 00:39:25.166
So even letters were paths.

1369
00:39:25.750 --> 00:39:27.625
But now I just take this, you export from

1370
00:39:27.625 --> 00:39:30.083
draw.io, which only displays correctly on

1371
00:39:30.083 --> 00:39:32.666
browsers because it uses foreign object

1372
00:39:32.750 --> 00:39:35.458
to put HTML inside the SVG so that you

1373
00:39:35.458 --> 00:39:37.208
get stuff like line wrapping and text

1374
00:39:37.208 --> 00:39:38.750
elements because SVG doesn't do that.

1375
00:39:38.750 --> 00:39:40.625
So that's how bad SVG is at this.

1376
00:39:40.875 --> 00:39:41.958
I think it does, but you

1377
00:39:41.958 --> 00:39:43.458
can't have bold tags and stuff.

1378
00:39:43.708 --> 00:39:45.250
Anyway, Typst is so much better for this.

1379
00:39:45.541 --> 00:39:46.333
I'm going to use this.

1380
00:39:46.541 --> 00:39:46.958
Thank you, James.

1381
00:39:46.958 --> 00:39:47.708
I'm excited about it.

1382
00:39:47.916 --> 00:39:49.375
<v Amanda Majorowicz>I feel like there were two references

1383
00:39:49.875 --> 00:39:52.125
where I was thinking about Aladdin.

1384
00:39:53.541 --> 00:39:54.083
<v Amos Wenger>Which ones?

1385
00:39:54.333 --> 00:39:55.208
We're keeping that in.

1386
00:39:55.708 --> 00:39:55.875
<v Amanda Majorowicz>Yeah.

1387
00:39:56.666 --> 00:39:58.041
When you're like, "It's a whole new world."

1388
00:39:58.041 --> 00:39:59.416
And I was like (singing) "A whole

1389
00:39:59.416 --> 00:40:01.125
new world!"

1390
00:40:01.125 --> 00:40:02.625
<v James Munns>"Don't you dare close your eyes."

1391
00:40:02.875 --> 00:40:03.458
<v Amanda Majorowicz>Exactly.

1392
00:40:03.583 --> 00:40:05.250
<v Amos Wenger>What's funny is that you can sing and

1393
00:40:05.250 --> 00:40:06.833
it's going to be on the record, but you

1394
00:40:06.833 --> 00:40:08.250
can cut it out in the edit and you can

1395
00:40:08.250 --> 00:40:10.458
just have us be like flustered because we

1396
00:40:10.458 --> 00:40:11.291
hear the whole new world.

1397
00:40:11.291 --> 00:40:12.083
We're trying to be serious.

1398
00:40:12.416 --> 00:40:12.875
<v Amanda Majorowicz>Yeah, exactly.

1399
00:40:13.416 --> 00:40:15.375
And then the other one was a little bit

1400
00:40:15.375 --> 00:40:17.375
of column A and a little bit of column B.

1401
00:40:17.375 --> 00:40:18.041
<v James Munns>Oh, yeah.

1402
00:40:18.375 --> 00:40:19.916
<v Amanda Majorowicz>From when the genie-- yeah.

1403
00:40:20.125 --> 00:40:20.750
The genie song.

1404
00:40:21.125 --> 00:40:22.125
Anyways, thank you.

1405
00:40:22.375 --> 00:40:24.208
<v Amos Wenger>I have to say that flustered doesn't

1406
00:40:24.208 --> 00:40:25.750
necessarily mean anything sexual.

1407
00:40:25.750 --> 00:40:26.708
No, it's just "confused,

1408
00:40:26.708 --> 00:40:27.833
befuddled in a state of panic."

1409
00:40:27.833 --> 00:40:28.541
That's just my greatest

1410
00:40:28.541 --> 00:40:30.250
fear as a non-native speaker.

1411
00:40:30.625 --> 00:40:31.500
Flustered.

1412
00:40:31.500 --> 00:40:33.083
I've only ever used flustered in a

1413
00:40:33.083 --> 00:40:34.541
context where you find someone a

1414
00:40:34.541 --> 00:40:35.750
little attractive or whatever

1415
00:40:36.250 --> 00:40:37.166
But no, it just means confused.

1416
00:40:37.458 --> 00:40:38.458
So I was correct.

1417
00:40:47.791 --> 00:40:49.291
This episode is sponsored by Depot:

1418
00:40:49.291 --> 00:40:50.583
the build acceleration platform

1419
00:40:50.583 --> 00:40:51.458
that's on a mission to

1420
00:40:51.458 --> 00:40:53.041
make all builds near instant.

1421
00:40:53.291 --> 00:40:54.500
If you're tired of watching your builds

1422
00:40:54.500 --> 00:40:55.416
and GitHub actions crawl

1423
00:40:55.416 --> 00:40:56.125
like the modern day

1424
00:40:56.125 --> 00:40:57.291
equivalent of paint drying,

1425
00:40:57.625 --> 00:40:58.500
give Depot's GitHub

1426
00:40:58.500 --> 00:40:59.666
Actions runners a try.

1427
00:41:00.041 --> 00:41:01.208
They're up to 10X faster

1428
00:41:01.208 --> 00:41:02.541
with unlimited concurrency,

1429
00:41:02.541 --> 00:41:03.958
faster caching, support for

1430
00:41:03.958 --> 00:41:05.333
Linux, macOS, and Windows,

1431
00:41:05.333 --> 00:41:06.208
and they plug right into

1432
00:41:06.208 --> 00:41:07.125
other Depot optimizations

1433
00:41:07.416 --> 00:41:09.000
like accelerated container image builds

1434
00:41:09.000 --> 00:41:10.416
and remote caching for Bazel,

1435
00:41:10.708 --> 00:41:12.500
Turborepo, Gradle, and more.

1436
00:41:12.875 --> 00:41:13.833
Depot was built by developers

1437
00:41:13.833 --> 00:41:15.000
who were tired of wasting time

1438
00:41:15.000 --> 00:41:16.291
waiting on builds instead of shipping.

1439
00:41:16.583 --> 00:41:17.416
It's made for teams

1440
00:41:17.416 --> 00:41:18.333
that wanna move faster

1441
00:41:18.333 --> 00:41:19.333
and stay focused on

1442
00:41:19.333 --> 00:41:20.375
what actually matters.

1443
00:41:20.666 --> 00:41:22.000
That's why companies like PostHog

1444
00:41:22.000 --> 00:41:23.000
use Depot to cut build

1445
00:41:23.000 --> 00:41:24.333
times from over three hours

1446
00:41:24.333 --> 00:41:25.541
to just three minutes,

1447
00:41:25.541 --> 00:41:26.500
saving tens of thousands

1448
00:41:26.500 --> 00:41:27.750
of build hours every week.

1449
00:41:28.041 --> 00:41:29.000
Start your free 7

1450
00:41:29.000 --> 00:41:30.125
day trial at depot.dev

1451
00:41:30.125 --> 00:41:31.208
and let them know we sent you.
