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.