[00:00.000 --> 00:00.600] All right. [00:03.300 --> 00:03.940] Good to go. [00:05.420 --> 00:05.960] All right. [00:06.220 --> 00:06.840] Welcome, everyone. [00:07.520 --> 00:13.960] I've got lights in my eyes, so I actually can't really see you all very well, but I think you can see me. [00:14.880 --> 00:17.160] I'm glad to see everyone show up. [00:17.300 --> 00:18.940] I know Sunday morning at 10 a.m. it's tough. [00:19.780 --> 00:25.280] I feel like I just rolled out of bed and stumbled over here, but I think I've got it together. [00:25.280 --> 00:27.340] I've got a couple cups of coffee in me at this point. [00:28.760 --> 00:35.940] I try to generally keep things kind of loose so I don't have problems with people asking questions during the presentation. [00:36.960 --> 00:40.860] I will stop a couple of times as well, so conversation is good. [00:41.220 --> 00:48.680] I'm almost as interested in answering questions as I am about talking about any particular thing, so don't hesitate to stop. [00:49.020 --> 00:54.680] Like I said, a couple of times I'll actually pause and give people who are interested a chance to ask questions. [00:55.360 --> 00:59.900] The room is small enough that I think we shouldn't have any problem with that, so just speak up. [01:00.060 --> 01:00.600] We should be good. [01:01.900 --> 01:03.240] May I repeat the questions? [01:03.780 --> 01:04.060] Yep. [01:04.440 --> 01:04.540] Yep. [01:04.720 --> 01:09.160] I will repeat the questions, though, so everyone can hear what everyone else had to say. [01:09.460 --> 01:11.620] So a couple of things before I get going. [01:11.980 --> 01:16.360] I will not be reliving my experiences on LambdaMOO. [01:17.820 --> 01:19.860] There's plenty of time for that, I guess, later. [01:19.980 --> 01:21.820] And I'm also going to avoid... [01:21.820 --> 01:36.000] Even though I spent a lot of time obviously writing code and changing code and programming, I'm not going to spend a lot of time talking in depth about actually how to program or any of the really deep technical aspects of what I did. [01:36.000 --> 01:46.760] What I'm going to really focus on is hopefully kind of the intersection of the community and how that impacts technology and what that means for code that actually is pretty dang old. [01:46.940 --> 01:55.420] It's, you know, the first version of LambdaMOO was released in 1991, which is, you know, 20 plus years now that that has been around. [01:55.420 --> 02:06.840] So it brings with the community that exists and the link at that time that code has been around brings kind of an interesting spin to what otherwise might be just kind of a maintenance project. [02:07.720 --> 02:10.460] So without further ado... [02:11.100 --> 02:11.960] Let's get rolling. [02:12.100 --> 02:13.380] Let me check and make sure it still works. [02:14.860 --> 02:15.340] Awesome. [02:16.700 --> 02:24.660] So the first thing I wanted to do before I kind of get into talking about LambdaMOO in general, I wanted to talk about where it came from. [02:24.660 --> 02:28.800] So who here has heard of Xerox's Palo Alto Research Center? [02:29.520 --> 02:30.720] A good number of folks. [02:30.840 --> 02:31.200] Excellent. [02:31.620 --> 02:39.080] So this is relevant because a number of things rolled out of PARC over the years. [02:39.620 --> 02:42.740] And they all kind of impinge on this talk in interesting ways. [02:42.960 --> 02:54.760] So one of the things that came out was a language called Smalltalk, which was an early object-oriented language with a particular environment and a particular style, not only of programming but of interacting with a machine essentially. [02:55.520 --> 02:59.540] A little bit later, the graphical user interface came out as well. [03:00.460 --> 03:03.780] This is something you might have seen downstairs on the second floor. [03:04.200 --> 03:05.900] This is actually the Apple Lisa. [03:06.220 --> 03:14.920] So Steve Jobs was inspired by looking at the PARC Alto, I think, which was an early GUI-based machine that was being designed at PARC. [03:17.240 --> 03:25.220] There was another language that came out of Xerox PARC that is probably even more relevant than Smalltalk, and that's a language called SELF. [03:25.980 --> 03:28.660] And we'll talk about why that's important in a little bit. [03:29.580 --> 03:41.220] SELF, some of the early developers of SELF, if you pay attention to these things, actually wound up working for Sun and developed the Hotspot Virtual Machine, which is a big chunk of Java technology now as well. [03:42.700 --> 03:47.820] And then, of course, to get to the point, LambdaMOO came out roughly around 1991. [03:48.540 --> 04:03.140] So a guy named... a researcher named Pavel Curtis, who was employed at PARC, built this with inspiration from a number of the other languages, not so much the GUI piece of it, but some of the other languages that had come out of PARC as well. [04:03.140 --> 04:06.880] And that play into the design that he implemented. [04:07.900 --> 04:10.200] Some other interesting things, I guess, that came out of PARC as well. [04:10.500 --> 04:12.880] Ethernet, obviously, laser printers, some other cool stuff. [04:13.060 --> 04:14.000] So it was a thing. [04:17.870 --> 04:18.550] All right. [04:18.810 --> 04:29.030] So very quickly, what I want to do is get into, I guess, what the purpose of the talk is about. [04:29.710 --> 04:36.770] So I'm going to... I'm not... this is obviously Sunday morning, somewhat more lightweight session than what was going on midday yesterday. [04:37.390 --> 04:43.750] But I do have kind of three points that I wanted to kind of emphasize as I talk about technology and community and maintaining old code. [04:44.290 --> 04:47.410] One of the interesting ones for me is that text is still relevant. [04:47.950 --> 04:51.190] I think it's... I think it's somewhat underrated. [04:51.410 --> 04:55.610] And especially if you spend a lot of time playing online games, you may not think about it. [04:55.690 --> 04:58.030] But in fact, text is still very much with us. [04:59.650 --> 05:10.170] Related to that, and I think that ties into kind of the DIY ethic that a lot of the talks today or this weekend are about, easy to build is actually very important as well. [05:10.510 --> 05:11.790] So text is still relevant. [05:11.910 --> 05:13.030] Easy to build is important. [05:13.350 --> 05:20.270] And then tying back to some of what I talked about about what was going on at PARC, immersive needs another chance. [05:20.490 --> 05:23.750] And I think you'll see how these all tie together as I get rolling along. [05:25.950 --> 05:26.510] All right. [05:26.650 --> 05:27.330] So a little background. [05:27.530 --> 05:32.390] Just to help me calibrate a little bit so I understand kind of what the audience knows and doesn't know. [05:32.550 --> 05:34.390] Who knows what a MUD is? [05:36.810 --> 05:37.330] Okay. [05:37.530 --> 05:38.490] About half of the audience. [05:38.870 --> 05:39.110] Okay. [05:39.230 --> 05:39.590] Excellent. [05:40.110 --> 05:45.570] So the word MUD, M-U-D, actually is an acronym for Multi-User Dungeon. [05:45.710 --> 05:55.570] And it was kind of a descendant of early single-player kind of online adventure-type games that actually ran on big servers, not so much PCs. [05:56.450 --> 06:03.290] And ultimately was the precursor to what we have as massively multiplayer online role-playing games, the graphical versions. [06:04.070 --> 06:07.990] So MUD was actually a multi-user environment, virtual reality. [06:08.150 --> 06:13.010] Most of them, you know, kind of had a kind of an adventure, D&D-style theme to them or whatever. [06:13.650 --> 06:15.650] Hence the dungeon aspect of it as well. [06:16.590 --> 06:22.930] So, and M-U, which we're going to talk about in the form of Land M-U, actually stands for MUD, object oriented. [06:22.930 --> 06:32.910] So it was a specific MUD engine or MUD server that had an object oriented set of underpinnings, which makes sense, I guess, given once again its genealogy. [06:34.310 --> 06:35.670] Another background question. [06:35.830 --> 06:36.790] What is LambdaMOO? [06:36.890 --> 06:38.270] Who knows what LambdaMOO is? [06:38.330 --> 06:39.770] Who's actually interacted with it? [06:41.250 --> 06:41.730] Okay. [06:41.890 --> 06:42.130] Great. [06:42.430 --> 06:45.070] So LambdaMOO is actually a particular kind of MUD. [06:46.170 --> 06:48.190] It's simultaneously a couple of things. [06:48.410 --> 06:50.230] So here's LambdaMOO. [06:50.230 --> 06:55.490] And actually, this is a recent screenshot from, you know, a week ago or something like that. [06:55.690 --> 06:59.570] So by and large, it looks a lot like it did back in the day. [06:59.670 --> 07:05.690] I've actually got it connected up via Telnet on my laptop, but at this point I won't try to switch the screen over to that. [07:05.810 --> 07:07.990] But basically, it's a text-based environment. [07:08.350 --> 07:13.770] And if you log in, it simulates in its virtual reality this mansion and the grounds around the mansion. [07:13.830 --> 07:15.250] And you can move from room to room, right? [07:16.890 --> 07:21.490] So LambdaMOO in the biggest sense is actually kind of three simultaneous things, right? [07:21.810 --> 07:23.870] Most people, I think, think about LambdaMOO. [07:23.950 --> 07:28.110] They think about the online community because that's the piece that got the most attention, right? [07:28.690 --> 07:30.810] So there's this online community called LambdaMOO. [07:31.130 --> 07:32.750] It was launched in 1991. [07:32.850 --> 07:33.910] It's still going today. [07:34.090 --> 07:37.510] And if you log in, you'll still find people on there interacting and doing things. [07:37.610 --> 07:41.670] It's probably not as popular as it once was, but it's actually still surprisingly very popular. [07:43.430 --> 07:44.630] And not in a bad way. [07:44.790 --> 07:46.430] I think that's actually tremendously interesting. [07:47.110 --> 07:53.070] LambdaMOO is also simultaneously a database of information that constructs that world, right? [07:53.190 --> 07:57.250] So there's a LambdaMOO core or a LambdaMOO database that implements that virtual reality. [07:57.470 --> 08:02.770] And the third thing, and the thing that I'm mostly going to talk about or talk around, is a server. [08:03.030 --> 08:08.130] So, Pavel Curtis actually created a piece of code called LambdaMOO that actually runs. [08:08.130 --> 08:11.330] It's a server and it runs and implements that virtual reality. [08:11.510 --> 08:13.510] It's the thing that you connect to and it's running it. [08:13.770 --> 08:19.090] It's also the piece that people extended, people actually downloaded, set up their own worlds on top of, et cetera. [08:19.410 --> 08:19.590] Okay? [08:19.730 --> 08:24.790] So once again, that piece of it specifically is what I'm interested in. [08:24.870 --> 08:29.190] We'll talk a little bit about the core itself, but I'm going to talk about the server primarily. [08:32.550 --> 08:33.050] All right. [08:33.170 --> 08:35.990] So as I said, online community, text-based virtual world. [08:36.590 --> 08:39.030] It's the database that describes that virtual world. [08:39.230 --> 08:41.810] And it's the server software that runs that virtual world. [08:43.150 --> 08:47.550] So LambdaMOO, the community, was interesting for a number of reasons. [08:47.830 --> 08:49.490] So this is all still background, right? [08:49.550 --> 08:52.530] I just want to kind of get to the point eventually here. [08:52.690 --> 08:54.110] So there were a couple of things. [08:54.290 --> 08:58.810] Those of you who interacted with this or spent time on the community will probably remember some of these things. [08:59.310 --> 09:03.370] It had a very flexible gender-based pronoun type system, right? [09:03.370 --> 09:05.390] And so we'll talk about that a little bit more. [09:05.590 --> 09:08.570] A very liberal attitude toward building and programming. [09:08.850 --> 09:14.670] So users were, in many ways, encouraged to contribute by building and extending that environment. [09:15.230 --> 09:19.350] It had a petition, kind of a popular petition ballot-based system for actually running it. [09:19.410 --> 09:28.810] And for a period of time, the users were actually in charge of that rather than, in the case of most MUDs at that time, a group of people called wizards who had kind of super user powers. [09:29.950 --> 09:35.310] And then, of course, there was a vast amount of associated literature that came out of that whole thing as well. [09:35.510 --> 09:40.490] Both scholarly literature, popular press, et cetera, all covering that. [09:41.870 --> 09:44.790] So I wanted to drop into the gender thing. [09:44.870 --> 09:46.030] So this was very interesting, right? [09:46.090 --> 09:53.430] If you look at many online games today, especially the graphical ones, it's actually pretty hard to think in terms of gender, right? [09:53.510 --> 09:58.910] What gender there is probably reflects what a 15-year-old boy would consider idealized versions of gender. [09:59.530 --> 10:06.410] And because you're dealing with a graphical environment, it's actually pretty hard, other than some kind of crazy, you know, body morph type of thing. [10:06.830 --> 10:11.630] It's hard to convey gender in an interesting way that works with us in a linguistic sense. [10:11.730 --> 10:15.250] And what LambdaMOO had actually done was implemented this very flexible gender system. [10:15.630 --> 10:19.670] Honestly, out of this list, if you couldn't find something, I don't know what to say, right? [10:19.730 --> 10:20.770] I don't even know what some of these are. [10:22.050 --> 10:23.650] But it was very interesting, anyway. [10:24.990 --> 10:26.770] There was a lot of text as well. [10:26.930 --> 10:28.310] So I went and grabbed a couple of things. [10:28.890 --> 10:34.290] If you, you know, even just literally go to Google, type in LambdaMOO, you're going to find these in the top set of hits, right? [10:34.390 --> 10:36.170] Just a variety of different things. [10:36.270 --> 10:40.650] People were writing about the notion of being online and in a virtual community at that point in time. [10:41.050 --> 10:59.530] What's even more interesting about it, and I haven't found anything similar for code that came out around this time, earlier this year there was even a play that was put together, literally in February of this year, about the Rape in Cyberspace episode turned into a play where people kind of revisit that piece. [11:00.050 --> 11:06.190] So nothing else from that time frame I'm aware of has been made into a play, certainly not Mosaic or Early Browsers or whatever. [11:07.090 --> 11:08.810] So I find this amazing. [11:09.110 --> 11:12.150] So even I didn't have a chance, unfortunately, to see this play. [11:12.250 --> 11:18.030] A friend of mine who told me about it, unfortunately told me about it later than I could have actually done anything about it. [11:18.030 --> 11:19.510] So it may still be going. [11:19.610 --> 11:20.290] I haven't taken a look. [11:20.430 --> 11:26.450] But I find it very interesting that from a popular culture perspective people are still finding a way to relate to all this. [11:28.530 --> 11:33.570] So on the server side, the server was actually interesting for a number of reasons as well. [11:34.150 --> 11:36.230] It had a persistent object database. [11:36.430 --> 11:40.170] So you built in terms of objects, you thought in terms of objects. [11:40.270 --> 11:43.690] This was very definitely part of the small talk and self heritage. [11:43.690 --> 11:48.810] It was a prototype based object oriented language which is very similar to what self provided. [11:49.330 --> 11:52.050] And not like prototype in terms of JavaScript. [11:52.350 --> 11:56.430] I mean it was probably a more proper prototype based language as opposed to something that was class based. [11:57.270 --> 11:59.730] It supported simple cooperative multitasking. [12:00.410 --> 12:01.730] So this was actually very important. [12:01.910 --> 12:06.510] So the view, vision for LambdaMOO was that people would get in there and program. [12:06.970 --> 12:09.770] And so they took that into account when they built it. [12:09.810 --> 12:12.670] It wasn't just a group of builders who built it offline and fired it up. [12:12.670 --> 12:18.010] It was people logging in and having the potential to interact and change that system as it was running. [12:18.210 --> 12:21.430] So it had to support kind of a simple cooperative multitasking environment. [12:21.950 --> 12:27.550] And a simple permissions based security model so that users couldn't screw with what other users were actually creating. [12:27.810 --> 12:30.550] It was not perfect but it was reasonably good for the time for sure. [12:31.310 --> 12:37.250] More interesting I guess depending on your interest in kind of the popularity of programming languages. [12:37.810 --> 12:40.250] The data model was largely immutable. [12:41.070 --> 12:46.470] So if you changed, you created a list of values and you essentially couldn't mutate that. [12:46.650 --> 12:51.310] You know, the operations in the language actually created, you know, new instances of that. [12:51.470 --> 12:59.390] Which harkens to kind of a resurgence of interest in languages like Haskell which make immutable data essentially a hallmark of that language. [12:59.390 --> 13:11.510] So they understood even at that point in time that immutable data made certain kinds of, you know, multi, I guess multitasking code or distributed parallel code safer to write. [13:11.710 --> 13:18.210] So the LambdaMOO, I guess the point has had a reasonably solid theoretical underpinning that came out of its time at Park. [13:18.350 --> 13:21.290] And I think it's part of the reason why it still continues to be popular. [13:21.290 --> 13:23.210] So it's based on lambda calculus? [13:24.150 --> 13:24.810] Not really. [13:24.990 --> 13:28.330] Lambda was the alias of Pavel Curtis. [13:28.550 --> 13:30.590] And so that's how they got the lambda piece. [13:30.710 --> 13:32.170] But yeah, not really. [13:32.290 --> 13:36.410] I mean if you looked at scheme or something you'd see obviously the lambda calculus and they're not so much. [13:36.510 --> 13:42.350] So I'll show a snippet of code and actually it looks very much like kind of very simple code and not at all like scheme. [13:44.590 --> 13:45.530] Yeah, there we go. [13:45.630 --> 13:46.130] There's the code. [13:46.350 --> 13:51.270] So this is a little chunk of code from the package system that I built and basically just a little chunk of code. [13:51.270 --> 13:54.910] that recursively deletes some stuff inside of a package. [13:55.430 --> 13:59.970] I'm only throwing it up there just to give everyone a sense of what the code looks like inside of LambdaMOO. [14:00.070 --> 14:02.110] It's a very, very, very simple little language. [14:02.910 --> 14:04.050] But, you know, sufficient. [14:04.250 --> 14:07.110] You can see method calls and things like that in there. [14:08.930 --> 14:10.870] Alright, so I've been talking about LambdaMOO. [14:10.970 --> 14:15.870] If you actually look me up on the Internet you won't find my name stuck in with a lot of LambdaMOO stuff. [14:16.590 --> 14:19.230] Primarily because what I'm working on is something called Stunt. [14:19.850 --> 14:24.550] And they're very closely related but I wanted to make sure everyone understands the distinction as well. [14:24.750 --> 14:32.330] I'm going to talk a little bit about Stunt but actually talking about that other than the changes that I made to LambdaMOO to create the thing called Stunt. [14:32.410 --> 14:35.250] It's not really the centerpiece exactly of what I'm talking about. [14:35.730 --> 14:42.590] So if you think back to the slide of the text-based environment for LambdaMOO, this is the contrast. [14:42.590 --> 14:46.670] So Stunt is basically LambdaMOO reimagined for the web. [14:47.550 --> 14:49.850] It has been updated in some areas. [14:50.090 --> 14:52.350] Some new functionality has been added. [14:52.510 --> 14:54.070] Actually a considerable new functionality. [14:54.330 --> 15:04.630] But the basic metaphor is let's get LambdaMOO, let's get that mud code up to something that you could actually hit inside of a browser in a meaningful way in an easy fashion. [15:04.630 --> 15:07.990] So at some level it's not particularly revolutionary. [15:08.330 --> 15:12.690] On the other hand I think from an accessibility perspective it's actually very, very, very important. [15:13.970 --> 15:15.470] So that is Stunt. [15:15.610 --> 15:19.530] Some of the things I guess I just wanted to point out very quickly about it. [15:21.190 --> 15:23.930] And I guess the question too is what was my interest? [15:24.050 --> 15:29.810] So what I was trying to do at the time, I loved the notion of LambdaMOO's kind of immersive environment for programming. [15:29.810 --> 15:32.890] I wanted to build some simple immersive experiments. [15:33.410 --> 15:40.730] I love the idea of people being able to interact with something that you've created and extend it via programming, right? [15:40.830 --> 15:44.150] To me that's been the holy grail as long as I can remember, right? [15:44.290 --> 15:46.570] Programming and creating were tied together. [15:47.010 --> 15:54.930] It was very hard to do and without web-based, without some kind of web-based accessibility it was essentially not going to be reachable to a large number of people. [15:54.930 --> 15:57.910] So I had been involved with LambdaMOO might have been on it. [15:58.030 --> 16:02.510] I discovered it when I was in graduate school within a couple years when they released it in fact. [16:02.970 --> 16:05.130] And started, you know, had started playing with it. [16:05.230 --> 16:09.850] So I had a sense of it at that time and just kind of maintained this ephemeral attachment over time. [16:10.350 --> 16:14.530] Came back to wanting to design these immersive kind of experimental things. [16:15.030 --> 16:20.110] And so I wanted to pick up something I was familiar with and extend it in interesting ways. [16:20.110 --> 16:24.870] So some of the things, just very quickly, and I'll talk about this in a little bit more detail, that I did. [16:25.030 --> 16:28.850] I obviously added HTTP support, which is probably the most visible one. [16:30.130 --> 16:36.790] There was, because ultimately no one outside of this group, if you go down to the street outside, no one knows what Telnet is. [16:37.070 --> 16:38.170] They don't know how to get one. [16:38.490 --> 16:41.010] You know, they just, they're not going to be able to do anything useful with that. [16:41.010 --> 16:43.850] There were some limitations in the code base. [16:44.590 --> 16:49.190] MD5, for instance, from a hashing perspective, from a security perspective, is effectively broken. [16:49.570 --> 16:53.430] And that's the only hashing tool you've got inside of the server. [16:54.310 --> 16:56.310] It didn't have certain data types. [16:56.410 --> 16:57.830] There was no map-based data type. [16:57.890 --> 16:59.030] You had a list, but no map. [16:59.390 --> 17:03.850] I think people kind of expect that now, especially if you're going to be talking JSON or something like that. [17:04.550 --> 17:15.750] And ultimately, LambdaMOO, like small talk, and a lot of early object-oriented environments, had a very deep inheritance hierarchy, which was enforced by its single inheritance model, and so I wanted to break that up as well. [17:16.330 --> 17:26.730] So let me go and kind of pause for one moment before rolling there, and just see, got time for one or two questions, if anyone wants to stop and ask questions before I actually get on kind of the meat of what I'm going to talk about. [17:29.190 --> 17:29.630] Go ahead. [17:29.750 --> 17:32.090] Can you touch on the breaking cyberspace area? [17:34.690 --> 17:35.990] Yeah, so I mean, I can. [17:36.130 --> 17:36.890] I won't... [17:38.330 --> 17:42.450] The general episode, so the question was, can I touch on the whole rape and cyberspace episode? [17:42.630 --> 17:47.070] So the context there, and I'll just say a few words, I guess, to give people a sense of the flavor of the thing. [17:47.290 --> 17:49.750] The notion of an online community was very new at the time. [17:49.890 --> 17:54.010] I mean, you had Genie, you had CompuServe, and a few things like that that were obviously multi-user. [17:54.950 --> 17:58.650] LambdaMOO was very interesting and new because it was very unstructured, right? [17:58.650 --> 18:02.890] There wasn't a set of system administrators enforcing a lot of things. [18:03.070 --> 18:16.290] And so that particular episode involved a character who found a flaw or an exploitable opportunity inside of the database and was able to essentially make other characters in that virtual reality do or appear to do what that user wanted. [18:17.450 --> 18:21.310] And so that obviously was fairly traumatic for a lot of people. [18:21.450 --> 18:22.270] It was fairly new. [18:22.430 --> 18:24.270] It literally, you know, made news. [18:24.270 --> 18:27.510] It became a play at this point in time. [18:27.510 --> 18:31.010] So it was... it was... what's that? [18:31.070 --> 18:32.450] So it's Bob Reeves Allen. [18:32.730 --> 18:37.030] Yeah, it was actually Mr. Bungle abuses a large number of people. [18:37.890 --> 18:39.930] But anyway, is that close? [18:40.230 --> 18:40.630] Yeah, yeah. [18:40.950 --> 18:44.110] So anyway, very interesting one. [18:44.450 --> 18:47.790] Very interesting episode for sure and formative in a lot of ways. [18:47.910 --> 18:52.450] And I think reflective of what LambdaMOO the community was and was not at that time. [18:53.430 --> 18:58.170] So, okay, let me... let me go roll and start talking about text and why it is relevant. [18:59.950 --> 19:03.510] So, this section... so roughly speaking, I want to talk about the community. [19:03.650 --> 19:04.670] I want to talk about the code. [19:04.870 --> 19:07.310] And then I want to talk about the use of those codes together. [19:07.550 --> 19:10.930] And I think as this rolls along, you'll see how it all ties... ties in. [19:11.870 --> 19:14.530] So, very quickly, this is the section about community. [19:15.210 --> 19:24.010] And what I did is I took some snapshots of some of the information out there just to give everyone kind of a data format, I had a sense of where the community has been and where it is right now. [19:24.770 --> 19:28.350] So this is actually... SourceForge is where the server software is currently hosted. [19:28.550 --> 19:30.390] They have a mailing list associated with it. [19:30.470 --> 19:34.530] And this is the number of posts starting in about 2000 to last year. [19:34.610 --> 19:36.670] There haven't been any posts on that mailing list this year. [19:37.010 --> 19:42.070] So you can see that there is some, even as going back as far as last year, as recent as last year, some posts. [19:42.090 --> 19:44.230] Obviously not quite as much activity, though. [19:44.970 --> 19:50.150] The big place for talking about LambdaMO is actually in a Google group called MooTalk. [19:50.150 --> 19:55.990] And so that started around 2008 and has been, you know, relatively popular. [19:56.130 --> 19:59.870] Certainly around 2009-2010 was probably the point of most posting. [20:00.550 --> 20:04.330] But there continues to be on a monthly basis dialogue and discussion. [20:04.990 --> 20:07.850] Primarily around building, a little bit around the server itself. [20:08.070 --> 20:12.770] So it kind of encompasses both the server and the community or building side of it. [20:12.810 --> 20:14.250] People trying to set up their own things. [20:15.770 --> 20:28.130] This, the contrast here, though, anyone who spent time on MooCows, which was the mailing list for the server in the mid-90s, that, you know, that, that had literally, you know, up to, you know, probably on average, 300 posts a month, 200 to 300 a month, [20:28.230 --> 20:29.290] and up to 500 a month. [20:29.430 --> 20:32.370] So obviously, the mid-90s, the volume was, was there. [20:32.670 --> 20:34.710] What was interesting, though, is I started getting involved. [20:34.870 --> 20:38.830] My interest wasn't so much connecting with the community as extending the server for my own purposes. [20:39.030 --> 20:42.470] But in that, doing that, you end up hooking up with whatever community is left. [20:43.030 --> 20:47.130] And I found some very interesting things that kind of tie into text and why it's relevant. [20:48.870 --> 20:49.890] There is a MUD. [20:50.010 --> 20:53.970] This isn't a LambdaMOO, but it's a MUD called Alter Eon. [20:54.250 --> 21:01.270] The interesting thing about this is that if you poke around, almost all of the players are actually blind or seeing impaired. [21:01.970 --> 21:09.550] So as it turns out, now this is not, like I said, LambdaMOO, but it ties in very closely to what I'm going to talk about in a second about text. [21:09.550 --> 21:20.330] It turns out that there's a reasonable number of people for which the fancy graphics in an online multi-user graphical role-playing game simply is not effective, right? [21:20.450 --> 21:22.530] They can't make use of that environment. [21:22.650 --> 21:23.890] But they're still gamers. [21:24.010 --> 21:24.890] They still want to have fun. [21:24.970 --> 21:25.810] They still want to play. [21:26.110 --> 21:37.650] And so surprisingly enough, there's actually a fairly reasonably sized, passionate community of gamers out there who are seeing impaired or blind who actually make use of this. [21:38.170 --> 21:45.810] I've got on my laptop, and I'll keep rolling because I don't want to run out of time, but on my laptop I've got a text-to-speech reader. [21:46.050 --> 21:49.910] And you can connect up, and I actually have tried this several times with a whole bunch of Moos. [21:49.970 --> 21:54.890] And you can actually play these things and interact with them without, with your eyes closed. [21:55.110 --> 22:02.450] You know, sit in the dark, close your eyes, which is nice if you stare at a screen like I do all day, and actually interact with a virtual world purely audiably. [22:02.930 --> 22:05.590] So on the, on the Lambda, like I said, this is just a mud. [22:05.990 --> 22:09.510] On the LambdaMOO side, there is a company called RS Games. [22:09.750 --> 22:11.710] Now they're not making communities. [22:11.710 --> 22:13.530] They're not making adventure games per se. [22:13.650 --> 22:14.810] They're making more social games. [22:14.930 --> 22:17.470] But their backend engine is actually LambdaMOO. [22:17.690 --> 22:23.290] So they're using the Moo server basically to manage all of the games, to implement it from a programming perspective. [22:23.550 --> 22:29.150] And then what they provide is a client that allows you to download sounds and some things like that so that you can actually play these games. [22:29.150 --> 22:32.570] Their whole market is, is visually impaired gamers. [22:33.310 --> 22:38.330] Uh, another, uh, forum called Audio Games focuses on broadly speaking games. [22:38.870 --> 22:45.210] Could be, you know, ones you install right on your laptop or your, your PC, uh, online games or whatever. [22:45.230 --> 22:51.310] But they also have discussions and people launching on a regular basis new MUDs that are basically text-based. [22:51.930 --> 22:58.070] So, so, I don't want to imply that there is, like this is the majority of people using MUDs. [22:58.190 --> 22:58.630] Go ahead. [22:58.630 --> 22:59.390] No, no. [22:59.590 --> 23:00.010] Okay. [23:00.990 --> 23:01.450] Okay. [23:01.890 --> 23:02.350] Okay. [23:02.590 --> 23:02.910] Okay. [23:04.110 --> 23:04.570] Okay. [23:05.850 --> 23:17.210] So, so, I don't want to imply that the community of people using text is, is, uh, the majority of people, uh, or people that are visually impaired is the majority of people using or playing MUDs. [23:17.370 --> 23:19.190] It's still a, you know, small minority. [23:19.410 --> 23:21.510] It's probably larger than the population as a whole. [23:21.810 --> 23:26.490] Uh, but my point is there's a community out there for which this is a very, very valuable resource. [23:26.490 --> 23:29.870] Uh, text-based itself is interesting too. [23:30.050 --> 23:33.670] So, so the whole point here is that this got me thinking about the role of text overall. [23:33.870 --> 23:42.570] And what's interesting to me and the reason why I consider text to be important is because the, the effort curve, the learning curve to create something is so much smaller. [23:42.910 --> 23:54.310] If you think about writing a book or putting together a presentation or building some kind of a virtual reality, a single person or small group of people can actually build something creative, uh, using text. [23:54.310 --> 23:56.430] And they, and it can be very engaging, right? [23:56.510 --> 23:59.470] Books are still incredibly engaging for people that read them. [24:00.030 --> 24:02.110] Uh, and, and text has that property. [24:02.290 --> 24:04.610] We're built to handle language in that format. [24:04.810 --> 24:12.290] And so text itself still ends up being very relevant because the production costs for doing something graphically are so high. [24:12.290 --> 24:22.690] If you want to create a game, if you want to just for your own benefit or for a small community, you want to do something and do it with, with full kind of visual production, you're going to need a team to do that. [24:22.790 --> 24:25.250] You're not talking so much about individual creativity. [24:25.250 --> 24:27.530] There may be a creative director and some people involved. [24:27.910 --> 24:32.590] But you're going to have a team of people basically building that and they're going to be building aspects of, of that. [24:32.730 --> 24:38.470] If you write a book, there's still the notion of an author and an editor and a few people involved in actually creating that piece of work. [24:38.470 --> 24:50.230] And so what this episode highlighted for me is that from a creativity perspective, and I think that ties into kind of the DIY thing that I like so much about events like this and, and other maker type things. [24:50.710 --> 24:53.730] You know, it, for me, the creativity is what it's about, right? [24:53.810 --> 24:59.250] I'm not interested in people that are trying to make a hundred million dollars in a, in a theater, right? [24:59.450 --> 25:04.490] I'm interested in what average people are trying to do to create interesting things for themselves and their community. [25:04.490 --> 25:16.870] And so from that perspective, I think text is very relevant because the number of people that are going to be able to build something visually engaging is much, much smaller than the number of people that can build something using text as a metaphor. [25:17.010 --> 25:19.650] And the way our brains work, it actually works very well. [25:20.330 --> 25:22.270] So, so that was kind of point number one. [25:22.390 --> 25:27.850] Text, I think, is still very relevant both practically and, and just kind of, kind of conceptually as well. [25:27.850 --> 25:31.790] So before I roll to the next point, anyone have any questions or comments? [25:33.510 --> 25:34.110] Go ahead. [25:34.330 --> 25:39.720] Do you have any sense of how large that market is for the text only for the games? [25:40.020 --> 25:40.440] Yeah. [25:42.000 --> 25:42.440] Yep. [25:42.960 --> 25:49.340] So, so the question was, do I have any sense of how large that market is in terms of text only games for the seeing impaired? [25:49.600 --> 25:51.820] I actually don't in terms of good solid numbers. [25:51.840 --> 25:55.060] I have talked to the folks from RS games a couple of times. [25:55.640 --> 26:00.440] Because they use LambdaMOO, they were interested in whether or not something like Stunt would be useful from the back end. [26:00.620 --> 26:04.180] And were interested in, you know, actually adding thread support and some things like that. [26:04.280 --> 26:06.780] Just to see if they could get better performance out of their engine. [26:08.160 --> 26:13.680] My sense is that if you focus on it, you can, you know, certainly make a decent living doing it. [26:13.780 --> 26:17.200] So if it's something you care about and want to do, clearly companies are doing that. [26:17.900 --> 26:23.780] Obviously the number of visually impaired gamers is quite a bit smaller than the number of sighted gamers. [26:23.780 --> 26:26.260] And so, you know, the market is just going to be small. [26:28.180 --> 26:31.840] Alright, so the next one I wanted to talk about is why easy to build is important. [26:35.760 --> 26:41.420] So, as I kind of get into this, what I wanted to do is just go through very quickly the status of LambdaMOO overall. [26:42.260 --> 26:43.560] So LambdaMOO releases. [26:43.980 --> 26:47.080] So the last official release was actually in 2000. [26:47.280 --> 26:48.540] So it's version 181. [26:48.900 --> 26:51.960] And that's what most people actually download and use. [26:51.960 --> 26:54.540] Okay, so they're using code that's 14 years old. [26:55.420 --> 27:01.320] There were some unreleased versions and some kind of unofficial versions that came out by the people that are actually maintaining the main server. [27:02.300 --> 27:05.200] There's a question, too, of why I didn't try to extend... [27:05.200 --> 27:07.260] Well, I mean, I always try to extend LambdaMOO. [27:07.440 --> 27:08.980] I'm not the maintainer of LambdaMOO. [27:09.080 --> 27:10.300] I didn't even ask for that role. [27:10.480 --> 27:12.540] I'm not sure I would take it if someone offered it to me. [27:12.860 --> 27:14.980] LambdaMOO is still an ongoing thing. [27:15.120 --> 27:16.720] People have expectations about it. [27:16.720 --> 27:19.420] They use it and they want it to behave a certain way. [27:19.720 --> 27:21.440] I want to break things. [27:21.720 --> 27:31.220] And so for me, trying to both maintain a piece of software that people use and break things was too hard to maintain or to do simultaneously. [27:31.700 --> 27:34.700] So I chose instead to call, even though it's very compatible. [27:35.020 --> 27:39.220] Literally, you can take code that runs in LambdaMOO, bring it up and stunt and everything's fine. [27:39.880 --> 27:42.340] I didn't want to make... [27:42.340 --> 27:47.380] I wanted to make it clear that I wasn't maintaining LambdaMOO per se as trying to pave a path forward. [27:47.580 --> 27:50.600] And ultimately, it would be nice to see some of that roll back into the main server. [27:50.880 --> 27:53.300] But I was very definitely trying to break some things. [27:53.520 --> 27:59.460] So there was a 182 that was unreleased, a 183 that was unreleased, and there's a 184 that's actually in progress. [28:00.180 --> 28:03.440] But we're still talking about code that's actually relatively old. [28:04.300 --> 28:07.520] What's interesting to me is that people still download this. [28:07.520 --> 28:12.700] So if you go to SourceForge right now and take a look, they provide wonderful metrics about what people are using. [28:12.820 --> 28:15.140] And I could get this for stunt too, but I didn't bother. [28:15.420 --> 28:16.560] Stunt is hosted on GitHub. [28:17.480 --> 28:20.400] And I just didn't fiddle around with trying to get these numbers out of there. [28:20.500 --> 28:23.920] But people are still downloading it to the tune of probably 50 downloads a month. [28:24.040 --> 28:24.280] Go ahead. [28:24.480 --> 28:26.380] Where's the main LambdaMOO server located? [28:28.080 --> 28:29.280] Yeah, I don't know physically. [28:29.320 --> 28:30.760] I can pop the URL up. [28:30.980 --> 28:33.620] I think it's actually in Washington State, to be honest with you. [28:33.700 --> 28:39.660] I think the guy who runs it right now, which is one of the guys who's been around using it, running it forever, is located up there. [28:39.820 --> 28:41.480] So I think physically that's where the server is. [28:42.300 --> 28:45.280] But it's actually at the same URL it's always been, I believe. [28:45.760 --> 28:47.820] So the question was where is the server located? [28:48.040 --> 28:49.080] Or where is LambdaMOO located? [28:49.360 --> 28:50.760] So people still download it. [28:50.800 --> 28:51.860] I found this very interesting. [28:52.520 --> 28:53.760] People still run it. [28:53.960 --> 28:54.380] Okay? [28:54.520 --> 28:56.020] This is the crucial one. [28:56.080 --> 28:58.880] And this is part of the reason why I didn't want to become the maintainer per se. [28:58.880 --> 29:01.120] So MUD Stats is a site. [29:01.260 --> 29:13.940] If you augment your code, whatever MUD you're running with a couple of bits and pieces, you can actually publish information to MUD Stats and people can actually look up various categories of MUDs and see how many people are playing or online or various things like that. [29:14.140 --> 29:19.160] So I think when I snapped this a week or two ago there were 54 MUDs and new ones appear periodically. [29:19.320 --> 29:21.060] And of course the existing ones are still there. [29:21.180 --> 29:27.300] If you look two lines down you'll see LambdaMOO, which is still very popular in terms of MUDs. [29:27.300 --> 29:33.860] It's only the second most popular one right behind Helmoo, which is quite an entertaining place. [29:36.040 --> 29:41.200] But my point is, and there's some other ones too that have been around since the 90s and then some new ones that appear. [29:41.300 --> 29:43.900] But the point is people are still running and still building these things. [29:44.080 --> 29:44.140] Right? [29:44.220 --> 29:47.140] This is like still a very active area. [29:48.180 --> 29:55.440] Not in comparison to the number of users of Facebook, but in terms of kind of, you know, people that are, you know, roughly the... [29:56.300 --> 29:56.840] What's that? [29:57.740 --> 29:58.920] Yeah, yeah, yeah, yeah. [29:59.440 --> 30:00.660] So anyway, I thought this was interesting. [30:00.740 --> 30:02.420] And you can see the different versions here as well. [30:03.280 --> 30:10.160] So the last point, and I'm going to come back to this one, but I just wanted to throw it out here, is that people are still trying to recreate LambdaMOO. [30:10.920 --> 30:12.880] Not so much the community here, but the software. [30:13.020 --> 30:14.200] And I'll come back to that in a second. [30:14.340 --> 30:17.200] So think about people are still downloading it, people are still building it. [30:18.040 --> 30:18.920] What does that mean? [30:19.220 --> 30:21.220] Okay, it means they're dealing with some very old code. [30:21.220 --> 30:25.620] And that's where I get to kind of more the code technical side of what I'm going to talk about. [30:26.300 --> 30:28.380] So what does old code mean? [30:28.720 --> 30:30.900] So this is what old code means to me. [30:31.540 --> 30:34.020] How many people know what that is? [30:35.240 --> 30:36.220] Okay, awesome. [30:36.460 --> 30:38.360] So you don't see a lot of this. [30:38.640 --> 30:40.980] There's a great line right here. [30:41.120 --> 30:42.520] Let's see if I can find it now. [30:43.020 --> 30:44.540] From the README itself. [30:44.920 --> 30:54.180] But basically, if you look at the LambdaMOO README, it literally has lines in there that basically say, you're going to have the best luck if you find yourself a largely ANSI compatible C compiler. [30:54.740 --> 30:57.720] And it's like, you know, when's the last time you even saw that in README? [30:57.780 --> 31:01.020] When's the last time you even saw Kernahan and Ritchie style code? [31:01.200 --> 31:03.520] It's not all over the code base, but it's definitely in there. [31:03.620 --> 31:09.740] The regular expression package, I swear to God, is based on Henry Spencer's regular expression package from forever ago. [31:10.220 --> 31:14.940] And it's still got KNR style function declarations. [31:15.280 --> 31:17.060] So it's some old code. [31:17.180 --> 31:21.580] A lot of it's been updated, and of course it uses POSIX primarily, which makes things a lot better. [31:22.320 --> 31:24.120] So anyway, that's what old code means. [31:25.820 --> 31:32.100] That's kind of entertaining, but it's not necessarily the most important part. [31:32.320 --> 31:36.700] There's another kind of old code that's actually much more relevant if you're trying to do things right. [31:37.620 --> 31:44.040] There's code in the old server that simply speaking doesn't perform its intended function like it should anymore. [31:44.500 --> 31:48.500] So the only hashing function that's available in the LambdaMOO server is MD5. [31:48.780 --> 31:49.920] And that's it, right? [31:50.060 --> 31:55.020] So if you want to hash things, if you want to create some kind of a digest, you're going to do it with MD5. [31:55.980 --> 31:58.080] That's probably fine for many applications. [31:58.240 --> 32:02.540] From a security perspective, MD5 is completely unacceptable, right? [32:03.920 --> 32:05.300] It's effectively broken. [32:05.840 --> 32:11.640] So if you are, you know, kind of just building something simple, you probably don't care about that. [32:11.760 --> 32:17.020] If you're actually concerned about building something that's going to be able to function properly on the web, it's actually a big problem. [32:17.340 --> 32:18.400] One, because it's broken. [32:18.560 --> 32:24.140] And two, because other protocols out there require your ability to hash other things. [32:24.140 --> 32:33.020] So RIPEMD or, you know, something like SHA-1 or SHA-256 are considered to be much more acceptable hashing functions. [32:33.220 --> 32:40.420] So it was necessary for me to essentially continue to support MD5 but ultimately make the default something more sensible. [32:40.860 --> 32:55.320] So the point here is that when you're dealing with old code, and this is kind of the pragmatic side of the talk, when you're dealing with old code, you're going to find code that was in there that probably compiles fine, it functions correctly but it's simply not adequate to its intended task anymore. [32:55.960 --> 33:04.660] Another way that this plays out, people tended to use hashing functions like MD5 to compute things like digital signatures. [33:05.220 --> 33:13.340] And it turns out that almost any combination of your own code plus MD5 is probably going to be the wrong way to do something secure like that. [33:13.340 --> 33:22.500] What you do now is use something like an HMAC, which is, you know, been kind of demonstrated to be a better combination of these primitives. [33:22.700 --> 33:25.840] So adding an HMAC support was an important piece as well. [33:26.260 --> 33:31.780] Once again, the average user probably not going to care, but if, you know, if you're really concerned about doing things right, you're going to need that. [33:32.060 --> 33:37.160] Another place where people were using something like a hash function incorrectly is in dealing with passwords, right? [33:37.160 --> 33:47.720] So if you used LambdaMOO's built-in crypt function, you got whatever your OS, your operating system supported, which was, you know, if you didn't pass anything in there, probably going to be something like triple desks, right? [33:47.800 --> 33:49.480] Which is, you know, whatever. [33:49.660 --> 33:50.120] It's not great. [33:51.080 --> 34:03.300] The problem with even using something like SHA-256 in your own construction is that password hashing should have some additional properties that you're not going to get with a fast hash. [34:03.860 --> 34:07.540] In particular, password hash should probably be really slow. [34:08.220 --> 34:09.860] It should take a lot of CPU cycles. [34:09.960 --> 34:14.460] It should abuse the CPU or the computer in ways that make it hard to parallelize, for instance. [34:15.240 --> 34:18.460] So really, the state of the art there is something like bcrypt or scrypt. [34:18.580 --> 34:33.060] And so what I did is I actually built bcrypt into the server itself as the default for the crypt function so that if anyone was encrypting passwords or hashing passwords to store, they were going to use something that was a little bit closer to modern standards. [34:34.960 --> 34:37.940] Related to hashing, so once again, this is the technical bit. [34:38.520 --> 34:42.640] I hope it's enjoyable for some of the folks anyway. [34:43.340 --> 34:48.280] Related to the security is the fact that you should really try to have good randomness, right? [34:48.360 --> 34:53.180] Modern web applications, modern applications in general benefit from having access to good random numbers. [34:54.460 --> 35:05.560] LambdaMOO's, random function basically was a linear congruential generator that was fast but not particularly good for generating long streams of numbers for something like a secret key or whatever. [35:05.560 --> 35:16.740] So I built in something using the Sausmanuk cipher which is relatively recent but is underwent, at least handled some decent amount of scrutiny. [35:17.560 --> 35:26.880] And it generates, it's seeded from dev random and then generates good secure cryptographically secure random numbers in big batches. [35:26.880 --> 35:36.480] So if you need, you know, 64 bytes of random data for a key or whatever, you can actually get that in something less predictable sort of way. [35:37.400 --> 35:43.240] And then of course the last one that I mentioned before from an old code perspective is with Mudge you're going to be dealing with Telnet. [35:43.240 --> 35:48.500] And once again Telnet's great but Telnet is not something that the average user is even going to know what to do with. [35:48.640 --> 35:50.180] They've probably never even heard that word. [35:50.400 --> 35:58.620] And so I, the first thing I did was build in the HTTP support that, you know, allows you to make some use of this inside of a browser. [36:01.900 --> 36:03.560] So, and I've got, I've got this. [36:03.640 --> 36:07.000] If people want to come up afterwards I can actually demonstrate some of this or maybe toward the end. [36:07.120 --> 36:10.260] The Q&A section we can talk a little bit and I can pop these things up. [36:10.360 --> 36:11.400] I've got them running on my laptop. [36:12.940 --> 36:18.920] So I want to talk now about some kind of the downsides where some of the technology starts to impact the community in interesting ways. [36:19.700 --> 36:28.200] So, so once again, thinking about the community, you're dealing with a group of people that have very specific expectations about what LambdaMOO should be and how it should behave. [36:28.580 --> 36:33.920] And as a result, incompatibility, and, and they're not extremely tech savvy. [36:34.080 --> 36:39.680] So you have people with the barest ability to maybe download the code, run configure, run make. [36:39.680 --> 36:44.880] They've got Xcode installed or they've installed the new tool chain or something, right, LLVM or whatever. [36:45.360 --> 36:49.400] And they're actually can get it to configure, get it to compile and they can get it to run on their database. [36:49.700 --> 36:51.320] But, but I mean, that's, that's the extent. [36:51.460 --> 36:52.460] They're not programmers. [36:53.080 --> 36:58.160] So they're, they're not, it's a, it's a largely non-tech savvy application focused user base. [36:58.300 --> 37:01.400] So for that group of people, incompatibility is actually a big problem. [37:01.720 --> 37:03.960] Especially when you're trying to break things like I am. [37:04.420 --> 37:09.940] So, so this was definitely something that has to be weighed in terms of what you want to do with a chunk of code. [37:10.840 --> 37:21.040] Where this was relevant for, for what I was trying to do, LambdaMOO basically writes to disk a representation of the in-memory data structure. [37:21.220 --> 37:28.360] So when you say that what you get dumped, what gets dumped to disk is basically something very, it's text based, but it's ultimately the in-memory data structures. [37:28.360 --> 37:37.380] That supported a particular style of object orientation and a particular way that parents and children in a, in a OO environment were, were constructed, etc. [37:37.540 --> 37:41.440] Reflected in the physical, physical manifestation of that database. [37:41.960 --> 37:50.500] So in order to support something like multiple inheritance, which was actually important for me for constructing, for constructing software. [37:50.860 --> 37:54.780] I wanted to be able to mix things together versus create long inheritance chains. [37:54.780 --> 37:57.720] That changed the format of that database. [37:58.240 --> 38:03.540] So while Stunt can read old databases, it actually doesn't write old databases anymore. [38:03.820 --> 38:07.020] And it turns out that that's actually a huge problem for a lot of users. [38:07.580 --> 38:11.180] Because, you know, when you're dealing with new code, you want to know, can I go back? [38:11.340 --> 38:13.400] And so there's a big disclaimer on the Stunt thing. [38:13.800 --> 38:16.360] You know, back up your database because you cannot go back. [38:16.500 --> 38:21.240] It's like probably theoretically possible, but pragmatically I'm never going to write that code. [38:21.240 --> 38:23.920] So that, that turns out to be a big issue. [38:24.360 --> 38:25.460] Something to keep in mind. [38:26.280 --> 38:29.040] On the platform side though, things are actually a little bit better. [38:29.180 --> 38:40.080] If you go back to look at the README and some of the documentation for LambdaMOO, you have something like 10 or 15, you know, maybe 10 or 12 different Unix-y type of platforms, right? [38:40.160 --> 38:44.740] You've got, you know, various, you've got obviously Linux and things like that. [38:44.740 --> 38:46.120] But you've got, well, I'll just read the list. [38:46.280 --> 38:55.800] You've got BSD, Unix, AIX, Irix, Sunos, 4, Linux, System 5, Release 4, Alteryx, OSF, FreeBSD, Solaris, Next, etc. [38:56.120 --> 38:56.220] Right? [38:56.640 --> 38:59.920] So back in the day, you dealt with that all the time. [39:00.120 --> 39:05.100] As it turns out today, you pretty much only have to worry about two or three platforms, right? [39:05.360 --> 39:09.120] Linux, obviously, a lot of people are now building software on Macs. [39:09.120 --> 39:11.000] So you had some kind of a BSD sort of thing. [39:11.580 --> 39:16.940] And then, like, half the people that download LambdaMOO are actually on Windows platforms. [39:17.160 --> 39:20.080] So something that maybe compiles under SideWin or something like that. [39:20.460 --> 39:23.240] You don't have to worry about Sunos 4, for instance. [39:23.540 --> 39:25.240] It's pretty much not an issue. [39:25.380 --> 39:26.480] So that's kind of nice. [39:28.040 --> 39:29.340] The patch side. [39:29.440 --> 39:35.700] So the other thing that was interesting from a community perspective about LambdaMOO is there was a large collection of patches that people applied. [39:35.700 --> 39:42.980] If you go back and look at the screenshot of the MudStats thing, almost no one is running straight like 181 LambdaMOO. [39:43.120 --> 39:47.200] They're running 181 plus a bunch of patches that they downloaded and applied. [39:48.000 --> 39:50.080] So there's a lot of patches floating around. [39:50.280 --> 39:54.240] And there's kind of a desire to obviously see some of those rolled in or supported. [39:54.500 --> 40:02.860] Where this became interesting and challenging was that in a software project, you probably do or should have a point of view of what's important. [40:03.740 --> 40:09.320] In the case of LambdaMOO, there was very definitely a model behind what they did. [40:09.760 --> 40:18.900] Because it was an environment that was meant to be easy to program for multiple people simultaneously, there are some kind of invariance that should be in place. [40:19.100 --> 40:23.180] For instance, a chunk of code that a user writes shouldn't block the server while it's doing IO. [40:23.180 --> 40:31.660] Like if you keep everyone else's work from preceding all their verbs from running, you actually bring the little virtual world to a halt while that piece of code is running. [40:32.440 --> 40:33.540] That's important, right? [40:33.620 --> 40:36.860] Your code shouldn't be able to muck with other people's code. [40:37.080 --> 40:39.980] So the security aspects needed to be preserved. [40:40.160 --> 40:41.900] And obviously you don't want to crash the server. [40:42.500 --> 40:52.200] Because the community has always been very embracing of people without deep technical skills, a lot of the patches out there violate one or more of those. [40:52.460 --> 40:54.600] And some of them flat out outright crash things. [40:54.820 --> 40:58.440] So it was early on attractive to maybe put those in. [40:58.840 --> 41:09.040] It turned out it's actually much more important to keep the code quality up and make it clear from a contributions perspective exactly what you would like to see that people provide. [41:10.920 --> 41:13.720] So that's kind of the old code side of this thing. [41:13.860 --> 41:15.300] The technology piece of it. [41:16.540 --> 41:18.560] This ties into this... Oh, go ahead. [41:18.880 --> 41:26.620] I'm curious if you load an old database that was made for a server with those patches, will stuff like this? [41:27.740 --> 41:28.740] It depends. [41:29.020 --> 41:30.720] Some of them it will and some of them won't. [41:30.820 --> 41:36.660] It depends on if it actually changed the way the data was stored, the data structures were stored. [41:36.660 --> 41:43.640] So for instance, there's a fairly popular patch that added kind of a class-based inheritance scheme called WAIFS, lightweight objects. [41:44.240 --> 41:48.640] The structure of that changes the in-memory data structures or the implementation of that function. [41:48.800 --> 41:55.880] It changes the in-memory data structures in a way that's actually even kind of hard to predict in terms of what it will do to things like some hard-coded constants. [41:55.880 --> 41:58.300] So it doesn't handle those very well at all. [41:59.540 --> 42:10.560] So you can take the... could you take the text and change its format to different types of things or put it in a cartoon balloon or something like that? [42:10.780 --> 42:11.300] You could. [42:11.440 --> 42:14.720] In fact, if you want to come up afterwards, I'll show you the user interface piece of it. [42:14.780 --> 42:16.800] Right now it's very simple and designed for exploring. [42:16.800 --> 42:21.420] So the question was, can you change the visual aspects of it and, you know, maybe show... [42:21.420 --> 42:22.840] I'm interested in ad-busting. [42:23.200 --> 42:23.520] Okay. [42:23.720 --> 42:24.060] Ah, okay. [42:24.180 --> 42:31.800] I'm interested in, you know, putting messages, sponsors, you know, wouldn't endorse... [42:32.980 --> 42:33.380] Okay. [42:35.040 --> 42:35.580] Yeah, yeah. [42:35.700 --> 42:39.000] I mean, the user interface is web-based, so you can do quite a bit. [42:39.180 --> 42:45.840] The key, I guess, from the easy-to-build perspective that I wanted to tie back into is, once again, easy-to-build means easy-to-try. [42:45.840 --> 42:46.300] Right? [42:46.580 --> 42:53.860] And if you... Part of the reason I tackled this or one of the things I was doing parallel to this effort was actually trying to implement Diaspora. [42:54.240 --> 42:57.300] So I spend most of my life writing code. [42:57.680 --> 43:01.200] There's nothing about Diaspora that's complex for me, per se. [43:01.440 --> 43:16.060] But it became very obvious when I was trying to set that up in, I don't know, 2010 or sometime around 2011, that the number of moving parts in that piece of software, which I consider to be potentially very important software, simply was going to be impossible for the average user to set up. [43:16.160 --> 43:20.840] They were going to have to use other people's Diaspora nodes to connect, to be part of the Diaspora network. [43:21.580 --> 43:24.980] And setting up something on their own was going to be virtually impossible. [43:25.260 --> 43:31.340] So easy-to-build is important from a DIY perspective, because easy-to-build means it's easy for people to try it out. [43:31.740 --> 43:33.940] LambdaMOO, oddly enough, is a proof case for that. [43:34.100 --> 43:37.220] It's very easy for people to put it together, launch it, and get it going. [43:37.880 --> 43:39.780] This last little bit is pretty quick. [43:40.480 --> 43:42.540] So let me just roll right into this. [43:43.460 --> 43:46.980] LambdaMOO came out of an environment where programming was immersive. [43:47.240 --> 43:59.660] So rather than sitting down with a text editor, editing a bunch of files, compiling them and running them, or loading them into an interpreter and running them, you basically sat inside of the server itself and made changes so that you could see those changes happen immediately. [44:00.820 --> 44:13.480] That isn't highly popular, although surprisingly enough, going back to Smalltalk for a minute, there is a relatively new project called Pharoah out there, which is once again a reimagining or an extension of Smalltalk, trying to kind of bring it back. [44:13.660 --> 44:17.160] And if you go to the site, you know, you log in, you've got this graph. [44:17.240 --> 44:22.400] It's like a combination IDE, runtime, et cetera, all in one piece, right, where you interact with the world. [44:23.220 --> 44:30.020] I think if you follow along, the notion that immersive might be important or need another look actually kind of fits into the whole thing, right? [44:30.080 --> 44:31.380] You can kind of see where this is going. [44:33.840 --> 44:44.000] If text is important because it's simple and allows people to be creative, and easy to build is important because it allows people to try things, right? [44:44.160 --> 44:45.800] Download environments and try them. [44:46.560 --> 44:51.060] Immersive is important, I think, because it makes it easy for people to jump the programming gap. [44:51.500 --> 44:58.940] If you have to get a text editor and freaking figure out that Word is not a text editor, it creates a bunch of gibberish that you can't compile. [44:59.180 --> 45:01.940] So you have to figure out what a text editor is, et cetera, et cetera. [45:02.640 --> 45:09.460] That becomes a surprisingly large barrier if you don't spend your time looking at that particular problem. [45:09.680 --> 45:14.160] The immersive environments were nice because you went in and in LambdaMOO, you edit something. [45:14.280 --> 45:18.360] You see you're creating an animal or a ball or a room or whatever, and you want it to do something. [45:18.360 --> 45:23.700] You edit a particular little, what they call a verb, which is a method, and you change what it does. [45:23.880 --> 45:25.860] And you save it, and it does that. [45:26.020 --> 45:32.640] And someone who interacts with that object that you've created in this virtual reality can actually see that take place immediately. [45:32.880 --> 45:38.460] So you break down a barrier toward learning to program, which to me I think is very important. [45:38.720 --> 45:51.120] And really that's the whole last point, which is the thing that I think was attractive about it was that, for me, was that when I was learning to program, it was a very nice immediate environment to figure that out. [45:51.440 --> 45:52.980] I think other people see this as well. [45:53.400 --> 46:00.040] Going back to this earlier point from when I was talking about code, people are still trying to reimplement LambdaMOO. [46:00.280 --> 46:07.460] So 20 plus years after LambdaMOO was created, people are in the process of continuing to try to reinvent it in other languages. [46:07.940 --> 46:09.560] These are all GitHub projects. [46:09.720 --> 46:12.800] They've all got commits from just recent few months. [46:12.800 --> 46:15.440] So Lampy is LambdaMOO implemented in Python. [46:15.620 --> 46:16.380] I mean, that's an obvious one. [46:16.440 --> 46:17.980] People have been trying that for a while. [46:18.280 --> 46:19.540] I thought this was very interesting. [46:19.700 --> 46:20.960] Itamoo is LambdaMOO. [46:21.320 --> 46:23.220] I'm not actually trying to be disparaging either. [46:23.360 --> 46:26.620] It's like Python was a popular choice and people took swings at it. [46:26.760 --> 46:27.920] But I think this is interesting. [46:28.080 --> 46:29.020] LambdaMOO in Haskell. [46:29.500 --> 46:33.320] So someone has actually implemented a chunk of the LambdMOO server in Haskell. [46:34.280 --> 46:35.440] LambdaMOO in Erlang. [46:35.780 --> 46:42.080] You know, obviously they're trying to take advantage of actors and the distributed nature of Erlang to build something that's probably LambdaMOO plus plus. [46:42.080 --> 46:42.940] But whatever. [46:43.600 --> 46:44.440] LambdaMOO and Go. [46:44.600 --> 46:47.920] Go is a very new popular language, certainly here in New York City for sure. [46:48.900 --> 46:49.860] LambdaMOO in D. [46:50.420 --> 46:56.160] And literally many of these projects, most of them, probably four out of the five, all have commits within the last three, four months. [46:56.260 --> 47:04.880] So people are actually trying to implement this LambdaMOO promise, this immersive, easy to build, easy to use environment, even right now. [47:05.060 --> 47:07.260] Which I think is tremendously interesting. [47:08.020 --> 47:10.140] So that's, I mean, that's basically it right there. [47:10.300 --> 47:15.180] The key to this whole thing, you know, kind of once again, a little stroll through LambdaMOO history. [47:15.380 --> 47:21.420] A little reflection on what it was involved in actually maintaining and extending it and why those extensions were necessary. [47:21.900 --> 47:27.740] But kind of the subtext of the whole talk was really three points that I think reflect on the community and the code and the continued involvement. [47:27.740 --> 47:33.920] Which is, once again, text, certainly for some groups of people, is still very important. [47:34.220 --> 47:38.260] You know, seeing impaired, for instance, because they can do the screen read thing and actually make use of it. [47:38.960 --> 47:44.660] Easy to build is important because it means it's easy to try for people that otherwise wouldn't get in there and try it. [47:44.840 --> 47:46.600] And then the last one is immersive. [47:46.660 --> 47:55.140] It needs, I think, to be revisited because in terms of learning to program, learning to interact with complex systems, it's very, very important as well. [47:55.140 --> 48:11.140] And kind of the broad picture is, as we sit in an environment where we've outsourced more and more of our data and more and more of our computation to third parties, from a kind of a DIY perspective, having people more involved in building these things and using them themselves, [48:11.520 --> 48:14.920] I think is actually an important direction to go overall. [48:15.240 --> 48:20.840] So that's really kind of the, you know, the subtext of the whole talk about LambdaMOO and maintaining the software. [48:21.400 --> 48:30.560] I've got now time for questions and I'm happy to talk and do demos and whatever outside of this room if people are interested in that as well. [48:30.760 --> 48:32.580] So I'll just open it up for questions. [48:32.740 --> 48:36.000] We've got about ten more minutes or five more minutes until we're booted out of the room. [48:36.320 --> 48:36.780] Go ahead. [48:36.920 --> 48:38.040] So what does the future look like? [48:38.660 --> 48:42.600] What does the future look like of LambdaMOO in general or Stunt or... [48:46.110 --> 48:46.590] Yep. [48:47.890 --> 48:52.030] So in terms of adoption, Stunt has a couple of issues right now. [48:52.170 --> 48:54.030] One is potentially the compatibility one. [48:54.110 --> 48:57.510] One is that my philosophy is currently still breaking things. [48:57.710 --> 49:06.590] The thing that I missed more than anything else though in terms of planning this was the fact that for most people what they want is the virtual reality, right? [49:06.590 --> 49:09.330] They're downloading it because they want that starting point. [49:09.450 --> 49:12.750] They want to be able to create rooms and places and have that navigation. [49:12.990 --> 49:16.010] I didn't build that because I assume that was what everyone wanted to build, right? [49:16.110 --> 49:19.490] They wanted to experiment with text-based virtual realities or whatever, right? [49:19.610 --> 49:20.370] So I didn't build it. [49:20.790 --> 49:31.150] Building something like that I think is important so that people can jumpstart that piece and actually get to the building of the rooms versus the environment, the framework for building virtual realities and text. [49:31.150 --> 49:47.070] I've got a prototype of something called Kinetic which is meant to be this very fast text-based environment with literally a text-based scene graph to construct the world in a way that hopefully is still accessible but potentially interesting. [49:47.890 --> 49:54.410] So there's that I think getting away from the text-based database is kind of a... I think we've got better ways to store data now. [49:54.410 --> 49:55.790] It's not fast. [49:55.930 --> 49:58.170] It requires a long checkpoint for big databases. [49:58.170 --> 49:59.290] So that's problematic. [50:00.330 --> 50:02.150] I think there's some improvements to the language. [50:02.250 --> 50:07.950] I actually wrote an InMu parser for a new language that is an extension to the existing language. [50:08.110 --> 50:10.070] So I think there's some improvements there as well. [50:12.050 --> 50:12.890] Other questions? [50:13.350 --> 50:14.010] In the back? [50:14.170 --> 50:15.050] Did you have to consult [50:18.770 --> 50:21.450] and tease it out on the examination of code for yourself? [50:22.530 --> 50:27.030] Yeah, so the question was did I have to consult with many people or did I tease it out myself? [50:28.350 --> 50:34.470] I actually had started using LambdaMOO and trying to program InMu and then doing some server things in the early 90s. [50:34.570 --> 50:37.090] So I actually had a long history with the technology. [50:37.250 --> 50:42.730] So I've almost kind of forgotten, you know, like what it was like to start in some ways because I had been playing with it before. [50:43.010 --> 50:53.250] So when I got to doing this, it was relatively easy, I guess it felt like, to pick up and extend because I already had that long history of playing with the server code and playing with the Mu code itself. [50:53.250 --> 50:55.350] So for me, it was probably easy. [50:55.610 --> 51:01.950] You know, I would guess you'd need some patience and tenacity if you wanted to jump in and do that. [51:02.070 --> 51:08.410] You know, just like any open-source project, it's not super hard, but it's not super easy. [51:08.610 --> 51:11.130] It's an open book, but sometimes it's not written so well. [51:12.510 --> 51:13.290] Other questions? [51:18.360 --> 51:18.900] Go ahead. [51:19.160 --> 51:24.620] I'm curious with the, you said with the HTTP interface, how does that work? [51:25.240 --> 51:28.660] Because, you know, the old food, because of tone, it would give you that fast interaction. [51:29.100 --> 51:34.500] So, with your HTTP, are you still, you have to wait on... [51:36.240 --> 51:36.640] Yeah. [51:37.460 --> 51:37.700] No. [51:38.100 --> 51:38.340] What's it? [51:38.640 --> 51:39.020] Two minutes? [51:39.200 --> 51:39.300] Okay. [51:39.860 --> 51:40.020] Yeah. [51:40.140 --> 51:40.780] So maybe one or... [51:40.780 --> 51:42.080] We'll do this question, maybe one more. [51:42.080 --> 51:42.540] Yeah. [51:42.680 --> 51:50.620] So on the HTTP side, I mean, obviously, HTTP itself is less speedy than, you know, just doing simple messages over Telnet, right? [51:50.720 --> 51:53.340] Just the size in general of the messages is going to be larger. [51:54.200 --> 52:06.900] There's a console built in, and once again, I can demonstrate some of this stuff that falls back to either a direct socket connection using flash or something like long polling, which is a little bit simpler in terms of once you start interacting with the text-based portions of it, [52:06.960 --> 52:10.120] and then liberal use of Ajax, you know, speeds things up as well. [52:10.120 --> 52:15.740] But yeah, it's definitely, you know, you pay a price for that level of additional accessibility. [52:16.540 --> 52:18.480] So I think we've got time for one more. [52:20.500 --> 52:32.040] So if you have these, tai mu, or whatever you call it, you can use it in splice, you know, currently used code with these old codes. [52:32.580 --> 52:33.100] Yeah. [52:33.240 --> 52:36.740] So the question was, I think, about compatibility, old code to new code. [52:36.740 --> 52:42.880] So from a compatibility perspective, Lambda is obviously very compatible with itself, and the new versions of that are very compatible. [52:43.900 --> 52:48.360] Stunt is very compatible in terms of you can take a lot of old code, and it'll run just fine. [52:48.480 --> 52:52.100] In fact, almost all the old code I've ever come across will run just fine on it. [52:53.160 --> 52:55.360] So from that perspective, it's very compatible. [52:55.560 --> 53:01.200] There's a lot of example code floating around on how to do things, and a lot of that runs just like you'd expect. [53:01.900 --> 53:03.560] So anyway, I appreciate everyone coming. [53:03.840 --> 53:05.540] 10 a.m., early discussion. [53:05.880 --> 53:12.420] I love talking about this stuff, so you can grab me at any point, and I'm happy to stop and talk and do demos or whatever. [53:12.620 --> 53:13.860] So I appreciate everyone coming. [53:14.040 --> 53:14.260] Thanks.