Podcast Introduction: Episode Confusion & Guest Introduction
00:00:14
Speaker
Welcome to the episode number 78. And we are back with a seven year old brother. Yeah. Yeah. Well, we're shocked.
00:00:28
Speaker
I don't know. We've got a 79 on the thing there. And I thought it was 80. And now we're going back to 78. So it's like, you know, it's all over the fucking show. Oh, fuck it. And then it's going to be three partners. It's going to be trilogy 78 79 and 80. And the next one is going to be 81. So cool. So welcome to Defin episode number 78 or 79 or 80. You know, pick your number.
00:00:58
Speaker
Yes, that's the correct number that you picked. So we're here today with, I think this is probably the peak of Defend. Maybe this is the time we are going to talk about, I hope mostly about Emacs, but we'll see. But we'll see. And we have special guests today, all the way from Brazil. And Eric, welcome to the show.
00:01:27
Speaker
Thank you. Hi, Eric. Hi, Eric. I think Ray is just checking his TikTok probably on his phone. Yeah, that sounds like kind of. That's our quest code.
00:02:00
Speaker
Right, we're gonna I'm
Live Podcasting Jokes & Eric's Proper Introduction
00:02:01
Speaker
gonna sort of put that into the mix as we go along to get a nice feel. And if you don't like it, you can fuck off. Okay. I don't like this podcast anyway. Listen to it. So it's not a problem. If you do it live, that is a problem. You know, we can we can mix it later. I don't care. Anywho, I'm gonna do it live. I'm gonna do it live to annoy you.
00:02:30
Speaker
Sure. I'm above these things now. Good. Okay. Let's do a proper invitation. So Eric, welcome to the show again. Hello, Eric. So maybe a quick, holy crap, this is so annoying. Do you even understand what they're singing?
00:02:57
Speaker
Well, but you can tell us, you know? Yeah. I think it's joyful stuff for me. It's get on a dance floor. That's what it is. Okay. I bet I'm closer anyway to that, to the, to the truth. And you are in, in what way? Well, I bet it's closer to get up and dance rather than fuck off Ray.
00:03:19
Speaker
Oh, yeah, yeah, yeah. Well, I'm an interpretation, you know, it can be interpreted in whatever the way interpretive dance is already. So imagine we're sitting on a booth and there is something playing and then there's like get up and dance basically means you know, Ray, you get the fuck off, you know. Anyway, anyway, yeah. So Eric, the LSP man,
00:03:48
Speaker
So maybe, you know, a quick intro in the order, maybe a quick, you know, what do you do? How did you end up in the enclosure world? And what are you doing right now?
Eric's Developer Journey: From Java to Clojure & Emacs
00:04:01
Speaker
And what are your hopes and aspirations and how you are changing the world with LSP and LSD or LSP or LSP, I think.
00:04:11
Speaker
Fuckin' hell. Yeah. Sure, sure. Let's go. Anyway, go ahead. So I'm a software developer at NewBank. I started working there back in 2019.
00:04:33
Speaker
I never saw Closure at that time. I was a Java developer, so I came for a different, let's say, a different ID world, so I was using Eclipseing at that time.
00:04:52
Speaker
And then when I started working at New Bank, I found that a lot of people were using Emacs. I also never heard about it. So it was a lot of... This is fucking loud. Why? I've got to ruin the Emacs part of the show.
00:05:12
Speaker
You can't. I think this is the thing. For 40 years, people kept trying to do this, and they couldn't. So it's like, you know, kind of, okay, yeah, fuck, I'm gonna try, and then, no, no, no, it seems like they're gonna outflip you anyway. So you can do an outflip view. Yes, exactly. I've got to find somewhere to fight back, you know.
00:05:44
Speaker
Yeah, so I started working with some people that were using Emacs, that were using Emacs, and I gave a try and started using DuoMX, and then I'm in love since then, so...
00:06:10
Speaker
do you realize that you're just a carnival of music whenever there is emacs yeah it's carnival event it's just it's just it's just having exact opposite effect of what you're trying to do well i'll keep doing it we'll see
00:06:26
Speaker
So you're in UMAX now. You're a lover of UMAX. Yeah. I actually, there were a lot of new things to me. Like I started using a new operational system. Since then I'm using Nix OS, which is a functional operation system. Really cool. And
00:06:49
Speaker
I then found the LSP thing. So I started to search about what is LSP and contributing to LSP mode and talking with the people from there. And it was really cool.
00:07:08
Speaker
And I found a lot of things to improve on the MX community. And then I found Closure LSP, which was already an existing project. The maintainer actually was not working hard on it. He didn't have the time for working on Closure LSP.
00:07:34
Speaker
And then I started to fixing issues, improving some other features. And I think late 2020, he agreed to pass the project to another organization so I could work fully on that. And that's it.
00:07:57
Speaker
But before LSP thing, I'm wondering,
Challenges & Benefits of Learning Clojure and Emacs
00:08:01
Speaker
so if you were a Java developer before, so I'm assuming you're doing back-end Java or Spring or whatever that kids do these days. It's been a long time since I touched Java. So I'm assuming Spring Boot or whatever the crap that Java people are using these days. And so how was the shift for you? How did you learn Clojure? Was it on the job? I know NewBank basically has every developer working.
00:08:27
Speaker
in the entire Latin America, whoever says closure, they're basically in Lou Bank now. How was the transition for you? How did you learn closure stuff and how do you feel about, compared to your Java experience? Actually, I say it, I never thought closure before. Wait, so why? Because it's closure, it's a carnival experience.
00:08:55
Speaker
Okay, I have I have a button here to mute race. So don't worry. So I found close actually I heard about closure. And some one year, I think before I joined the bank, and I started to study and show it to my co workers.
00:09:20
Speaker
my Java coworkers, and they just say that this is really crazy. It doesn't make sense at all. But I was really liking that new link. There were some people
00:09:39
Speaker
new bank was becoming a huge company at that time. And so I had some friends, I have some friends that joined this company. And I just and some months later, I think the opportunity to came to me to join your bank and hold your closure. And this was a big step to me. But I give a try. And I think I
00:10:09
Speaker
I made the correct choice. So when I started working with Clojure at the bank, it was really different to me. The functional thing, it's really different from the oriented object. So I think it was not a fast change to me, but
00:10:40
Speaker
After some months, I was doing well, I think. Quick question on that. You know, when going back to your old colleagues, your previous colleagues, who were kind of thinking it was crazy, the closure, was it mostly like a syntax objection or was it something else?
00:10:59
Speaker
I think the syntax, actually. Actually, we were working with Spring and Spring Web Flux, which kind of introduced some functional things to Java. Not really functional, but it was a start. But we can say Closure is really, really truly functional. So it was a lot different from Java.
00:11:27
Speaker
Yeah i think it's both syntax and semantics right i mean if you but i think in java it's been a long time since i wrote java i think that there is a bit of no lambdas and all that stuff coming in.
00:11:38
Speaker
I think a few years ago. So there is still streams and there is map and reduce sort of things there in Java now. So if you consider that as functional programming, because functional programming is like, you know, true Scotsman source of shit, like everybody says whatever they're doing is functional, then what someone else is doing. Yeah, actually, we are using
Understanding LSP: Origins, Functionality & Impact
00:12:01
Speaker
a lot of strings from Java 8. So there are a lot of
00:12:09
Speaker
kind of functional things, but the people from there did not understand it easily, that string swing. So they just thought that closure would be the same, but we know that closure has just functions, just easier functions than those string things. So yeah, it's different. I think also the wording, the phrasing around like,
00:12:38
Speaker
The phrasing around this Java side of things is always a little bit slightly off in my opinion, you know, like calling it streams and all these, all the terms that they use are hiding their true nature. Maybe that's their, like their marketing, you know, is there trying to kind of hide what they're doing or it's not an FP language or it's not an FP, a functional system.
00:13:02
Speaker
So they're just trying to kind of, you know, if you, if you, if you use those kinds of marketing phrases as it were, then people, it might, functional stuff might seep into their brain by accident, but most likely it won't. It will just be resisted. I think, I don't know. I wonder how it's working from what you're saying. That's, that's correct. Yeah.
00:13:25
Speaker
Yeah, we all know that under those strings things there, there is nothing about immutability. It's all about immutability. Yeah. So it new bank then, because usually when I hear people coming to closure,
00:13:42
Speaker
I think in the, I don't know, 10 years ago or five years ago, everybody was like, Oh, you know, learn Emacs and then get into closure. And because it's lispy thing. And, but that, that, that's kind of difficult for beginners because you are learning new editor and new, everything new and new libraries and new build tools and new, you know, new way of thinking and new syntax and all that shit. So how, how did you cope up with it? Like how, how does new bank.
00:14:09
Speaker
Introduce maybe how did you cope with it? And then how do you introduce this to new people who are coming? From if they never use like command line if they never used to know I know everybody uses IntelliJ or maybe back in the day eclipse them You that's what you think is the development enrollment is and then yeah, you are thrown at the deep end So how was your journey? Yeah, when people join a bank they they actually have a huge onboarding about
00:14:39
Speaker
more or less three weeks. So it's a big onboarding, teaching a lot of new bank things. And one of the things they teach is how to use Closure and work with the services and et cetera. So they don't say use this editor or use this tool. So there is this onboarding for new Closure people.
00:15:07
Speaker
and they don't force you an editor on you. That's annoying when the people are telling you to use it. So, actually, most of the browser developers there recommend using CurseV. So, NewBank has CurseV license because it's just set up and that's it. You don't need to do anything more. But I hope this will change soon.
00:15:32
Speaker
Yeah. At least back on the time, back on the time I joined the vein, things changed a lot because in my opinion, it's just easier now to set up a max with LSP things than before. So there are other editors like Culver, which is for VS Code, which is using Culver LSP as well. It's just easier.
Static vs Runtime Analysis with LSP & REPL
00:16:01
Speaker
I think if you start, I actually recommend it if you start using Closure right now. I suggest you use alpha because it's just easy to set up and you don't need any cursive license anything like that. And you have all the features that LSP provides. So I think back in that time, there was nothing like that.
00:16:29
Speaker
Well, I think I would just, uh, in, in defense of, uh, of cursive, I think if you're an intelligent user, uh, then the move to become a closure user using cursive is really smooth, you know, cause you've got all of the kind of, uh, affordances that you have with intelligent, which isn't an awesome, which is definitely an awesome editor if you're a sort of Java or a Python programmer. So, I mean, you know, I think you're right that it's good that you have kind of like
00:16:58
Speaker
Good options in terms of like, the amount of static analysis stuff that you can get through LSP, you know, the right it is now, but I just, I think, you know, cursive is still a very, very polished, uh,
00:17:12
Speaker
CurseMe is awesome. Actually, it's an awesome tool, but I agree with you. If you came from Java, for example, you probably were using Eclipse or IntelliJ, so it will be just easy for you to use CurseMe.
00:17:31
Speaker
Yeah, I think so. You don't need to learn new stuff, you know, just to be productive, like opening a project and all this kind of things. There is a new developer that joined my team recently that he was a Java developer and was using IntelliJ before.
00:17:47
Speaker
And he started using Kursumi for one, two months. And then he asked it to me, how can I use Emacs? Then I asked it to him, why you want to change now? And they say, after I saw you use Emacs and all the key shortcuts.
00:18:06
Speaker
and you can buy to use it's just faster i don't want to use the mouse anymore it seems a good editor so that's the. Those are these are the cases i see people changing so they.
00:18:22
Speaker
It's not that you can't have all of this with Kerosby, but I don't know. I just think they see that I actually never saw anyone using Kerosby that doesn't need to use mouse or anything like that. Yeah. That efficiently.
00:18:43
Speaker
Yeah, it's weird actually because I mean, like you said, there's a ton of keyboard shortcuts in IntelliJ. And I don't think there's any shame in using the mouse, is there? No. I don't know. I just feel it's faster. I'm not sure. Probably some preference of mine, but not sure.
00:19:10
Speaker
I think it's certainly faster. There is no question about it because I remember. I think that's debatable.
00:19:17
Speaker
No. I mean, if you have 4k display and then you have this high resolution and you're, you need to put, so when I have to use my mouse, my mouse has this maximum acceleration. Even then it's fucking weird because if you want to switch between different things and of course I use IntelliJ, I use IntelliJ a lot, you know, for Python coding and all that crap. Um, also sometimes column and there are some shortcuts that I'm used to, but I'm not as productive as in the max people who are way more productive, but
00:19:44
Speaker
But I totally see the point that when somebody is using it, it's like, I remember seeing it first time when, who was it called? Was it Monty or the guy who made MySQL back in the day?
Eric's Open Source Journey & LSP Contributions
00:20:01
Speaker
In 2005, there was this Linux Asia conference and then I was just sitting with him and then he's just opening his tiny laptop with this terminal thing and then,
00:20:11
Speaker
just doing shit left and right in Emacs. I'm like, what kind of God mode power is this? Because I mean, at that time I was just using Linux on the servers a little bit, you know, it was back in that had five days. And this really is a full on Emacs podcast now, isn't it? I mean, we're getting to the origin story of your. It's not it's not Emacs because I've seen people using VM at that level as well. It's not there. There are a couple of editors that are
00:20:40
Speaker
People bend it to their will and then it's extremely productive. You can see how quick they are with everything. That's the whole point. The tool shouldn't be blocking your speed. Like, oh, where the fuck is this in some sort of a menu? And then I can't redefine that to do what I want to.
00:20:59
Speaker
That is the biggest thing, I think. It's funny to me because I often think that the editor is the second most important thing. I think if the language is sufficiently powerful and sufficiently expressive, then that's where you're going to get the wins rather than the keyboard mechanism. Yeah, but the language is runtime, right? How quickly you can express your idea is basically your editor. And that's where you're trying to tell the editor. And that's the reason why. I mean, you can imagine if people were using Java and then
00:21:27
Speaker
not intelligent you can see their productivity go down like hell because you know all the static things and all the fancy shit that intelligent provides like boilerplate and all this stuff which is that there is kind of a.
00:21:43
Speaker
synergy between the language and the editor. I think for me, for lisp it feels emacs is more synergetic. And I've seen people writing C and whim like, like, like super lightning fast levels. So yeah, I never had a never had an idea. That's actually something I
00:22:03
Speaker
Before using Max, I was using Eclipse for Java. And Eclipse already had this kind of shortcuts. So I remember that I just didn't need the mouse for using code actions and organizing porgings and things like that. So I was already feeling that I would need to have another editor that would have the same things soon.
00:22:30
Speaker
Yeah. Makes sense. Yeah. Yeah. But so let's, let's talk a little bit about LSP because, you know, what is LSP and how it is the great equalizer among the, among the editors these days. So maybe give us some idea. Can we just go back for one, for one second before we get into LSP per se.
00:22:49
Speaker
No backing up it's like you know you you sort of it was quite amazing to me your little story you know you learn closure then you learn lsp and you start contributing to it so is this like your first like open source like project over you and open source contributed before i mean how did you get into all that stuff because,
00:23:06
Speaker
that already seemed like quite a big, you know, quite like, yeah, like, yeah, quickly, you know, as the kids say, it was not the first open source project, I was I worked, but I think I had some spring thing open source project. But it was the first that I worked with more people and
00:23:31
Speaker
way famous product. So I started probably started with an LSP mode. And then I started with closure SP and another one that I'm a maintainer that is LSP Dart, which is for flutter and things like that. So and then I was just in love with the open source thing. And I
00:23:57
Speaker
I was just helping another project, other projects and
LSP Challenges with ClojureScript & Adoption at NewBank
00:24:01
Speaker
working on new things. But yeah, Closure helped a lot with this. So yeah, so I think it's a good idea to explain to people who are not aware of what LSP is. So what does it do? And then where is all this Emacs stuff coming in? And then how it can be used in Closure. So the whole story.
00:24:22
Speaker
We can drop the Emacs thing. We've had enough Emacs already. Actually, LSP has nothing related with Emacs. And so LSP stands for Language Server Protocol, which was just a protocol created by Microsoft back in 2015, I think, when they were creating the BS code.
00:24:50
Speaker
They just found the same issues they had with new languages and a new editor where you need to implement support for all languages. You need to do the same thing other editors did when they created.
00:25:13
Speaker
found this way to create a standard, a protocol where new editors and new languages could follow the same pattern, the same standards.
00:25:25
Speaker
it would make it easy to create a new language and offer the same features and same tools other languages already have. So the LSP provides a huge specification, a huge web page saying what clients and servers should do. So what clients you can think as the editor itself.
00:25:52
Speaker
And the server is just a problem that runs that the client, the editor, is paused. So it's just a problem that runs on your machine.
00:26:04
Speaker
And so, for example, a client for LSP would be Emacs, would be VS Code, would be IntelliJ, et cetera. And for the server, it's the, for example, Closure LSP. And this, I think this is working really well because new languages are
00:26:30
Speaker
embedding the server, the LFP servers inside the language itself. So, for example, the Dart language from Google, which Flutter use.
00:26:46
Speaker
It has the Dart SDK that has the analysis server. You don't need any other program to use the LSP. You already have the Dart SDK, so this is really, really cool.
00:27:02
Speaker
So how is the closure LSP thing working? So how does it work? Or do you use end REPL? Or so how does it fit into the rest of the ecosystem? I remember that when I joined NewBank, everybody was saying to me, just use the REPL, use the REPL and you have
00:27:20
Speaker
everything you need. And I say, but I don't have, for example, LinkedIn stuff. I don't have code navigation without my repo. And I
00:27:35
Speaker
Then I start searching about this LSP thing. It turns out that the closure speed doesn't rely on the REPL. You don't need anything because it's all about static stuff. So I separate these two things in static analysis that is related with LSP.
Technical Challenges & Future Goals for LSP
00:28:01
Speaker
And you can say the REPL is related with runtime things.
00:28:05
Speaker
So if you need to evaluate something, run a test or anything that you need to have a runtime thing, you need the REPL. This is completely true, enclosure. But if you need code navigation, refactoring, information in your editor, UI things, everything is related with static things. It's about the LSP.
00:28:34
Speaker
So just to understand that a bit better then. So with the existing Emacs tooling, I think they normally use the REPL as a way to analyze your code. So is that something that's different between the LSP approach to
00:28:55
Speaker
like closure cordon the max versus like the approach that we've had. I think the raffle thing for a max specifically is too good. We have the cider cider in the raffle and things like that and they just found some ways to make stack and.
00:29:17
Speaker
features that you have on statkey analyze like LSP available via the repo as well. So if you have the cider running in your project, we will have called the navigation as well. You have refactor from, uh, surgery refactor and things like that. Uh,
00:29:37
Speaker
But I don't think this is bad. This is just something good. You can use this as well. But you don't need a REPL to have these things as well. So if you have LSP, you don't need to start your REPL and scan all the REPL, or Jackine, or load your file to have these features as well.
00:30:05
Speaker
You can use both, but that is this trade-off. Isn't it then you're having two processes running? Because I think LSP does... Please correct me if I'm wrong. Most probably I'm wrong. It's going to generate an index of all the things and then it needs to start and then keep it there. I remember Projectile also does something like that.
00:30:32
Speaker
So, if I'm using LSP in foreclosure, for example, regardless of what editor I'm using, then I end up having two different server processes running. There is a LSP process and there is a REPL process I connect to.
00:30:46
Speaker
Sorry, isn't it going to be heavy or is there a way to use one process to do everything? No, actually, there is no way to use, for example, wrapper inside LSP. They are two different things.
00:31:04
Speaker
The LSP, the closure LSP, it scans all the class path, the whole project. For the first time, you start in your project and then it caches this analysis. So the next startup is really fast. So it will just need to analyze your project if you change any of the paintings or things like that.
00:31:32
Speaker
And we are always trying to improve the performance. So it's compiled with draw VM for faster start up and performance and things like that. But yeah, you need to process actually running the wrapper one and the cool recipe. But at least for me, I can say. If I don't, I don't need to evaluate to something, for example, I just browsing with some project or an
Supporting LSP Development & Podcast Wrap-Up
00:32:01
Speaker
making different things, I don't need to jacking with the REPL. It's just faster to use LSP navigation and refactor quickly. So, yeah.
00:32:15
Speaker
So when you're using EMACS then, I'm asking these questions, I don't really know the answer, but I know there's a general ecosystem around cider and orchard and these kinds of things from having Bojada on the
00:32:31
Speaker
on the various conferences and also on his podcast. I'm always interested in what he says. But are you talking about you have a kind of different mode then? So you have a REPL, but that REPL is just like an N REPL, but it's not doing any of this analysis in the background. Whereas so you have the LSP server in the background checking your files and
00:32:56
Speaker
making sure that index of the static analysis stuff is up to date so you are you max more does it work is receiving all of this instrumentation from the lsp. You can think this. This could be good or bad because all the time scanning and re analyzing and indexing your files but this is good for a better user experience.
00:33:25
Speaker
experience, I think, because who never had the issue, which you just forgot to evaluate something you changed on other namespace, and you need to reload everything, or just go back there, or for some cases where the cache doesn't help, you need to restart your repl. So this is something I think
00:33:48
Speaker
The LSP helps with the user experience, but yeah. And so for static analysis, do you use any of these, um, uh, Mihiel Borkin's tools like CLJ Kondo or something like that behind the scenes? Because I know, I mean, he's just putting out shit like, you know, crazy and then like with speed of light and different types of tools and everything. When I started working the project, ClozrSP has had the, it's all
00:34:17
Speaker
its own way of analyzing the code. We had a lot of issues because we are just implementing all the analysis stuff by ourselves. So it was not easy to work on Cloraspi at that time. But then we started using CLJ-condo for the analysis stuff, which is an awesome library for bot code.
00:34:47
Speaker
It's working really, really well because it's a mature library that has this analysis stuff, which makes just easier for Clue recipe analyze, get this analysis and just query and use what we need.
00:35:05
Speaker
So we at ClosureSP at the moment realized a lot on CRJ condo analysis with things to be working really, really well. Nice. And so how is the ClosureScript support for LSP? Because it's always been, or at least that's what I hear from people who are starting in Closure and also a couple of teams that I work with.
00:35:28
Speaker
the Clue script thing is always tricky thing to get. I can say it works as well as Closure, but I can say it has a lot of, most of the things work good. Actually, there are features that, for example, you don't have a course with that. You can navigate through
00:35:51
Speaker
for example, reframe events, reframe subscribers via the keywords thing. So this is something people really like. You can see, for example, reframe events, code laces, references, and things like that.
00:36:12
Speaker
Those kind of things work really good Probably there is some bug or another with closure CLJC files which has all those weird things but I think they they work well. Yeah, they read the macros read the macros
00:36:33
Speaker
But they work good. Yeah. Okay. And how many people are at New Bank are using? Yeah, this is something I always have. I want to know, but it's not easy, because there are more than 1000 developers there. Yeah, there's actually more than 1000 developers there. So it's not easy. Yeah, doubled.
00:37:02
Speaker
I think there are probably more intelligent and cursive users than Emacs, but if you count, if you say, if you think that ClosureSP is not about Emacs, it's about a VI, it's about Calva, VS Code. You probably have a lot of users. Yeah.
00:37:25
Speaker
I actually have some ideas in mind about writing some kind of playbooks and things for new engineers at New Bank that they will have this choice about reading what every teacher has and then wisely choose. So in the onboarding program, there is going to be, oh, this is how you configure WIM, this is how you configure CURSIV, this is how you configure UMAX.
00:37:53
Speaker
but you know we all know you should use emacs anywhere so there is no point in reading other shit so read this part. I think that is that is a really a big win using
00:38:18
Speaker
ClioSP slash CLJColon that is you can have a configuration, a common configuration in some place, right? So here at New Bank, we have this common library that we have all the ClioSP configuration, all the CLJ configuration about macros and everything. And if you are a ClioSP user, don't mind what editor you are using, but you are using ClioSP,
00:38:45
Speaker
you have all the macros linked correctly, formatted correctly. This is really, really cool because I already saw a lot of times, because the developers need to right-click there and choose link to this as this, like that, and you don't have a common way to compare that.
00:39:11
Speaker
I think the Sergik-Kondo configuration, KondoSP configuration helps a lot with that. Yeah, yeah. I think that's one of the big differences. I mean, you know, I would like to have Colin come on here and talk a bit about cursive, like one of these days. Because I think that's one of the big differences that we're seeing is this like, you know, he's a one man team. And you can't take contributions so easily, I think, because it's a closed source environment. Whereas I think with Clojure LSP,
00:39:41
Speaker
Once you've got the kind of basics of these macro things working, you can just, you can, you know, you can ask Miquel Bochen to do the rest of them for you. Two hours later, he's got the rest of all closure macros, you know, or whatever. But, you know, I'm joking aside, you know, you've got more people that can like, you know, join the macro army and, you know,
00:40:03
Speaker
Yeah, essentially do that do that kind of like last mile work you know that kind of like i can say that. I'm working to help a lot with the closure of integration so all the time we chat about issues and how we can improve the help integration or fix your equal to things and so i have part issue or he say to me you need to fix that and then i.
00:40:31
Speaker
can open up for a quest on CRJ code. So I think it works really well. So this is something that open search community helps a lot as well. Yeah. Yeah. So if I understand correctly, Karsiv, well, obviously Karsiv started way before all this stuff started, right? Or at least it was available way before all this stuff was there. So Karsiv doesn't use LSP yet for static analysis. I think it used custom code probably, right?
00:40:59
Speaker
No, the idea of cursive is that it uses the indexing that's available in IntelliJ. Oh, in IntelliJ. Yeah, yeah, yeah, yeah. That's the... MPS or something. Yeah, that's actually... Okay, cool. Yeah. I think that makes more sense because... You can think that that makes sense because your cursive has a lot of things that it would be probably hard to add to cuRSP. For example,
00:41:26
Speaker
Java analysis. Since Cursively has this index thing, so it already has the Java stuff things, so it plays really well. We are thinking, I'm talking with Barkdoot about adding Java analysis to 30 Condos, so this would work too, but you can say, yeah.
00:41:53
Speaker
Doesn't LSP support Java? No, I think there is one, probably. It supports, but not as good as curse. For example, you can find the definition of Java stuff, but unless you are using any REPL or something like that, but from LSP itself at the moment, we don't support that.
00:42:15
Speaker
No, I was just thinking because LSP has support for many languages, you know, that I, but I'm guessing it's a lot of the Microsoft languages. So she sharp and F sharp, which are not very strongly integrated. I think that the JavaScript has LSP as well, but I think that the challenge here is that intelligent maybe I'm just speculating here is that has a common, you know, definition for all the language support. Yeah.
00:42:40
Speaker
And then here, you're in the closure LSP world, and then you're opening Java code, then now you're in the Java LSP world, and those two are not actually talking to each other probably. Exactly. You can think that IntaJ has everything built-in, and it works. For example, you have this
00:43:02
Speaker
Closure file, and then you open a Java file, you will use the LSP Java for that. But the issue is, how can you find the definition of this and then go to the Java thing? Exactly, go to that one. This is the issue there. But it should be the same when you're dealing with Closure Script and JavaScript libraries, right? Yeah, it's the same, probably the same. Okay.
00:43:29
Speaker
Yeah. Anyway, but yeah, I think it's, at least if you're doing, you know, single, monogamous programming, that is a thing. I don't think anybody is monogamous anymore, but I mean, programming ways, obviously, because you have to write JavaScript, you have to write HTML and writing CSS. So all those are languages anyway. So yeah. And then you have some hacky build scripts somewhere in bash. So there's like,
00:43:59
Speaker
a million different languages that you're using. But if your primary language is Clojure, then Clojure LSP makes sense. But the very moment you have this polyglot code base or Clojure script and then you have Clojure and all that stuff. So that would be a bit tricky. I thought you were just wondering. Not for a second there. Not for a second. The rest of the two hours is going to be just me rambling. You're just losing it. Do you have a point?
00:44:29
Speaker
So I had a question there that is it the same closure LSP that is going to support both closure script and closure or is it something doing do we have like closure script LSP and closure LSP? No it's the exactly same project and I think most
00:44:49
Speaker
The hard work happens on CLJCon side, so CLJ Condo analysis support both ClosureScript and Closure, so this makes ClosureSP support both as well. What I was going to ask you actually was, what is the sort of scope of LSP? You know, because LSP is made for like a lot of languages, but what
00:45:13
Speaker
What is it? What is it? Because we're looking at like it from a from the closure perspective and edit this perspective. But what what is it from that perspective? What what is like the goal of LSP from Microsoft perspective? Like what is the scope of it? You know, what is it? What is it trying to start? I think the main features for us be with Microsoft tries to standardize. It's the. Code and navigation and probably the code factors so.
00:45:43
Speaker
Closure, you have to add your requirements and then parts and other languages. You have the same like Java and things like that. You have find definition, you have find your reference. You could have, for example, at ClosureSP, we have the Caulieric, which is a feature, for example, that you don't
00:46:00
Speaker
have accuracy, but all these things work. Closure is a different language, but it has all the features that other languages, it could have all the features that other languages have. So code navigation is probably the most common thing.
00:46:18
Speaker
And in terms of the protocol support, because I do use Closure LSP, I do use Rust LSP as well, and a few other languages every time, because there is an LSP mod, so if there is a hook, then it's going to use it anyway, if I open it on Python LSP and everything. So from Closure point of view,
00:46:38
Speaker
how much of the protocol is implemented? Because sometimes, I think in the beginning, I keep seeing like, oh, this method is not implemented for this language. So how much of it is relevant to closure and how much is already implemented and how much are? When I started working the project, probably 50% was implemented. And in my opinion, last time I checked, 18%
00:47:07
Speaker
are 90% was done. So it's a really big thing. But there are things that doesn't make sense for closure, I think, at least for most features, like finding implementation of a folkshow, this probably only makes things for dev-mochi, dev-matics, things like that.
00:47:29
Speaker
But most of the protocol makes sense, which makes me think that the protocol is awesome. Okay. And is it something like a quote unquote certification, like, you know, compatibility kit or something? So, hey, you know, we are we are like 90% of LSP is supported here, because I can imagine it's a community thing, but
00:47:51
Speaker
How do you check if I'm writing it for a new language? So how do you confirm that, okay, this is an invisible state? I don't think that is something of a magic, but to use SP, you need to think that there are some features that you really need to implement. Otherwise,
00:48:12
Speaker
it won't probably work or the clients would accept it. So that's it. Find the definition, find the reference. Those are things that are really mandatory. But most of the language servers I found have this page saying all the capabilities that it has, CodeSP has its own page as well. So it says,
00:48:38
Speaker
Oh, we have call hierarchy, we have find definition, find happiness, call the lanes, call the action and things like that. So, yeah. Yeah. Okay. That's nice. Ray, we can't hear you. Oh, no. I was also muting there.
00:49:05
Speaker
I was just in fact, I think it was lost. So just in the background, what's your name? I'm like, so much. But you know, we'll turn the sound back on now. I'll, I'll, I'll show. Uh, but no, I was going to say that there are things like, um, things like the, uh, we were talking earlier on about like that, um, are in the cider kind of world, things like, um, code completion and stuff like that. Um,
00:49:31
Speaker
Is that the kind of thing that you offer as well? So all of this kind of stuff? Yeah, we have code completion. It's an LSP feature. It's actually one of the features that are probably one of the most important when we talk about LSP.
00:49:49
Speaker
There was a lot of issues on completion with Cloraspy when I started working on it. I think it's really, really better now. I was actually working on an issue about this right before I joined the podcast. Well, tell us what it is. We want the scoop, you know?
00:50:10
Speaker
We're always looking for the hot off the press news. Yeah, code completion, it makes really sense for LSP. Because I think it's always a tricky one. It's always a tricky one, code completion, because you have like this, it's almost like I almost feel like it's one of these things where
00:50:33
Speaker
You know, it's kind of like you need a bit of AI almost to make it really, really make, I think this is one of the, I mean, you know, I'm kind of like skeptical and AI generally, but I think this is kind of like area where it feels like it could be applied, you know?
00:50:48
Speaker
Because when you're typing stuff, it kind of like, well, is it related to the thing that you were just using? Is it related to the thing that's most proximal to where you are in the file or in the, in the namespace or what, you know, cause you're often fine with code completion. It ends up putting like all kinds of weird shit into the code completion, you know, that, you know, like all weird stuff from like Java or something or, uh, or things that, you know, that are way outside of your like project, uh, namespace.
00:51:17
Speaker
So I don't know, maybe I'm just kind of projecting here, but you know, what, what's your experience of code completion? I think it's one of the most, probably one of the most hard, the code of the ClorSP.
00:51:33
Speaker
It's not easy because you need to know all the context that you are typing at the moment. So if you are inside a function, you need to provide all the locals that are inside this function following this order. You need also to provide all the things that user can complete with the prefix thing that he typed.
00:51:57
Speaker
So you need to provide other things like ClosureCore, all the ClosureCore definitions and functions and variables that it has and things like that. For example, if the user is typing an alias that is not required when he selects this, we also required this. So it's a really cool feature. So there are a lot of cornet cases that we need to
00:52:27
Speaker
We need to take care, but it's working really well, I think.
00:52:32
Speaker
I think that's one of those, it's definitely an interesting sign, I think, when you feel like your code completion is guessing correctly, you know, it feels good. Yeah, it feels really good. But hey, we don't need code completion anymore because we have this AI copilot thingy, so it's gonna, you just type A and then it's gonna fill in the whole 2,000 line code. I wish that as a code completion for me to the whole last bit for me. Yeah, exactly.
00:53:01
Speaker
You just start typing code length and then it's just going to fill in everything for you. Just implement it as if it's the same for JavaScript. The other thing that they kind of have there in this LSP is things like formatting. Now, this seems to me that formatting is something which is very, I would say, very personal. It's not easy to
00:53:31
Speaker
and create some kind of standards. Yeah, that's everyone like everyone like. I mean, have you tried to do your this new bank, for instance, have a like a formatting standard or, you know, is that something you can like, put rules in your editor to kind of like, get agreement on?
00:53:49
Speaker
Because I know that I mean, cursive has rules for alignment and indentation. We try to follow the closure style guide, which is really good. It's not the entire truth like they say on the guide, but it's really, really good.
00:54:06
Speaker
Coolness be used under the hood CLJ FMT, which is, which is also a library file for reformative, which makes you a configuring the way you want to format your code. Coolness be has this feature that you can provide the configuration for the format. So at
00:54:31
Speaker
At New Bank, we have that library, I said before, that is the code style library. And we have all the formatting, CRJ Affirmative formatting configuration. So if you are using Clorasp, you are following the same standards and the same configuration for formatting your code, which is really really cool. Yeah, okay. So that makes PRs a bit more straightforward. Actually, that is
00:54:57
Speaker
I'm guessing there must be a prick on my toe. That is this new feature of ChloraSP that was added recently. That is the ChloraSP API, which is a huge feature supported by ChloraSP together, which adds a new way to use ChloraSP that is you don't need your editor anymore. So it's just tries to offer some features for ChloraSP
00:55:27
Speaker
via an API or a CLI.
00:55:32
Speaker
So you could, for example, have Cloraspy running in your CI. So you can say, Cloraspy, you can just run Cloraspy, link, sorry, Cloraspy, diagnostics, and which will bring all the Cloraspy diagnostics, like CLJ Condo does. You can run Cloraspy format, and it will use the format feature for your project.
00:55:58
Speaker
or clean namespace to clean your whole namespace. So we are using this feature on our CI. So it's another really big thing because, for example, if Ray is coding on Kerosby and is not actually following the same rules we use with Kerosby, we will get you on the CI theme.
00:56:26
Speaker
That is, that is my way to run. So it's a really, really good. All right. I'm sure it's going to be, it's going to be fun.
00:56:41
Speaker
Somebody is going to push to the CI build, and then they just use the refactor command, and then just say, refactor all these function names to bullshit, and then that's it. He just commit, and all the function names are refactored. It offers some and not all the features and factors. I think only the rename the refactor we have, but the major features like diagnostic is formatting and cleaning stuff, it's available. Yeah.
00:57:12
Speaker
So, so is that, you know, you were talking right at the beginning about how you're looking at performance and stuff. You have that command line stuff. Is that done with the growl VM as well? So it's kind of like snappy to start and get the output. Since culture is something that runs on the user machine. And before growl VM, we had this bad startup about the JVM is starting. Uh, so some seconds are lost because of that, but.
00:57:42
Speaker
After using Grow VM, we completely fixed that and we had some memory and CPU improvements regarding the analysis stuff. So it was a really big thing and it's worked really good. Yeah.
00:58:00
Speaker
Yeah. And you can use it on, cause you can use it on the command line now with growl VM as well. So you can, it was just all this kind of stuff just happened super quick. So you don't have to, uh, like be scared. Yeah. The growl VM thing was from something before the close API, but yeah, it, it's something that really helps because you can just type close speed for much, and it will start right away.
00:58:25
Speaker
So I have one question about the closure side of it. So is there something that you thought like, wow, this could be a really nice feature for closure programmers, but LSP doesn't support it. So you are limited by the protocol too. Because we keep talking about, OK, this is protocol is implemented 80%. That means there is like 10% of it is probably irrelevant to closure. But there must be something that is relevant to closure. But the protocol cannot support that one.
00:58:55
Speaker
That's something really cool about the protocol because you can kind of create extra methods. So you doesn't need to. Yeah, exactly.
00:59:10
Speaker
some extra methods. One of them is the Hizov macro method. So Ray probably knows that Chris B has this feature where you can right click on a macro and choose to Hizov this macro as that then or something like that.
00:59:28
Speaker
So this was something I was really missing from Cloraspy and I created this Astra method for resolving the macros. So Cloraspy has this and probably it doesn't make sense for our language, but it makes sense for Clorian. Other languages, yeah. What about things like protocols and multi-methods and
00:59:53
Speaker
def types and stuff. I'd say def types is pretty, pretty simple because that's just basically. Yeah. It's actually follow kind of the same pattern of the other things because you have this from, from CRJ Cogo analysis eyes. It's just another thing that defines, for example, a bar definition. So if you have a def record, something you will have something as a bar definition. So you could,
01:00:22
Speaker
use something and find definition and find reference of this. So we have to handle some corner cases like when you have something, you have something, tried something, mapped something. So we have to handle this corner case, but follows the same thing.
01:00:44
Speaker
But if, for instance, if you have a multi-method, if you have a death method, a death multi, and then you have, can you find all the death methods for a death multi? When you find the heifers of the methods, you have all the heifers and all the calls for
01:01:00
Speaker
We could probably add support for the finding implementation to find all of the references about this, that matter specifically. It sounds like we could improve, but yeah. Nice. So speaking of improvements, what are your next plans? I mean, is it something like, because I'm assuming at some point it'll be like a done deal, right? The project will be
01:01:24
Speaker
stable and you implemented all the protocol as much as you can into that is relevant to closure, added all the things that are closure specific things as well. So where is it right now and what is your goal for the future? Let's say next three months or something.
01:01:41
Speaker
I think probably I will add some new refactors. So something I have in mind is the support for adding any of the payments for your project or that's like we have for CRJ refactor. So we will have this for LSP as well.
01:02:03
Speaker
I would like to see a Java integration thing with SOJ condo, but this will probably be harder, but it would be really cool. Probably add more refactors, I think.
01:02:26
Speaker
and add support for new things on the protocol because actually each year or two years, the protocol bumps and we have new features. There's a new version that comes in. A new feature that we will have on the protocol, next protocol version, it's the inlay hints. For example, if you use Rust, you have these that add those overlays that show
01:02:54
Speaker
and besides the params and things like that. I'm not sure this will be useful for closure, but it's something that we can think about it. Yeah, I think that's it. Not sure. We had some
01:03:12
Speaker
some features that are not entirely related with the protocol. For example, last version, last release, we had the closure docs integration. So if you hover a single, you have all the docs about the closure docs. So this is something specifically for closure that doesn't follow the protocol itself, but really makes sense for closure.
01:03:38
Speaker
But you'd have to use a mouse to do that, so I guess that never happens. No, you don't have to. Actually, you can use both for remix.
01:03:57
Speaker
Oh, wow. We're reaching almost one hour. So I think my final question is, how can people support you right now, apart from opening issues and sending PRs? So is there something like, are you part of Closure Collective or open-sourcing GitHub sponsors? So how can people support LSP initiative? Because I think this is a very critical piece in Closure ecosystem right now. I think that
01:04:26
Speaker
We have the open collective and the GitHub sponsor space, so supporting as we are supporting the project via this will help a lot. We supporting via issues and who requests also helps a lot. So this would help a lot.
01:04:45
Speaker
I have this Patreon page, so if you really like my work on, not on Cloraspy, but on LSPdart and other open source projects, you can support me on Patreon.
01:04:58
Speaker
And that's it. Yeah. We'll post a link there certainly. And I'm thinking like if NewBank or slash, you know, AKA Cognitekt is supporting GitHub sponsors and then they're sponsoring you, then they're essentially like giving you a salary via two more steps. So it's like, yeah, it's more like, you know, just one step removed from directly giving you a salary. Like, okay, we're going to sponsor on GitHub.
01:05:29
Speaker
But yeah, I think it is certainly, as I said, it is the great equalizer for all the editors which are inferior to Emacs, basically, to bring the same level as the Emacs level of refactoring and all the crap into other editors. But it is certainly, I think it's a really nice thing. I see it in other languages as well, especially with Rust and Python and
01:05:54
Speaker
and JavaScript code that I hack sometimes occasionally to realize Closure is better. Every now and then, you need to do some other shit to realize what you have is way better than other things. Yeah, I think the... But it's... Yeah, the housekeeping is something that is becoming a huge thing.
01:06:14
Speaker
at tooling and things like that, because today we already have LSP for almost all language. I think for example, you have for bash, you have, you have for even market out. And so, so we have this feature that enhances our experience. So
01:06:34
Speaker
It's working really well. I'm going to look for if there is a LSP for Brainfuck. If it is not there, it needs to be there. So Eric, apart from LSP, you say you do some other open source projects. So what kind of, are there other things that you want to talk about as well as LSP today? Or, you know, should we just, should I just play the carnival music again?
01:07:04
Speaker
Yeah, that's a no. Yeah, I have some few projects like
01:07:19
Speaker
I actually really like the LSP thing, so I work on other LSP projects. So I'm the creator of the LSP Dart, which is the LSP client for Emacs. And it's something really cool and really different from Clojure because you have this mobile thing. So you can just use the LSP for debugging and spawning
01:07:49
Speaker
your mobile application or the Dart thing. So it's something really cool. But I'm also the maintainer of LSP mode for Emacs. And yeah, overall, our LSP projects that are LSP centric. Cool. Yeah, that's really good. Yeah. Awesome.
01:08:15
Speaker
On that note, Eric, I really appreciate all the hard work you're doing. And I think I pretty much see you in spirit every time I'm opening a closure project because I see the progress bar and then there is LSB more initializing and that is happening. So I know if it is taking forever, then I know who to blame. But for all the fancy features that is making Emacs experience way, way better and also other editors' experiences, obviously,
01:08:45
Speaker
Which I don't use but I think it's a it's a it's a phenomenal project and also the way that that it is coming to different languages is Is really awesome and especially people like you making you know Dumb focus like me, you know, like feel way smarter than than we are Otherwise, you know, just printing printing it out and then just refactoring with my pen and then my life would be pretty bad Without this one
01:09:12
Speaker
But yeah, I think it's amazing. And thanks a lot for all the work that you're doing. And I hope NewBank continues to support you on this open source stuff as well and the community as well. We'll post all the links to your Patreon as well as GitHub sponsorship and open collective in the description, in the show notes. And yeah, I think just make NewBank an Emacs company. Yeah, that's my... Let's continue. That's my objective.
01:09:42
Speaker
Yeah, thank you. That was in developers, you know, that'd be amazing. Thank you for the opportunity. This, this podcast is really good. I think this is something that brings the closure community together. So you are doing awesome work. Thank you very much for the opportunity.
01:10:04
Speaker
Yeah, yeah. We are like the peak of Closure Podcastory. It's a really funny podcast. Thank you. I think that's it. Oh, fuck. There it is.
01:10:24
Speaker
It's just called innovation, you know? It's called innovation. You were dreaming with Carnival songs today. I don't know. It's a bit random thought, but all my life I've wanted to go to Brazil to the Carnival. No being there yet. So, you know, I would love to do that. Are you a big, I guess,
01:10:47
Speaker
Next year, with all the COVID being over in the commerce, Carnival is going to be big next year, I suppose. Yeah. Yeah. It will be huge. Are you a fan of the Carnival, by the way, or is it sort of, you know, something? I like the future. It's really something important for the Brazilian folks. It's really good. Yeah, excellent. Yeah. It's a beautiful, you know, that keeps Brazil strong.
01:11:15
Speaker
that so hopefully we'll uh you know we'll we'll meet you uh in real life soon uh yes yeah we should go to deaf and brazil tour when we get if you want to support our brazil tour go to our patreon so we can take a yacht from
01:11:39
Speaker
you know atlantic sea all the way to to pacific uh i think we should go around you know we yeah okay that makes sense so yeah i think i think if if we get the yacht with with the patreon money i'm gonna put all the patreon names on the yachts uh whatever what what what does the yacht has i don't know site i don't know i think i think with the patreon money we'll get a kayak so
01:12:06
Speaker
both of us. Anywho. It would be a long road to Brazil. Totally. I think we'll be right in time for the carnival if we start now. On that happy note, yeah, I think everybody who is listening, I hope everybody is safe. I think the
01:12:25
Speaker
pandemic seems to be never ending thing and it becoming endemic now hopefully so stay safe and we'll keep making more episodes soon and that is the end of episode number 78 79 and 80 I suppose so yeah see you in the next episode which is gonna be 2001
01:12:44
Speaker
We need a CLJ Condor and LSP to link our numbering, you know. Expected 78, but got 79, you know. We need that fan podcast LSP. Yeah, exactly. Yeah, yeah. Or at least the diagnostic thing that is going to reject the publication of the new episode. Cool. All right. Thank you. Thank you. Thank you guys. Have a great day.
01:13:13
Speaker
Thank you for listening to this episode of DeafN and the awesome vegetarian music on the track is Melon Hamburger by Pizzeri and the show's audio is mixed by Wouter Dullert. I'm pretty sure I butchered his name. Maybe you should insert your own name here Dullert.
01:13:31
Speaker
If you'd like to support us, please do check out our Patreon page and you can show your appreciation to all the hard work or the lack of hard work that we're doing. And you can also catch up with either Ray with me for some unexplainable reason you won't interact with us. Then do check us out on Slack, Closureion Slack or Closureverse or on Zulep or just at us at Deafened Podcast on Twitter.
01:13:59
Speaker
Enjoy your day and see you in the next episode.
01:14:37
Speaker
Anywho, I think I should stop nibbling on these nuts.