diff options
Diffstat (limited to '2025/info/schemacs-after.md')
| -rw-r--r-- | 2025/info/schemacs-after.md | 404 |
1 files changed, 404 insertions, 0 deletions
diff --git a/2025/info/schemacs-after.md b/2025/info/schemacs-after.md index d511e981..595a5d18 100644 --- a/2025/info/schemacs-after.md +++ b/2025/info/schemacs-after.md @@ -1,6 +1,410 @@ <!-- Automatically generated by emacsconf-publish-after-page --> +<div class="transcript transcript-mainVideo"><a name="schemacs-mainVideo-transcript"></a><h1>Transcript</h1> + +[[!template text="""Hi, EmacsConf 2025. My name is Ramin Honary,""" start="00:00:01.060" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and I'd like to talk to you today""" start="00:00:05.640" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""about my project called Schemacs""" start="00:00:07.560" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""which I presented last year.""" start="00:00:10.400" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Back then it was called "Gypsum"""" start="00:00:12.080" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and the name has since changed.""" start="00:00:13.880" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So my name is Ramin Honary.""" start="00:00:18.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'm an Emacs enthusiast, have been since 2017 or so.""" start="00:00:20.240" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'm a full stack software developer.""" start="00:00:25.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I love Haskell, Scheme,""" start="00:00:27.760" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""anything functional programming related,""" start="00:00:29.301" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and of course Emacs.""" start="00:00:31.434" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I started learning Scheme about three years ago,""" start="00:00:32.960" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and this is my third time presenting""" start="00:00:36.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""at EmacsConf.""" start="00:00:38.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So the Schemacs project that I'm talking to,""" start="00:00:40.800" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'm talking about to you today,""" start="00:00:46.480" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""was originally called "Gypsum".""" start="00:00:48.160" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The reason I did not call it "Schemacs"""" start="00:00:50.280" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""was that the name "Schemacs" was taken on GitHub.""" start="00:00:53.360" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""But in the past year,""" start="00:00:58.120" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I was able to get the permission""" start="00:00:59.568" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""of the author of GitHub's Schemacs""" start="00:01:02.120" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""project to name my project the same thing,""" start="00:01:04.480" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""even though it's a very similar project.""" start="00:01:08.841" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So I changed the name.""" start="00:01:11.321" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Let me see if I can quickly show the screen.""" start="00:01:14.720" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So yeah, I have archived the old project.""" start="00:01:19.701" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It's still there, but there's an explanation in""" start="00:01:24.960" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the readme file and a screen grab""" start="00:01:27.720" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""of the conversation I had""" start="00:01:30.168" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""with the original author of GitHub Schemacs.""" start="00:01:31.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""My Schemacs is not on GitHub at all.""" start="00:01:36.120" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It's only on Codeberg. So please don't get confused.""" start="00:01:38.680" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""But yes, I received permission""" start="00:01:43.880" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""to change the name and so I did.""" start="00:01:46.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And I would like to give a quick shout-out to""" start="00:01:50.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""user "Tusharhero" for helping me with that.""" start="00:01:52.840" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This person really helped make that name change happen.""" start="00:01:57.240" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So back to the slides.""" start="00:02:02.640" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""The scope of the project""" start="00:02:07.200" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""And so now I'd like to clarify the scope of the project.""" start="00:02:07.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I don't think I quite made it clear""" start="00:02:11.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""well enough last year,""" start="00:02:13.001" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""but... Although I'm definitely cloning""" start="00:02:14.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the Emacs Lisp programming language,""" start="00:02:18.401" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the actual scope of the Schemacs project""" start="00:02:20.168" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""is to make an Emacs-like app platform for Scheme.""" start="00:02:25.268" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I don't consider Emacs to be a text editor.""" start="00:02:29.760" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I consider Emacs to be a Lisp app platform.""" start="00:02:32.960" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So it's similar to something like the""" start="00:02:38.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""World Wide Web, or Microsoft's .NET app platform, or Java.""" start="00:02:39.840" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""These are all examples of app platforms.""" start="00:02:48.540" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I would like Schemacs to make it easy""" start="00:02:52.560" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""for not only people to use it for""" start="00:02:55.120" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""things like editing text or, you know, for""" start="00:02:59.400" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""using your computer through a command line""" start="00:03:03.480" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""or manipulating your Git repository.""" start="00:03:06.440" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'd also like you to be able to create simple""" start="00:03:10.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""GUIs or TUIs using Scheme.""" start="00:03:13.160" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So that's also one of the goals of this project.""" start="00:03:16.120" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It will of course have an Emacs-like text editor,""" start="00:03:19.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and I will clone Emacs Lisp.""" start="00:03:23.080" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So hopefully GNU Emacs users""" start="00:03:25.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""will feel comfortable moving over to Schemacs""" start="00:03:29.880" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""because they'll be able to use your init.""" start="00:03:32.780" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You'll be able to use your init.el file.""" start="00:03:35.680" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So configuring and scripting Schemacs""" start="00:03:40.400" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""should be done in Scheme.""" start="00:03:43.240" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'd like to encourage scripting in Scheme""" start="00:03:44.480" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and creating new workflows and macros in Scheme.""" start="00:03:47.680" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It will support Emacs Lisp depending on""" start="00:03:51.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""how much of the Emacs Lisp interpreter I can clone.""" start="00:03:54.268" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""That will be supported but not encouraged.""" start="00:03:59.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""But you should still be able to run your init.el.""" start="00:04:03.040" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And I would like it to be good enough,""" start="00:04:06.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""this Emacs Lisp interpreter""" start="00:04:08.840" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""should be good enough to run packages from ELPA.""" start="00:04:10.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Although it will probably be some time""" start="00:04:13.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""before it will be able to run""" start="00:04:15.880" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""something as large as Org Mode or Magit.""" start="00:04:17.560" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Difference with Robin Templeton's project (Guile-Emacs)""" start="00:04:24.760" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""It is slightly different from the Guile-Emacs project.""" start="00:04:24.760" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This is the work of Robin Templeton""" start="00:04:27.440" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""who presented last year.""" start="00:04:30.334" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Guile-Emacs links the Guile runtime""" start="00:04:32.220" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""into the Emacs executable.""" start="00:04:36.034" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It's not a Scheme application. Emacs,""" start="00:04:38.501" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the core of Emacs is written in C.""" start="00:04:41.581" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Guile, the core of Guile is written in C.""" start="00:04:44.201" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""What Robin Templeton has done is, at the C level, linked""" start="00:04:48.121" video="mainVideo-schemacs" id="subtitle"]] +[[!template text=""""libguile.so" into Emacs and then provided""" start="00:04:53.701" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""a programming layer where you can""" start="00:04:56.834" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""call the Scheme interpreter from Emacs Lisp""" start="00:04:59.501" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""so that you can run Scheme programs from within Emacs""" start="00:05:04.760" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""without having to launch a separate process""" start="00:05:11.280" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and communicate over a channel such as a socket.""" start="00:05:13.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You won't need "SLIME" or anything.""" start="00:05:18.040" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The Guile interpreter is just right there inside of Emacs.""" start="00:05:19.840" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""But my project is not like this at all.""" start="00:05:23.420" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Schemacs is written completely from the ground up""" start="00:05:26.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""in R7RS-compliant Scheme. And because it's R7RS-compliant,""" start="00:05:28.880" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""it's not bound to any one particular Scheme implementation,""" start="00:05:35.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""although Guile is the reference implementation.""" start="00:05:38.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""One goal of this project is to be able to run""" start="00:05:39.880" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Schemacs on any R7RS-compliant Scheme implementation.""" start="00:05:42.360" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Progress made since last year""" start="00:05:49.720" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""The work that I've done this past year mostly is internal.""" start="00:05:49.720" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""There's not much that you can see on the surface.""" start="00:05:56.260" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""But the most... One of the most important things that I""" start="00:06:00.940" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""did was I rewrote the parser in R7RS Scheme,""" start="00:06:04.520" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""so it no longer depends on""" start="00:06:06.840" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the Guile regular expressions library.""" start="00:06:07.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The parser now also provides source locations,""" start="00:06:12.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""so if an error occurs in Emacs Lisp,""" start="00:06:14.960" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""there will be a stack trace""" start="00:06:18.940" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and it will show you where in the source code""" start="00:06:20.568" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the error occured. This was not possible last year.""" start="00:06:23.634" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And because it no longer depends on Guile,""" start="00:06:28.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I can make it work on multiple Scheme implementations.""" start="00:06:30.861" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So far, I've been able to get it to run on""" start="00:06:34.521" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the Chibi Scheme interpreter""" start="00:06:36.821" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and the Gauche Scheme interpreter, as well as""" start="00:06:38.921" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Guile, which is the reference implementation.""" start="00:06:41.281" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""For a short time, it did work also on Chez Scheme,""" start="00:06:44.280" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the Chez Scheme compiler, using Gwen Weinholt's "Akku,"""" start="00:06:48.560" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""which is a program that translates R7RS Scheme to R6RS Scheme.""" start="00:06:53.180" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And with that translation, because Chez Scheme""" start="00:06:59.300" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""is pretty strictly an R6RS compiler,""" start="00:07:04.520" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the translation allows you to run R7RS programs.""" start="00:07:07.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""But due to some change, I'm not sure where,""" start="00:07:11.520" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""it may have been changed in the Schemacs source code,""" start="00:07:15.220" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""or it may have been a change to Akku,""" start="00:07:17.120" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""but it no longer builds on Chez.""" start="00:07:19.640" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It did at one point. I'd like to try to fix that.""" start="00:07:21.240" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Portable React-like GUI""" start="00:07:28.040" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""The second most important thing that I've worked on is a""" start="00:07:28.040" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""portable React-like GUI. And so React,""" start="00:07:30.720" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""for anyone who has done web programming,""" start="00:07:36.440" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""is a very popular framework for programming web applications.""" start="00:07:41.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And I've provided something""" start="00:07:46.840" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""very similar to that in Scheme now.""" start="00:07:48.234" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So it works. I have constructed a DOM data structure""" start="00:07:49.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""in Scheme. It's just an ordinary Scheme data structure.""" start="00:07:54.680" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It works like the web's "Document Object Model"""" start="00:07:59.080" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""or the "DOM" data structure.""" start="00:08:01.520" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And then this Scheme DOM data structure can be rendered""" start="00:08:03.961" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""using any GUI framework that is convenient""" start="00:08:10.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""for the Scheme implementation that you're targeting.""" start="00:08:13.060" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And you should be able to implement""" start="00:08:16.240" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""also rendering to a CLI as well.""" start="00:08:18.880" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The current reference implementation""" start="00:08:22.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""is using a framework called Guile-GI.""" start="00:08:24.601" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This is the "GObject Introspection" framework.""" start="00:08:27.760" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It's a very simple""" start="00:08:30.640" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""GObject Introspection framework for Guile,""" start="00:08:31.968" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and it binds to GTK3 on Linux.""" start="00:08:36.120" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""There's a similar framework called G-Golf""" start="00:08:40.980" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""which I'd like to begin using as well, also for Guile.""" start="00:08:42.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""G-Golf seems to be a bit more well-maintained, a bit...""" start="00:08:48.360" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It has better features. G-Golf may be a""" start="00:08:53.740" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""better rendering backend for the reference""" start="00:08:57.800" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""implementation, but I would like to provide both.""" start="00:09:00.040" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Demo""" start="00:09:06.040" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""I will give a demo of this now.""" start="00:09:06.040" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Unfortunately not a whole lot""" start="00:09:07.934" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""to see compared to last year.""" start="00:09:13.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""First thing I'd like to show is""" start="00:09:18.140" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""that I now have a Makefile. You can look inside""" start="00:09:20.640" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""this Makefile and if you're able to read a Makefile,""" start="00:09:24.280" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""you can see that I have several targets now available.""" start="00:09:28.401" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You can build Schemacs for Guile,""" start="00:09:31.968" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""you can build Schemacs for Gambit,""" start="00:09:35.001" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""or Stklos, or Chicken, or Chez,""" start="00:09:36.668" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""although none of these (except for Guile)""" start="00:09:40.334" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""currently works. These targets will actually""" start="00:09:42.901" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""build the source code, but then you would have to""" start="00:09:51.168" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""load it into the REPL separately.""" start="00:09:56.001" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""There are targets for launching""" start="00:09:59.434" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""a Gauche REPL and a Chibi REPL.""" start="00:10:02.468" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You can also run the Emacs Lisp tests""" start="00:10:06.468" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""in Gauche and Chibi.""" start="00:10:10.868" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You can also start a Guile REPL through this Makefile.""" start="00:10:13.068" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So I will do that right now in the shell.""" start="00:10:19.080" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""(...make the text larger...there we go...)""" start="00:10:27.500" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""OK, so we have this directory of the source code.""" start="00:10:31.834" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Let's just begin by running "guile.sh".""" start="00:10:38.480" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This will launch a REPL and you can load "main-guile".""" start="00:10:44.560" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This will launch the GUI. This is the basic""" start="00:10:52.601" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""proof of concept GUI that uses Guile-GI.""" start="00:10:59.720" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So it may be hard to see.""" start="00:11:04.801" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I cannot change the size of the text yet.""" start="00:11:10.520" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I've implemented the M-: feature""" start="00:11:14.560" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""where you can eval in a minibuffer some Scheme code.""" start="00:11:17.334" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""(string-append "hello" ...)""" start="00:11:24.068" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It outputs the result in the buffer.""" start="00:11:34.440" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This is basically the "\*Messages\*" buffer.""" start="00:11:38.280" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And that's all the more that I have.""" start="00:11:40.960" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This is the same state it was in last year.""" start="00:11:42.620" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It hasn't changed a whole lot since back then.""" start="00:11:45.480" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Additional changes""" start="00:11:48.700" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""But I have made additional changes.""" start="00:11:48.700" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So first of all, you can run""" start="00:11:52.820" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""(let me just go back into the Guile)... you can""" start="00:12:05.380" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""run the Emacs Lisp interpreter tests, so "elisp-tests".""" start="00:12:10.201" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""As you can see, it gives you a stack trace.""" start="00:12:16.620" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So this is an error that I've been able to reproduce.""" start="00:12:18.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I know exactly what the cause of this error is.""" start="00:12:22.040" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It is not finding a variable""" start="00:12:24.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""because the closure is not correctly""" start="00:12:27.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""capturing its environment. So there should be a variable""" start="00:12:30.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""in the closure, but that variable has not been captured""" start="00:12:35.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and so it is causing an error.""" start="00:12:38.720" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It is currently loading "byte-run.el".""" start="00:12:43.460" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Let me show you what code that is here.""" start="00:12:48.081" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So I've copied into the source repository""" start="00:12:49.821" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""for Schemacs some of the Elisp code from GNU Emacs.""" start="00:12:53.501" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So I have this "subr.el".""" start="00:12:58.761" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This declares most of the core of Emacs Lisp""" start="00:13:04.421" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""that's not written in C.""" start="00:13:09.861" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""There's also "byte-run.el". Schemacs Emacs Lisp can now""" start="00:13:12.861" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""evaluate this. This is where functions like "defun" are""" start="00:13:19.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""defined, and "defmacro". So as you can see,""" start="00:13:24.380" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""defun itself is a defmacro defined right here.""" start="00:13:28.360" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It's written in Emacs Lisp itself,""" start="00:13:30.800" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""defined in terms of defalias.""" start="00:13:34.860" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So I can evaluate "byte-run",""" start="00:13:37.720" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I can evaluate "macroexp",""" start="00:13:40.240" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and the failure occurs somewhere in "subr.el".""" start="00:13:42.740" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Although if you look at the stack trace,""" start="00:13:46.020" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""it doesn't provide all the necessary information.""" start="00:13:48.960" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So it appears to be happening in byte-run.el.""" start="00:13:51.160" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Really, it's an error that's occurring inside of a macro,""" start="00:13:56.440" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and the macro call site is somewhere in subr.el.""" start="00:14:00.620" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Anyway, take note of this stack trace.""" start="00:14:05.800" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This was run from within Guile.""" start="00:14:08.640" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Other Scheme implementations""" start="00:14:12.020" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""Now what I've done this past year""" start="00:14:12.020" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""is make it work on other Scheme implementations.""" start="00:14:14.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Use "make" to launch a Gauche REPL.""" start="00:14:19.480" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Now I'm inside of Gauche.""" start="00:14:23.834" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This is the command that""" start="00:14:26.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""you would use to launch a Gauche REPL.""" start="00:14:27.234" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And I can load the same program (load "elisp-tests.scm").""" start="00:14:30.080" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You get the exact same result as Guile.""" start="00:14:38.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So we have two different Scheme implementations""" start="00:14:42.760" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""producing the same result.""" start="00:14:45.800" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Let's try "make" a Chibi REPL. This is Chibi Scheme.""" start="00:14:46.800" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And you can (load "elisp-tests.scm").""" start="00:14:53.080" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Chibi is a bit slower, but you get the exact same result.""" start="00:15:00.220" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So we have three different Scheme implementations""" start="00:15:04.081" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""all running Emacs Lisp,""" start="00:15:07.401" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and all producing the same result.""" start="00:15:11.540" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I think that's...""" start="00:15:14.040" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'm fairly proud of that accomplishment.""" start="00:15:14.768" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I was able to get the code written to the point""" start="00:15:17.100" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""where it actually runs on multiple implementations.""" start="00:15:21.201" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You can also try making it for other Scheme compilers""" start="00:15:24.880" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""like "schemacs-mitscheme" for example,""" start="00:15:30.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""but this will fail.""" start="00:15:35.960" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You can try building it for "schemacs-chez",""" start="00:15:40.020" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Let's try Chez... there we go.""" start="00:15:46.680" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And it will use Akku,""" start="00:15:51.801" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and it will fetch the necessary dependencies.""" start="00:15:54.234" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""But it fails, and I haven't been able to""" start="00:15:58.001" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""debug that quite yet.""" start="00:16:03.434" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Stklos fails for a similar reason.""" start="00:16:05.960" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Gambit... Chicken still doesn't build all the way yet.""" start="00:16:13.140" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The Makefile at least has places for it.""" start="00:16:21.700" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""If anyone can help me out and get Schemacs to compile""" start="00:16:27.121" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""on these other Scheme implementations,""" start="00:16:30.968" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'd appreciate it.""" start="00:16:32.734" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I can probably figure it out myself,""" start="00:16:34.001" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""but that will take more time.""" start="00:16:35.468" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And let me just show you quickly""" start="00:16:37.001" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the test program.""" start="00:16:40.121" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Basically this is the Emacs Lisp test program""" start="00:16:41.721" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""that I was just running, and it produces an error.""" start="00:16:44.501" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""All it does is it loads these files here in this order,""" start="00:16:48.581" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and it fails right around here.""" start="00:16:53.221" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So it's able to load these two.""" start="00:16:55.181" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And yeah, that's what I've accomplished""" start="00:16:58.320" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""on the Emacs Lisp side of things.""" start="00:17:01.361" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""GUI framework""" start="00:17:06.200" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""The next thing I want to show you is the GUI framework""" start="00:17:06.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""that I've written, which I'm fairly proud of so far.""" start="00:17:09.120" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So this is the GUI framework""" start="00:17:13.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""(oops, I better launch it again, OK...)""" start="00:17:15.834" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and let me show you the tests.""" start="00:17:19.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So here in the tests, you can start to see""" start="00:17:22.601" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""some examples of how you use it.""" start="00:17:25.701" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So here is a "counter" test, and this is kind of like""" start="00:17:29.068" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the "hello world" of reactive programming frameworks,""" start="00:17:31.834" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""where you have a state variable,""" start="00:17:35.941" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""sometimes called an "observable."""" start="00:17:38.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'm calling it "number",""" start="00:17:41.660" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and it uses "=" to check if the state has updated.""" start="00:17:43.440" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""If an update occurs and the new value is different""" start="00:17:49.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""from the old value according to the "=" function,""" start="00:17:52.821" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""then trigger a state update in the GUI as well.""" start="00:17:55.033" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Initialize to 0, bound to "number".""" start="00:17:59.233" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I have a "button" function which creates a simple button.""" start="00:18:03.100" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""It takes a label and an action.""" start="00:18:06.133" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Right here you see the "div" command.""" start="00:18:07.833" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This is what creates a "div".""" start="00:18:10.866" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Using the properties, I describe that this div is a""" start="00:18:13.040" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""push-button and the "on-button-push" is an action.""" start="00:18:19.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The action is to update the variable "number"""" start="00:18:22.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""using whatever function or lambda was provided to it.""" start="00:18:25.266" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And then the content that you see on screen,""" start="00:18:30.400" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""that you will see on screen when it runs,""" start="00:18:31.966" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""is here. You create a "div-pack cut-vertical".""" start="00:18:34.034" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""You declare two buttons and then you declare""" start="00:18:38.668" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""this "use-vars" which will take the content""" start="00:18:43.234" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""of this variable here, this observable,""" start="00:18:46.801" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and place it into the GUI next to the buttons here.""" start="00:18:48.834" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So what you will see on screen is""" start="00:18:51.734" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""a "plus" button which increments,""" start="00:18:54.234" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""here is the "increment" function,""" start="00:18:57.068" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""a "minus" button which decrements,""" start="00:18:59.321" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and then the content of the variable that is""" start="00:19:02.780" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""being incremented and decremented.""" start="00:19:05.480" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The advantage of these reactive frameworks is that""" start="00:19:09.700" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""with very few lines of code""" start="00:19:11.866" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""you can create fairly complex interfaces.""" start="00:19:13.066" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The less code you have to write,""" start="00:19:16.033" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the fewer chances you have to make mistakes.""" start="00:19:18.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So let's just run this program.""" start="00:19:21.233" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""This was the "counter-test."""" start="00:19:23.968" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And that is the debug window. Here's the "counter."""" start="00:19:33.293" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'm sorry it's not much larger than this.""" start="00:19:35.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""But here's the "plus" button, the "minus" button,""" start="00:19:38.453" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and here's the "number", 0.""" start="00:19:41.133" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And I can increment or decrement as much as I like.""" start="00:19:43.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So yeah, that's kind of the hello world""" start="00:19:49.793" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""of reactive programming. (I'll reboot the REPL...)""" start="00:19:51.101" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The next thing I want to show you is this layout test.""" start="00:19:55.240" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And I'll just run the test first.""" start="00:19:58.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So here we have basically""" start="00:20:02.193" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""a tiling window manager kind of thing,""" start="00:20:05.020" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""where you can resize the tiles""" start="00:20:08.540" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and then by clicking on these buttons here,""" start="00:20:11.280" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""you can change the layout.""" start="00:20:12.934" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So you can do two on the right,""" start="00:20:16.940" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""two up above, or three up above. So, yeah.""" start="00:20:20.168" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Those tiling windows, as you can see,""" start="00:20:27.101" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""once I work this branch into the main branch of Schemacs,""" start="00:20:30.268" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I can use that to implement""" start="00:20:33.001" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the split window functionality for Schemacs,""" start="00:20:35.274" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""the editor. So here's what this split...""" start="00:20:38.266" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Here's the layout test that you just saw.""" start="00:20:42.466" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Let me make it a bit smaller""" start="00:20:44.866" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""so that it all fits on one screen.""" start="00:20:46.733" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So basically we have the "button" command again,""" start="00:20:48.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and then these are the button actions""" start="00:20:51.366" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""which basically just changes the layout,""" start="00:20:54.133" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and then I have the layout. So this layout is a "div."""" start="00:20:57.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The first div just places three buttons in a row.""" start="00:21:01.460" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""The next layout is a div within a div.""" start="00:21:04.920" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So we have one div which places the button""" start="00:21:07.533" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""called "two right" buttons, and the div above it,""" start="00:21:13.000" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""which places the "three in a row" button""" start="00:21:18.633" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""or the "two above" buttons.""" start="00:21:21.493" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""And here's the next... So there's three different""" start="00:21:22.661" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""layouts, and clicking on one of their associated buttons""" start="00:21:26.001" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""will just change the layout.""" start="00:21:30.601" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""As you can see, very little code""" start="00:21:32.101" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""to create a somewhat complex user interface.""" start="00:21:33.434" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""That's the advantage of using reactive or declarative""" start="00:21:38.501" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""UI programming paradigms.""" start="00:21:42.868" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So yeah, this has not been merged into Schemacs""" start="00:21:44.234" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""at the time of this recording,""" start="00:21:47.233" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""but will be soon hopefully.""" start="00:21:48.701" video="mainVideo-schemacs" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:21:51.520" video="mainVideo-schemacs" id="subtitle"]]</div>[[!template text="""So yeah, I think I've already gone on for 20 minutes.""" start="00:21:51.520" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So I guess I'll just end my presentation here.""" start="00:21:55.166" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I have lots more to talk about.""" start="00:21:59.140" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I guess I will say one last thing before I go:""" start="00:22:00.466" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""that I would very much like for others""" start="00:22:03.980" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""to try and contribute to this project.""" start="00:22:07.066" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I will do my best to try and help teach anybody""" start="00:22:09.200" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""or work with anybody, especially even""" start="00:22:14.233" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""if you don't have much experience with Scheme.""" start="00:22:16.833" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I'd like to help everybody try to contribute.""" start="00:22:18.600" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Basically I want to get this proof of concept working.""" start="00:22:22.760" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""I want to get a stable user interface up and running,""" start="00:22:26.240" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""and then we can start working on""" start="00:22:30.674" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""improving the Emacs Lisp interpreter all together.""" start="00:22:33.066" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""There are close to 1,400 built-in functions""" start="00:22:36.700" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""which need to be implemented.""" start="00:22:41.066" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""We don't need to get all of them""" start="00:22:43.660" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""in order to be able to run probably most of ELPA,""" start="00:22:44.966" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""but as much as possible.""" start="00:22:48.466" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""We would like to clone Emacs Lisp and I need help.""" start="00:22:50.866" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""So get a hold of me. My project is on Codeberg.""" start="00:22:54.800" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""Well, (oh, I can't show this here),""" start="00:23:02.580" video="mainVideo-schemacs" id="subtitle"]] +[[!template text="""but I will end it there. Thank you for listening.""" start="00:23:06.920" video="mainVideo-schemacs" id="subtitle"]] + +</div> + +Captioner: sachac + Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20schemacs%3A%20One%20year%20progress%20update%20Schemacs%20%28formerly%20Gypsum%29) |
