Hello, everyone. I'm Jessica Talon. I've worked on Activity Pop, but I'm currently working
at the Sprite Lean Institute, and I'm Scheme Programmer, all of our work as Sprite Lean is
in Scheme, in Giles Scheme, and I'm also a long time EMAX user, which might surprise you if you've
read the title of this talk. I've been using EMAX for, well, I say a long time, I think probably
in the audience has been, this was in short time, but at least 14 years or so. Quickly,
Sprite Lean, we do a lot of work on Giles Goblins, and who'd, which is a Giles Scheme
to WebAssembly, we work developing technologies for the decentralized web, and we're a US
nonprofit, if you're interested, donate. But this talk is largely not about Sprite Lean,
but Scheme itself, and who here is a Scheme developer, Giles Scheme developer, who here
doesn't use EMAX for that? Great, maybe talk to me, but this is a sentiment I've seen several
times, which is, is people asking to learn, like, they want to learn Scheme, they want to
start with Giles Scheme, and the advice is learn EMAX first, and I actually think this isn't
bad advice because of how poor the situation is outside of EMAX for developing Scheme,
Scheme code, and I really want more people to use Scheme, and I think, well, EMAX is a
great editor, it's a weird editor as well, you know, like buffers, windows, and copy and paste,
the kill and yang, and it's got weird defaults, it's quite a burden to learn if you're a new
time developer, and so what are other people using? I found this graph very confusing because
none of the percent's add up to 100, I think people can pick multiple options, this is from
Stack Overflow, it was kind of difficult to find stats on this, but you can see, like VS code is here,
VIM, you've got nano surprisingly, sublime text, Z, and unfortunately EMAX just isn't on
here, so I'm guessing we don't fill in the survey, but more people should use EMAX, it's great,
and why is it great? Specifically, why is it great for skiing? You can see here, sorry it's a little
small, you can see here, it's obviously got great syntax highlighting, and it's got great
intention, which I'm going to speak about more in a little bit, but skimming
indentation is not like it is in other languages, but EMAX handles it perfectly as you'd expect,
a lot of people use parodet or smart prints, I actually don't, even in EMAX, and it's got
great ripple integration with geyser and things like that, it also has the info manual, which is
really great, you can see here in the screenshot, you can actually see where my cursor is due to how
genome takes screenshots, but I'm over the HT variable in this hash reset, and it's helpful in
the bottom here, telling me that it's expecting the table here, and then the next values will be key
in value, and I have my ripple here, and I'm evaluating some functions and seeing the answers,
it's a really good environment to develop in, and indeed the documentation is right there in EMAX,
I can just ask it what this function is, and this hash reset, and I'll tell you what it is,
and the definition that can jump directly to the manual or the source code, this is why EMAX
is such a great development, environment for skim, are there any other development environments for
skim, that are really great, I've got Dr. Rackett here, another skim, I don't think it's
like great for developing non-Rackett skim, maybe other people have had more look with it,
and this is a screenshot from the SICP lectures, so the chalkboard is a popular choice at least
back then, but it didn't make it onto the survey, but what's the status in
some of these more mainstream editors, this is Z, which was on the survey, this is actually not
directly out of the box, they used to have the skim plugin included out of the box, but this was the
highest rated one, and it looks actually okay, right, like you're seeing some syntax highlighting,
and that looks good, and then this is a blind Texas proprietary, so not something I'm likely to use,
but you know, if this does actually come out the box with skim, and this is the goblin source
code, and you can see it's like highlighting this pretty well, so what's the problem, this looks
great, right, like why am I speaking about this, it's great in that it has syntax highlighting,
but the second point of indentation, I would say is almost more important, and what I found
when I tried to program skim outside of e-max to be the biggest barrier, this was, I, you know,
you take for granted what e-max will do for you there, and it doesn't have any of these other things
either, you know, no power, I don't know, grapple and no good documentation integration,
and this indentation, what do I mean by this, I've got the same source code on both sides,
this one's Z, but similar in other editors, and this is e-max in the terminal, and I have this
let block, and I've finished defining this first binding, and if hit enter, and e-max has
helpedfully put my cursor right where I'd want to start the next binding, right, you know,
in line, and I've done the same in Z, and it's just taken what the last indentation was,
and so I will have to go there and press space a lot of times to go up, and actually a lot of editors
do the right thing, and put spaces instead of tabs, but it also will treat spaces as tabs,
and if you press the back, because you've gone one too far, it'll probably take four spaces
or wherever you've set your tab width to be, which is really annoying, so really what you want
is to be able to hit enter and it align up, and a lot of languages, this is really easy, you know,
think of JavaScript or something, it will, you tell you I'd say, hey, curly brace, indent one,
and closed curly brace, the indent one level, but scheme, scheme looks a bit different to most
languages, you know, and how does, how does it work? I think there might be more rules than this,
but, you know, that you can see some of the examples of how indentation is supposed to work.
Here I've got a procedure, and I've got one argument, and I could actually have more in the first line,
and if I hit enter it will line it up perfectly, but if I actually just put the procedure call,
and then hit enter, it will line it up with the procedure call, and then this is the one that I
would not have known if I hadn't tested it in EMAX, you'll put an open parentheses in your press
enter, and it will, it will indent one space to leave it. There's some special things that I think
of us like body, they have a body, like defy, when you're defining a procedure, or once you're
done with your bindings and the left lock or where and or unless there's a bunch of these,
and these, you indent two spaces in, and so this is not something I can just tell like VS code,
or they have like, do this. And so what did I, what was my first attempt of trying to get some
of this to work in another editor, and this is going off screen, but this is, I just used EMAX
for the indentation. And this is a save format that I set up, and it calls out to the script,
and what's in this script. Oh, it's, it's requiring the scheme age mode, it's indenting the
point, and then it's writing out to the files, so any time it hits save, well at least my PR's
aren't going to get rejected, because my, my formatting is completely wrong. But this, this is
actually not, not very good for many reasons, and not what people, we want to be recommending for
people to do. So I spent a bit more time, and it decided to try and build a plugin for VS code,
or VS codeium, the free version of this. And, you know, you can see it here, it's got syntax highlighting,
as you might expect, and actually these rainbow parentheses come out of the box with VS code.
And it, it does the indentation correctly. I, my plugin told VS code, hey, don't, don't bother
with indentation. I'll, I'll humble that, and I build an abstract syntax tree of all of the
SS expressions and their indentation levels, and then when you hit enter, it will walk back to
tree and figure out where it should indentate to. Hopefully I'll have time to demo that.
It has a few other things that E-mix didn't have, maybe you can configure it, I'm sure there's
a, a minor mode for this, but I never remember these surface, a few of them, maybe. So,
if you were on the, you know, the testing one, surface 64, but largely, I don't remember what any
of these surface are. So, these, these comments are actually not in the source code.
These are layered on top by the plugin. These don't appear in there. So, anytime you define these,
surface, you can look at your code and, and the plugin will hopefully tell you what they are.
But I also need to import these surface. So, it has this helpful surface picker as well. I can
search, like, oh, I want the context bound one or whatever. And, and it will hopefully find
the right one and can hit enter and it'll just put the import demo time. Let's see whether I can do this.
So, I feel like demoing this is a little untyclimactic to, to E-mix users, because this will just
look like how it should work. But, um, if we think about this, I've got, uh, use modules, and I can
show the surface picker, and maybe want the, uh, cond expand, it's difficult to do and looking at
screen, like, do that right? Oh, it's just off the screen, because it's so big. Um, I think it's
like, on the X-Fat. Okay, uh, and I can, I can do this, you know, let binding. Um, I should just look
up, you know, I can't wait, it's not mirrored. Um, and you can see, I'm hitting, I'm hitting enter,
and it's indenting to the correct spot, um, and I can hit enter there, and it will indent to
the correct spot here, too. Um, and, you know, I'm, uh, I'm, uh, sprightly developed, so I'm going to
write a, uh, actor here. Uh, you can, you can, you can see, uh, I can, you know, you get the
gist here, um, uh, I can't do this on the stage, but you can, you can see it's, it's indenting
things to the, to the correct level, and we've got all the syntax highlighting, and this actually
turns out to be a pretty, pretty, uh, needs, um, development environments, this huge, so, uh,
I don't know if I can make this small, smaller, so it's slightly easier to see. Um, this is huge,
but, uh, you know, like, it's, it's, like, highlighting everything and, um, handling all the indentation,
and I've used this for over a year to write scheme code professionally, um, it seems to work
pretty great, um, for, for what it can do. Um, so that was the demo that that's sort of where
I've gotten to, there are a lot of holes, though, um, first I'm going to talk about other projects,
and I think this list should be longer. I, I'm, don't know many of these. Um, the first is
VS code has this, uh, language of a protocol, and I think a lot of other editor supports, I think,
even e-max supports this, although, I don't know why you'd use this to scheme e-max. Um, I haven't,
I haven't actually got this working, uh, so I, uh, I can't really recommend it, but I do think it's
a cool project, um, and I do want to try and get this working. This, uh, supports a contextual
auto-complete for your, uh, variables and procedures, and we'll give you documentation, and lots of
the cool stuff that, you know, you might know if you use company or, uh, guys, uh, the guys are, uh,
with the buffer and things. There are other VS code plugins, and I, I tried most of these before
embarking on writing my own. Uh, most of these are just a syntax highlighting. Um, I did see an under
you troopers talk, someone was using vim to write scheme. Uh, and so maybe, maybe the vim tooling is
better. I used to be a vim user, but I haven't tested it. Um, someone on the sprite before him said
they use the rainbow, delimitors, plug-in for vim, maybe there are some others. Uh, and like I said,
I suspect this slide is missing a lot of cool projects. So if you know of them, uh, come tell me,
I'm interested. Um, this is actually not related to scheme per se, but, um, I wanted to give
it a shout out because it's such a cool project. Um, if anyone's familiar with market or I think it's
pronounced magic for, um, e-max, this is a direct clone that works surprisingly well in VS code. Um,
so, uh, that's something I found along the way, and I thought I would shout out because, um, it's
very cool project. Um, so my plug-in solves the indentation, and we have this syntax highlighting
but my plug-in brought that to. Um, I don't think I'm really the right person to implement
paraded or smart friends because I don't use them in e-max myself. Um, um, and we don't have
a ripple integration, but I actually think this is more doable. Um, it just needs a bit more time.
Dave has been working on a huge ripple that you can connect over via a web socket, so I think that's,
um, I actually don't think that would be too much work to integrate with this plug-in. Um, and the
the documentation situation outside of e-max is, um, I would say pretty poor, um, I was meaning
to move this slide so I'm going to come back to it. Um, so talk about the documentation a little
more. This is, this is racket, which, another scheme, and I would say that it does this, I,
I really like racket documentation. I think it, they, they do this really well. Uh, and so this is
me searching for the string equals question mark, um, plug-in, and it has a search box on all
manuals on the sidebar, uh, and then this is the search results. You can see, um, I can, I can find it
in a bunch of modules, um, and when I jump to where I get the definition and then, uh, a bit longer
and some examples, uh, really great. And I think this is maybe being a little harsh to the
guy old manual, um, but usually when I try and use this in a web browser, I just open it and I know
there is a procedure, uh, a page with a little procedures on in an index, but I typically will just
control F and try and find what I'm looking for and hope that it is an in lots of examples throughout
the manual. Um, and this, this web, um, UI that the, the info manuals generate, the web, um,
is really not so great. And I think this is one place where we could get a lot of mileage,
Gile has a module for pausing these, uh, info manual stuff and so we could, we could use Gile
and just build a much better web UI with search, uh, and everything like that. Um, I think we could do
a lot here. I, I don't think we should go away from the info manual system. It would create an
e-max, uh, and it could work great on the web. We just need to put a bit more tool, uh, resources
and tooling, you know, use some syntax highlighting on code examples, have a search. Um, there's a lot
we could do here. Um, and then the slide I've put out of order, I'm sorry. Um, this is, I, I think
of made things a bit better in this code, I hope you would agree. Um, there are, there are lots
of other editors out there, lots of people using other editors. And I want people to be able to come
to scheme, um, learn scheme and use the editor they want to use, and then be convinced
that the team acts as great and switch to it. But I want people to switch to e-max because it's a great
editor, not because it's the only viable path of writing scheme and the scheme programs. Um,
there are books in the VS Code plugin. I, I am a bad spirit of this project. I sort of add what I
need to get my job done. Um, and really I, uh, the motivation for this comes from one thing that's
a big good options for, um, new people to scheme. I'm, I am at my heart, an e-max user. So, um,
I, I think if people want to come and help out in my VS Code plugin, fix bugs, um, um, and
help out there. That would be amazing. Um, add the ripple integration, both for, for the
guy or VM, um, and maybe whoot, um, and help out with the documentation project. I think, uh, it
will be, it'll be great if we get to a point where we don't have to recommend e-max as the first step
of learning scheme. Um, so yep, this is just a call for help. I, I think if you're a scheme developer,
if you, like any other editor, there is a lot to do here. Um, and so yeah, I guess I finished a
little early. Um, are there any, uh, any questions?
Andy? Just, uh, what do you, um, match, kind of, is it worth okay? Is it better than parer?
With, with what's her? Yeah, my, my plugin does not handle. Oh, sorry, what do I do with the
hash call on to come and out an entire S expression? Um, my plugin does not handle that at all, and that's
actually a major source of annoyance because, um, we, we have some of those in the, um,
spritly source code, and I will happily be reading this code and then get to the common symbol and be like,
oh, that's, that's not great. Um, so, uh, I don't deal with that in short, um, and that's definitely
one of the bugs. Uh, yep. So maybe this is maybe a bit of a meta question about, uh, so you're saying,
okay, this person doesn't want to use e-mets. Um, use whatever editor you you want.
And then you have a, as it looks right now, uh, told me a period of experience, and then maybe
you think, oh, skin sucks because whatever, um, the experience is so inferior. Why? I don't just tell
them, just use the real thing. Uh, so the question is, uh, if people use some of these other
experiences and have a worse time, they might just think skin sucks. Why not just tell them to use
e-mets and have a good experience? Um, it's a great question. And I think, uh, there are, there are
two answers to this. One is, we should make e-mets easier to use. And there are lots of projects
doing this, uh, you know, do e-mets and stuff trying to give you a better e-mets that is pretty
configured, so we could recommend that. Um, but I, I think we're trying to solve that like,
I think we can give people a good experience in editors that are familiar with. And so this is one
stat, um, to make that happen. And then a call for help because I can't do this on my own. Um,
I think we can make writing skin code in other editors a good experience. Maybe, maybe not as good
as e-mets, but still a pretty reasonable experience where they can learn skin, um, write skin code
professionally, even potentially, um, and maybe then be convinced of e-mets. For what it's worth,
I don't think, um, writing and writing or the languages in a lot of other editors is as good as
writing skin and e-mets. Uh, I think we have a superior experience than a lot of other languages.
Uh, yeah. Um, I, well, does it generalize to other skins? So I saw you post-confielded like
Kyle use modules for the skin is made up of that. Yes. Um, so I, I, I, I, I, oh, sorry, uh, I'll repeat
the question. How well does the VS code plugin I wrote generalize to other schemes? Um,
it both, it will do the indentation the same and you can actually configure which of the
these like body clauses, um, it will do in the settings. Um, but I wrote the, this, the syntax highlighting
and a lot of this with Gile in mind and I called the plugin, Gile scheme and then happens, I think.
Um, and so really, it's aimed at Gile scheme. I think rocket scheme has some of the options here,
other schemes. Um, I, I think another thing is that we could split the indentation part of this
plugin out and then we could have that generally for other schemes and lists. Um, and if you're
interested in doing that, I would happily accept a pull request and we can have two plugins, one for
syntax highlighting and one for the indentation and the auto complete there, um, isn't very good.
I think we need LSP or something like that and then you can get great contextual, aware, auto
plate complete. Uh, yes. So true related questions. Sorry. Happy play with the VS code debugger at
API. And the second one would be, do you also have a scheme development? Do you think the
progress are useful or do you use in your databases compared to their reboot? This is something
that you'll always hope in it. Um, so the question is, have I played with the VS code
debugger API and how much do I use the boogas as a scheme developer? I have not played with it much.
I think I read the docs a little bit for VS code plugins. Um, and I don't really use the boogas
in scheme. I used to for C++ and some other languages. Um, I lean heavily on the P.K.
P.K. P.K. P.K. I don't know if anyone else writes scheme in this way. So, I think the
wrap-all and P.K. can do a lot of heavy lifting. Um, so, um, if people won't debug us, they can
try and do that, but I don't think they're as necessary in scheme. Um, thank you.
Thanks for watching.