Become a Creator today!Start creating today - Share your story with the world!
Start for free
00:00:00
00:00:01
#54 with Peter Strömberg, Master Calva Distiller image

#54 with Peter Strömberg, Master Calva Distiller

defn
Avatar
57 Plays6 years ago
We talk to master Calva distiller Peter, and talk about how he has been building "best Clojure experience for VS Code users" If you are a VSCode user - checkout Calva https://github.com/BetterThanTomorrow/calva To sponsor all the amazing work Peter has been doing goto : https://github.com/sponsors/PEZ
Transcript

Opening Banter and Episode Introduction

00:00:14
Speaker
Welcome to Deaf and episode number 50... I think I fucked up last night. 54. 54, 53, 50 something. Somewhere around. A bit like me and Peter, 50 something. Welcome to 50 somethings of Deaf and...
00:00:37
Speaker
I'll soon join your ranks. So let's get started.

Guest Introduction: Peter Stromberg

00:00:42
Speaker
My name is Vijay and this is, I'm from Holland. Why am I introducing myself again? Okay. I don't know. I don't know either. So let's welcome our guest first. Peter, welcome to episode number 50 something. Oh, thank you. I'm thrilled to be here. Yeah. For the people who don't know, please introduce yourself.
00:01:05
Speaker
Maybe you should give him his full name at least, Vijay. That's true. Peter Stromberg. Is it Stromberg or Stromberg? It's Stromberg in Swedish. I'm not going to have you say it. But Stromberg is what is usually pronounced in English. Yeah, so I'm Peter Stromberg.
00:01:30
Speaker
I don't know what I should say by myself. I'm a father of five. Holy hell. What are you doing here?

Family Life and Parenthood Insights

00:01:42
Speaker
This is his escape.
00:01:48
Speaker
My, my, my, my, my. Are you a Catholic, Peter? Is that what's going on there? Yeah, no, I'm not a Catholic. I do like kids, but it's not a religious thing. Okay. Catholic priests really love kids. Sorry, that's a bit of... I think it's Catholic. It doesn't really matter if you like kids, right? I think it happens.
00:02:15
Speaker
This is really a 50-something podcast. All people complaining about kids. I'm not complaining. But yeah, so you asked me to introduce myself. Yes, please. Go ahead. Yeah, so what do you want to know? A father of districts before we go on there. A father of five. It requires a little bit of, you know, that's amazing. So how old are your kids now, Peter?
00:02:44
Speaker
So they range from 6 to 19. All right, OK. They're well spaced out. Yeah. I can recommend that. It gets less crazy than if you have like, what will it be? Twin twins or something. Yeah, so.
00:03:05
Speaker
So it's quite amazing actually, the help you get from the elder ones. And the way the younger ones look up to the elder ones. So it's quite amazing actually. Yeah, you must have a pretty busy house. Yeah, it's full of fun. Yeah, fantastic. All the time.
00:03:30
Speaker
Right. Cool. Like the VGS says, this is a bit of a skirt for you. Yeah. It's like Sunday evening. Okay. Everybody quiet down. No, I have a podcast.
00:03:42
Speaker
But what do you do during the day, Peter, apart from, of course, managing all the kids and all the stuff?

Innovative Housing Solutions in Sweden

00:03:50
Speaker
Yeah, so during like, professionally, I work at a small startup. We're trying to create
00:04:02
Speaker
We're trying to actually solve part of the housing problem for young people in Swedish urban areas. So we have created this new kind of loan. Because in Sweden, the problem for buying your first apartment
00:04:30
Speaker
It's like defined by regulations. So even if you have the salary and stuff like that, so you could actually go to the bank and get the loan, the mortgage, then it's still you need to have 15% yourself.
00:04:51
Speaker
Oh, so you need more down payment for down payment needs to be 15% or rather it is like you can only have a mortgage mortgage for 85%. Okay, so and with the level of of
00:05:11
Speaker
The price for housing in Sweden, especially in the urban areas, is really, really high. So then 15% gets a lot of money. So even if you're good at saving, and I've been doing it for a while, it takes a long time to actually save up the full 15%. And while you're doing that, the house prices are rising. So it's a chase. So we're trying to help with a new kind of
00:05:41
Speaker
I don't for for these for a part of these fifteen percent that what that should leave you with cash flow and stuff like that and also like have less. Less said risks and like traditional.
00:06:01
Speaker
Banks all alone. So it's not a technology startup then, it's more like a financial startup. It's FinTech. I thought that was all the Finland people, but boom! Oh wait, now you shouldn't see it. It was a slow joke.
00:06:28
Speaker
Yeah, it's a 50-year-old block joke. It takes a while. Yeah, exactly. The younger people to catch up. Yeah, so we've been being at it for quite a while. And so when we started this, it was like,
00:06:51
Speaker
2015, I think. Four years almost. But then there came a storm of regulation. So it took us a very long time to get the permits and licenses we need to operate.
00:07:11
Speaker
So yeah, so it's not yet launched actually in Sweden, but we hope to do that like the start of next year. Then finally we get to help these young people, we hope.
00:07:26
Speaker
That's pretty nice because my sister lives in Stockholm and they have young kids, pretty young, six years or something, six years and four years. So I think by the time they grow up, I think they'll be one of your customers probably. Yeah, maybe then we have launched.
00:07:46
Speaker
Yeah, so you're in beta right now, like Google beta. Yeah, something like that. But yeah, we're really hoping to be able to launch this at the start of next year.
00:07:58
Speaker
So is it one of these things where you've got some bank that's funding the development, Peter, or is it some kind of venture capital, or are you self-funding it, or how is that all working? Yeah, so it started out with self-funding. So I'm not one of the founders. I've been with it from the start, but I was not one of the founders in that way. But it's self-funded to begin with.
00:08:29
Speaker
then it has been very ad hoc, finding people who are willing to fund. Because the idea, which I can't spell out here, but it's on a level that when people hear about it, they are just like, this is brilliant, this is excellent, I want to be in. So we have had
00:08:56
Speaker
So even without having any customers for a very long time, people are still eager to be in on this.
00:09:08
Speaker
bank in as one of the major financials of the thing. And then it's like private persons, mostly. But it's actually what got me into this whole closure thing.

Journey into Clojure and Development of Kalva

00:09:29
Speaker
Since it was like a little greenfield project.
00:09:35
Speaker
And to begin with, it was like the major part of the idea was crowd, crowd landing. Right. That's gone, that's gone from, from the solution now, but it was like that in the start. So, and then there were no like ready-made platforms actually we could use. So we built our own and the, the guys
00:10:01
Speaker
that knew anything about tech in our company, they said, we should do this with Closure. That's the first time I have heard of Closure.
00:10:19
Speaker
So it all started there. And we also choose ClosureScript for the front end. And we have Datomic also as the database. So it's very cognitively. You're living the dream. That was fun. It's really fun.
00:10:39
Speaker
But before starting with the startup, what were you doing? Before this one, what was your tech stack or were you technology person before? So it has been on and off for me. But right before this, I wasn't really a tech person. I was a product owner at Spotify. So if you have used Spotify Connect,
00:11:07
Speaker
So I was one in the team that brought us. I was the product owner of that product to begin with. And I saw it enter the market and people could buy the first pair of speakers with this. Then I found this startup and switched gears.
00:11:33
Speaker
And also at this company, my main task is not technology. It's more like a product owner role I have. But it is a startup, and you do a bit of everything. So I've been doing a lot of front-end stuff, so foreclosure script for me.
00:11:59
Speaker
That's interesting. And where are you based in Sweden? Which city? Stockholm. Oh, Stockholm. Maybe next time I'm in Stockholm, I'll stalk you. Yeah, you should. You should. Oh my god, you've got to get a drum beat for that man.
00:12:15
Speaker
Oh shit. Okay. Next time I'm in stock, I'm going to stock you. Oh man. Probably people, people don't know that we got new tools now. The dog's going to start barking any minute.
00:12:32
Speaker
I think, I think our listening graph is going to be like, I think it's the, we, we get onto the nice slope now. Can I, can I just say by the way, to everyone listening that it's VJ's response before these sound effects, by the way. So I'm just completely disowning. So, um, right.
00:13:02
Speaker
He'll get fed up with them eventually and then we can go back to sanity. Sorry, Peter. You're in the middle of this experiment. This is like the craziest startup of all deafening. I have listened to deafen a lot. This is a new level of craziness, though.
00:13:29
Speaker
Yeah, yeah, at least Sanity's not. Well, we have 50-something now, so who cares? The next level. So, Peter, so obviously, I think you said that, unfortunately, you heard a couple of episodes of Def Hymn. I usually ask people, E-Max or some other shit, and this episode is going to be some other shit, pretty much, I think. Yeah. Can I tell you my editor joke first, though?
00:14:03
Speaker
Yeah, so my mum went to a 100th birthday party while I was there last week, and it was for a friend, Violet, okay? And one of her sons stood up and made a speech and said, you know, everyone, you know, it's my mother here, Violet, congratulations on her 100th birthday. And to all of her friends, they all know her as Vi. But we the family who really know her very well, we all call her Vi.
00:14:24
Speaker
Yes, I'm ready with the drums.
00:14:33
Speaker
Sorry. Okay. So, um, I think, I think we need some visual clues, like a plot or something called audience. So they know when the joke ends. Yeah. But you can, you can run a joke if you're like on a birthday party for someone called Ed. It's varieties.
00:15:00
Speaker
I just love the fact that people get so fussy about the fact that it's ED or something. When I used to work for Ingress and got to California and some people really got snooty about that. It was hilarious.
00:15:18
Speaker
Yeah, I think we in computing, we have to pick our fights properly. So yeah, I mean, really, it's of course, emac, because because emacs has the best of both worlds, isn't it? It's both a max and emacs. Exactly. You know, it's kind of like it's a mixture, a mixture of like, a continuous word and two words. So they're definitely, you know, they're, they're playing all ends there. Yeah.
00:15:41
Speaker
Yeah, of course. I mean, it's the best editor and best everything. So getting back to some other shit. So for the younger hipster people like Peter, who are into VS Code stuff. So Peter, I think one of the nicest projects that you're working on and leading pretty much is Kalva, right? Yes. Can you give us some intro about the project and then
00:16:06
Speaker
Why did you choose some random editor than Emacs? Yeah. So, yeah. So actually, you've got to justify yourself Peter against, you know, cause obviously I'm ready. I'm ready. I'm ready. So, so my colleagues that, that brought in closure, they also were like Emacs people. And so we were doing mob programming.
00:16:36
Speaker
And so I used Emacs quite a bit there in the beginning. But then I know for reasons we stopped doing so much of mobile programming. And do you know what mobile programming is, by the way? Is this familiar to you?
00:16:57
Speaker
Yeah, but I think it's worth explaining, yeah. Yeah, so it's like, so everyone in the squad or whatever you call your group are like programmed with the same screen and the same keyboard. So you have one, you can probably do it in different ways, but we are like one driver at a time and the rest of the team was like helping out with
00:17:23
Speaker
with thinking. And so I think it's very good for spreading knowledge and for starting up, exploring new fields, and building out new parts of your tech stack and stuff. But it's excellent. I think I use a less violent term like, I don't know, dojo or something, coding dojo. So you keep rotating the person who is typing
00:17:52
Speaker
And is it something similar to that one? I'm not familiar with coding Dojo. Maybe it's the thing. But this is like a term. I don't remember who minted it, but it's like you can look at mobprogramming.org and you see it's a whole philosophy behind it.
00:18:12
Speaker
But anyway, for reasons that I don't really recall, we fell out of this programming mode. And so when I was doing Closure Script programming mostly, then
00:18:29
Speaker
And I tried to use emacs and I kind of like it. But it was very new to me, everything. And I had decided that I shouldn't run it in the evil mode because I really wanted no emacs to learn that.
00:18:46
Speaker
But it was like my computer, my product owner computer, was not made for development at all. So it really had a hard time coping with Emacs. And then I was some kind of
00:19:04
Speaker
workshop or something like that. Someone was showing some Rx stuff in JavaScript, and he was using this new fancy thing that was called VS Code. It looks really good, so I downloaded that and used that for that workshop. And I started to like it, so that's how it happened. Really, I could start like
00:19:30
Speaker
several VS Code sessions on my machine, it wouldn't like complain at all. So then I started to use that also for foreclosure. So that's how it happened.
00:19:44
Speaker
I mean, VS Code is really, really awesome in so many ways. I can just hear Vijay sort of cracking his knuckles. Let's get ready. Putting the pins into the voodoo doll that he's got a view. If you feel a shot, a pin in the arm, you know what it is.
00:20:06
Speaker
Yeah, but, you know, emacs has a lot going for it, but it's not like really easy to for like, like I said, I'm 50 plus years, so it's just starting to try to learn that it was a bit of a struggle. And I had like every time tried to figure things out, but these code were more much more like everything else I used. So it was, I had never had to learn it.
00:20:32
Speaker
So it has that going for it, I think. All the jokes aside, I think VS Code is... I think when GitHub announced Atom, I think that was the fundamental shift because people could customize it using JavaScript and JavaScript being practically everywhere and everybody started using JavaScript. But then I think VS Code became
00:20:57
Speaker
because I try every editor just to make fun of it. So I think VS Code is really, really fast compared to Atom and other incarnations of that Chrome-based thingy, web-based stuff. Because even Adobe had one thing at some point, their own editor, based on Atom and VS Code, I think for now, it's super fast. And I agree with you, Peter, because the people that I work with
00:21:25
Speaker
For example, data scientists and a couple of other folks who are not really like coding friendly, I usually introduce them to VS Code. So especially Python support and all this stuff is pretty good. Because otherwise they need to relearn all the weird, sorry. Yeah. Oh, I said, I've also heard that the Python support should be like something extra on VS Code. I haven't been doing Python for very long.
00:21:49
Speaker
Yeah, it's pretty good. It's pretty good as well. I think that's the nice part that people who are just starting, they don't need to unlearn what they know on Windows, for example. They know all the shortcuts and all this stuff. So that's slightly easy. And also, if you're coming from Visual Studio Code, then usually you're OK with Alt, K, C, 9, 7, 2, and then somehow that shortcut is OK. So it stands for Visual Studio. I thought it stood for Oz versus Code. I don't think it was like.
00:22:20
Speaker
No, actually it's spelled out. I think that's a visual studio code joke. That's why it's slow. It's people versus code. I've got a Microsoft joke if you want that one as well, but we'll save that till later.
00:22:44
Speaker
Yes. But when you, Peter, when you started using Visual Studio Code, there is no closure support for that one at all? Yes, it was actually when you like in Visual Studio Code, it's very much like it's, I think it's very atom inspired as an editor. So you have this like,
00:23:08
Speaker
extension pane that you can look at and you can search for extension. I think they call packages in Atom, but we just call these extensions. And then, so you can just open it and type closure and it will show you everything closure related. And it was quite a lot, even then, it was quite a lot of stuff for
00:23:33
Speaker
or Closure, but I was really new to Closure, Closure Script and the whole everything, and of course also to VS Code. So I really couldn't tell one of them from what they saw.
00:23:48
Speaker
could say like it's had a ripple didn't make all that much sense to me and maybe maybe one was a linter on something else and so it was a bit hard to to see what should I use what one of this stuff is actually still working with a lot of things like gets thrown out there and people less abandon it
00:24:14
Speaker
So I found this excellent extension was called Closure. It's made by Andre Lison, I think. And it's still there. It's still working. It's not one of the abandoned ones. So it helped me with the Closure code, but I was mostly doing ClosureScript. I couldn't really get it to help me with ClosureScript.
00:24:41
Speaker
So then there was one other extension that was called Visual Closure. And that one worked for ClosureScript at the start, and then it stopped working. I don't know what changed. Probably something in the, in lining in or whatever, something changed and it stopped working. And there was no way the creator of that extension
00:25:06
Speaker
This last thing was hard for me. I was like, I haven't abandoned this. But it was abandoned. So what I did was I forked that one or made an art fork of

Challenges and Perseverance in Software Development

00:25:23
Speaker
it. Because I've tried to send some PRs first. And then I forked it. So I created Calva, which is the extension that I
00:25:35
Speaker
maintain from this visual closure and that's the start of it and I did it for my own need and then published it on the marketplace and pretty quickly people started to use it and everything like just
00:25:59
Speaker
It was kind of, I wasn't expecting it to happen that fast. So it was like people were like really starved for something like that on the Visual Studio Code. So then I remember this like feeling of using something that felt abandoned and said, okay, so that shouldn't happen with this one. So that was my first,
00:26:26
Speaker
like approach to it. I tried to maintain this and like show people that I'm there and trying to solve stuff that they have problems with, even if I was very new to everything and really didn't know what I was doing all the time. So it was like frustrating at the start, but I was like this, my
00:26:55
Speaker
determination was, okay, at least I should be there and people should know that I'm trying here. And that was actually one of the cool things with this closure extension that I mentioned from Andrew Leeson. It was like his tagline was, believe me, I'm trying. I've kind of like followed that path.
00:27:16
Speaker
So, yeah. So where did the name come from? Kalban. So it was like, since I've been using CIDR together with the Emacs guys, I was like very inspired by CIDR. And I also quickly found out that the stuff I was building on was CIDR stuff. It was like the end ripple and stuff like that came from the CIDR project.
00:27:47
Speaker
So, and Kalvai's short for Kalvados. So in Kalvados, you distill from cider. That's the name. So Kalvai's distill from cider. Also in this closure world. So obviously you're not that far from IMAX. No, no, no. I'm a big cider fan. Yeah, I think also the way that, you know, Boji there are
00:28:15
Speaker
runs the project into like a community involvement and everything that's that's also really nice. It's so inspiring. It's not just a it's not just a chord. Yeah. No. Well, I think actually didn't he make didn't Bojada make the he made Orchard, which was a non-EMAC specific set of extensions for the for the raffle and all these various other completions and all these other bits and pieces.
00:28:40
Speaker
So the idea is that many editors and many ripples can get the benefit of the side of underpinnings. Yes, exactly. And they do. I mean, it's like they're in fireplace and I think even cursive is using it. And yeah, so it's lots of projects benefiting from that. So yeah, and this orchard project, it's a bit confusing because the orchard is both,
00:29:10
Speaker
this project that tries to do this and make this tooling for editors. But it's also a small library. But if we talk about the auction, the project, that's exactly how it is. That's what Siddharth wanted. And it really has that function.
00:29:34
Speaker
Yeah, but it is a pretty impressive feat, Peter, from not knowing the language and then going into an editor that's obviously some other shit and then trying to build the whole tooling yourself. So how difficult was it? Because I can imagine the extension is mostly built in JavaScript or something.
00:29:59
Speaker
Yeah, so it was like JavaScript to start with. And then I made some attempts to port it to ClosureScript. Yeah, I was curious. And actually, there was nothing special that stopped that, apart from me realizing that I would be doing that instead of maintaining Calv as such. So it was still part of
00:30:28
Speaker
parts of Kalway's written enclosure script. We can talk more about that later, but if we go back to the start of things...
00:30:36
Speaker
I was looking at Closureverse the other day and looking for something. And I found this post from me where I sort of announce Calva. And it ends with this caveat that, OK, so just so you know, I don't know what I'm doing. And remember, I was in that.
00:31:05
Speaker
felt like that for a very long time. And of course, I still feel like that in a way, but like on a new level. So it was really hard in the beginning, just understanding what people were
00:31:21
Speaker
asking about them, trying to frame what a request for or even a bug report could be hard for me to understand because I didn't understand that much about closure and about
00:31:39
Speaker
and rebel and then rebel is still a bit of a mystery for me I should admit but it's still like I have lots of so much more of a grip of things right now so it's it's it's much better and
00:32:00
Speaker
Yeah so it's it was so much to do so many small things i could do with that that's included so i think that from the user point of view i don't think it was that obvious.
00:32:17
Speaker
that I was struggling. It was like, from that point of view, I was there, I answered questions and I fixed things. And so I think it was not all that awful for the users. But for me, it was like, it was a bit of a hard start. But it was also very rewarding and very fun. So I shouldn't complain at all.
00:32:44
Speaker
And it was very like chosen. I have to like suit myself if I was feeling, if I wasn't satisfied with it, which I was. But anyway, it was a chosen path. So what is the story behind converting the JavaScript stuff to ClojureScript?
00:33:04
Speaker
Yeah, for the extension. Obviously, I would love Calva to be written totally in ClosureScript. Even now, today, when I work with the parts that are written in ClosureScript, it's so much
00:33:23
Speaker
more rewarding. I don't have to restart the extension to test stuff. It's everything. So it's so much better. But when I did some of these attempts to do it, it was like,
00:33:38
Speaker
Okay. So either we start from scratch and like write a new extension parallel with maintaining Calva. But I was like, so I had some help from
00:33:54
Speaker
from a Brazilian guy there a while. But then he had to do Al-Asafa and leave the project. Pedro, if you listen to this, I love you. That was great. So then there was only me, and I couldn't really finish that path. So I decided I should try to instead
00:34:18
Speaker
like, do it piece by piece. So, and I just tried to see where I should, like, put the... How should I frame it? Where I should, like, choose to be doing stuff in ClosureScript and where I should choose to do stuff in JavaScript, as it was. But then I found that, okay, so in the interface with VS Code,
00:34:44
Speaker
everything, like the API and stuff like that, with VS Code, let's try to do that, keep that in JavaScript, and then do it, if you call it old business logic, if you like, in ClosureScript. So try to do that. And I started to do that with the formatting.
00:35:07
Speaker
And that's how the formatting works today in Kawa. But then I got another guy entered the project. And right before he entered, I had ported everything to TypeScript. He said, all JavaScript stuff to TypeScript. And then when he entered the project, he started to build lots of new stuff. And he...
00:35:36
Speaker
He was a really proficient programmer in all aspects. And he knew ClosureScript and everything. But he was really proficient in TypeScript and front-end stuff in TypeScript. So he added a lot of new TypeScript to the project.
00:35:56
Speaker
And I think somewhere there I stopped trying to keep this supporting because I couldn't keep up really with it.
00:36:14
Speaker
something that I want to do, but it always competes with what else could I do. The users ask for this. And I would really like to do this feature or whatever. So I think most often I just keep doing things in the TypeScript instead. But lately, I've been more and more like,
00:36:43
Speaker
leaning towards, OK, so could do some more stuff in the ClosureScript. And so I don't know. There's a few inches. And it's still there. It's still very easy to do something in ClosureScript instead of TypeScript as Calvary's built. So if you do it in ClosureScript, you actually just
00:37:11
Speaker
Yeah, you implement the functions there and then you just decide which ones are like the API or the library.

Evolution of Kalva and Tool Integration

00:37:19
Speaker
And then you just add that to the shadow stages definition file. And then you just use them from TypeScript. So it's really just a matter of,
00:37:40
Speaker
of starting to move code there, I think. And then. How do you compare? Because you wrote a lot of TypeScript and then ClosureScript, right? So how do you compare? And also for your work, you're also writing ClosureScript there. Yeah. So what kind of differences that you find between TypeScript and ClosureScript?
00:38:06
Speaker
I still think that me as a programmer, I'm still very stuck in this old way of programming. It's very imperative. So that's easier for me. So that's one of the things that, of course, keeps this going. It's like, OK, so I know how to do it in TypeScript. But in closed script, I have to figure more stuff out and really try to
00:38:35
Speaker
get into that line of thinking. So I still think that even my ClosureScript code is a bit imperative. So that's, but I'm struggling with that and I'm getting more and more of a functional type of programmer, but it's a journey.
00:39:01
Speaker
I was going to say, do you think the fact that it's an editor, which is kind of, I guess, I mean, I don't know enough about VS Code, but normally these editors have these kind of extension points or these little hooks or these little events or whatever. Is that what it's like? I mean, how does the actual, how does the kind of
00:39:24
Speaker
What's the interface into VS Code like? Is it based around some kind of framework that gives you alerts or gives you the text that you've got to deal with and then you have to parse it somehow? What's the story there? I think it basically have two ways of doing stuff. We can either do it using this language server protocol and
00:39:53
Speaker
or you can do it client-side. Either way, you have the same interface that you're working with. I haven't been doing much of the LSP stuff, but to me, it looks really like it's the same.
00:40:14
Speaker
So I don't know if you get text. No, you don't get text. You get some kind of event. And then with that event, you get maybe the position or range or something like that. And then you ask for the text. So it has
00:40:39
Speaker
Some of the extension points is like providers. So you say like hover provider. So then if you implement your hover provider and do your stuff in the case of Calva, when it gets a hover, it goes to nripple and
00:40:57
Speaker
And I think it's the info operation and get info about that symbol they're hovering on. And then you cook up some markdown text and return that. And then that will be put in the hover. So from a user point of view,
00:41:25
Speaker
regardless of which language extension you're using, stuff behave very similarly.
00:41:34
Speaker
So Kalva isn't different from some Python extension or something else. And that's part of this. I think VJ was in there on that track there. It's like you recognize stuff. If you have learned something in one part of VS Code, then you can use it for other parts. So it's very consistent in the UI for the user.
00:42:03
Speaker
But so things like power infer and power edit and stuff like that, they're like, uh, they're just plugins that, that other people take care of him. What, what is, I'm guessing, or is Calva kind of integrating that or how, how does it, how does it fit with all the sort of other bits and pieces that you need to like format code and, you know, a slurp code and barf code and all these kinds of things? Or do you do this? Okay, no, screw it. It's power infer all the way. And we're not doing all of this slipping and barfing business.
00:42:32
Speaker
Yeah, so let's start with one of these questions you asked there. Answer them all immediately, Peter.
00:42:46
Speaker
I mean, yeah, it's like if it's like different people providing different stuff. And so there was a power edit extension when I started, when I like published Calva. And forgot his name, Dimitri, something called Yoctos, I think.
00:43:10
Speaker
So he contacted me and said, okay, it's really good that someone is taking care of the closure on this code. But we have this Power Edit extension with PRs that haven't been pulled and issues that haven't been. So he asked me, could you take care of that as well? So I did.
00:43:39
Speaker
And for a while, I just published a new extension. I don't remember. PowerEdits Revide, I call it something like that. And it just fixed Yoctos' pain points. And so I had it like that a while. And also, for the formatter when I started,
00:44:01
Speaker
Taking care of the formatting. I did that as an extension of its own. So my idea then was like, so the Calva should be more mostly the rebel part. Okay. And then that other extensive few saying like, yeah.
00:44:17
Speaker
and releases a closure extension, you should benefit from the POR edit and the formatting and other stuff as well. But after a while, it got a bit hard to keep together. And I noticed that I needed stuff that the POR edit
00:44:40
Speaker
uh, extension was doing in Calva. And so I had to like invent like an API between those and stuff like, so that I didn't have to make like a new AST, uh, you know, some other place and stuff like that. So, but after a while, I just like, fuck it, uh, your language here, right? When you're on, of course, when I'm deaf and fuck it.
00:45:09
Speaker
Anyway, I decided to source it in to Calva. Today, Calva is very much like a monolith. That's it all. As a VSCode user, you only have to install Calva.
00:45:29
Speaker
and then you should have like everything you need for for closure development so it like does like syntax highlighting for you and and formatting and power edit and the REPL and yeah you name it. So that was the case even when I was doing this in different extensions because you
00:45:57
Speaker
And then VSCO, you have this thing that's called extension pack. So Cal was an extension pack that you can just like bundle all these other stuff. But that's what I want.
00:46:11
Speaker
I don't fancy myself that part of Emacs. If I say like this, you have to like to pick everything together and configure stuff to no end. That's how it feel for me. And so I think like make something that has almost everything you need or everything you need and very few settings and
00:46:38
Speaker
Like, when you need something as a setting, I try to, of course, give it same defaults. But it should be pre-configured a lot for you. So it's a bit like the Space Max philosophy, in a way, I guess, around it. So I think that's the first question you asked there. So how is it like?
00:47:09
Speaker
is a different stuff. So it's mostly everything is done in Calva. And that's that one extension. There is one extension exception that I will come back to. But you also said like a poor infer there. And that's that's a bit painful. Because
00:47:33
Speaker
I have tried so hard to get the power in for working. And not only I, also, Sean Lebron and other guys I've tried. And VSCode really doesn't fit the power in for Bill. So this new smart mode, so VSCode doesn't have the API that can support it very well.
00:48:02
Speaker
So in Kalva, you have small parts of power infer, but they are on demand. So if you have
00:48:18
Speaker
unstructured code that is structured on the indent level. So then you can use this power infer command to heal it. So I use that a lot myself. When stuff do get unstructured, I can heal it.
00:48:37
Speaker
So that's the only power infer actually you have in Calva, unfortunately. But it's not for lack of trying. It's me and lots of other people have tried. I know that power infer has certain requirements of the editor, doesn't it, in terms of the cursor position and the ability to understand whether or not some particular keystroke is being pressed or whatever. And not every editor has all of those kind of affordances.
00:49:06
Speaker
I think it's like it needs to know what has happened. I think that's the most, that's the thing that smart mode needs. It needs to know what did just happen, not like how does the code, how does the text look now? And it looked like this before and now it looks like that. And the cursor is there. I mean, the cursor position you get
00:49:27
Speaker
But you get like, so it looked like that. And now it looks like this. And you have the cursor here. But you don't know where the cursor was before. And you don't know exactly what has changed. And powering for smart mode needs that. I think that's kind of what's missing. And I also think that when
00:49:50
Speaker
Sean was doing this. He was using Atom, which has this. So I think he was a bit surprised when he started to try to implement this in other places. He was a bit surprised to find out that Atom was a bit unique. Maybe that's why Atom is so slow.
00:50:16
Speaker
Ben, I know that Colin has got it working in IntelliJ as well. But there's a lot of work if you listen to the story about that. But I think with Par at it, you said barfing and slurping.
00:50:37
Speaker
So in Calva, I don't know if it's the Emacs CIDR standard bindings for it, but I use like control right arrow for barfing and control left arrow for slurping. That's the default key bindings in Calva. And I see people like, I just need to tell them once,
00:51:15
Speaker
Actually, that's another story. Actually, this Kelwa thing has gotten me to drink a lot less. I need, because I need my short life, my head to be sharp, even in the weekends and stuff like that. So I will keep
00:51:19
Speaker
And then they start burfing and slurping. And then it's like, okay, so no one else.
00:51:43
Speaker
doing Calva just to stay off the booze. So to do Calva, to stay away from real Calva. Yeah, in a way. Nice. So you are still working in the closures together or project mode, right? Yeah, a few days more. I think it ends Thursday or Friday or something like that.
00:52:09
Speaker
Nice, nice. So any few words on that one, how the Closest Together thing is helping you or what did you do for this one? So it's awesome. As I mentioned, I have five kids. But I didn't mention that I have a wife as well. So in a way, for them, for my family,
00:52:39
Speaker
to share me with Calva and the Closure community. It has helped a lot. I'm actually making money from this now. It has been totally awesome. I've been able to
00:52:57
Speaker
to both have my daytime job and then work with Calva every night, every weekend for three months. So it has been really, really fun and really, really helpful. And Calva has
00:53:15
Speaker
gotten so much better during this period because you can focus much more on bigger stuff than otherwise. And also, it's not only the closures together thing, even if maybe it's connected, but then I've gotten a lot of help, this period from
00:53:38
Speaker
from other people. And I think like two months ago, Christian Feisef, a German guy, joined and like officially joined the Cala team together with Kevin Steen and me. And he has been like, like, every, every like, I don't know,
00:54:06
Speaker
We have pushed out new releases of Kalva. Everyone is better than before and it's really been an awesome period. I think actually the Kalva that is now compared to the Kalva that was three months ago, which was very useful and everything like that, it's like night and day actually. It's so much better.
00:54:34
Speaker
Yeah, I think I did install Carver a long time ago, I think. I think a few days ago or maybe last month or so. And then I think there is a new release that you made, and then the old one is obsolete, so I had to replace all the stuff. And it's pretty fast moving, I would say.
00:54:55
Speaker
Yeah, so we're using that, or we would say so. We're like releasing very often. And so it's part of how Kalvai is developed. So we have this, if we're doing something bigger, some bigger change, then I start with like writing documentation for it.
00:55:24
Speaker
Yeah, so I write. So this is how the documentation would look for this feature and this change. And so then you get like, you can read that documentation, iterate on that. Because the first version of the documentation is like crap, you can't do it that way. And then you iterate on it. So this is good enough. And then we start developing on it. And while you're developing on it, of course,
00:55:53
Speaker
you've got to try this like fantasy thing. And you see, okay, so maybe that one needs to be tweaked, but very often you can find that, okay, you can follow the documentation. And then when it's like there, we...
00:56:09
Speaker
We saw in a bigger commercial project or stuff like that, you can, of course, do user tests and everything like that and make sure everything is right. But what we do is that we release it. That's our user test. So of course, we try to not release too many bugs on people.
00:56:33
Speaker
from the UX point of view, we like iterate on it that way instead. So we get feedback and then we try to be quick on fixing the stuff we get from the feedback. And then it gets a new release. So you see new release quite often. Of course, this period when I've been doing this, so focused.
00:56:56
Speaker
And also Christian has been able to pull in many hours. It has been like on a level that we can't keep up with. So it's going to slow down. But I think...
00:57:12
Speaker
It has been almost. I think once the project matures to some point, then I think once you have all the 80% of the use cases covered in terms of what you can do in the editor and then the development, I think then it kind of stabilizes, right? Yeah, probably. It doesn't need like day-to-day changes that much.
00:57:30
Speaker
Yeah. So just so that we get clear, Peter, what kind of features do you, I mean, we haven't really asked this question, but what kind of features do you have? I mean, for instance, one of the things I know that cursive doesn't have the closure script as a debugger. Is that something which you guys have in Calva?
00:57:49
Speaker
I'm sorry to say we don't have a debugger for a ClosureScript. Sorry, I didn't mean to shame you there. That was a question. No, it's not. I've been trying and it looks wild that we would get one for free because you could use the Chrome debugger in VS Code.
00:58:13
Speaker
It seems like the source maps are lacking. Something is missing in them. I could enable that debugger, but it's too erratic and works too few times, so it's not worth having there.
00:58:33
Speaker
But the Closure Script Debugger is a bit closer for us if we can just figure out what's wrong with this source map. I don't know where it needs to be fixed if it's on the Closure
00:58:50
Speaker
with this compiler level, or if it's on the ClosureScript compiler level. I don't know where it is, but something needs to be fixed there in order for these to actually be useful.

Advanced Features and Recent Updates of Calva

00:59:07
Speaker
And on the closure side, I don't know what's entailed in getting a debugger there. I know I could choose going, trying to do it on top of the Java debugger, like, of course, it does. And that path, I don't really know how to start that even, but I can also do it the same way Cider does, and that's rather
00:59:38
Speaker
Just a matter of finding the time and putting in the work with that that's not then I then then I would know how to do it it's it's a lot of work to get it done so there's no debugger.
00:59:56
Speaker
But it has, you know, like, try to see which features are there. I've mentioned that it does this formatting for you and syntax highlighting for you. And it has the REPL, of course. So it's using N REPL to connect the REPL.
01:00:21
Speaker
to your project from calva and then it's also there is very cider inspired so you have this in editor in line evaluation help so we can just put your cursor behind or before.
01:00:39
Speaker
a bracket and evaluate and it will show you the result inline in the editor. And it also has this REPL prompt. So some people like to work more at the REPL prompt. I don't know why, but some people do that so that we support that as well. And that one has gotten a lot better lately because it was very
01:01:10
Speaker
rough at the start, but I think actually with the latest release today, I think it's pretty good actually. It still has some quirks, but it's pretty good.
01:01:27
Speaker
I just have a fancy logo and everything. Some people are complaining about that. So they want to remove it. So let's see if it's not on the top priority to remove it. So when people start complaining about these things, now you know that you're popular.
01:01:45
Speaker
Yeah, but that logo is a nice story because I asked also on Closureverse. I use Closureverse for communicating about Calva, so I have chosen not to start a separate blog for it. I use Closureverse as my Calva blog. So I asked there for help.
01:02:11
Speaker
with the logo and graphics part of Calva. And this guy, eccentricj, who I don't know his real name. I really should ask him actually, but I don't know his real name, eccentricj.
01:02:27
Speaker
So he is good with graphics and design. So he worked together with me and designed this really nice Kelvin logo. So I really love it. It's supposed to depict a glass of Kelvinos. So that's the parents of the glass. You can see it. I'm really, I'm really fond of that. It's not going away from the Apple window any soon.
01:02:59
Speaker
You can add like a toggle for that one, right? If people want that kind of stuff. And that's what you see in Emacs, like a million customization options. Yeah. It could be a patron perk.
01:03:17
Speaker
You don't want to see the logo, you can pay us. But I don't know, actually, so feature wise, I think it's very
01:03:32
Speaker
It has, like you said, 80% of the use cases, I don't know, but it has the most important features. I feel like when I use it, I would love a debugger, but otherwise it's there. It has what I need, printer printing and everything.
01:03:49
Speaker
So a quick extra question then, Peter, is about like the build tools, because obviously there are, I mean, I would say probably two or three, maybe it's two and a half. Maybe it's, you know, well, it's funny, boot started off as a closed script build tool. So maybe that would be the first one. Then you have line again, and then you have depth.edan. Which it was.
01:04:18
Speaker
Yeah, so which is, you know, to be honest, I use that all the time. And I think it's I think it's turns out to be, in my opinion, the best of all of the three tools. But but I was wondering what Calva does with these tools. Does it support like creating projects with them or updating aliases or running rep holes with these? You know, how does it all work in the build tools?
01:04:40
Speaker
Yeah, so that's a really, really good question. I actually realized quite recently that cursive helps with creating projects. So I've started to think about, OK, so that would be quite neat, actually, if Kalv could do that. Because it would be easier to, because the focus, a lot of focus with Kalv is getting it easy to start.
01:05:07
Speaker
So that would really fit that story to make it easy to like create a new product. I think I would like choose, if I did that, I would probably choose to support Shadow and Debs Eden, I think, to start with, to do something like that. So it doesn't help you create the products today. It helps you
01:05:35
Speaker
start the application with everything that Calva needs to be there. So in CIDR, this is called Jacking. So it injects all the dependencies it needs. And there it supports legacy fig wheel.
01:05:57
Speaker
fig.will.main, depth.ceeden, and shadow.cjs for helping you start the project. You can connect to any REPL if you start the project yourself, so it can't really start a boot project for you. I haven't figured out how to do that.
01:06:24
Speaker
I'm not sure, actually, how many people use it. Visual Studio Code doesn't have this project notion, right? Like IntelliJ, for example, because none of the other languages that it supports has any idea of starting a project, because they have this workspace sort of thing, and that's basically a bunch of files together. Exactly. So that's how it works in Visual Studio Code. So yeah, it has this workspace thing.
01:06:52
Speaker
And a workspace can contain many folders from many places. So it has this virtual workspace as well, if you like. I usually just use it like a folder as a workspace. Yeah, I never use a workspace. I just put one folder, one window when I open Visual Studio Code.
01:07:12
Speaker
I think one of the things that every other editor fails at for me is it's not just the coding part, but it is also the whole workflow that I have in Emacs to check switch branches in Git and all that stuff. Everything is just keyboard driven.
01:07:29
Speaker
I think that is one of the things that I miss in every other editor. Of course, they're fancy or whatever, and I don't use syntax coloring anymore. It's been a long time since I used it, so I don't care what colors they have. I don't care about the themes and the shit, so I just use either black on white or white on black, and that's it. I'm done. Oh my god, that's crazy.
01:07:48
Speaker
He's a Spartan, you know? You know, you said like VS Code has extension pain, you know, an extension pain. Emacs just has pain, you know? Give me a bash on that one.
01:08:04
Speaker
But that's the thing that I realized I think six months ago or maybe one year ago or something. I tried a bunch of different types of things and I tried different fonts constantly. And then I'm like, screw this thing. I'm done. Fucking colors are annoying. And then I just removed it. And it's like suddenly there is a sense of calmness when I read the code.
01:08:24
Speaker
And especially if you're writing Clojure, you don't need that level of syntax highlighting anyway because the elements or the syntactical differences are not that many like every other language. So, you know, keywords are different and static shit is different and private is different and that kind of crap isn't there in Clojure anyway.
01:08:45
Speaker
I love my rainbow parents. It's funny actually, I'm not a fan of the rainbow friends, but I know some of the people I pair with are fans of it. It always makes my eyes go a bit, but that's the thing. They're from strokes, isn't it?
01:09:03
Speaker
Exactly, yeah. Yeah, so I have left that actually configurable in Kalwa, so you can actually go away the rainbow pattern, but you can't configure away the syntax. I think it's there. I guess you could install a theme, like a VJ theme. I think you could do that. Probably, I'm pretty sure.
01:09:28
Speaker
I think that somebody asked on Closureverse recently, what is your favorite theme or something? And then I said, I use sexy monochrome or E Ink. And they're like, what the fuck is wrong with you? Yeah, I was still thinking that. I don't know. I think it's less noisy, I would say.
01:09:51
Speaker
Yeah, so we're back to the build tools anyway, so we have all these like these things so you can do the build tools. That's kind of nice. You're working on that or is that something which you can already it does the editor recognize them at least even if you can't start a project with them, it recognize them and
01:10:08
Speaker
So Boot, it doesn't do anything with Boot. But with the other tools that we mentioned, it recognizes them and gives you menus. So when you start a project, it reads these files, and OK, so which aliases do you want to launch with, and stuff like that. So it's like a few prompts that you answer, and then you're running.
01:10:35
Speaker
And also does it take care of like refreshing the dependencies so that it can analyze them for the formatting and all this kind of stuff.
01:10:43
Speaker
And what's that? What do you do refreshing the dependencies? Well, let's say you have a dependency on, I don't know, something like, let's say JDBC or something. And maybe now you want to navigate to the JDBC code, you know, from the code that you, you're writing some code like, I don't know, get some select or result set or whatever JDBC does or not. Yeah.
01:11:07
Speaker
I've forgotten, I've forgotten more than I learned about JDBC. Let's say you make some statement, you know, query statement or whatever it is, whatever the words are, but you want to say, oh yeah, what's the parameters again? So somehow your editor needs to know what the parameters are for that, you know, initializing or passing parameters to those functions.
01:11:25
Speaker
Yeah. Yeah. So, so, um, and ripple, uh, gives you this, uh, so as long as you have like, uh, evaluated the namespace, uh, that, that is requiring JDBC in this case.
01:11:39
Speaker
It will also load that. In Kalva, you can command click if you're on a Mac. A symbol that's in JDBC, it will jump to that file and you can read that code or you can hover on it and see the documentation and the parameters it needs and stuff like that.
01:12:02
Speaker
But the refreshing part, I think that's taken care of as well. If you require something new and you just re-evaluate the NS form and then all symbols from that NS form, you can look them up and inspect them and stuff like that.
01:12:28
Speaker
But with this, I want to go back to this Jackin thing. So we have spent a lot of time on getting this as smooth as we can and also have some kind of coverage of the most common cases. So we want to make it as easy as possible to start with a closure project.
01:12:56
Speaker
But it gets a bit complicated when you add ClosureScript to it, because then you need to start a ClosureScript compiler and it needs to compile stuff and give you a REPL and you need to connect that one as well. And you need to help the user understand that he needs to start the actual application
01:13:24
Speaker
before he can expect to do any repling towards it. So I try to...
01:13:35
Speaker
really streamline that process. ClosureScript is a really important story, so we're trying to get Calva to really be helpful with ClosureScript. It also has this, like, Nasshorn support. So, for instance, I was helping out with
01:13:58
Speaker
a project called, I think it was called Parqueira. It was like a very fresh first version of this project that was announced, I don't know, a month ago or something like that. And it was like a closer language parser. So it was built on top of Instaparse.
01:14:25
Speaker
very cool project, but it was Closure only. And I didn't like that. So I decided I should make it CLJC. And then I had really good use for this Nasshorn. There was no fig wheel or shadow CLJS or anything in this project. But with Nasshorn, you can
01:14:52
Speaker
run the JavaScript stuff inside the JVM. So then I could put this project to use CLJC and I could evaluate everything against ClosureScript just to make sure it was working. So you can also use ClosureScript in a
01:15:15
Speaker
in a closer or Java-only project by just telling Calva to fire up NASA for you. So it's, yeah. When it comes to the build tools, it can help you both start your projects for you, and you can configure this. So you can like
01:15:43
Speaker
You can add the settings for it so that the start of the project is like, it asks nothing. It just starts it for you and starts up the server you're using for you and everything and front and back and everything just up and running with one keystroke. And it can also connect
01:16:04
Speaker
to running REPL that way as well with the same configurations. So it can know how it should connect to the problem. It can also connect to any REPL as long as that REPL has been started with the dependencies that Kelvin eats. So you talked about, sorry, keep on going, please. No, no, I don't know where we're going.
01:16:30
Speaker
Yeah, no, I was just going to say you were mentioning like Shadow CLGS and Fig Wheel. And obviously, Calv is built on top of Electron, built on top of Node. So Shadow CLGS gives you the ability to integrate with Node and also with running browsers and stuff like that. Sorry, Fig Wheel gives you that ability. I think Shadow CLGS has something in those areas as well.
01:16:58
Speaker
So is there, is there something, do you have some knowledge about those tools in Calvary? Or, I mean, obviously you know about them as a person, but does Calvary know about them? No, Calvary doesn't really care about those things in like, it doesn't really know about that. It's like running in this node environment in that sense. I guess I could do something interesting if I really
01:17:27
Speaker
If I thought about that for a while, it sounds like I could do some extra interesting stuff if I leverage that.
01:17:37
Speaker
because I've been wanting to support closure, evaluation, stuff like that inside markdown files and stuff like that. So that would be more like a notebook experience. So I think maybe could be used for that because then I could, yeah, that was a good,
01:18:07
Speaker
thing you mentioned that maybe I could do something in that. I'm not trying to give you work, Peter, it's okay. No, but I guess there's this one thing with a with a markdown or like any file being able to to have the closure repl behind there. Because then I don't have a project. So it but I do have
01:18:33
Speaker
I do have a node on the layer, so I should be able to do something in that area. The other thing I was going to ask you about was a friend of the show, Mikael Borkent, who has the CLJ Condor. Is that something that you're familiar with, the linter? Yeah, so until yesterday,
01:18:57
Speaker
This is hot off the presses. Yes, it is. So Kalva had support for Joker for linting, but then the user had to get Joker installed on his machine and give Kalva the path for that.
01:19:21
Speaker
Yeah, so it was like, it was not very calvish, I would say. But Borkdoot then, Michael Borkand. Yeah, so we were talking about this, we have been talking about this for
01:19:38
Speaker
for a while now, that what if we could make Cala start the linter inside the JVM for you? So then, because the problem with CLG Condo, using CLG Condo instead of Joker was that CLG Condo didn't work on Windows.
01:20:03
Speaker
So we haven't been talking about the Windows story because that has been like a pain for Cal actually. But anyway, so this crawl VM stuff.
01:20:14
Speaker
didn't build a working execution for Windows. I don't know the full story, but anyway. So I couldn't really say, okay, so we're switching to CDA Condoms instead of Joker, because that would leave my Windows user at a loss then. So we were talking about this. Okay, so maybe we can start
01:20:37
Speaker
CLJ Condo via NREPL somehow instead. So we're talking about that. But then what Mikael did instead was that he built a language server protocol extension with CLJ Condo.
01:20:58
Speaker
So we mentioned this language server protocol before, but it's very cool technology actually. So it's like implementing all these editor APIs and callbacks and events and everything like that.
01:21:20
Speaker
on this protocol level. So, the actual extension code is like, I don't know, 10, 20 lines of code. It's like saying, okay, there's my language server. And then you get everything. So, he released this. And then I could remove
01:21:44
Speaker
everything in Calva that was interpreting the Joker results and populating the problem lists and everything like that from Calva. And instead, as I mentioned before, Calva can be an extension pack. So now it's today, it's an extension pack pack in Calva and the CJ Kondo extension.
01:22:11
Speaker
And for the users, it's like install Calva, get all this other stuff we're talking about, and linting, and it's superb linting at that. So it's really good.
01:22:21
Speaker
And I get it like for free or for even more than for free. I get it's like I'm getting rid of like hundreds of lines of code. So I'm really happy. It was really cool and very, very rewarding working together with Michael on that, because he was as focused as I was on getting this user experience right. So I'm really happy.
01:22:52
Speaker
A big thank you to Michiel. Yeah, a big thank you to him. It's really good. Also, as you would talk about features and this funding period and his ending, and that we release often and everything, and stuff is hot off the presses. So let me tell you that until earlier today,
01:23:23
Speaker
Kalva, if you did something, evaluated something that wanted something from standard in, if you evaluated read line, for instance, then Kalva would look up. So it has been like that for...
01:23:37
Speaker
It's Calva, one and a half years old, something like that. It has been like that for all this time until today. So Christian has been working on that. So that was released yesterday. So now it's actually like prompting you if you need something from standard, and it works both in that, if you're evaluating the editor or if you're evaluating the repl prompt.
01:24:01
Speaker
And also until today, you haven't been able to interrupt running in relations. So if you had started something that refused to stop and started to
01:24:17
Speaker
consume your CPU or stuff like that. You couldn't stop it. All you had and you could do was actually restart the jacking process. So that was pretty painful. So also that was fixed today. So I think. Perfect timing. Yes, perfect timing. Because it feels like now I can, now we can really say that, okay, so
01:24:48
Speaker
Before that, I think these are like hygiene things. It shouldn't lock up if you do that. You should be able to stop a running process like that. It's really good. That was the two last things that was a bit awful, actually, in the backing. That's really good.
01:25:16
Speaker
And also, yeah, so I know maybe syntax highlighting is not something that...
01:25:23
Speaker
gets you going. Not me. There are fans of it out there. So the Kawa has this basic syntax highlighting, but it also has a special hand dealing with comments and with ignored forms.
01:25:49
Speaker
Because I want to encourage people to use the editor for evaluating stuff instead of being at the REPL prompt. I saw some comments in Kaoa, actually they get italicized instead of
01:26:10
Speaker
screen or something like that. And I'm talking about the comment form here. So if you just put something in the comment form, it will, it will like, we get the talent items rather highlighted rather than like hidden. And you can sort of as this evaluate top level form command.
01:26:29
Speaker
So if you put stuff in the command, it will treat them as if they were on the top level. You can use a valid top-level command inside that command. And a valid forlet form was just one keyswhip without having to place the cursor very much precision. So it tries to do that. That's a pretty nice feature. Yeah, it is. You use it a lot.
01:26:56
Speaker
Yeah, because I usually have some comment at the end of the file somewhere trying out some things. And then every time I need to, especially when I format it, then all the parentheses get bunched together and I have to go to the exact point to evaluate the last form. This is interesting. Exactly. So it's really helpful. And also for ignored forms, I try to make them more ignored so they get dimmed out.
01:27:23
Speaker
So I was like, what's the, then Kalva Yousa, I don't know if he's using it still, Stefan van der Oort, who heard about my idea of like italicizing stuff and maybe you can dim them out instead. So we did that and it's really, it's really,
01:27:48
Speaker
cool because when you're ignoring something, you just put an ignore form there and it gets dimmed out. It's very like if it's a big form, the feedback is actually great. I might ask you if you put two ignore forms in a row after each other. Let's say you have a vector.
01:28:15
Speaker
And inside the vector, you have one, two, three, four. And then in front of the one in the beginning, you put two ignore forms. And then you evaluate that vector. What do you get? Three, four. I'm going to type it.
01:28:43
Speaker
Are you typing it? I can't remember whether it does the next one or the outer one. I can't remember. So I have a ignore form, and then I have 1, 2, 3, 4 in a vector. So yeah, if you do that, then you get, you can't, that's nothing. But if you have like the vector 1, 2, 3, 4, and inside the vector, you have the ignore form twice in the beginning. Oh, OK. I have no clue. It sounded like a J. Got it.
01:29:14
Speaker
I'm not sure. So you're trying it because then if you evaluate the vector, you would know the answer. I can't. I don't know how to evaluate in in Visual Studio code because I'm using Visual Studio code now, so I don't know what the hell I'm supposed to type here. Are using Calvin? Yes, cool, then you just need to be like in control after or before the vector and then.
01:29:44
Speaker
Okay, I'm not going to torture our audience with my ignorance of video studio. We can have like a Calvert course after this. But anyway, so Jay was... Ray, sorry. It ignores the next one. It ignores like two of the next two ones if you do that. So that actually gets a vector of three and four.
01:30:14
Speaker
And that was not what I was expecting. So I thought it would ignore the ignore for a minute. I don't know why I thought that, but I thought that. And some people actually used it in let boxes, for instance. So if you want to ignore one of the
01:30:38
Speaker
bindings in the left box. You just put two to ignore forms in front of the binding. You will ignore both the symbol and the value. So it's people actually using it. So then when this dimming
01:30:54
Speaker
a feature was released and it didn't take long for someone said, okay, so it's not doing the right thing here. So we had to fix that. So that comes and that's like a bit of the lesson here is like, if you add some feature like that, then you actually like dig up completely new kinds of things that go wrong. So it's, well, without me,
01:31:24
Speaker
Having special highlighting for ignored forms, I wouldn't have been able to do that mistake.
01:31:33
Speaker
It's interesting, I think, with that stuff. And I try that in Emacs, and it actually does the wrong thing. Okay, I found out what went wrong. I think I had to restart because you released a new version of Kalva like one hour ago or something. Yeah, something like that.
01:31:56
Speaker
I just said I did everything, and then now it can't exactly. So I was trying to do something, and then it failed because I had to restart Visual Studio Code.

Collaboration in the Clojure Dev Community

01:32:05
Speaker
Anyway, so I think we covered a lot of ground. Did we miss anything from Peter or any other topics that we missed about Carver? I'm not sure, but I think that this end REPL and orchard thing needs some kind of
01:32:26
Speaker
more mentioned because this funding period, it was like KELBA and it was CIDR and it was ShadowSale.js all in the same funding period.
01:32:38
Speaker
Yeah. So it's like a tooling funding period. Yes, really. And then this NREPL and watching thing gets really like at the center of this. So even if it hasn't been as we like envisioned in the beginning that we would like work a lot together on the NREPL stuff. But
01:33:02
Speaker
So we have built the foundation for that by forming some multidars for this dev tooling task force, as you call it. So we have the communication, everything there. So we synchronize a lot. And I think that the dev tools will benefit a lot from this going forward.
01:33:30
Speaker
Because we have this, so one example, I mentioned this, ASTs. So only within Calva, I think that at any given moment, I think I've built like
01:33:49
Speaker
three or four or five different ASTs because reasons. And there are also ASTs built inside tools that I use and stuff like that. So we have been talking quite a bit about that and try to see a way that we could
01:34:12
Speaker
like centralize this and build some kind of master AST that every other piece of tool, the tooling can use instead. And I think that would be both in matters of performance for some operations that need a lot of, like if you build an AST of all the files in the project and stuff like that,
01:34:41
Speaker
but also in terms of consistency. So then if you see that you're interpreting the closure code in the wrong way in some place, and you can fix that at one place, and then all the tools would benefit and get that fixed at the same time.
01:35:06
Speaker
I think this initiative by Bocedaris gives us a lot of hope for the tooling and going forward.
01:35:22
Speaker
I think we will see a lot more cooperation there. And also, if I interpret the discussions correctly, a lot more focus on ClosureScript store, getting it more the tooling more at the level where Closure has it. Yeah.
01:35:46
Speaker
Great. So, I think we are almost, oh wow, one hour 30 minutes. That's, I think not enough time to cover entire cover, but I think we did a pretty good job. I think I have 128 gigabytes of hard disk. And I did, I think even with my stupidity, I was able to update cover and then type in the stuff and then I can see the dimmed forms in
01:36:16
Speaker
in the editor now. Yeah. And it tells you how it will be evaluated then. Exactly. Yeah. Yeah. That's true. Awesome. So I think it's a nice spot to conclude our episode for today. Thanks a lot, Peter, for joining us. And thanks a lot for doing a lot of work to make Clojure easy for the latest hipster generation who are using VS Code and
01:36:44
Speaker
You know, especially the getting started story has been a pretty difficult thing in the enclosure world for most of the people. I think, you know, just one extension being available, extension pack being available, and then all the, you know, bells and whistles coming up with it is extremely useful for the people who are getting started. Yeah. And also, of course, people who are experienced, I can imagine.
01:37:06
Speaker
I hope so. It might sound like I'm only focusing on the beginner, but it's really important that it's a good tool for the experienced and the professionals as well. Exactly. And of course, congratulations on using the CLGA Together funds and then releasing it even another version one hour ago.
01:37:35
Speaker
and spending all your time and our apologies to your family, but the larger community is getting a lot of benefit out of this, I'm pretty sure. I'll buy them a nice presents from the family. I don't think most of your kids are not ready to drink Kalwa, I suppose. It's funny with this new generation, they don't drink actually.
01:38:01
Speaker
I don't think my daughter, she's 19, I don't think she's like, she's tasted wine, but she doesn't like it. It's very different from when I was a kid. Yeah, my kids are 19 and 15 and neither of them either taste a drink or want to taste drink. They have no interest in it at all. I guess that's good. I'm not sure if it's good, but I think it's good.
01:38:25
Speaker
Probably. I mean, I've never, I've never tasted alcohol knowingly, so I don't know. Okay. Yeah. As far as I know, I never did. So, but of course I keep drinking, quote unquote cider. So that's, uh, yeah, I keep drinking that. Yes.
01:38:48
Speaker
Anyway, so I think that's the episode from us. We hope to continue the rhythm again. And thanks a lot, Peter, for joining on the day after daylight saving changes.
01:39:04
Speaker
Yeah, I think that's it from us and people who are listening to the episode. As Peter said, it's extremely easy to install Carver. Just download visual studio code, search for the extension and then get it, I think. And Peter, are you also on Patreon or something?
01:39:25
Speaker
No, I'm not on Patreon. But I've actually been enrolled on GitHub sponsors right now, so I don't know when you're hiring this.
01:39:43
Speaker
Yeah, we could too. So maybe my GitHub sponsors page will be active then. And then it's very cool because GitHub is matching the
01:40:00
Speaker
the sponsors. The contributions. Yeah. So the first year. So if someone would sponsor me for $5 a month, then I would get 10 actually. So that's really great. Let's see. But they said it would take a few days for them to review my last stuff. And then it should be live. So maybe it's live when people hear this.
01:40:26
Speaker
Yeah, probably. So you do check the market. It's hittab.com slash PES, then. That's me. Yeah. P-E-Z. P-E-Z, yes. P-E-Z. For the people across the month. Yeah. So just a quick shout out to Brandon, our Patreon patron.
01:40:50
Speaker
He suggested to grab some of the time from Peter and then discuss Kalwa. So thanks a lot, Brandon. I hope you enjoyed this episode. This is especially for you. I also want to thank Brandon a lot because he's really helpful with the Kalwa project. So it's bringing up issues and fixing issues and yeah, he's really contributing.
01:41:15
Speaker
Thank you, Brandon. Great job on that one and great job on poking us to bring Peter on the episode. So that's it from us for episode 50-something. I think it's 54, I suppose. See you next time. Thank you. Bye.
01:41:56
Speaker
you