summaryrefslogtreecommitdiffstats
path: root/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers.vtt
blob: 3bccf8fbb3a67a81814f0c4c172e6b5a764ff7ad (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
WEBVTT

NOTE
Introduction

00:00:00.000 --> 00:00:05.799
[Amin]: All right. Hey, everyone. Thanks, Zach, for the great talk. Here is a live Q&A.

00:00:05.800 --> 00:00:12.399
People can start putting the questions onto the pad, and Zach will answer them.

00:00:12.400 --> 00:00:15.007
Zach, take it away. Thanks, Zach. Here is a live Q&A.

00:00:15.008 --> 00:01:12.599
[Zach]: Okay. So, first question. Let's see.

NOTE Why did you choose an internal state versus many 'state buffers'?

00:01:12.600 --> 00:01:16.039
Okay. So, the first question is why did you choose an internal state

00:01:16.040 --> 00:01:22.959
versus many state buffers? So, the main reason was more control

00:01:22.960 --> 00:01:29.599
from the game perspective. I mean, if this was to be a tool,

00:01:29.600 --> 00:01:35.519
if this was to be a tool that perhaps was used for more, like,

00:01:35.520 --> 00:01:41.479
real-world applications where maybe you'd want users to be able to, like,

00:01:41.480 --> 00:01:43.399
use any of their preexisting

00:01:43.400 --> 00:01:48.559
— like, if you wanted to really make a grid of cells that would —

00:01:48.560 --> 00:01:53.639
so, then I think maybe using real buffers in that case

00:01:53.640 --> 00:01:56.199
would probably be the better thing since you wouldn't have to, like,

00:01:56.200 --> 00:02:04.239
redo everything. But I found that just, like, centralizing the state

00:02:04.240 --> 00:02:10.719
into one place for the game at least made it the easiest to implement.

NOTE Do you have plans to port shenzhen.io to Emacs?

00:02:10.720 --> 00:02:14.079
Next one. Do you have plans to port Shenzhen I.O. to Emacs?

00:02:14.080 --> 00:02:19.559
Well, I was actually thinking about exopunks, perhaps,

00:02:19.560 --> 00:02:26.599
but Shenzhen I.O. would be pretty cool to add as well.

00:02:26.600 --> 00:02:29.959
So, this doesn't use any Wasm at all.

NOTE Did this use WASM?

00:02:29.960 --> 00:02:33.799
So, the next question is, did this use Wasm?

00:02:33.800 --> 00:02:41.999
So, it's asking about, like, using Wasm Emacs. So, this actually —

00:02:42.000 --> 00:02:45.239
this doesn't use any Wasm under the hood.

00:02:45.240 --> 00:02:49.639
It's pretty much analogous to the game TIS 100 is to real assembly

00:02:49.640 --> 00:02:59.799
as this game is to web assembly. Slight resemblance, but, yeah, just a game.

NOTE Why wasm rather than a more traditional Assembly dialect? It wouldn't be harder to implement, right?

00:02:59.800 --> 00:03:06.039
So, okay, so the next question is why Wasm

00:03:06.040 --> 00:03:09.359
rather than a more traditional assembly dialect?

00:03:09.360 --> 00:03:11.799
It wouldn't be harder to implement, right?

00:03:11.800 --> 00:03:16.919
So, it would actually probably have been easier, in all honesty, just because,

00:03:16.920 --> 00:03:20.679
you know, more traditional — like, TIS 100, for example.

00:03:20.680 --> 00:03:24.599
You have each of the — you have each instruction on a line,

00:03:24.600 --> 00:03:29.519
and it's pretty easy to, you know, syntax hiding just one line.

00:03:29.520 --> 00:03:32.599
So, this with the weird S expressions across the line, deeply nested,

00:03:32.600 --> 00:03:37.239
and then, like, the step debugger thing and these weird cell things.

00:03:37.240 --> 00:03:40.239
They made things really complicated, but I definitely wanted to, like —

00:03:40.240 --> 00:03:47.559
the main reason is I didn't — I wanted it to not — to look as least as —

00:03:47.560 --> 00:03:52.919
to look — to resemble TIS 100 as little as possible,

00:03:52.920 --> 00:03:54.399
even though it's still pretty much the same game.

00:03:54.400 --> 00:04:44.439
[Amin]: Thanks, Zach. I think we still have about, like, eight minutes or so.

00:04:44.440 --> 00:04:46.159
Or eight and a half minutes of Q&A time.

00:04:46.160 --> 00:04:47.919
So, folks, if you do have any other questions,

00:04:47.920 --> 00:04:50.119
please do keep them coming in the pad, and, yeah,

00:04:50.120 --> 00:04:53.079
Zach will continue answering them.

00:04:53.080 --> 00:05:08.959
[Zach]: Sounds good. Thank you.

NOTE Any next projects on your mind?

00:05:08.960 --> 00:05:11.399
So, next question. Any next projects on your mind?

00:05:11.400 --> 00:05:15.679
Yeah, actually, I have a couple ideas for projects,

00:05:15.680 --> 00:05:21.639
and these would all be, hopefully, maybe more useful.

00:05:21.640 --> 00:05:24.119
I think TreeSitter is pretty

00:05:24.120 --> 00:05:28.639
cool. I think there's a lot of directions that I could go, like,

00:05:28.640 --> 00:05:34.639
there's a plugin in NeoVim called NeoGen, which generates documentation.

00:05:34.640 --> 00:05:41.359
That would be cool. I've been playing with this. What else?

00:05:41.360 --> 00:05:45.559
Yeah, I mean, hopefully, next year, at next the Emacs conference,

00:05:45.560 --> 00:05:52.679
I could be presenting something more useful.

NOTE Does this work with any other paren-based editing packages?

00:05:52.680 --> 00:05:57.479
Next question. Does this work with any other paren-based editing packages?

00:05:57.480 --> 00:06:02.759
Not at all. Not at all. In fact, just because of the way the buffer was set up,

00:06:02.760 --> 00:06:07.999
how it's just, like, the illusion of a buffer, like, not even, like,

00:06:08.000 --> 00:06:17.119
the syntax parsing works correctly, because just because everything's, like,

00:06:17.120 --> 00:06:19.239
the way the grids are set up, like, you have, like,

00:06:19.240 --> 00:06:23.839
the other cells kind of interfering with the way that parse is.

00:06:23.840 --> 00:06:29.799
But the way it was architected, it's actually a really simple macro.

00:06:29.800 --> 00:06:33.159
There's a little macro called, like, run in buffer.

00:06:33.160 --> 00:06:37.279
You have, like, run in buffer, and then you put your elist code,

00:06:37.280 --> 00:06:42.439
and then it tries to create the illusion that it's actually running

00:06:42.440 --> 00:06:46.919
in a real buffer. So this macro kind of does all the configuration setup.

NOTE What kind of tool could use this idea?

00:06:46.920 --> 00:06:55.839
So, I mean, maybe with, like, more configuration settings,

00:06:55.840 --> 00:06:58.399
maybe something like that could have been done.

00:06:58.400 --> 00:07:04.239
So next question. What kind of tool could you use this idea?

00:07:04.240 --> 00:07:09.479
Oh, going back to the next project on your mind.

00:07:09.480 --> 00:07:12.639
This actually came up to my mind as, like, a graphical.

00:07:12.640 --> 00:07:21.359
So, in terms of, like, there's a lot of graphing tools, like ASCII.

00:07:21.360 --> 00:07:25.679
So, like, you type in some text representation, it generates an ASCII document.

00:07:25.680 --> 00:07:28.599
I think it would be really cool to have, like,

00:07:28.600 --> 00:07:31.079
an Emacs package that sort of works, like,

00:07:31.080 --> 00:07:35.519
those online really slick graph drawing tools.

00:07:35.520 --> 00:07:40.919
So, like, you can just press tab, and it draws a new box with an ASCII arrow,

00:07:40.920 --> 00:07:43.759
and then, like, it can create these diagrams really easy.

00:07:43.760 --> 00:07:46.359
I think that would be a really cool project.

00:07:46.360 --> 00:07:52.039
And so, something like that, obviously, like, you have different cells.

00:07:52.040 --> 00:07:56.279
And so, that's actually another thing I think would be cool to work on.

NOTE How did you go about designing the puzzles?

00:07:56.280 --> 00:08:04.039
So, designing puzzles. So, it's funny.

00:08:04.040 --> 00:08:07.879
If you listen to Zach Barth's talk about TS100,

00:08:07.880 --> 00:08:12.759
he goes into, like, you pretty just, like, you pretty just,

00:08:12.760 --> 00:08:16.159
it's just like you make up a puzzle you think could work,

00:08:16.160 --> 00:08:18.279
and chances are it does end up working.

00:08:18.280 --> 00:08:23.959
And that's how I roll, at least my custom puzzles in the game, just, like,

00:08:23.960 --> 00:08:28.599
come up with some random idea, think it probably should work,

00:08:28.600 --> 00:08:35.839
and then try to go implementing it. And usually, it's implementable.

00:08:35.840 --> 00:08:39.319
I mean, four by three boxes, you can do quite a bit.

NOTE What are your favorite changes in the upcoming Emacs 29?

00:08:39.320 --> 00:08:44.119
And I don't put any restrictions on the cells, like, TS100.

00:08:44.120 --> 00:08:47.719
What are your favorite changes in the upcoming Emacs 29?

00:08:47.720 --> 00:08:50.479
So, definitely TreeSitter is pretty cool.

00:08:50.480 --> 00:08:55.679
Just because, like, you have syntax, you have access to that.

00:08:55.680 --> 00:08:59.719
You can build syntax-aware extensions.

00:08:59.720 --> 00:09:03.559
So, like, I was just I was playing around with it, and it's pretty cool.

00:09:03.560 --> 00:09:07.479
You can just, like, get the syntax tree and search for syntax patterns.

NOTE Are there tools to add more puzzles?

00:09:07.480 --> 00:09:25.199
So, it's exciting to see what might be done with that.

00:09:25.200 --> 00:09:28.879
Are there tools to add more puzzles? So, there's not tools,

00:09:28.880 --> 00:09:35.959
but in the code itself, there's a file called azimbox puzzles.

00:09:35.960 --> 00:09:39.079
And it's pretty much just, like, you have a generator function.

00:09:39.080 --> 00:09:43.079
You configure it's just, like, you're pretty much defining a struct.

00:09:43.080 --> 00:09:45.679
So, I mean, if you're familiar with the Emax list,

00:09:45.680 --> 00:09:47.959
you can kind of define puzzles pretty easily.

00:09:47.960 --> 00:09:54.279
Define where your inputs are, generate a function to generate these inputs,

00:09:54.280 --> 00:09:57.799
and then a generator function to generate which outputs you want.

00:09:57.800 --> 00:10:02.159
So, it's pretty, I mean, code-wise, it's pretty self-contained.

00:10:02.160 --> 00:10:10.239
But yeah, maybe I could have done, like, a more streamlined job with that.

00:10:10.240 --> 00:10:17.159
Like, a binding to graph is? Oh, yeah, with the graph thing I was mentioning.

00:10:17.160 --> 00:10:23.479
So, that would also actually be pretty cool, too. But I was thinking more just,

00:10:23.480 --> 00:10:31.119
like, plain ASCII graphs. Just, like, you already have just, like, so,

00:10:31.120 --> 00:10:33.439
a tool I've seen recently is called Diagon.

00:10:33.440 --> 00:10:38.079
So, you basically type in, like, some really, like,

00:10:38.080 --> 00:10:41.759
a textual representation of the graph, like, A arrow B, B arrow C,

00:10:41.760 --> 00:10:44.079
and it generates, like, an ASCII diagram.

00:10:44.080 --> 00:10:52.799
So, something like that would be cool, like, so, like, you have, like,

00:10:52.800 --> 00:11:01.839
a grid of, like, little nodes, and control F maybe brings you to the next one,

00:11:01.840 --> 00:11:07.279
and maybe tab, maybe would create a new node with a new ASCII

00:11:07.280 --> 00:11:20.879
arrow to it. That would be a cool, that would be a really cool extension.

00:11:20.880 --> 00:11:25.319
But, yeah, I mean, obviously, graph is an amazing tool.

00:11:25.320 --> 00:11:28.079
So, a lot could be done with that as well.

00:11:28.080 --> 00:12:49.679
[Amin]: I think we have about, like, a minute or a minute and a half of live questions.

00:12:49.680 --> 00:12:50.719
We are opening the Q&A, this BB room for people to join.

00:12:50.720 --> 00:12:51.759
So, folks who want to do that are welcome to do so.

00:12:51.760 --> 00:12:52.199
And, yeah, after that, the stream will move on.

00:12:52.200 --> 00:12:52.359
But you can still come in this BB room or keep asking questions on the web.

00:12:52.360 --> 00:12:53.439
Okay. I think that's about all the time that we have on the stream.

00:12:53.440 --> 00:12:55.079
Thanks again, Zach, so much, and both for the Q&A and for your great talk,

00:12:55.080 --> 00:12:57.319
and see you all around. Thank you.

00:12:57.320 --> 00:12:58.239
Cheers.

00:12:58.240 --> 00:12:58.359
[Zach]: Thank you.

00:12:58.360 --> 00:14:19.200
You are currently the only person in this conference.