bouncer
← Back

System Crafters · 772 views · 21 likes

Analysis Summary

10% Minimal Influence
mildmoderatesevere

“The video is mostly transparent; be aware that the 'cult' terminology used is an inside joke within the community to describe their shared preference for niche, hacker-centric tools.”

Transparency Transparent
Human Detected
100%

Signals

The content is a live stream featuring a known creator with highly natural, unscripted speech patterns, including personal digressions and real-time interaction with a live audience. There are no signs of synthetic narration or automated script generation.

Natural Speech Patterns Frequent use of filler words ('um', 'uh'), self-correction, and natural stutters ('it's it's meant to be').
Personal Anecdotes Specific mentions of personal life details like having small children, being sick with a virus, and hosting an XMPP server on a Hetzner VM.
Live Interaction Directly addressing specific usernames in the chat (Cal, Luis, Peter, Big Eaty) and responding to real-time technical issues.
Technical Specificity Detailed description of a Linux kernel crash ('asky penguin') and specific infrastructure choices (ARM 64 vs AMD 64).

Worth Noting

Positive elements

  • This video provides a raw, unedited look at the complexities of embedding a Lisp-like language into C, offering realistic insights into debugging and system configuration.

Influence Dimensions

How are these scored?
About this analysis

Knowing about these techniques makes them visible, not powerless. The ones that work best on you are the ones that match beliefs you already hold.

This analysis is a tool for your own thinking — what you do with it is up to you.

Analyzed March 13, 2026 at 16:07 UTC Model google/gemini-3-flash-preview-20251217
Transcript

[music] [music] Hey everybody. >> [music] >> What's up everybody? What's up everybody? Welcome to System Crafters Live. I'm David Wilson and once again I've forgotten how to speak. Uh it's Friday. It's been a long week. Um, I'm probably coming down with a virus again because this is what happens this time of year. It's just like a constant stream, a parade of viruses, if you will. Um, and it's uh addling my brain as usual. That's okay because it's Friday. It's it's meant to be a relaxed day, right? At least for me, it's Friday evening. It's 6 o'clock or 6:13. Let's just be accurate. 6:13. I'm 13 minutes late. Sorry. Uh, a little piece of advice as a as a little digression. If you want to be on time for things in life, don't have small children. Okay, that's uh that's all I can really say. Anyway, point being uh it's Friday evening is supposed to be a time to be relaxed. Uh and that's why I'm spending my time talking to uh people on the internet uh and failing miserably at whatever I attempt to do. So, that's how I like to to relax at the end of the week. Let me see if I can get the chat up on my other screen here. Yes, IMO the stream is up. I think that uh people are tired of hearing about Scheme. So, uh they haven't decided to show up yet. Either that or I'm not inspiring faith anymore that the stream will actually happen because I just like disappear until Friday and then all of a sudden I reappear again and then I schedule the stream one hour before the stream. That's okay. I mean, it's just the way it is these days. Not much that could be done about it. Hey, Dave. Hey, Cal. All right, let me say hello to the folks who are here so far. Uh, I see Cal. Uh, Luis, I don't know if Luis is still around. Maybe Louis is here. Um, Peter, alternate V. Um, learning to read again. IMO, Dave, Cal, Nakotani, Eric, and on the other side I see R Dragmanto. That is a name. Hey, Big Eyee. Big Eaty, I'm gonna have to uh to point out your your new streaming endeavors in a moment. I saw your messages. I meant to reply to them, but before I had got the chance to reply to them, something about my XMPPP server died. A little side quest to talk about here. For some reason, since I started hosting my own XMPP server in a Hetsner VM um with geeks, every now and then, and by that I mean like every two weeks, for some reason, the server gets hanged for some reason and it just completely locks up. The server itself, like the VM is still running, but the server stops responding. So, my XMPP server just dies. Uh, and I can't actually reconnect to it with any of my clients anymore. So, I have to actually go into the server and uh restart things or just kill the server entirely and bring it back up again. One time when I used the virtual console to log into the server, there was like a an asky penguin on the screen with some error message I have never seen in Linux before. Like the kernel crashed somehow, but it didn't take the whole machine down. It just showed this little almost like blue screen of death or like the penguin of death uh telling me that my server had died. So, I kind of feel like uh maybe it's running out of memory somehow. Or maybe it's the fact that I'm running it on an ARM 64 server with Geeks and not an AMD 64 server. Maybe I just made a mistake choosing the ARM 64 version instead. But who knows? Either way, um that's why I tend to disappear now because my uh IRC setup's not working anymore. And then my uh my token for the bouncer on source side had stopped working as well. Probably because I missed a message that I'm supposed to go refresh it or something. Alternate vet says, "We did it, Big E. We are late again. We have technical issues again." Yay. We always have technical issues. That's what this channel is all about is [music] commiserating about technical issues that are caused by our own p personal choices for technology. Hello Arty. Uh hello everyone. My favorite cult. This is not a cult. As we saw in the video that I showed you last week, this is not a cult. Alternate V says running geeks is always a mistake. So, Alternate Vet told me in the IRC about an hour ago that Trev has defected and he has disappeared [music] because he got uh burned out from running geeks. I don't know if I really believe that. It sounds like a joke to me, but if it's actually true, I'm sorry, Trev. I'm sorry for the personal pain and suffering I've inflicted upon you. Cuz it kind of works like that. I'm just I'm I'm sitting here right now telling you about how my personal server running in the cloud has uh been locking up because I've run I'm running geeks on it. I don't know if it's Geeks's fault. It's probably Linux's fault. It's probably the the the provider's fault. I don't know whose fault it is, but it's easy to point the finger at Geeks because that's the one weird thing that I'm using. So, I don't know. It is what it is. But as you see me, the crazy person who runs this channel, I'm still running Geeks as my primary distribution of choice. Uh, for five years, six years. [music] Yeah, six years now, I think. 2019. So, six years I've been using Geeks straight up. Alternate vet says Trev is most likely taking care. Uh Trev also has a small child and uh he understands what it's like to get sick constantly this time of year. Technical issues is better thing to have than tentacle issues. All right, we're getting a little bit dark here, Cal. I don't know. I mean, maybe because you saw the name Chibi in the title of the stream, you started to think in terms of anime or other things related to anime. Hey, Bch. Bow says cosmic ray. So, it's uh are we going to blame my server issues on on like a cosmic ray gamma field distortion, whatever you want to call that? Maybe. L2 uh DPX and Fab and Lord Debbie. Nice to see Lord Devy. I remember seeing Lord Debbiey's name popping up in the YouTube chat in the very first streams on this channel a long, long time ago. But many of you were also there too. Luis was there. I know alternate V was there pretty early on. Big Edy was also there. Okay. So, um let me get into the initial notes here because you're just going to watch me write them again as always. Where is my cursor? There we go. Okay. So, projects sites systemcrappers.net net content live streams. Give me the right completion. All right, here [music] we go. This is the magic of Emacs you're watching right now. And and don't ask me why it takes so long for it to start up. I promise I know how to type. Louis says, "I was on the wrong channel." You mean now or uh five years ago whenever you watched the live stream? Uh embedding scheme in a C app [music] with GB. Today is the 21st. Okay. I'm going to mention uh the good old Asteroid Radio again. I haven't heard anybody mention it since last week, but then again, I haven't been in the IRC, so what can I say? Oh, Louis says, "I was on the wrong channel." I think you probably mean the the wrong IRC channel. Makes sense. Will we succeed today like last time? Yes. Yeah. Last time was it was an incredible success. Um, we got absolutely zero of the protocol implemented. So, I consider that a success. Uh, the video link is Hey, I did not mean to press control T. Uh, Biggie says, "Asteroid Radio has had some updates. Now shows the last three played on the front page. Asteroid." You're not going to hear it here, but at least you can see it. Uh, let's see. Now playing tape loop orchestra recently played. That's pretty cool. Peter says, "Entertainment value lesson is actually very high." Thank you, Peter, for making me feel better. I appreciate your willingness to make me feel better. Uh, Peter, tell me for a second, are you also on the YouTube chat? Because there's another person that has the same name as you. I don't know if it's you. Uh, we have last streamed tracks thanks to a feature from Glenn. Ah, yes. Nice. Yes, I can't play this music on uh the internet. Okay, good to know. I just thought it would be a very weird coincidence for someone else to have the same name. Uh, Big Edie has started streaming. So, I thought this was really cool. No alternate v. We're not writing scheme from Janet. That'll be pretty cool though. No entertainment value. I'm going to be screaming enough already. I mean, this just the way it is. Uh, your MPV is stuttering. I don't know. Maybe restart it. I hope the stream is okay and not too jittery. So, um, where am I going right now? Is your YouTube page YouTube.com/big8y big? I keep hitting the wrong keys. No, couldn't get big. Is your Is it your name? What is it? Okay, got it. There we go. So, I've watched a little bit of the first stream. I thought it was cool. I'm really uh really happy to see uh other people from the community like actually try to try streaming because uh it's really fun. It's not easy, but it's fun. I feel like it's a fun thing to do. But basically, uh has uh started writing a package, an Emacs package. You can't hear it because I don't have the audio hooked up here, but um started writing a a package and then trying to p publish it to Melpa. So, I think this is a a cool endeavor to embark on. Like, it's always good to try to do something live and see how it goes. That looks like my screen right here. What What are you doing, man? Are you stealing my screen to put on your banner for your YouTube page? Just kidding. Um, Biggie says, "I have a newfound respect for how well you explain things while live coding." Yeah, that is something you learn from practice. Um, so if you do like however number of streams I've done Yeah, I know. I know. Big. Uh, I think I've probably seen this screenshot before, too, so that's why I know. If you do as many streams as I've done, you get pretty used to talking to a camera like a crazy person because this is an empty room. Nobody else is sitting here but I'm talking to you as if I'm talking to a person or maybe like sitting on a stage talking to people and then uh explaining co explaining code as I write it. Uh it's not easy but you start to get used to it. I mean it's a it's an acquired skill and then eventually you just start to get so uh irritated by it then it starts to become funny sometimes and that's when things get good. U hey hey bu nice to see you says I can do that without a webcam. Yeah, I do that without without a webcam, too. Usually with a lot more curse words, though. Now, these days, I don't curse at the computer as much as I curse at the AI that I have doing all the work for me. Just kidding. Not really. Uh, anyway, but yes, check out Big E's channel. Subscribe. Um, I thought I subscribed. Maybe I subscribe through another account and then start generating AI videos of yourself. That's pretty funny, actually, I got to say. Give me all the notifications. Subscribe and hit that bell on big ed-av on YouTube. No, we don't have any more AI slot from Sora today. I was a good boy this week. I didn't actually go sit around like generating videos in my face. Um, which probably a therapist would tell me that that's kind of narcissistic behavior. So, I figured maybe I should just take a break for a little while and not try to generate videos of myself on uh an AI platform. Morgan says, "Are hooded robes now available in the store?" They should be. I think that'd be a pretty awesome uh Christmas gift, right? Just have your wife or your other significant other buy you a uh system and crafter's branded cult hood. Um, and it'll have to be very specifically designed so it doesn't look like uh hoods from other cults who are much more uh dangerous and offensive, right? We don't want to be misconstrued for someone else. >> [snorts] >> Hey, Noble Savage. Noble Savage says 2D rogike in lisp. That'd be cool. Uh, Noble Savage says chibi plus rail lip or no. Uh, actually, I might show that a little bit. We'll see. We'll see how it goes. I have a repo here, which I may have mentioned before on the channel. It's been a while since I looked at it, but I started working on an experiment with Chibi plus uh Ray Lib says pacifistic masochistic cult. That's a good way to put it. That's the kind of wording that I would use too because it's got the rhythm and the number of syllables that it just sounds good to say it. Pacifistic masochistic cult. Maybe that's the the just should be the uh the tagline for the channel probably. We're nothing but a pacifistic masochistic cult. Maybe I'll generate a video of me saying that 100 times fast. That might be a mess. Okay. IMO says I'd buy one. Yes. Well, we don't Oh, sorry if you had a little spike there. Uh, we don't want anyone to get in trouble with the authorities for consorting with um a known internet cult, which is completely harmless because we're a pacifistic, masochistic cult. We just like to hurt ourselves um with our computing choices and then talk to each other about it. It's okay. I think that's that's an acceptable kind of cult to have. You know, we're harmless. We're only harming ourselves in the end. Louis says, "I thought every stream would now start with the it's not a cult video." It probably should. If I was a smart YouTuber and a smart live streamer, I would do things like this. I saw Cal say in the other channel that uh other streamers, smart streamers, you know, enter more entertaining streamers have a little thing that happens at the beginning while the stream is still loading up. You know, they have their little VTuber face doing animations on the screen. Or maybe they have, you know, if you're Limie, you have a video of Limmy making faces and saying silly things the entire time. Hey Glenn, nice to see you. Glenn says, "I've joined a cult. What happened while I was away?" I don't know, man. It's been a while, hasn't it? Hey Rob. Rob says, "I was working on a chibi built for Wom plus simple 2D engine with WebGL. I have a single hello world working." Yeah. Uh definitely. Uh building chibi for the browser with mcripton really works. I've done it before. Big says, "We've got the music going though." Classier, you mean the the actual music going on right now. You can actually hear it today. Of course. Followed by the Geeks Gang called. Yes, man. That's just a mess. All right. So, uh yes, you should check out um his streams where he's building a an Emac package from scratch. Like and subscribe. Do it. All right. So, we also talked about Asteroid Radio for a second. I mean, people should just check that out anyway because it's cool. People from the community are working on it and it's uh chill music. Ah, yes. Uh the music at the beginning of the stream is always uh the case for the system crafter streams. It's the same thing over and over. I put a lot of love in this channel. Nothing has really changed that much. The only thing that has changed in the channel, I think, at least from the presentation is just this like frame I've got around the edges of the stream. [music] Um, everything else basically the same. That's okay. You know, something's not broken. Don't try to fix it. Otherwise, you're going to break it worse, which is basically what I do to my computer every week. So, um, let's check out Chibi Scheme. I don't know if that's the way you're supposed to pronounce that, but you know, who cares? Anything else in the news? Anything else happening this week that uh do eat maybe? Anything else happening in the week? L says it's awesome. Great team on it, too. Man, I don't even know what you're talking about anymore. Like, I've completely moved on mentally. Noble Savage says, "Yeah, totally innocent and harmless. That's what they all say." Yeah. Well, you know, this one I think we can pretty safely say that is harmless. Oh, the manual site. Go back. All right. All right. Lord David says Gemini 3 coming out of out was pretty big news. Blast other LM out of the water. I haven't tried it yet. I saw some pretty funny stuff today though cuz uh there's an article I think by The Verge showing how you can get it to generate very realistic images of uh misinformation, which is probably not a good thing to be telling people on the internet. But uh they they had a picture generated of the White House on fire. So, that could be something they could put in the news and you would think that [music] it's real, even though it's not. Alternate vet is repeating what I said last week. It's not an easy job being a cult leader. Yeah, it's not an easy job, that's for sure. Especially when you're lazy. Um, all right. I don't want to look at this white screen. Can I make this a one of these things? Cool. who says, "Uh, geeks has in all honesty become less masochistic for me. I can even do my circuits design embedded in development course on my laptop now." That's great. I mean, for me, most days it completely just disappears into the background because I don't really update anything. I'll go uh months without updating my system and everything just works fine. I mean, aside from the random bugs that I have every now and then. Um, but I don't know. Well, I mean, like if you don't if you don't upgrade your system components and everything's working, it just kind of continues working. So, that's kind of nice. That's kind of the point. Arty says, "I'm weird. I use a whitish background for my Emacs. I couldn't do that. I would go blind, I think. Probably because I don't use enough light in my room." Peter says, "Geeks 1.5 is in testing. Seems to go well." I mean, what does it even really mean anyway? you know, like they have version releases of geeks. I guess really what it means is they they're merging staging into master or main because there's a staging branch for geeks. It's got a lot of changes that are in there for updating large um ecosystems like GTK, etc. I don't know if that's what it refers to, but otherwise you're just using whatever the latest commit is or whatever commit you pinned to. So version numbers seem a little bit irrelevant to me in that case or arbitrary let's say. Hey Glenn, we talked about asteroid uh radio again. Um okay, what time is it? All right, I didn't I didn't waste 40 minutes this time. So Chibi Scheme. So as you know on this channel, we talk about the Scheme programming language a lot. It's a member of the Lisp family of languages. Um [music] it's different from languages like common lisp or emacs lisp in that sort of by default it is uh statically scoped or lexically scoped um and is a bit more strict in terms of things like macros or what scheme calls it syntaxes. uh it just has like a more fundamental uh clean design, minimalist minim minimalistic design and it's also more based on the concepts of functional programming than uh what you would see in common list. Now that's not to say that there's no functional programming common list. There definitely is functional programming common list. But I think scheme itself is more based on mathematics concepts like uh uh lambda calculus things like that which I won't profess to really know much about. Uh all I know is that scheme is a little bit more on the side of functional programming even though you know it allows you to do things like u mutation. But um scheme is a nice language. I prefer it. I think it's nice. Um some people say it's not very practical. I've done lots of practical things with scheme. Uh and the scheme implementation that I want to talk about today is called chibi scheme which I feel is uh practical in the sense that it's makes it easy for you to embed a scheme implementation into a C application or any other application that can load up a C library and interact with a C API. So that means that if you have any program like a rust program, uh or even like a python program, go program, whatever, if you want to also include scheme in that program, you can just load up the library for shi scheme and then um wire up the interpreter and then start executing uh scheme code. Why would you want to do that? Well, maybe you're a person like me who likes to write games with Scheme and you want to be able to distribute those to other people and you don't want them to have to install uh the scheme implementation that you have chosen like guile scheme because you have to have a Guile scheme runtime um on your machine to run Guile at least for now maybe later it'll be different and other things like shay scheme sha scheme I think you can you can build standalone applications but that is a little bit complicated from what I've seen um gambit scheme you build standalone applications, but you kind of like compile your scheme code to C and then build that as a C program, which is a bit different. In the end, it ends up being kind of the same, but it's a bit different. But, um, Chibi is different in that it's like a library that you can load into your program. You can also statically compile a program uh to have it built in so that you have a single statically linked executable if you want to uh distribute one like that. So it feels a bit more practical as an a language for embedding into another program without having to pull in an entire ecosystem of uh things. So um I just randomly thought to do this because I remember that I had done some experimentation with Chibi scheme a couple years ago which we'll see in the repo that we look at. And um I don't know just fun to look at programming stuff. And last week I tried to write some Janet code as alternate vet keeps remind me reminding me and it didn't go so well because I don't write enough Janet to do a good job of it. So we didn't make a whole lot of progress. I think I wasted too much time on peg grammarss as well. Um but we won't do that this week. We'll just do some very basic simple things that are make it make it look like I know what I'm doing. Uh let's see. Hey, Edward. Edward says, "I recently swapped from black on white to white on black for my computer stuff." Man, you're you're uh Oh, white on black. Yes. Yes, that's better. Uh Rob says, "What's going on with Racket? It looks like the most advanced scheme, but I don't see it used a lot in the community." Well, as Alternative Ed says, he says, "I think Racket is a bit over scheme at the moment." Well, what's happening is that Racket is not really a scheme implementation as much as as it is a toolkit for uh creating languages. So, Scheme is one of the languages that it supports, but it supports other languages as well. And you can make your own language implementations for the racket backend. It's more of a uh programming language theory uh experimentation toolkit in a way but it is very practical like all the the built-in libraries and stuff are quite good. Uh it's a great environment I think but it's not specifically a scheme environment. It it is based on scheme because the uh environment itself is written with sha scheme if you don't know what I'm saying is sha scheme this one sha scheme. So, Racket is is based on this. It it uses Shay Scheme to bootstrap the Racket environment. Wasn't always the case. That was a thing that happened a few years ago. Uh but the point is that uh Racket is kind of moving away from Scheme. They're actually got their own Racket language now. I think that's kind of the the main language that they are promoting and not really Scheme as much. So, it's not really a scheme per se. You can use Scheme like R six RS, R seven RS specifications to write code, but you can't really say that it's Scheme uh by default, but I don't personally use it just because it has all that extra stuff in there that I don't really need. Um so I don't know, like it's great. It's got a lot of cool stuff in there, but I think a lot of people don't use it for that that reason. Altervest says, "Too bad that Janet stream did not go that well. Maybe next time." I like Janet a lot. I think it's a cool language and uh it does a lot of things that I would like to for a programming language to do. Uh DPX says uh Gemini 3 isn't that good. Still have to correct the code. Gemini 3 says you're absolutely right. I'm still learning or similar every second message. Well, I don't like it when they say that. Edward says, "But there must be guile interpreter written for Go. I imagine that there would be a good way to write scheme uh for the Go runtime." No, I don't think there is. Getting C stuff to run from Go is not fun. Is it because the the uh memory management or is it something else? Glenn says, "You expect there to be a next time? There may not. I don't know. Like I don't really have a whole lot of time to be writing Janet code. I've gotten good enough at Scheme now that uh I don't really have uh to think too much about it. Like I I understand scheme well. Okay. I understand the idioms and patterns of scheme well. I made a course about it. Okay. Like I I understand it well. Janet I don't know so well. So that's why it's a problem. Peter says, "I I found Gemini 3 to be very good at brownnosing." Ah, for me uh Claude Sonnet 4.5 is still like the go-to. Ash, hey Ashraz. Ash has been here the whole time. I I never said hello to Ash. Sorry. Ash. Ashra says, "I use Gemma 31B as a minimal local experiment conversation partner. Currently playing around with custom prompts reduce a brown noise." Yeah. Peter says, "The answers are pretty good, but very cringe. I don't like it whenever a uh an AI tries to kiss my ass and tell me that I'm a genius. If I was a genius, I wouldn't need to use a damn AI, would I?" You know, like, if I was an actual genius, I would be writing all the code at the speed of light. I wouldn't need an AI to come do the work for me. I'm actually only a genius in the sense that I want to have the AI to do the work for me so I can do nothing, which is not true cuz I do a lot of work. But that's that's the idea, right? Ashra says, "I was outside. I had to clean some leaves before they freeze over and become a hazard to pedestrians." Well, thank you for doing your public service, Ash. Uh, you got to make sure that that people don't sue you because at least in America or [music] in uh Greece even, you might get sued if someone slips on your sidewalk. Glenna says, "Your Scheme course has helped me grasp CL quickly and build our project. Credit where it's due." Thank you, Glenn. I appreciate you, Glenn, always uh giving me props on the course. Makes me feel good that someone got a lot of value out of it. Let's see. Oh, um Corey says in the YouTube chat, "I saw an interesting talk from the Racket conference. Apparently, Cloudflare uses Racket to verify DNS changes. That's why the whole internet went down two days ago. It was because they use Racket to verify their DNS changes. Is that why? Did you hear about that? Oh man, I'm sure that everybody heard about that because the whole freaking internet went down for like half a day because apparently a program that they wrote and I think I heard it was in Rust uh had to read a configuration file that got a little bit too large and because of that it crashed and caused the entire ser excuse me, the entire internet to go down for multiple hours. Could anybody actually get to any website on the internet in that time? I think it only happened like, you know, 1% out of all requests that I made. Yes, sorry, LFPAD. It's your fault. I blame you. So, yes, I I would say it's it's not Racket's fault. It's funny to be able to say that it was Racket's fault, but it's not Racket's fault. I think it's Rust's fault. Peter says, "Actually, it was a Rust.unwrap. You know you're not supposed to do that, right? Sorry, Big Edie. I didn't mean to uh to surprise anybody. You can just tell how frustrated that I was uh that day whenever I couldn't do anything. Did you just blame Rust? Yes, Rust is not perfect. Okay, I don't care if the Church of Rust people come and try to burn me down. Rust is not perfect. It is not the solution to all problems. There are no silver bullets. Rob says, "Are you sure they don't run geeks on those Cloudflare servers?" Man, don't hurt me. Okay, don't hurt me. All right, so is Racket at fault or is Rust? Rust. I'm joking about the racket thing. It's funny. Swig has specific support for Gile Scheme. Uh, probably Swig has a lot of support for different things they're renaming it to result or panic. It is kind of like that. Um, Boo says, "Does anyone know if Hoot Wom can be used to do this as well? Are there good WASM runtimes FFI for use outside the browser?" There are, but many of them do not support uh the garbage collection specification, let's say, uh, for Wazi, the web assembly system interface. And that's something that Dave was telling us about in the IRC in the stream a couple weeks ago. Basically the current run times uh don't support running guile compiled wom because it needs the garbage collection uh tail call support and maybe some other stuff that uh is not really common. Usually these um wazy runtimes that run on desktop servers, desktop machines are meant for you know nor normal quotequote languages like C, C++ that are being compiled to to WASM or Rust even. Let's say Noble Savage says it's because some idiot dev. Okay, let's not say idiot dev because I'm pretty sure anyone here would have used unwrap to save some time because who wants to do error handling? I mean, who really wants to do error handling? This is why I use dynamic languages where I don't have to worry about error handling. I just let it crash. That's why I don't like Rust. I don't want it to tell me to stop writing bad code. Okay? [music] I don't want to be yelled at for writing code that cuts corners because that's all I do. Ashra says, "I use unwrap all the time in unit test only." That makes sense. Peter says, "Unwrap is for informal scripts." Alternate bet says, "Let's burn him, boys." Okay, let's not pull out the pitchforks just yet. Wait till I have other spicy takes first. Peter says, "But to apply that in a system which will trigger a probability cascade." Yeah. Dave says, "As a Will said, I'm not familiar with Hoot running in a non- browser runtime. Uh that isn't Hoot's own WAM interpreter." Yeah, Hoot has a WM interpreter, but it's just an interpreter. So, um your mileage may vary, performance may not be so great, but it would be nice eventually if there was a uh Wazi runtime that had all the features that a dynamic language that compiled to Web Assembly would need. That way you might be able to statically compile um Wom binaries into such a runtime and then ship them to someone. That would kind of be in my opinion like the future of guile if there was a solid uh web assembly runtime for uh desktop environment desktop environment you know not the browser. Okay, there was a solid environment for that that you could use to build and ship applications. Then guile could compile or hoot could compile to WASM and then that could be run in that environment instead of having the um the actual Guile interpreter the Guile by code interpreter I guess. Rob says probably I like some knowledge but what is the advantage of Wazi over the good old JVM? I mean it's basically the same idea. Um, Wazi is just a runtime for [music] web assembly whereas JVM is just a runtime for whatever Java's uh, bite code is same concept. All righty. So uh chibi scheme uh chibi scheme is a very small library with no external dependencies intended for use as an extension and scripting language in C programs. In addition to support for lightweight VM based threads, each VM itself runs in an isolated heap allowing multiple VMs to run simultaneously in different OS threads. What does that mean? It means that uh inside the same process you can have parallel lines of execution and scheme [music] code. um lightweight VMbased threads also means you have concurrent code execution in addition to parallel code execution through uh VMs running simultaneously in different OS threads. You get the kind of the best of both worlds but um you have to be careful if you're talking between threads because you have to make sure you're accessing me accessing memory correctly or using the primitives that are provided by the the the language to do that. Uh Dave says WASM is much better than targeting the J JVM in my opinion. Boy, those those are fighting words, man. You're going to get into trouble for saying that. I'm just kidding. Dave says it's actually a real specification with multiple run times in practice. That's the reason. Um it actually does have multiple run times because you have the one that's in Safari, which is what? WebKit. You got the one in uh Chromium, which is uh V8. Then you got the one in Firefox which is for now whatever the one in Firefox is. Is that Gecko? So yes, having multiple implementations of the same specification validates that the spec is implementable by other people aside from the person who wrote the spec. Dave says you're not going to get sued for making a WAM runtime. That's a good point, too. Yes, you're right. You're not going to get sued for making a WASM runtime unlike writing a JVM runtime. Like Dave mentions when Google made Dalvik. Haven't heard that name in a while. Gecko. Yeah, Gecko. The default language of Chibi is R7RS. Uh with support for all libraries from the small language. So R seven RS is the seventh language specification for Scheme. Uh and the only one that has actually been ratified at this point is R seven RS small which is the core language design. The R seven RS large specification which has all of these sort of batteries included stuff um has been ongoing for how many years? At least 10 maybe 15 maybe longer. Uh Daphne President Preston Kindle who uh sometimes drops by to join us in the chat or on the stream on Fridays uh has taken up the mantle of trying to push that through but that has been kind of a monumental task I think. So kudos to Daphne for uh trying to bite that one off. But anyway, R seven RS small the base language specification which is pretty solid. I think uh is what support supported by scheme. Support for additional languages such as JavaScript, Go, Lua, and Bash are planned for future releases. It kind of sounds like what Gile did, which is have the scheme implementation and the bite code interpreter then have other languages sort of uh built on top. kind of what racket did too, but I to me that just seems like why would you bother, right? Like why would you bother doing that? In my opinion, what I say scheme is chosen as a substrate because its first class continuations and guaranteed tail call optimization makes implementing other languages easy because you could basically implement whatever control flow structures you would like. Um so system is designed in optional layers beginning it with a VM based on a small set of op codes, a set of primitives implemented in the C, a default language, a module system implementation and a set of standard modules. Uh you can choose whichever layer suits your needs best and customize the rest which is cool because if you're trying to embed this into an application, you may not need all of the extra stuff. You may only need like the like the actual scheme runtime and you're going to write all of your own scheme libraries just for the kind of behavior that you need. Uh, so it would allow you to make a very tailored environment for whatever your use case is. And if you're trying to embed this into a program to provide your own scripting language, you may not want all of the functionality of Scheme or the entirety of the language specification or the additional surface or whatever. Maybe you just want like a very specific subset just for the purpose of writing um syntaxes to make a domain specific language or something like that. uh like maybe to make it like a configuration language or just a simple scripting language, extension language etc for a program. But the other side of this is that you can embed the entire schema implementation into the program so that you can be basically the application development language for your program. uh but have your layer of C libraries that provide the actual functionality and high performance execution for the things that your program does and then sort of like your your scheme layer is kind of the the driver of that layer of uh C functions which is something I've experiment experimented with a few times for game development and other things. Uh Edward Edward says if they could support Go's concurrency primitives it would be great. Well they do. Well you can implement channels in Scheme with delimited continuations. Maybe even undimited continuations. I'm not sure about that. Um but I think that there is actually a channel implementation for Chibi. I don't know if it shows up here. standard modules. Uh concurrent just looking. Dave says, "Yeah, if you have the limited continuations, you're good." The limited continuations are awesome. Maybe I'm not seeing it. I would assume that there would be some kind of channel-l like implementation because it's not too hard to write that using delimited delimited continuations. In fact, I did that for mesh. It's not very good, but I did it. Where is it? Um, let's see. I think it was just an an experiment, though. It wasn't like a real solid. Uh, is it here? No. Where is it? I can't search. I'm not logged in, right? I swear it's somewhere. Maybe I should put it in um the modules. [music] No, it's not there. Probably I didn't I had one somewhere. Is it in a test? I'm not going to keep looking through this code. [music] Trust me. Oh, wait. Samples. No. Anyway, with the limited continuations, you can definitely implement channels uh fairly straightforwardly. I think Boo says, "Doing my Friday gigs pull. Wish me luck." Yeah, good luck. Ashra says, "What are you currently looking for?" I'm looking for the channel implementation that I wrote in uh in mesh. I thought I had an example code file that had that, but maybe I don't. Anyway, okay, rolling back, rolling back, rolling back. Uh, Chibi is known to build and run on 32 and 64-bit Linux, FreeBSD, Dragonfly, OSX, iOS, Windows, and Plan 9. Um, so iOS, that's pretty interesting, right? I think you should be able to build this and run it on Android, too, but I'm not 100% certain about that. I think I had looked into this. Um, let's see. All right. Installation, we don't really care. Compile options, don't care. Install programs. Full continuations are supported, but currently continuations don't take CC code into account. Well, they couldn't possibly take CC code into account because you can't capture the Cstack [music] as part of a scheme continuation um unless you have compiled the code somehow to enable that. And even still, you wouldn't be able to do that because if you pass a scheme procedure as a callback to a C function and you go somewhere deep in the C call stack before you get back there, you can't capture the stack. So, uh it's impossible, as far as I know, it's impossible for C functions to uh be taken into account for scheme continuations. All right. has a module system which basically uses define library uh which is part of R seven RS. Yeah, supports the R seven RS module system natively which is a simple static module system. Peter says impossible. So you mean it's a challenge? Yes, in this stream we're going to implement the limited continuations with support for the CS stack [music] for reifying the C stack. I mean I guess it's not impossible entirely. it would just be super sketchy. Super sketchy. Benwa says, "Let's write a write a kernel modulin scheme." We're not doing that. We'll get in a lot of trouble. Okay, so um let me think of how we should approach this so that I'm not just reading the manual to you and we do something. Finally, a subathon 40hour stream. There is no way in hell I'm not going to make it past hour number five. The the only the longest stream I've ever done has been three, right? I've done three-hour streams pretty regularly. Maybe four hours. Maybe some of the game jam streams are four hours. I cannot do a 24-hour stream. 40 hours, dude. I'll be dead. 4 hour stream on the OBS overlay. Yes. All right. So, uh why would we be looking into Chibi Scheme? Why? Um well I mean the thing that was the main reason for me um game development writing um a game library in C and calling it from scheme because for something that's kind of high performance like a game the rendering parts of it anything that needs to like do really fast updates probably should be in a lower level language. Um and then I have the higher level language for orchestrating the logic of everything. Still that is a little bit hard to do I think to do well because you you need to let the C program have control over the uh the render loop and then call into the scheme code for updates. But it's not [music] impossible. Oh, 4 hour stream on the OBS overlay. That's the longest one I've seen. Did I do that? Did I do a stream like that? I don't even remember that. Uh, Ben says, "You take a break and then you come back." Yeah, go sleep. I'll sleep on the stream like everybody does. Ashra says, "You can technically already call existing game libraries from Scheme or common list." Yes. Uh, which is what I was doing with uh, Ray Lib, which is a pretty nice library to to use for game development if you want something that's easy to get started with. So, game development, sure. Um uh writing a larger application where scheme can be the extension scripting language. What other reasons would we have? Uh as leftpad says why do we even code? I don't know. Because you're bored. Because you need more pain in your life. because you like scheme. Uh, all right. Do a lemon style 24-hour style coding challenge. No way. You have to trade people out like that, right? Like maybe if we had multiple people, that would be kind of interesting. Like each person codes for four hours and the next person takes over. I don't know exactly what the timing is for Le Man, but um I what I understand is that you have a team of people who are taking turns, right? Yeah. You just need to change seats. So, we have somebody who takes over after that and continues the project. I mean, that actually is kind of an interesting idea because the people who come after you have to deal with the bad decisions that you made. So, Bigi says, "Four stream was flex harmonic on some of the gamedev stuff." Yeah, I think um the GitHub game off streams I did in 2022 were probably four hours long and some of the other game jam streams that I did. I kind of miss doing those. It's just been a little bit more difficult to do those. Uh now that there's a second kid involved here who's very small and likes to scream constantly. Only when she's hungry or tired. What happens? All right. So, uh what will we try to do? Well, first of all, we should just try to run it, shouldn't we? I mean, I could stop talking for a minute and just try to run it. Uh, to do that, I'm going to clone this Flux Chibi repo, which may already be on this machine. I'm not exactly sure. Let's see. Oh, I've forgotten where my tilda key is. Projects. Come on. Slash projects code. Uh, flux compose. That's the only one. Okay, fine. Oh yeah, I got to wait for a minute because I've got stupid asset files uh checked in here because I stole them from Dave. I think I stole them from Dave. Maybe I got them from the same place as Dave. I don't know. I'll be very interested to see if this game actually runs. Uh what am I looking for? Flux Chibi. All right, DPX second kid. Congrats. Yeah, that was almost 3 years ago, but thank you. Not doing that again. Uh, having an infant is not my idea of fun. Having the kid that comes from having an infant, like the one that that grow the kid that it grows into is a lot more fun, but having an infant is not necessarily the most fun thing. The nighttime screaming is the worst. Yes. Now we just have to deal with daytime screaming. All right. So, geekshell m manifest.sem make. They have a make file. Just outsource the infant phase. Duh. Um, that's not as easy as it sounds. Unless you're rich, which I am not. I'm not a Kardashian. Okay. I can't do these things. Ah, great. Okay. This is going to take a while. Anyway, let's just take a quick look at um well, should we even bother taking a look at the code? I guess we can take a look at how simple it is to uh create a C application that pulls in um GB and sets up a scheme interpreter. How about that? Left pad says uh create a proper Emacs for Emacs dollar sign. Emac dollar sign. Um, I think that uh someone else has tried making commercial EMACs. I don't know if that went very well. See you Luis. Thanks for coming, man. Hey, Ed. Nice to see you. Ed says, "Daytime screaming. How is that better than working with developers?" I mean, it's basically the same, right? Either the developer is screaming or they're being screamed at kind of the thing thing that usually happens. And you're probably wondering, where have you worked in your life to to think that's true? Well, I'm just making it up. All right. So, Rob says, "I also have two six and two year." That's basically what I have. Every stage has its own challenges. Not sure which ones are easier. I think it gets worse with the time. Yeah. I'm getting that impression, too. Oh, boy. Once they start to think they know everything, that's when things get complicated. And I know that only gets worse over time because I know there's some folks in the chat right now who can tell me exactly how that goes. Uh, in about 10 years later from from that point, I says, "I have 15 plus seven teenagers I'm trying to teach. There's a lot of daytime screaming in my classes." Yes. 12 and seven. infant stage was easier. Yes, I know. I know. Don't tell me that, though. Okay. I'm just trying to live in the blissful ignorance of not having a kid that's older than seven at this point. Uh, and thinking that things will get better over time. I know they won't. It's fine. Having kids is fine. I just like complaining about it because what else am I going to do while I'm waiting for freaking GCC to install? So, uh, main, we have a main function here and a C program. This is main.c., Okay, if you've never seen C code before, this is what it looks like. Uh we're pulling in the chibi eval header which is part of the the library that comes with uh the chibi scheme distribution. We have a s expression type for the context. So usually this is the [music] um the handle that you need for the state of the interpreter or the runtime. And [music] when you create that in context here, you init the scheme runtime probably in the the thread. I don't know if this is like a global init. Maybe it's global. Then you have s expression make eval context which gets assigned to context. So this is probably just a plain strruct that has some pointers and some metadata attached to it. Uh we're not really asking for anything special here. I don't know what all these parameters mean, but [music] um we're just asking for a plain old context. Then we're loading the standard environment and the standard ports. Um, yes, it looks like we're saying we want to pull in the version seven of the scheme uh specification. I'm guessing that's what that means. So, load standard environment probably just pulls in all the things that you expect to have in the default environment for a scheme implementation, scheme runtime, scheme environment, right? Then the standard ports we're we're hooking in standard in, standard out, standard error. Okay, so that is all that's needed for setting up um a scheme environment with Chibi in a C program. Now, um this next thing here, ignore this because this is just me setting up an async ripple. Okay, you don't need to know that. This is just fancy stuff that I was doing. The next thing, where is uh object one, object two? I think this must be a macro that's defining object one, object two, reserve. Yes. Okay. Those are defines for sure. Uh yeah. Okay. And this is how we actually start loading up code into the interpreter. Is this stupid to to to go from this part first because uh probably people don't even know what's happening right now. Am I explaining it well enough? I guess is what I'm asking. Uh here. Okay. So when you when you interact with a scheme runtime from within a C program, you have to be aware of the garbage collector. Yes, that's right. Akites, thank you. Hi Akites. Uh you have to be aware of the garbage collector, which means if you are trying to create any values that need to be used by the scheme runtime, you have to make them aware to the you have to make the garbage collector aware of them. And it seems that Chibi has um some macros that make it easier for you to define variables. This gcar 2 seems like it's meant to define two variables object one object two. These are uh variable names that are being defined in the context of this function. Then as expression GC preserve 2 is also saying hey let's let the garbage collector know that these are two objects that need to be added as garbage collector roots so they don't get cleaned up by the time the um the code that you're going to run executes because usually what happens with the garbage collector is you start executing code and when it needs to allocate more memory for a new object it will try to clean up any well what a after it reaches like the heat limit let's say or whatever the The heristic is when it tries to allocate more memory and it hits that limit. It tries [music] to collect all the garbage. So it looks for all objects that are not currently being used anymore by whatever heristic that it uses for that and it uh it frees that memory so that it has more memory to use for allocating new objects. What you're telling it here is I want you to make sure that whatever is assigned to object one and object two does not get collected when the GC gets executed. Right? Because this script that you run next could do a lot of stuff. it could cause lots of allocations and you don't want it to collect things that or it actually needs to use during operation. Okay, that makes sense. Then we have add module directory. First of all, we are creating a string object. You have to actually create the object in the scheme interpreter first or the scheme value using s expression c string. We're we're saying we want to create a string called slashlib to add or basically to say there's a there's a string now that's in the scheme runtime and we're going to pass that string that we just created into uh this s expression add module directory. So we're basically adding something to the load path of the scheme interpreter. So I'm adding the lib folder that you can see right here. Whoops. You can see, hey, you can see right here, this lib folder, we're adding that as a load path because we want to be able to load this sld file plus the stuff that's in this break subfolder. So, this is actually a a module folder path that we're adding uh to the load path. So, we're calling add modules directory. Then, we're doing the same thing again where we're creating a string for the name of the file we want to execute, source/main.scm. Then we're calling s expression load which causes the um file referred to by the string is stored in object one to load that as a scheme file and execute it. Okay. Uh and then we do a little bit of error checking just to see if there was any error and then write that out and then we uh clean everything up afterward. Fine. Okay. That's only about 40 lines of code. 40 lines [clears throat] of code. Are we back? I'm not sure what happened there. Just waiting for everything to come back up again. All right, it looks like the uh my internet went out temporarily, but then it came back. So, is everyone still here? Can you see me? Glenn says, "Oh, Ashra says the stream is back on Twitch." Thank you, Ashraz, for letting me know. Trying to reconnect my um XMPP client. [snorts] All right. Good, good, good. One second. One second. Why can I not type into this console anymore? Fantastic. Okay, I just can't see it. There we go. Okay, I was talking for a while there and I have no idea what anybody heard me say. [snorts] Okay, let me see. Uh, Bena says GC kicked in. Yes, it did, didn't it? Peter says, "Is David Will routing the stream over Jabber?" No. Got to restart your screen overlay. Uh you're right. Thank you, Benwa, for for telling me because you're right about that. Let me just restart that. Actually, I got to restart the entire uh chat back end. Give me a moment cuz this whole thing is hosed. Starting up chat again. What was the last thing people heard? Do you remember? May maybe people already kind of like uh their their brains blurred out and they weren't hearing me anymore. Something weird is happening with Emacs. What is it going on? Nickname is already in use. Why is the Apparently, my um IRC bot is still somehow connected. Ah, there we go. [music] I think please choose a different nickname. This nickname is registered. Okay, we're in. We're in. Right. Okay, GC and 40 lines of code are so thank you. 40 lines. All right. All right. All right. I'll start talking again from that point. Uh, okay. Now the IRC seems to be back. Great. Great. Great. Great. Thank you. Thank you. All right. So, welcome to the Scopy community chat assistant. We wish you a pleasant stream. Thank you, Scopy. Back to main.c. What I was saying is that in 40 lines, if you subtract out all of the uh the ripple stuff I'm doing here, you basically have a program that could pull in a running scheme interpreter and load up a scheme file and execute it in your program. Okay, that's basically what you need to get started. Um, then I have my main file which we can see that it uh is being executed from here. We're we're setting up that main sem string. Let me actually increase the size of the text a little bit. Maybe that's too big. I don't know. Um, we're we're uh loading up main.sem. We're executing it in the scheme environment. All right. And that file is basically just a normal scheme file. Okay. We're importing a few different things. Uh, break brick break util are those libraries from my own lib folder that we saw before. The break folder. We have util and brick here. That's just scheme code. Uh if we go back to ma sem we also have this ray liib library which we'll talk about in a minute if we have time. Um which is basically me creating bindings from uh scheme to the ray liib library which I'll mention also whenever we get to it. And then um everything else is just normal code that you would see in a game that uh I would write which is just a bunch of sloppy code but uh loading background files, images, background music files, images, [music] and then um just doing you know basic code that you would use for uh writing a [music] breakout style game. Okay. And also I think I have a built-in ripple. I'm not sure what that is. Maybe it is ripple actually. Actually, now that I think about it, probably when I we run the game in the terminal, it becomes a ripple right there. Okay. Um, a lot of stuff in here. I probably I must have made some progress on writing this game because there's a lot of code in here. Anyway, just typical Scheme code. All right. And uh I'm using modules that I've written here as well. Uh, I tried compiling this and I got an error. So, let me just double check on this. Call to undeclared function is music ready. Uh, do not support implicit function declarations. That's in rail.c. Okay. Uh, SX music ready stub. Let me check the ray lib stub file. Okay, I just want to make sure this thing can run. So [music] I guess I'll just talk about this too. So if you want in chibi scheme to call into a C library, um you have to I don't know if if there's a way around this. You actually have to write C code to map the scheme functions to C functions and also the C the scheme data data types to C the scheme data types to C data types. All right, you could do it by hand if you wanted to. We actually just saw what that looks like right here. There's all these uh SS SX functions which are named in specific ways. They have a lot of code that's kind of put into them. This is all generated code. Okay, this is generated C code that is coming from this Rail stuff file that you see here. Um, and that's because there's a tool that comes with CH scheme that you can run to look at this file and then generate that C file before you compile your program. And if you look at my make file, you'll see that I'm calling that first. I'm for the ray stub file, I have a make target for that ray stub file. Then I call chibi ffi to generate C code from that. Then I create a uh library called chibi ray using the C compiler to build that file. I make it a shared library that I can then pull into the main file whenever I compile main.c. Okay. And because I'm using make for this, this uh library only gets updated anytime I update the sub file. So it means that the uh program is very fast to recompile. Okay. Fine. So the benefit there is that you don't have to handw write your wrapper functions which is good because I've done a lot of handwriting of my own wrapper functions in the mesh language when I had my FFI for that and it's very easy to make mistakes because you forget to do error checking or value type checking or whatever. Um so it's better if you have a way to automatically generate the correct patterns for those especially whenever it's pretty easy to uh know what they are. So um that is what gets us to being able to call into C functions. But as you can see as you can see we have a an error in compilation is saying that this is music ready function does not exist and I don't know why that is unless I did something wrong. So let me check ray liib. So this is the ray library. Um it's basically a C library that is super easy to get started using. I've used it a little bit. I haven't used it haven't used it a ton, but if you're writing a uh a game in any language, more than likely, Raylib is going to work there. I think even you can use ray in um games compiled for the browser using mcripton. Hey, Anders. So, it's a pretty useful library if you're interested in game development, things like that. Uh let me I forgot to put the chat back on the screen. Let's see. Arty says, "I just installed Ray Lib yesterday. Can't wait to try it in C." It's very straightforward to use in C. It's nice, actually. Uh, Peter says, "Isn't that tradition to have these wrapper functions to do data type translation and cause you to question your life choices?" Yes, you definitely need those. Uh, hey, Retropixel. Uh, maybe add a file local variable for this stub file that enables scheme mode. Yeah, I probably need to do that, but I'm not going to do it right now, even though it'll be easy to do. Okay, Raleigh. Uh, cheat sheet. I think cheat sheet is the one that I need for looking at the APIs. So, if I go to the cheat sheet, uh, our audio is music. Okay, so is music ready? Apparently, that never existed. Ready? How did I even come up with that? Oh, is audio device ready? Is that what it is? Check if audio device has been initialized success successfully. Let me see if I just made a mistake here. Uh, is music ready? Music ready? Music playing. Uh, maybe I can just comment that out. Is music stream playing? Probably was some copy paste thing I did. Am I calling that anywhere? I bet money I'm not even calling it. So, let's look at main. Uh music ready. Nope. Okay, let's go back to compilation in that case and it should rebuild the stub file. Okay, there it is. Uh let me actually try then to run the program make and uh was it dist. Boom. Look at that. How do I Okay, cool. Cool. Arrow keys are working. Play. Cool. It kind of works. Okay, so this is actually a scheme game written in Chibi Scheme. You lose. Now it's just spamming me in the terminal. Apparently, I didn't do a good job of uh scaling the screen. [clears throat] Okay, cool. Anyway, so uh code that I haven't touched in a couple years still works good. It's not my fault. It's Geek's fault. It's called Hallucination. Breakout. Yes, it's What did I say it was? It's Breakout. Anyway, so we see that the game runs. Why does it run? Dave says, "Looks good. Ship it." Yeah, it's not good. The uh physics are terrible. The move movement is terrible. I don't even know why I wrote that. Just to have fun, I guess. probably I was procrastinating from work a couple years ago and just decided to do it. Anywh who, so what's the point? The point is this is a whole scheme program um that I'm embedding the library for it into a C program, right? Not really embedding per se. I'm pulling in the library as a shared library for now. It is possible to do static compilation of C programs with with chb scheme to truly embed it into the binary so that you could ship it so that someone could just run the binary and not have to have chibi scheme installed. There's some extra steps involved that you have to do to make that happen, which um I haven't done before, so I can't really show you so easily. But that might be only a thing. Well, no, that's kind of a thing you would want to do for game development. If you want to like ship a game that someone else can play, you would definitely want to statically link the interpreter into it at least, the runtime into it at least, just to have like a single application. However, all the other libraries you have like rail, etc., you're going to have to include them uh on the uh the platform that you're shipping the game to like Windows, Mac OS, Linux, whatever. Well, not in Linux. You would install it probably in the package manager, but I guess it's not too hard to imagine also including the library for Chibi in any of the um auxiliary libraries that it needs. uh you would just kind of include it with the application bundle rather than trying to statically link it, but it's kind of better to statically link it. Kite says, I would even include the game code in the very same binary somehow. Yes, you can do that. Um, in fact, there is a tool for Chibi which allows you to I think basically what it does is it compiles the scheme file into bite code and then embeds it into a C file that you can either compile it into your program. um which is what I was trying to do also with mesh and it's also done with other uh languages that compile to see or that can produce statically compile applications. Uh let's see where is it? I'm pretty sure that's what it does. It kites. That's for snow. That's a different thing. Um, [music] CFFI standard modules. The guy says, "I wrote the first version of the JSON serializer of Chibi Chibi, but never got this far." That's cool, man. I thought there was a manual section for the uh the tools, but apparently there's not. Oh, installed programs. Chibi scheme, chibi do chibi ffi. Chibi scheme provides a ripple and a way to run scripts. Um, see the examples directory for sample programs. Let's actually check that out real quick though. Uh, let's see. Go to shell ex shell chibi scheme. You can dump an image file, which is not necessarily the same thing, but maybe you could. I swear I saw something about that. Actually, let me look at my other machine real quick. I looked something up for that. So, is there a program It's not on the path. Yeah. Oh, okay. Probably it's because I'm not in a legit shell environment, huh? run main from module disable tail call optimization dangerous. I would say that it would be uh basically breaking the fundamental assumptions of scheme. Make standard IO non-blocking. That's interesting. Yeah, dump an image file and exit. That could be one way to do it. Uh I don't know if there's an API internally for that. Maybe there's API internally to Chibi for uh compilation. That tends to happen sometimes. So we look at the standard modules again. Is that here? No. I don't see it. Chibi JSON. Nice. Okay. Where is my chat? Disable scheme dangerous. That's right. It kites. All right. So, um, wait, hold on. Just trying to check the time. I think it's supposed to be possible. Uh, but I may have gotten some, uh, incorrect information from AI. AI told me there was a program called chibi- scheme-static. I don't know if it exists. Maybe it doesn't come with a distribution is in geeks. Um anyway, where was I? We were talking about how we were calling it to this ray lib library from uh scheme in this program. Uh it's basically just a normal scheme top level because at the very end you see that we have the the let the named let for the game loop. Um, we start with the current screen and we just have like or not current screen window should close begin close audio device close window or then we run the game loop function with a current screen. Um, make game screen. Make a menu screen. Make fade. Speaking of fade, where's fade? Move ball. Got to have that function. So, wait. Make menu screen. Make next screen. Who knows? LM do a lot of hallucination. Yes, they do. They try to provide an answer even if they don't actually have one. So, it's like a programmer. You ask a programmer how to do something. Even if they don't know how to do it, they're going to give you some answer. They're going to try to tell you what they think it is. They may not be right. The the IRO says, "I don't think I've ever had an LM give me correct code." Yes. Well, the the idea is that you don't really expect it to be correct. You just uh get it to be generated and then you continue to uh workshop it with the AI until it finally gets it right. Ah, there seems to be a build only tool called Chibi Gen Static. Thank you, Retroixel. Uh Chibi Gen Static. Uhhuh. And where is that you iterate? Yes. Just like you know normal programming. Oh, the hold up. This is a Geek's build log. There is a tool. Oh, look at that. There's like tools which are probably um scripts. Huh. How old is this? At any rate, there should be something. So, if I were to go into the GNU store. Yes, I know. I shouldn't be digging in the GNO store. Why not? Huh? Uh, Chibi Scheme. Boom. Boom. Lib Chibi. No. Uh, etc. No. Ben, no. Share Gibbi. Where's the damn tools at? Oh man, the virus is coming for me. So, um, excuse me. So, I think I should look at the Geeks package definition for this and see uh where this is being discarded because apparently they're discarding the um the tools. Ozo says, "I've had LM give correct code on the first try. Describing thoroughly as very specific uh thing helps. Giving examples helps." Yes. And once again, the ripple is taking forever to start. So, let's just do this the oldfashioned way and go to projects code geeks. Who knows how old this is? And I'm going to try to pull up scheme. No. Is it lisp? Uh, Chibi Chibi OS. Hey, I didn't mean for you to do that. Schemese SCM. Why did I Why did that not show up? All right. So, Chibi Scheme. Nothing specific. They're not specifically getting rid of it, but they're not pulling anything out of the tools folder. I'm just curious now. Okay. Uh RetroPixel gave us a link to the uh actual file for that tools/cheben static. And right here is that a script. All right, cool. That's kind of interesting. This is a build only tool used to generate the C libs file used by Chibi for a use static lib build uh a build of Chibi with all libraries that would be loaded dynamically included statically into lib chibi scheme though not necessarily statically linked. So yeah, basically if you get the list of all files, all scheme library files under a path and running them through chibi gen static and put them all in a C file. I don't know what that mods is, but maybe it's another way to do it. Oh, in the first form, chbin static takes a list of module file names. In the second form, we take an explicit list of module names as options with dash i or include both i and x may be specified multiple times. That's cool. Uh this is only intended for libraries in the core distribution and currently makes the assumption that the sld files contain a defined library form. If you want to make a custom build with your own libraries included statically, be sure to follow this convention. So basically what you want is to uh pull in the library files for chibi scheme itself and the library files for your program so they can build one big C file that contains all of probably the bite code for all those compiled modules. Once you have that, then you compile that C file into your program. And I'm guessing somehow you load that up. Maybe it does it automatically. Maybe what happens is that um inside that generated C file, it has the necessary uh API calls to map a given module name to some in-memory module information and then uh be able to load that module up whenever the uh module module is requested. So that's cool. Yes, anybody who wants to participate in the chat heavily definitely join the IRC. If you just go to systemcrafter.netlive, uh you'll have a web-based uh interface you can use for that or uh scop you can just take a break. So anyway, yes, it is possible to statically compile scheme code into a C file and then compile that into your C program [music] and then statically compile the or sorry compile the program with the static library version of GB so that you have everything self-contained into one application. Uh that way if you wanted to distribute a program or game of any sort, you at least for the scheme part of the dependencies, you wouldn't need to have any other extra files uh around. So another place this could be useful is command line applications. Um I don't know exactly how big a C program would be if you statically linked Chibi into it, but let's say it could be, you know, hopefully like a megabyte or less. It'd be nice, but a lot of scheme implementations are way bigger than that. depends on which libraries you include I guess. Um so you could have like a command line application that you distribute to people. Um could also be a desktop application that calls into libraries like GTK um or cute. Um it has uh libraries for things like HTTP. I don't know how good they are but there is an HTTP library. There's also a socket library. So, HTTP server, simple HTTP server with serverless support. They say it's simple. Um, you wouldn't necessarily want to front your entire website on the internet with this library, but maybe if you put it behind Engine X or um what's the other one everybody keeps using these days? Starts with a C? Forgotten. Um, you put it behind a reverse proxy of some sort, then maybe it's okay. Bu says, "With respect to the LLM discussion, the fact that they're effectively making DDoS attempts on my good force constantly makes using anything from these companies a non-starter for me." Yeah, it's kind of crazy how they're just constantly like scanning and hitting the internet. Cal says, "I will give Leftpad all my money." Don't do that. That's not smart. Escopy, I appreciate the effort, but don't tire yourself, man. Please. You just had to rake leaves off your sidewalk. Peter says, "I heard Cloud Flare was a popular reverse proxy is definitely a reverse something and it reversed the uh sanctity of the entire internet." Asher says, "That was me, not scopy." Which one? Yeah. Okay. Sure, sure, sure. I'm sorry. I'm I'm kind of, you know, breaking the the boundary between uh personas here. My apologies. Okay. Uh, what else are you interested in hearing about regarding Chibi Scheme? That's just kind of me exercising my own curiosity about Chibi Scheme. Uh, and and just kind of yelling it at you. What else is is interesting to the people who are here? Caddy, thank you. Mh. That's right. Caddy is the thing I'm thinking of. Andre says, "The main developer of Curl has written several blog posts about how LLM generated bug reports are killing open source and fake bug fake bug reports." Now, it's pretty funny. I actually saw another one like that on Curl uh because the uh creator of Curl uh Daniel forgot his last name Stenberg maybe. Anyway, have I tried the GBFI? Yes, that's what I I was actually using for um Rayb. I have a stub file for RayB. So uh obviously lots of open source projects are having AI generated bug reports come in. So you get an issue file that's that's created by uh AI right also they're creating uh uh what do you call it what is it called like a threat report? What is it what is it called? basically like filing an issue that's a security issue on a site like hacker 1. Yeah, Stenberg, thank you. It's way way slow on the chat apparently. Like it's way behind. So there was one that was kind of funny that he linked to which was someone got an AI to do a penetration testing or like some kind of source code analysis on curl. It's like, "Oh, you found a huge issue." But the person like created the the posting on [clears throat] this site and like the title of the issue was the the title of the issue plus, oh, you did a great job finding this and with the person's name in there. So, it was clearly written by an LLM. So, anyway, uh Whoops. There's a lot of that kind of uh AI generated noise going on right now in a lot of places. I I got some spam on Codeberg recently too. A lot of uh fake issues being created, fake issues in PRs for no reason. [snorts] Cal says, "Making computer games without a web compilation target is very lonely because who would run your possibly malware outside a browser, but I don't think you have time to emac script [music] emma script in your breakout." Um, not right now. It is possible though. I had actually gotten mesh to work in the browser with uh, man, now that you said ECMAScripton, it broke my brain. Mcripton, I actually got Mesh working in the browser with Mcripton. And one of the games that we did, what was that one called? Uh, Call the Stones. for GitHub game off. Did I actually have Do I have a page up for this? The Jam website. Did I ever submit it? Probably not. Did I post it anywhere? I must have posted it somewhere. Uh, does it work like this? No. Ah, I have no idea where I would have hosted this. And I don't seem to have a a CI configuration for it either. Anyway, anyway, Kai says, "This year the level in the list game jam has been crazy. Top two entries are amazing. I haven't seen all of them yet." Okay. main.c that's what it looks like to set up mesh in a C program if you want to see how that's different. Anyway, I must have posted it. Oh, actually it's probably just on itch. Is this how it works? How do you find someone's page on? Come on. Oh, right. Okay. Cyberol. Hey, why is the other one not here? Those two were written in hoot, so they don't count. And this one is from forever ago. Thank you, Ash. Anyway, this scheme looks like a very distracting language. Yes. Well, I mean, we're you're on this channel. Anything that we show here is definitely going to be distracting. Yeah, I don't remember anything. But, okay. So, rolling it back. Rolling it back. Yes, I think it is possible to compile um Chibi to the browser using mcriptton. If you go to the main page of the repo, mcrypton support by default 11 years ago. Yeah, mscripton. Is this an example? No. Okay. Anyway, ah, it does say it's known to work on FreeBSD, NetBSD, OpenBSD, Dragonfly BSD, OSX, Plan 9, Windows, iOS, Android, ARM, and Incripton. Okay, good. To make incript and build run makejs, not make make.js. If you don't know what mmake is, that comes with encrypted. No haiku support. I I will bet money that they got haiku support in here. They got to, but it's not mentioned anywhere else. Maybe not. Does Chibi only support x86 or other platforms? It sports uh 64-bit as well. I don't really know what that means. Yeah. 32 and 64-bit Linux. Uh yeah, I'm I'm guessing AR 64 because it works on Android. because I think you have the compiler for that if I'm not mistaken. So it's you know pretty useful I think uh if you want to have a scheme implementation that uh could be shipped to many different platforms. Okay. So yes ARM and inscript inscriptton. Yes. So conclusions. Uh chibi scheme is cool. um I was playing with it a lot a couple years ago off and on over the years just because of the ability to um make C programs and have it embedded inside. Haven't really played with it enough recently. I might do it again because it's kind of fun. Um, but there's also Janet and there's also uh mesh, but I don't think I should ever try to pick up that project again because the last time I tried to work on mesh, I got sucked into it too much cuz it's too fun. So, I had to to put that one aside. Uh yes. Uh a guy says the maintainer of Chibi is one of the editors of R7RS and the guy is very responsive as a maintainer and welcoming. Send your poll requests. Yes, YouTube is definitely lagging behind uh terribly. I wish that uh YouTube had better latency. I can set the latency I think for the stream starts, but I don't think it does much. Um, anything else? I don't know. It's just a fun scheme to play with. I mean, if you're a scheme enthusiast like me, you know, playing with different scheme implementations makes sense. This is one that has some utility if you want to kind of make apps with it and uh send them around. Retro Pixel says, "Can confirm Chibi Maintainer is a great person." Um, I mean, it's also good work, too. I mean, the Chibi is cool. Chibi has been around for a very long time. I remember back in probably 2014, 2013 time frame and I was looking at uh schema implementations. Um Gambit and Chicken and Chibi were showing up a lot. So yeah, Chibi's been around for a long time. Chibi wasn't as good back then. It's come a long way, I think. But uh yeah, it's it's good. But I would recommend people using it if you want a cool uh scheme implicitation to work with. And as you can see, like I I had a game that was running. Not good, but it it worked. You can't hear the music playing and the sounds playing, but it does work. Credits. Do I have anything in the credit screen? No, it just crashes. Undefined variable. Make credit screen. Fine. Whatever. [snorts] play. Ah, all right. There you go. That's a crappy breakout clone that's not very good at all because the physics is terrible. It just the the ball just reflects whatever direction [snorts] that uh it bounces off of. Lord Deb says, "I wonder if this will be useful for game dev. C for engine embedded scheme for object management scripts." Yes, it's exactly the kind of thing that I would use it for. A kite says, "Yeah, he's like, "Merge first and improve later." It sounds a lot to me like the C4 development process. What is it called? No, that's Oh, yeah. Yeah. Yeah. Yeah. Social architecture. This one reminds me of C4, which is very much a just merge it first and then fix it later type thing. And if if it doesn't work, just uh revert it. You've never heard about C4 before. It's kind of cool. It's a little bit uh radical in the way that uh open source projects are usually managed, but it's served as inspiration to me a number of times whenever I've thought about how to manage open source projects in various different cases. Good luck with the uh snow shoveling otter. [music] I don't uh envy you at all. Peter says, "Well, as usual, there is somewhere a bell curve." Yes. I don't even know what a Lego I don't even know what I'm not saying that right. I'm sure I'm just making stuff up now. With Chibi on one tail and curl at the other side. That sounds like another cult saying. Okay. So, yeah, try out Chibi Scheme. Um, I probably should link to some of these things in the show notes so that people can do that. I'll finish that after the stream so you don't have to watch me just gathering links to put in here because I've done such a bad job. Well, it doesn't really help me. Boo, cuz still like ye. Is it ye? Probably not. Got it. Okay. So, uh, great. Thank you all for your time and attention. I hope you had a good time. I had a good time. It was fun. Um, and be back here next week. Next week is Thanksgiving in the United States. I will be celebrating Thanksgiving, but I more than likely will still be doing a stream. So, if you are bored on Black Friday and you want to come watch somebody talk about some stupid topic on Friday morning or Friday evening, wherever you are in the world, then uh come back next Friday and we'll have something else to do here. Um, but like I said, thank you all for your time and attention. Hope youall have a great weekend and until next time, happy hacking. See you.

Video description

In this stream, we'll take a look at Chibi Scheme, a Scheme implementation that's great for embedding into C applications for scripting or as an entire app development language. We'll take a look at a few different aspects of how you might be able to use it in your projects. #scheme #programming SUPPORT THE CHANNEL: 👍 Support My Work: https://systemcrafters.net/how-to-help/#support-my-work 📰 Subscribe to the Newsletter: https://systemcrafters.net/newsletter/ 👕 Check out the Store: https://systemcrafters.store 📘 Get Your Copy of Mastering Emacs: https://www.masteringemacs.org/r/systemcrafters?utm_source=yt&utm_medium=desc&utm_campaign=scme SHOW NOTES: https://systemcrafters.net/live-streams/november-21-2025/ JOIN THE COMMUNITY: https://systemcrafters.net/community/ (Forum and IRC chat!) https://fosstodon.org/@daviwil MY CONFIGURATION: (This site is currently down but will be back up soon!) https://config.daviwil.com https://config.daviwil.com/emacs https://config.daviwil.com/systems (Guix) OTHER SERIES: - Emacs Essentials: https://www.youtube.com/watch?v=48JlgiBpw_I&list=PLEoMzSkcN8oPZvSdewHG8uApD7THlLLCV - Emacs From Scratch: https://www.youtube.com/watch?v=74zOY-vgkyw&list=PLEoMzSkcN8oPH1au7H6B7bBJ4ZO7BXjSZ - Emacs Tips: https://www.youtube.com/watch?v=wKTKmE1wLyw&list=PLEoMzSkcN8oMHJ6Xil1YdnYtlWd5hHZql - Emacs Desktop Environment: https://www.youtube.com/watch?v=f7xB2fFk1tQ&list=PLEoMzSkcN8oNPbEMYEtswOVTvq7CVddCS - Emacs IDE: https://www.youtube.com/watch?v=E-NAM9U5JYE&list=PLEoMzSkcN8oNvsrtk_iZSb94krGRofFjN - Emacs Mail: https://www.youtube.com/watch?v=yZRyEhi4y44&list=PLEoMzSkcN8oM-kA19xOQc8s0gr0PpFGJQ - Learning Emacs Lisp: https://www.youtube.com/watch?v=RQK_DaaX34Q&list=PLEoMzSkcN8oPQtn7FQEF3D7sroZbXuPZ7 - Craft Your System with GNU Guix: https://www.youtube.com/watch?v=iBaqOK75cho&list=PLEoMzSkcN8oNxnj7jm5V2ZcGc52002pQU CREDITS: Coriolis Effect by logos feat. stefsax, licensed Creative Commons 3.0 CC-BY http://ccmixter.org/files/mseq/26296 reNovation by airtone, licensed Creative Commons 3.0 CC-BY http://ccmixter.org/files/airtone/60674 ukeSounds by airtone, licensed Creative Commons 3.0 CC-BY http://ccmixter.org/files/airtone/32655 Between Worlds (Instrumental) by Aussens@iter, licensed Creative Commons 3.0 CC-BY http://ccmixter.org/files/tobias_weber/56664

© 2026 GrayBeam Technology Privacy v0.1.0 · ac93850 · 2026-04-03 22:43 UTC