 Hey everybody, it sounds like we're about ready to go. So why don't I start? So the name of the talk is a Geiler's Year of Racket. My name is Christopher Lamar-Weber. You can see how to get in contact with me there, et cetera, et cetera. So I've been doing, I got into Geil a number of years ago. Actually, 2014, I guess, when I wrote this blog post where I was really excited, because I read the section of the Geil manual that talked about the compiler tower and I was sick of writing two different languages, both JavaScript on the front end or Python on the back end and JavaScript on the front end. You can see how much you can disregard me knowing anything about languages because I'm like, well, Python probably has the nicest asynchronous library development. OK, yeah, I didn't know anything. But I got excited about, you know, Geil kind of got me excited about languages in some ways. One of the other things that really pulled me in is David Thompson wrote this cool game engine called Sly. Now he's actually working on a different game engine, but Sly was really cool. I watched this video of him running this game and as he runs the game, he actually changes the entire game as it runs, right? He's like, oh, this character should move faster and he just evaluates and it does and all those cool things like that. And I'm like, why can't I be doing this? This is what I want to be doing. So, you know, and then I got into, you know, the usual schema route where you get into the structure and interpretation of computer programs and you go down this programming language rabbit hole. I found this geeks thing and spent a whole bunch of time on it. And actually one of the reasons I got really interested in geeks is that I work on distributed network systems and it turns out one of the big challenges was getting, you know, the difficulty people had deploying things. And I'm like, geeks will be the perfect deployment environment and we still haven't really done geeks deploy yet. But, you know, I also had this vision that since we can write out, since, you know, Lispy things are code that can write code, you know, I had this vision of we could, you know, even like make things easy for users by writing like web interfaces and GUIs and stuff like that where you just selected the things and it could actually generate the system profile. The funny thing is, you know, I haven't actually done anything towards that. But, you know, but geeks continues to be really exciting and I love that. I also then started to go, you know, actually get into the network programming side of things and wrote this thing called 8Sync which was an actor model library in Guile. Do I still have this thing plugged in? Yeah, that's okay. All right. And some of you may remember I gave a presentation here about it a couple of years ago where I actually had a game on the screen and the audience were, until I had network problems, were able to log into the game and walk around with me while I showed the game. And what was really cool is, you know, kind of along the lines of what, you know, David Thompson originally pulling me in, I was able to change things. I said, okay, what do you want in the world? And then people would suggest things and I was able to change the world as it ran. And this was really exciting to me. I also, some of you may know, I work on decentralized network protocols that most famously activity pub, which is used by Massodon and a bunch of other things. And I actually used Guile for, you know, the reference implementation of activity pub. Nobody ran this software but me. But, and it didn't even have a client in the web interface. You actually had to open up the Guile repel and start a API client there that you started making posts to the network and stuff like that. But, you know, it was all in Guile and it got us through the standards process. So, you know, Guile, my home, I'm a guiler for life, right? Right? So, and I remember I had this conversation with Wingo and he's, and this is my vague memory of this on IRC. He's like, oh, you know, like, what if we kind of combined racket and guile? Like, you know, what would that mean? What would that look like? And I'm like, no way. Like, racket doesn't have a mutable top level. And like, you know, if you want to do that thing where the game is running and you change the game while it's running, as far as I understood at the time, that was essential, right? And it still mostly is essential. And like, you know, and then David Thompson was like, oh, what the fuck? You know, sorry, I wasn't going to swear. What the funk racket also has no mutable top level. And so, you know, David was like, you know, I invested all this time in it. Why would I have invested all this time in it if we were going to switch it out for a different scheme? And I'm like, yeah, this is a terrible idea, right? To be continued, there is more to this conversation. We'll come back to it. My house is a art historian and we were driving around and she started to get into programming a few years ago for a project she was working on. And we were talking about how programming is so inaccessible to so many people in the humanities, but they could actually really benefit from it. And in fact, she started writing her dissertation using racket scribble language to write her art history dissertation. And so we were like, you know, it would be really cool if we gave a workshop on how to do this. You know, racket might be a good environment because they've got this text editor called Dr. Rackett and they have this, you know, markup language called scribble. We could probably walk people through it. So we ran this workshop. We didn't even mention gender anywhere on this slide. We basically were like, you know, this is a programming workshop for people who have, you know, imposter syndrome. Eight of the nine people who showed up were women to this workshop. And, you know, I thought, you know, wow, this is really exciting. You know, we're getting people into it. And, you know, the back of the flyer actually had Dr. Rackett with the source code on it so that you could, you know, see, you know, to entice people like, oh, you know, this is what it's going to look like. And, you know, we have these students in what racket has this picture language. So we actually had the students make snowmen. You know, why have a tutorial where you print out numbers and use a Fibonacci sequence and get deeply terrified about your inadequacy of understanding, you know, these concepts when you could just make snowmen, right, and using the picture language. And these are students, snowmen, that they made in the workshop, right? And then Morgan had this thing since she was writing her dissertation. The second part of the workshop is she had this guide on how to use racket and scribble to write papers in your dissertation so that the students, so the second half of it, we would have them walk through writing this thing in scribble and the students would have something that they could walk away with. Even if they weren't a programmer, they still wrote papers and they could walk out of the room and use Dr. Rackett and have something that they can use as opposed to be like, oh, I made a snowman. I don't know what to do with the rest of my life. So, you know, but like me, you know, I'm a geiler, right? So I'm like, okay, so we're doing these racket workshops but I'm a geiler, right? You know, plus there's no beautiful talk level in racket but I'm looking into it more and I'm like, oh, you know, this picked language is pretty cool. It's got some fun toys. Oh, you know, they've got these multiple languages of things but you know, to be honest, I think that they don't really compose. You know, Ludovic gave a nice talk about how having a base language as actually you might want to do your composition there and I think it's a little bit oversold. You know, that's more for language researchers but it's nice that language exploration is really easy. Oh, man, Frackett's package language has all the same problems that every mutable language package manager has but, you know, it's also, I also don't have to set up auto tools just to be able to do like, you know, like two file project and that's always been a pain for me when I write a guile application because I don't want to debug M4-generated shell and, you know, these donks, you know, are actually really readable. You know, there's a lot of good tutorials even if you're completely new and scribble is a lot of fun. I was having fun with it and wow, it comes with a GUI library that just works in its class platform and it's actually fun. GUI libraries are usually the worst thing to write and I found myself having fun writing GUIs. This is extremely unusual and wow, there's like all these libraries. I was gonna like, I figured it was gonna be like three years off until I could do some of the things I've been doing this year because I figured I had to write all these libraries first in guile and Frackett just had them. It's like the Python of LISPs and it has like immutable hash tables in its syntax like out of the box. It has nice generic sequences like in Dr. Rackett, like we had students come who never programmed in their life ever once and they were able to program and they were able to leave and use the thing and when I, you know, in guile land, people are like, ah, guile's really cool. How do I get into it? I'm like, okay, first learning max, you know, and then read these arcade manuals and you know, like here's how to use info, right? And like instead I could just point them at Dr. Rackett and they could instantly have a comparable level of ability to do cool things that I can do in Emacs and actually I even enjoy using it, which has never happened and it has a good Emacs mode anyway. So, you know, I could finally get contributors to my projects who aren't Emacs users. That would be huge. Uh-oh, so... Well, something happened. So what about that immutable top level though, right? I can't, one of the things that drew me in was, you know, sly and I had that demo I did a couple years ago and I can't do that. So it's not as bad as I thought. So, you know, when I heard immutable top level I imagine the REPL would be dramatically worse like you define something once, you can't really define it again, that's taken, but what happens is is that Rackett actually just shadows the previous REPL and it's true, you can't redefine the previous thing but the experience when you're playing around on the REPL is not really too different and you can do the usual thing where you work up some code and then you copy it out of the REPL and just dump it into your file and REPL-driven development works pretty good. So, and I must admit, you know, when I would work on these things, like for example, I gave that, you know, talk about how you had that world that the audience was walking around in and you do all these things live and you're like, you've got a variable, you just redefine that variable, it's something different now and you play with some things in the REPL, you define this variable in real time and you forget to copy and paste that one in. So, like, when you close the session, you're like, hi, I did a great job and you start it back up, it turns out you never actually copied that thing out of the REPL, right? So, you know, in some ways that does make it a little bit easier but I miss being able to use the top level REPL for things like games and stuff like that. I do miss that. And those who have followed Rackett may be familiar with the line, the top level is hopeless, which is a famous line repeated in the Rackett community saying, you know, there's no way we're going to do the mutable thing. Well, on the Rackett mailing list, I mentioned that, you know, this very story in that I know a number of lispers who never came to Rackett, mainly because of the lack of the mutable top level and I was surprised to hear Matthias flies and say, you know, I kind of regret not supporting that community and we have limited resources, but maybe we will support that community if, you know, we're a willingness at least to support that community. So that kind of like, that kind of made me be like, oh, well, you know, maybe that's not so impossible. But Giles still has a lot of things I love, right? So, there's geeks, right? I've got geeks on my shirt, you know, like I love geeks and I think it's an amazing project. I think it's Giles killer application. And, you know, there's some other nice things too. Mace is great. You know, Chickadee, you know, is a nice, the next, you know, game library that David Thompson did. I really like that. And, you know, there's quite a few others too. And unlike, you know, Rackett's now moving on top of Shea Scheme, right? So, but what's Shea Scheme's bootstrapping story? Well, Shea's bootstream's bootstrapping story is Shea Scheme. And, you know, so we don't, in Gile at least does this thing that takes forever to compile. And then is able to bootstrap itself from that. But it compiles itself from C and at least with Mace we have some sort of story for that. And Andy Wingo does incredible things with the compiler stuff. And I know that everybody in the community really appreciates Wingo's work and we should all give him an applause right now. How much we appreciate that. And Andy's just like, yeah, take it, take it. And then there's geeks. Have I mentioned how great geeks is, right? So what do we do? Should Gile try to catch up, right? You know, Rackett has all these things. It's a little bit embarrassing in some ways when you come back to Gile, you know. So I don't know. It's a lot of libraries to catch up to. Like it's a lot of work. And the Gile community is not really big enough. Geeks has gotten, you know, has grown Gile a lot. But, you know, we still haven't seen too many other killer applications written in Gile. And I don't know how we can compete with Dr. Rackett. Like to be straight up, like Dr. Rackett changes the ability to write a list program and have people who are not Emacs users come in. That's kind of like, that's kind of a really big deal. And I don't even know how we could get close to something that's as nice as Dr. Rackett and Gile. Like maybe we could try building it off of Emacs and then write all these things so that like it like, you know, does the nice things by default and change all the key bindings and stuff like that. But like to be honest, like Emacs has a lot of weird things. Killing and yanking instead of copying and pasting. These are like things that have been around for a long time. So I don't know. So here's a heresy I'm going to throw out there. What would happen if we wrote geeks on top of Rackett? Right? What would happen? Oh boo, right? You know, so I'm just throwing it out here just to think about it as a mental exercise for a moment. Right? You know, maybe we could, like just with this mental exercise, you know, what would have happened? You know, maybe that story about having a GUI that generates the configuration file for Rackett would have happened like three years ago. Right? Because it comes with a nice GUI thing out of the box and we're still struggling with GUI libraries in Gile land to be honest. You know, maybe some sort of other things. We could get geeks contributors who don't have to struggle to figure out how to be able to manage parentheses. You know, so I don't know, but that seems like complete heresy. I feel like I needed to throw the heresy out there though. So let's talk a little bit less heretical than the last slide. We can package more Rackett packages than geeks. Rackett still has the classic not great mutable language environment that every other language suffers from. We can still do cool things, you know, by bringing that there and we can still be happy schemers and we could maybe actually just build a geek's GUI that's in Rackett and just write out some of the S expressions for the component of them that are compatible and, you know, just pull it back up and scheme again and maybe that would work. I've thought about doing it a few times. Didn't have time to do it before this talk, but, you know, and if this is, if I remember correctly, this was the last part of the conversation. I didn't actually look at the logs before I wrote this talk. I seem to remember Wingo saying something like this and you can correct me if I'm wrong. You know, first of all, he's like, well, I was in the middle of giving a talk about Lisp and GNU history and he's like, well, you were just saying in this thing about how all these Lisp communities couldn't work together and they kept splitting and kept splitting and, you know, it hurt Lisp and, you know, the Lisp and scheme not only diverted but common Lisp like almost didn't happen because common Lisp had to pull together all of these communities who didn't really want to work together except that they wanted to work together to survive, right? But they were, you know, there's this famous line about, you know, like, well, you know, the Mac Lisp-style thing has a defined direction. It's going in five well-defined directions, right? And, you know, it was a lot of work to get that community to be able to, you know, like to actually work together. And so I'm like, uh, okay, you know, interesting point. And then Wingo said another interesting thing if my memory is correct. What if Gaia was a more interesting language for Racket to Target than Shea's scheme? And I think that I must have been maybe part of, correct about part of this because that seems to line up with the talk you just gave. And in any way, I think that that's interesting. So, you know, that could be really cool and actually it looks like the way that Racket's being architected. I've talked to them about this quite a bit and, you know, Matthew Flatt, I actually raised it to him at RacketCon and he said, yeah, I'm hoping to be able to make it so that we could do those kind of things. So this could be really cool. You know, but what are the conclusions? You know, I love Gaia and I'm not leaving it, at least because of Geeks at minimum. I will contribute to, contribute Geeks packages and I love doing that kind of thing. Plus Racket still doesn't have a mutable top-level story so it's not as much fun to write games. But, you know, maybe my primary residence shifted, right? You know, both of these may be homes, but maybe, you know, Gaia's my summer house in some ways and, you know, Geeks says, you know, it may sound really rich, I don't have a summer house. But, you know, but, you know, Gaia and Racket also aren't enemies. I worry that this is going to bum out a bunch of people in the room. But, you know, I, anyway, our enemies are the not-asks expression using heretics and maybe Wisp can help with that too. But, you know, there may be places where we can work together more so let's, let's think about that. Did I ever turn on this thing? I sure hope so. Okay, whew, I did. So, anyway, thanks. I hope everybody enjoyed that. I'm open to questions and, by the way, this whole talk was actually written in Racket. In the slideshow language, you don't want to see the most fun part. Does anybody recognize, before I spoiler it, does anybody recognize that running man? Five internet points for anybody who recognizes this character right here. No. Nope, nope. So, it's actually, so yeah, you can see the code here where I generate this. It's actually the little man that runs when you run the garbage collector in Dr. Racket. And that whole section is procedurally generated. Here's the function. It's using picked. So, anyway, so, yeah, any questions or should I show demos? Demos? Okay. All right, so, you know, so, I mean, I bet if Ludovic felt like he wanted to do it, he could do it in a week, you know, but I also don't want to say something that's like trying to split the community and stuff like that. I just, you know, I think it's a worthwhile mental exercise. So, anyway, I decided to try doing a little experiment and see if I could do a one-man game jam in one evening. And I wrote a version of Racket, of Tetris in Racket. So, you know, do, do, do, do, do, do, do, do, do. You know, and this was done in one night, right? And then the next night, some fun Unicode, I did this version. Oops. So, do, do, do, do, do, do, do, do, do. And, you know, it's mostly the same code. But, you know, I thought it was really great. So, I didn't have the mutable level type thing, but I could type the code and then just hit CTRL C, CTRL C, and it would, you know, re-evaluate the things. And I still was able to kind of build things up at the rebel. I just couldn't change it while it was running. And this type of program is just fine for that type of thing. Maybe not the mud type thing. But, you know, this is okay. Okay. What else have we got? Another thing, this is actually for, so not many people know this, but I do contracting for the U.S. House of Representatives that's just become public somewhat recently. And we're working on, you know, some stuff for democracy preserving stuff so that we can actually make the voting history and all sorts of stuff like that, updated in modern metadata. So, maybe you want to see, you know, what some sweaty job is stuff and stuff like this. So, we've got to work on the data model for how that's going to be represented in JSON slash JSON-LD. And I wrote a little tool so that, you know, you can see what the objects are going to look like and stuff like that, you know. And this was just so that, you know, the people that I was working with could easily generate these types of things. It's using graph viz on the back end, but, you know, what's nice is that, you know, people who want to just look at a few things, because what it does is that it actually generates this giant spaghetti monster using graph viz. Like, because we've got so many things. So, maybe you just want to look at a couple of them, you know. So, that was kind of a nice thing and I just, you know, that was about a day's worth of work to generate this GUI. The GUI thing was actually pretty easy. Other things. So, some of you may know that I actually just got a grant to be able to do federated work for the next couple of years. And I'm going to be doing it all in a racket. And here's two servers. Here's one of the first demos of the thing called Spritely that I'm working on. So, some of you may be familiar around the Fediverse. There's a problem. What happens when one of the nodes goes down, that content disappears. This is encrypted content address stuff that represents it's spec compatible with ActivityPub. But two different servers actually can put stuff in a form that's peer to peer distributable between the two servers. But it's secure. So, that only if you end up getting the keys, which is in the URI, that's used as an ID between the objects and the server, can you actually read the message. So, I'm going to send a message. This is Alice's site on this tab. Which, you know, right now is just localhost 8001 as it's addressed. And I'm going to be like, hi, Bob. And I'm going to hit submit. Doesn't even redirect it. But you can see that in my outbox, I said hi, Bob. And in Bob's inbox, I refresh and we get hi, Bob. But this was not all sent in encrypted chunks that were sent across the wire that anybody can hold on to, even if a server goes down. That I'm going to be putting out throughout the next year. If you're more interested in sprightly stuff, you can talk to me later. But anyway, that'll all be done in Scheme and stuff like that. So, I think I'm out of time. Is that correct? Or do I have a minute? We probably have a question or so. Anybody want to ask any questions? Have I hurt everyone's feelings in the audience? Go ahead, yeah. Like the C embedability, right? I don't know if that's going to be very good anymore. I think Racket C thing is still going to be around, but since they're moving it to be on top of Scheme, that's not going to be... I think that they're going to maintain that, but I think that maybe that's one thing that... Oh, right. So, the question was, can you Lillipond actually embeds Gile inside of a C program? Can you do the same thing with Racket? And my impression is, you can currently... I don't think they've tried to make it as easy as Gile has historically made it. Less Gile programs seem to be going that route these days, but I think that the story for it is better currently in Gile and probably will be, especially given the trajectory of Racket. Do we have time for one more question? Okay. One more question. Right. Okay. So, here's one suggestion I got on the list that I immediately dismissed and then I thought, okay, the question is what would I happen if I do the top-level thing inside of a mud if I was going to do it in Racket? So, probably the way that I would actually do it is I would actually... My current plan is actually to have, you would actually have a client that's also your text editor because Racket actually comes with a GUI widget that just embeds a text editor just like any other GUI element, right? For a scheme. So, what my current plan is, is that you know, you would have the mud window where you know, you've got stuff coming in here where you know, somebody's like, you know, like somebody, you know, up here and stuff like that. Racket doesn't like that I'm typing, you know, like, so you might have like, you know, Bob is like, you know, like high up here and I'm chatting with Bob and I might be able to pull in a little GUI panel over here where I can click on an object and say, I want to edit you. And what actually happens during that point? So, what I'm actually going to do is make it so that that scheme code will be able to execute a... generate a new version of the object and basically hot-swap it. So, you're not actually changing a variable in the same way. Instead, you have a GUI which is your chat program in which you're changing things. So, it's not like Emacs. One of the limitations of that mud thing that I showed previously was that only the server administrator was able to edit objects in the system. And if we wanted to make it really cool, you want all of the players in your system to be able to edit it, which means we're going to have to be able to take it out of just the geyser hacking world anyway and actually consider the ability to be able to hot-swap in objects and I have a pretty good idea how to do that and actually directly integrate it with the GUI that players are using to consider just built into their mud if this works out. Who knows? Maybe I'll never get that far. One more question. Oh, no way. I use Emacs with Racket mode. Absolutely. This is Emacs right here. What are you crazy? No. Dr. Racket's great. Dr. Racket's really great. But the nice thing is that I've been able to write things with both geyser and Racket mode work. Racket mode is a little bit nicer for Racket but they're both pretty comparable. I've been able to write stuff in Racket mode and then have somebody come in who's using Dr. Racket and collaborate with me. Finally, the Emacs users can get along with everyone else, which has historically not been the case. Is that it? Thanks everybody.