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.