he or e/em/eir (Spivak, male and neuter pronouns are fine) - IRC: screwlisp, Mastodon: @screwtape@mastodon.sdf.org liberachat: screwlisp MOO: lambda.moo.mud.org Name: screwtape Moo mail preferred
00:00.000 I would love to see the GUI interacting with the scheduling stuff
00:57.560 Q: Or any other GUI stuff you've worked on in the past that you'd be comfortable showing?
03:07.400 Lispy Gopher Show
06:21.560 Lisp already did it
10:43.600 IELM
12:32.880 Q: Are we going to get a McCLIM LambdaMOO client?
The gist is demoing using McCLIM common lisp interface manager
implementation to make Sandewall 1978's lisp iconic example
scheduler app, but to drive it to and from emacs lisp via slime
and swank.
To start with, a beginner walkthrough on getting slime and
common lisp and mcclim, and configuring and using them with
emacs org-mode.
The default clim application-frame is made and its interactor
used.
A CLIM command is then defined to refer the default describe to
emacs lisp rather than the inferior lisp.
CLIM useage with no gui via slime / org-mode is demoed.
This is then used via emacs lisp.
CLIM's accepting-values is used to generate an anonymous gui
that accepts a value into elisp.
A small final discussion on integrating the clim scheduler back
and forth into org-agenda.
Bib:
@article{sandewall1978programming,
title={Programming in an Interactive Environment:
the``Lisp''Experience},
author={Sandewall, Erik},
journal={ACM Computing Surveys (CSUR)},
volume={10},
number={1},
pages={35--71},
year={1978},
publisher={ACM New York, NY, USA}
}
@inproceedings{strandh2002free,
title={A free implementation of clim},
author={Strandh, Robert and Moore, Timothy},
booktitle={International Lisp Conference Proceedings},
year={2002}
}
@article{fruhwirth2006guided,
title={A Guided Tour of CLIM, Common Lisp Interface Manager},
author={Fruhwirth, Clemens},
journal={Lisp Pointers},
year={2006}
}
@article{kochmanskimcclim,
title={McCLIM Demonstration},
author={Kochmanski, Daniel}
}
@inproceedings{kochmanski2020ecl,
title={On ECL, the Embeddable Common Lisp (ELS keynote).},
author={Kochmanski, Daniel},
booktitle={ELS},
year={2020}
}
@misc{beane2012quicklisp,
title={Quicklisp},
author={Beane, Zach},
year={2012}
}
@misc{marsden2003slime,
title={SLIME: The superior lisp interaction mode for emacs},
author={Marsden, Eric and Gorrie, Luke and Eller, Helmut and others},
year={2003},
publisher={URL: https://common-lisp. net/project/slime/(visited on
05/19/2017)}
}
@article{dominik2004org,
title={Org mode manual},
author={Dominik, Carsten},
year={2004}
}
Q&A in LambdaMOO:
As an experiment, screwlisp will also be taking
questions from LambdaMOO. Here's how to join:
Use M-x telnet to connect to lambda.moo.mud.org 8888. Alternatively, you can use a web-based client like https://mudslinger.net/play/ or rmoo.el (see rmoo.el note below)
connect Guest to connect as a guest. If that doesn't work, please ask in #emacsconf-org and we'll try to get you sorted out.
Agree to the terms by typing YES.
Teleport to where the speaker is by typing @join screwtape.
To say something, start with " and omit the ending quotation mark, like this: "Hello everyone!. To say something to a specific person, start with a backtick (`) and the person's nick, then your message, like this: `sachac I made it to LambdaMOO. Use help communication to learn more about other communication tools, such as : for emoting and whisper for sending private messages.
rmoo.el note: You may need to define process-kill-without-query if it doesn't exist on your computer. Here's a use-package declaration that might be a good starting point. If your version of use-package doesn't support :vc yet, you can check out the code from https://github.com/toddsundsted/rmoo and add it to your load-path, or use M-x telnet for now.
You can also ask questions via BigBlueButton, Etherpad, or IRC, and the host will try to make sure your question gets to the speaker. Enjoy!
About the speaker:
I'm screwlisp from the lispy gopher climate, a weekly Wednesday
000UTC podcast (non-radio show) on aNONradio.net powered by sdf.org;
(also the lesser-known Friday 1400UTC show, Zhen House Zhen Bonkwave.
We are fortunate to have many great people in our live chat that
happens in LambdaMOO during the shows. Last week, we shared Rog's
new writing on his current personal emacs modes with his decades
of emacs useage. (Roger Crew). That's not what this talk is about
though, though we often deal with emacs and McCLIM, which are what
this talk is about. I have many friends who picked those up in some
small part thanks to the show.
Discussion
Q: I would love to see the GUI interacting with the scheduling stuff
you were working on initially, if I didn't miss it somewhere
earlier.
A: Will do a follow-up video
Q:Or any other GUI stuff you've worked on in the past that you'd
be comfortable showing?
A: You're right, I should make that into a client for Common Lisp.
Q: is the expression being returned directly eval-able is elisp / ielm?
screwlisp: Yes I didn't think this ahead
screwlisp: Like I've just said, you have to call (slime-eval-sync)
screwlisp: After which you can get it out of your kill-ring, because it has syncronised -> to be there
screwlisp: I was going to ask you if you had a way for me to do that
Q: i wonder if there's a presentation type for readable output that is returned to elisp?
most of the time i assume the expression type will be readable on the other end, but CL has readtables and other things that would need translation
similar to the multiple package-archive options with emacs there is also UltraLisp which tracks upstream more closely, but can cause fun-to-debug package conflicts in some situations
screwlisp: I guess I should try that, basically melpa right, I occasionally use person quicklisp dists
screwlisp: 40ants has often done things I want to do
lol @ either it will be faster or you will be smug about it running slowly
screwlisp: Old computer challenge
we did see a little bit of that
https://toobnix.org/c/screwtape_channel/videos
Is the MOO McCLIM app still going?
yes
telnet lambda.moo.mud.org 8888, connect Guest, Y, then @join screwtape
maybe something like this would work for slime eval assuming we still want to use emacs while CLIM window is open: (slime-eval-async '(cl:+ 2 2) (lambda (x) (print x)))
the second arg is a continuation so can bind it, insert in a buffer, etc
I think most emacs users use scratch buffer
thanks for the talk! great intro. look forward to IELM talk next :P
Thank you! 😊
Thanks for the talk, it was super interesting
May the source be with everyone
I use ielm as a repl but not a power user... sometimes I know I want to do more than a few M-:
(lazy-eval 'thanks)
screwlisp: "Yeah, I forgot now but during the talk there were a few tiny bits where it was different to slime that tripped me up
thanks for the talk screwlisp, always good to see lisp history being explored. i'll have to check out lambdamoo again
screwlisp: Quite a few people hang around during the Wednesday show (000UTC, anonradio.net)
screwlisp: Probably not a coincidence a lot of my emacs useage is the same as yduJ's who is normally there
what emacs mode/tool were you using to access the moo?
I dusted off rmoo.el, but it could definitely use some modernization =)
I went for the quick M-x telnet instructions for Guest
screwlisp: Can @request your nick with an email address
Welcome everyone to my EmacsConf presentation,where we're going to look at Lisp's vdemo[??] app from 1978,but done in modern Elisp.Then we're going to look at getting inferior-lisp working,my dear Common Lisp.Then we're going to use the Common Lisp interface manager,the open source child of the Common Lisp interface manager,McCLIM, from inferior-lisp in Superior Lisp,which is the opposite order that I initially thoughtwe were going to do things in,but this is how it's kind of turned out.So it's this article,I thought, from 1978, was interesting to us today.“Programming in an Interactive Environment:the ‘Lisp’ Experience.”Explaining what all these LISP programmers were doing topeople unfamiliar with LISP programming.“LISP systems have been used forhighly interactive programming for more than a decade.”This was from 1978.And we're just going to go and,almost verbatim, port the demo application for LISPout of 1978 Interlisp and into Emacs Lisp.And we're going to do it without Org Mode,because I think everyone is finding outhow great Org Mode is already.For inferior Lisp, I thought instead of org-mode,we'll theme it around slime-mode and then it turned outmost of this presentation happens in Emacs Lisp,because this is an Emacs Lisp conference.But I found out that there's ielm-mode,which is pretty similar to slime-mode,but in our hearts, we can imagine that this isan Emacs example, homed around slime-mode,Superior Lisp Interaction Mode for Emacs, instead of org-mode.Though, you know, I do secretly use org-mode as well,not very secretly.But that means we're kind of improvising,improvising a presentation mode.So we have this big buffer of Elisp, and let's just...This is me, not Sandewall, out of interest,let's make a keyboard macro,go get the S-expression wherever the cursor is,move it to the next S-expression, paste it in here,and the keyboard macro, alright.What was basically happening...
So the demo application in this case isa scheduling application.And so you can imagine improvising a calendar like thisif you weren't existingly using anorg-mode integrated calendar.So, you know, just have a list and maybeeach list is of sublists, where the first element,the car of the sublist, I guess,is a sensible-sounding date format, like sat dec 7,this is clearly the first day of EmacsConf.Then after that, a list of basically from and to times,and then a quick written description of whatever eventwas at that time.So similar to what we were seeing recentlyas of me recording this in our Structure andInterpretation of Computer Programs study group,you have all these little methods, sorry, defuns.So hours of a time is actually just car of the time,minutes of the time, cadr of time.And so we all know these kind of little,basically turning car and cadr,which we do use into descriptive names like from and to.You can see how this lines up with the appointments.So for "reproducibly building emacs" described event,I guess from would be 16 25.Let's just grab that and literally use those,because we're in interactive programming, right?So we have this quoted form and thenlet's do from of that. Great.And let's do minutes.So from 16 25, 16 45 reproducibly building Emacs,so when I do from to that I get 16 25when I do minutes to 16 25, I get 25and a description of this number in octal and hexadecimal,out of interest.What was up next? Okay, getting nextday from a date.And so, what was it? Saturday, December 27th.So what happens? So this function,I guess this was part of Sandewall's personal exploration ofatoms using symbols with property lists,with an attached property list to every symbol.And so you can kind of see how this works.I get whatever was keyed by the symbol nextweekday out ofthe day symbol, so I guess we would do...so if we had Sat December 6, I guess we get SatOh, it destructures that itself somehow, get nextweekday.Sorry, nextday.set December 6thBut of course these weren't defined yet,so what if we (setf (get 'sat 'nextweekday) 'sun)and it's going to be sun rightAnd then if we (nextday '(sat dec 6)),Sunday, December 7th.Yeah, so that kind of makes sense in an intuitive way.And you can see cond is being used.So if you're not a Lisp person, cond evaluates a condition.If the condition returns non-nil,it executes the code attached to that condition.It evaluates each of these conditions in termsand then stops when one returns non-nil,as you might expect as a Lisp programmer.Let's keep marching along.Okay, so we have to populate this.And this was an interesting one.As you can see, this was my attempt.let days mon tue wed, so forth.Then I used cl-loop from Emacs Lisp, you know,for day in days, for nex in cdr days, setf nextweekday.This I thought was surprisingly deep, was thatLisp programmers, Sandewall thought,are basically constantly trying to break new ground and theylose interest very quickly whenthat's not what they're doing.And he was making the point that breaking new groundinvolves solving a problem exactly once.And so you kind of should do itin the most expedient way possibleto solve it kind of for the first time.And after that, it's not breaking new ground anymore.And so I thought that was a kind of fun pointfrom Sandewall's paper that we could kind of chew on.Do something similar for months and month lengths.But as we can see, if I get Feb,nrdr days I think that characters in 1978,characters and symbols in 1978 were more preciouswhich is why Sandewall was writing in this abbreviated way.We might write more verbosely these days.We get 28th but it is in fact a leap year,so let's just set that to be 29. Now, it's fine.Then I guess if we do, we were doing nextday.Sure, nextday. I don't know what day it was.let's assume it was Sunday Feb 28some kind of typo crept in there, but we can deal with it.Let's just setf get sun nextweekday month.So once we've solved it once, we should be fine, right?Okay, I think I have to speed up a bit.Yeah, there we go, Monday February 29th and thenwhat if we nextday... Tuesday March 1st.Okay, it basically seems to be working.And I'd argue it's actually fun thatwe kind of had to do that.Then, just imagining you're kind of functioning withother people: day begins at 900, ends at 1700,so kind of a 9:00 to 5:00, imagining... though perhaps,shorter is more appropriate,but let's not quibble about that.What was happening next in this app?holesin. Oh, yeah, so get me the free slotsin from start time, list of appointments,remembering characters, I guess, were more preciousis my theory.And then an end time, so if I go holesin and then from 900to where I've written 9 space 0 0and what are my appointments?So I have a list of appointments thatneed to have start times and finish times.So let's go 12 59 to 13 01.The description, I guess, can be test.And then let's finish that at 1700,like we kind of thought.Oops, some of these were meant to be arguments.Okay, there we go.And so the available times between nine and five,if there's one appointment from 12:59 to 1:01,are from 9 to 1259 and from 1 past 1 to 5,which is kind of what we were expecting.And so our appointment app is kind of coming along.Then we have commonholes,kind of works in a sensible way.Do we have, what are some common holes fromtwo lists of appointments, I guess? commonholes.I guess, let's have one person have an appointmentfrom 9 to 10.That's going to be their only appointment.And let's have another person have an appointmentfrom 9.30 to 10.30.Oh, we didn't do beforetime yet.This is the order Sandewall implemented things in there.Ok, there.So the commonholes are from 9.30 to 10.That's actually the overlapping time.I'll re-record thisif some kind of gremlin has crept into my things.And then, what did we first start by doing?Emacsconf track 1 and Emacsconf track 2,and we'll do it on Saturday, December 7.commontime, and I'm being prompted, of course.emacsconf-track-1,emacsconf-track-2,the date that we grabbed.Let's say we want five minutes.And, as always, I'm forgetting to quote things.And so my opportunities for common timesbetween emacsconf-track-1 to emacsconf-track-2on the first day of the conference,Saturday, December 7th, for five minutes.I have an opportunity between 9:20 and 9:40,11:40 and 13:00, 13:10, 13:25,13:45, 13:55, and 16:15 to 16:25.So I think that's all working.And it was done with almost exactly the same code,except for my loopy populating symbol plist bits earlier,in Interlisp in 1978 as Emacs Lisp in 2024.I thought that was pretty interesting thatyou could do that.I think setf get was put propwas the biggest difference in 1978 Interlisp andmodern Emacs Lisp.And obviously modern Emacs Lisp has Common Lisp loop in it,kind of. It's another big difference.How are we doing for time? 17 minutes?Great, because now let's get a bit closer to whatmy talk title has promised.We're going to use Common Lisp from Emacs Lispand we're going to use Common Lisp Interface Manager,the open source implementation ofCommon Lisp Interface Manager fromInferior Lisp from Emacs Lisp.And what we just went over in Sandewall's paper...This was the starting point, and Sandewall says,well, if you just kind of jammed these ideas using listsyou just kind of made hour a synonym for car andminute a synonym for cadr and so forth,you can then make a whole bunch of improvements.Can we actually get a glimpse of the …No, I didn't really write this.Yeah, so you can see I basically just ported out ofthe Interlisp code in the text of this paper.Yeah, you see from lambda of appointment,car appointment, and that's defineq.I guess Interlisp in 1978 used defineq,whereas we used defun in Elisp,but I'd encourage you to explore that yourselves.But the extension that I wanted to develop today is,since Common Lisp interface manager is just Lisp,and Inferior Lisp is just Lisp,and Emacs Lisp is just Lisp,and Interlisp in 1978 is just Lisp,we could kind of use them all togetherin a kind of funky way.But a complaint you often hear, or a statement of confusionthat you often hear as a Lisp person,people from other languages often can't kind of figure outhow to get started with Lisp.So I'm just going to try and do everything here and now.
And this is the second piece of my three pieces,so let's just get inferior lisp and McCLIM happening.We normally use slime Superior Lisp Interaction Modefor Emacs, which we could get from Emacs's package manager.If I go package-list-packages and then we waitfor however fast my network is,we're going to see how long it's beensince I updated something.Yeah, but you see it's in MELPA, right?It's got to be somewhere here.Yeah, all right.So there's one slime available in non-GNU,one possibly more recent one available inthe MELPA package repositories.I don't know about you,but I can sympathize with people who feel confused by thisbecause I think if you look online,if you found a search engine result,it doesn't customize these like I customize them.So let's just do this.customize-variable.package-archives.Yeah and you can see here I've ins-ed gnu, non-gnu, and melpa.It's melpa, not melpa stable.Saved and set.So that's how I do that.We're just kind of totally get an inferior lisp working.And then, like we saw before,this might occur, buffer is still open.No. occur. slime.So we could install and execute that.I cloned slime since Common Lisp peoplemight use slime and swank, like McCLIM does outside of Emacs.I think we can secretly seeI've got it here already in my ~/.emacs.d/slime,but you could install it like that. The hotkey is I,and then execute the install.I realize you all already know this,but many of you might not yet be Common Lisp programmers,and you can use both Superior and Inferior Lisp.Instead of package archives in Emacs,in Inferior Lisp, and with great controversy,we often use QuickLisp.People sometimes complain QuickLisp releasesget out of date quite quickly.But there was one recently, so they're pretty in date.And so there should be a …Yeah, so basically you download quicklisp.lisp,you check its SHA-256 sum.So I guess in, ooh, over here, if I press D,~screwtape/downloads/quicklisp.lisp.Great. If we open a shell, we realize thatthis is just riveting for all of our experts there.sha256 ~/Downloads/quicklisp.lispYour SHA-256 might be different to mine.Somebody please tell me during the actual conference,the right Emacs idiom to do this.I guess it will be tools decrypt something.But then once you have QuickLisp,let's go back to our shell.I'm on OpenBSD or a BSD, so I type pkg_add eclto get embeddable Common Lisp.However, I think I already have it.And then, let's start ecl [embeddable Common Lisp].Quicklisp inserts itself already,but just loading that quicklisp.lisp filekind of would get you here anyway.Now let's (ql:quickload :mcclim)I'm actually following my plan.McCLIM is kind of like Emacs in thatit handles all sorts of graphical stufflike if you have GTK Emacs,you know, it can do really a lot of stuff.That's the reason why compiling and loadingthe McCLIM package takes a whileand I do use my old computer laptop,my old computer challenge laptop all the time,so when you do this, your computer will besubstantially faster or you will be feelingsmug about how slow you're running your computer,and so there's no problem.Next, we're going to start Swankwhich is the Lisp part of Emacs's slime-mode.If I remember, we looked at this beforein my .emacs.d,and then there should be slime/start-swank.lisp.Let's just grab that and load it.You don't have to type #p.The string will work as well as the path name,but it's kind of fun to do so.Now, slime-connect.You installed slime earlier.Default values.Oh, the reason we had to do thisand not use Slime, start Slime normally was thatCLIM, Common Lisp Interface Manager,McCLIM, implementation of theCommon Lisp Interface Manager spec, also uses Swankand McCLIM really wants to be in the driver's seat.We can have our Emacs connectto the Swank that McCLIM was already running.So (in-package :clim-user)...I don't know if this is an Emacs Lisp idiom,so you normally have user packages to absorb user codejust for fooling around.Then let's just use clim at all.And so clim does lots of things around presentationsbut one thing it does is automatically, to a large extent,generate graphical user interfaces.So there's a lot to it that's not about graphics,kind of richer interfaces thanANSI Common Lisp's character streams.But let's use it to grab a graphical pop-upthat returns a value.So we have this accepting-values tool.t is just choose whatever you think the default stream is.We're going to want our own window, t as well,so just a keyword argument.After that, we can just write things like (accept 'string).And I'm just doing this in, for people only listening,I've just done this in my ECL Slime REPL.Enter a string: foo bar baz.Alt-Enter, I think, is the shortcut to return that.As you can see, its first return was "foo bar baz",and it had second and third returns,string being the type, presentation type that it got,and t, I think, to indicate that it exited successfully.We can also do expression, might be more interesting.There are a whole bunch of these.clim's examples folder is pretty good.And the documentation, everybody's documentation,McCLIM's documentation, you know,lispworks and franz's documentation will tell you aboutthe different default presentation types you can accept.And they're pretty intuitive andthey're kind of very Lisp compatible,which everything kind of is.We could accept an expression. foo bar baz.return "foo bar baz 123" because that's what I wrote.
And now the kind of pièce de résistanceof putting those things together.Let's just run over to our scratch buffer.Oh, or our ielm thing, right?That's what we're actually doing.So now, I think we're going to do, hang on,M-:.I think it's going to be slime-eval-save,because it'll eval asynchronously.There's a question of how to get the value out ofthe asynchronous slime evaluation.And so an obvious way is to yank it.I'm looking forward to learning from kickingvegas.He finally makes it stick in my brain how to...Options other than just starting to write a commandin the minibuffer and then mashing Taband looking at what the likely sounding results are.That's what I will be learning this conference, if anything.slime-eval-save and then, what was happening over here?(accepting-values (t :own-window t) (accept 'expression)).Kind of confusingly, slime-eval-save takes a string,but it works really well, I'd argue.I think it's about to work really well.Ok, this is great.So you can see I've used... Oh, please enter an expression.So we're doing an expression.And so let's write like (3 4/2 5/6).That's an expression, right?And now I've yanked it.I should have really been in scratch,because I just want to dump. Sorry, scratch.Dump whatever that did.Oh, yeah, and see, it kind of simplified thatwhile it was reading it.So running in Elisp, (slime-eval-save "(accepting-values(t :own-window t), accept 'expression))").And I got the three returns all the wayfrom McCLIM to inferior-lisp to Elisp.3, 2, 5/6.Second return, it was a presentation type of expression,returned successfully, key.Yeah, so that's pretty cool. How out of time are we?Oh, we did this in basically half an hour.Maybe we could stop and assume there will be a bit underhalf an hour of interactive discussion.And when I also watch this and also receive suggestions,there will be additions and changes to make, I think.But can we quickly defun accept-date?Let's not take any arguments.Let's do this.accept-date.Saturday, December 7th.Oh, it doesn't return it.But it gets pretty close to returning it.I guess it yanks it.I would have to call … I'm going to say it's slime-sync,at which point it will resolve the slime-eval-async.And then I could get the first value out ofmy kill-ring pop, right?Does kill ring pop what I want?You know, you tell me in the interactive feedback,which should be happening in LambdaMOO.Well, I'll record another draft of this laterafter getting some feedback.Or worse to worse, this is just what you'll hear.Hopefully we have some questions and constructive comments.All right, see everybody later.Thank you so much for being here.Please do drop in to my live showif you're so inclined on Wednesdayswhere you're not busy with cool Emacs conferences.The list be go for climate.Thank you to everyone who helped.Thank you to Sachafor really getting me into this conferenceand kind of getting me going andsubmitting this prerecorded talk.See everybody later.
Captioner: rodrigo
Q&A transcript (unedited)
[00:00:00.000]I would love to see the GUI interacting with the scheduling stuff
...volume of code I've written that.I will do a follow-up video with the kind of synchronizedelisp-mode stuff because that is the point of the talk. Sorryfor talking over you. Please continue.sachac is saying (car kill-ring).Oh, yeah, so this question, they're just asking in the
[00:00:57.560]Q: Or any other GUI stuff you've worked on in the past that you'd be comfortable showing?
Scratchpad, is there any other GUI stuff I've worked on inthe past? I guess my Toobnix channel, I was doing a bunch ofthat, so just Common Lisp development, homed aroundMcCLIM. What is my Toobnix channel? If you find a Toobnixchannel and it has a name like Screwtape, that'llpresumably be that. So Toobnix is SDF.org's PeerTube.Nope, not that one.Sacha's got it here in the IRC. I think it'sscrewtape_channels/videos. Yeah. So theauthor of mastodon.el, which hopefully lots of us are usingfor our mastodoning, I used the name Screwtape as myusername, and I think Wintermute said some kind ofexasperated Emacs theme. You know what? Screw Lisp. ThenMousebot of mastodon.el rechristened me screwlisp. Sosometimes you see my name written one way, and sometimes yousee my name written the other way. I quite like it. A lot ofpeople thought that I was quitting Emacs when I changed myname to be mainly screwlisp. I love it. That's a great story.Thank you. It's so great to have a name from somebody else. Iwas just thrilled. So thank you, mousebot. Everyone usemousebot's mode. Welcome to Green Guest. I'm with youthere. All my kids want to choose their own names, and I'mjust like, more power to you. I'm very glad that my parentspicked mine for me, and that's one thing I never had to thinkabout. All right, so do we have to cut short so I can go back towatching MPV? of the other stuff. We don't have to, but youare not obligated to sit here one moment more answering ourquestions than, you know, but of course, you know, we'vetalked a little before, but I, so I have a pile of questions.
You promised to come on the Lispy Gopher show. That's right.I have so much to say. I could, I could, I could come right onyour show and just talk to you there, but I'm just curious.Talk to us a little bit about that. Tell us more about theprogram. Oh, the Lispy Gopher climate. What do we do? So it'shosted by the Superdimensional Fortress, SDF.org, who area public access Unix mainly. They do their own little radiothing as well. And so I guess for a few years now, I do a weeklyshow every zero hundred hours UTC. We always start off withkind of climate crisis topics, because that is a climatecrisis topic. But there's a sort of joy in that, because KentPitman, who Kent Pitman you're familiar with from thePit Manual and so forth, writes a kind of climate crisishaiku, which we kind of lead out with, and we kind of go intothe discussions there. Then obviously the show has- It's ahighlight, not gonna lie. Yeah, yeah, I love it. I try and dothese dramatic readings, but it's often stumble over.Actually, when Sacha was on, there was an auxiliary poemthat happened, which was pretty interesting, too. What wasI going to say? Then, I mean, the way we got named the LispyGopher Climate was because, broadly speaking, I like totalk about kind of lisp, and most of my writing for a long timewas on the Gopher. Though I accidentally locked myself outof the Gopher recently, so there hasn't been an update therefor a while. I'm kind of around the IRCs and Mastodon quite abit now. Lisp, I like to use the term Lisp inclusively,basically. Obviously this talk, I was making the point thatI just could go through a 1978 paper written in, and so pre-Dmachine inter-LISP, right? And it basically just worked inmodern Emacs LISP. Somebody was pointing out to me, whopointed out where I was like, I don't know what PUT is in,in Emacs Lisp, and somebody was saying definitely there'sput in Emacs Lisp. So I'm going to come back to the recordingof this talk, and I'm going to just pinpoint this moment thenext time somebody says, we need to modernize Lisp. I'mgoing to say, no, no, no, this is modern Emacs Lisp. You see,here's people talking about, yeah, I'm just tripping over,not tripping over, I'm amused by your phrase there, butthat's exactly how I see it too. And I take your point utterlythat, you know, this tradition of Lisp of carrying forwardideas. And, you know, we, you know, especially in Emacs, itreally is like a brain trust, right? Buckets of knowledge ofhow to get some sort of work done, or, you know, how to workwith some kind of code or some kind of data. Yeah, but I had akind of, interesting experience with some great friends ofmine, whom I love dearly. Vidak, if you're watching this,I'm gossiping about you people over in Australia there.
Where people come to you with really exciting ideas thatseem to be very cutting edge and like, you know, very much thecurrent talk of the day, like you can hear in otherprogramming languages, and they're telling you how theythink you might be able to do this in Lisp. And you have to say,well, you know, if we go back to the late 70s, where the Lispcommunity really kind of pioneered this topic already.Here's how we did it in the late 70s. And there's actuallyquite a kind of awkward, just kind of disjunction there. Imean, that's the thing, right? Where use of Emacs inparticular use of Lisp in general will unravel somebody'swhole big bag of wind that they've built up around whysomething has to be rebuilt and well right but that's just afunction you know it's data so we'll probably just thinkabout that as I don't know sitting in a variable.Oh, so that whole problem, like the elegance of a solutioncan entirely fall away once you fall back to an earlier way ofthinking about it. And then, you know, look at the piecesyou've carried forward the idea of the declarativelanguage, right? Declaring user experience. Yeah. Onceagain, tangentially to, um, to the actual talk we've justwatched, which I will try and follow up on as well. But oneexample was After watching me use the Common Lisp loopfacility so much, Kent pointed out to me, hey, you know, whydon't you try using Richard Waters' series iterationstuff, which was kind of lazy evaluation of series thatWaters did. And so after criticizing Haskell for a longtime, me kind of saying, hey, you know, I don't think thislazy evaluation is important. then Kent pointed out to methat, for example, the series, like what is it? AIM 1082 orsomething published in 1989 was Lazy Evaluation in LISPwith series. And so I thought, well, once I realized thatthis was part of kind of almost classic LISP history to havelazy evaluation, I adopted series, I kind of had to rethinkmy LISP worldview to realize it did already include lazyevaluation, which I attributed to the late 80s. And thenwhen I actually read a little bit further, lazy evaluation,depending on your research group, has been, was kind ofestablished in the late 70s by Waters again, actually.Sorry for the anecdote, just kind of the interestingmedley. Not at all.Yeah.Ellis over in the IRC has come up with a good slime aboutasync. Oh, I see. So yeah,I guess that would work. I have to try that. OK, so you're justgetting me reading this. They have had a stab at resolvingour asynchronous calls thing more elegantly than me. Leftas an exercise to the listener. It's one of the big virtues ofsomething like a convention. It'll bring us together withother people that can kind of see past the boats in our eyes.Oh yeah, that's easy for me. Yeah, definitely. Hearingsomebody else's kind of thought process from you and fromjust the past speaker who was Robin, I think, because thiswas in the morning for me, so I just kind of got up and caughtsome of Robin. Yeah, it's so great, kind of vicariouslyexperiencing somebody else's Emacs usage and how it kind ofsubtly backs onto their own development flows. Yeah, so Ireally appreciate this talk. I'm constantly cribbing fromeveryone I meet. And yeah, this talk has been eye-popping,just watching you casually navigate Emacs, actually.
Yeah, it's cool. Yeah, I enjoyed discovering IELM mode.That was going to be my other question for people. Are thereany IELM Power users around? I could really go for anEmacsConf talk on IELM mode. Aha, yes. Very good. Notetaken. Yeah. So, just thoughts for next year? Oh, well, Ikind of want to get back onto the MPV, but thank you so much forthis. You are cmak in the IRC, right? I am Corwin, same as you.So you're Corwin. There's also cmak, and I guess there are afew other people. Sorry that I'm tripping over thedifferent people here. But you're going to come on the LispyGopher Climate later. Sure, I'm happy to. That soundslike fun. I always got a million things to talk about me or anopinion on everything. But of course, my favorite thing totalk about is just the huge thanks that, you know, sharingthat, the generosity or the, you know, my appreciation foryou and all the other members of the Emacs community thatcreate talks like this and make the conference and the restof the community so rich. Well, yeah, and thank you for yourwork. Sacha is just saying over in Lambda that when I say Iwant someone to give the talk, this means I'm volunteeringto give the IELM talk. That's what I wrote down. Oh, yeah. I'vebeen working for Sacha. I mean, helping Sacha with thisconference for years. I know. No, I'm kidding. That would becool. I will absolutely go to your ielm talk. I make a lot of useof that and could do more. Yeah, we're meant to suddenly
[00:12:32.880]Q: Are we going to get a McCLIM LambdaMOO client?
stop. But a guest over in Lambda also said, are we going to geta McCLIM LambdaMOO client? And I actually had all my kind ofMoo stuff I'd written in Common Lisp, which I was thinking ofjust kind of jettisoning. But you're right, I should makethat into a client for Common Lisp. Anyway, I'm going to hangup so I can keep watching the conference sounds good so we'lljust cut away with the stream throw some music and acountdown uh back on give us just a second to make that on bbband then i'll give you the big thumbs up thank you thank yourecording here we'll get it all posted up uh right next toyour awesome pre-recorded talkthanks again like it's been fun chatting and uh Yeah,definitely seeing you around in the conference channel offoff season. So to speak, you're like, you're totallywelcome to use our chat like it to the extent you need to IRCchannel that's been working on great for me. It's fun to funto see it.All right, I'm gonna hang up this thing. All right. Happy dayflowy. Sorry, I mean, screwlisp. Oh my gosh, I haveconference brain. Bye bye. All right, later, later.