Become a Creator today!Start creating today - Share your story with the world!
Start for free
00:00:00
00:00:01
#65 Vlad Protsenko image

#65 Vlad Protsenko

defn
Avatar
80 Plays5 years ago
We talk to Vlad a designer turned developer and "reveal"ed a new REPL experience for Clojure! Check it out on https://vlaaad.github.io/reveal/
Transcript

Introduction and Guest Welcome

00:00:15
Speaker
Welcome to DeafN, episode number 65. Official retirement age for this show really, isn't it? Aren't we increasing the retirement age every year? Yeah, that's right. Yeah. So by the time you reach the retirement age, it's going to be extended for another five years. I think with the financial crisis and all these coronaviruses, we've got to keep on working, you know, keep on grinding out the Patreons. Exactly.
00:00:43
Speaker
Thanks for inviting me. Hey, welcome to the DeafN. So I think we started, so fuck it. Episode number 65, I guess. So it's the same usual people, Ray from Belgium and Vijay from Holland, and our special guest today, Vlad. Yes, my name is Vlad.
00:01:07
Speaker
Hello Vlad. I thought your name was Vlad. Yes, I prefer, I prefer if you pronounce Vlad. Yes, okay. So. The Dutch way. The Dutch way. Uh-huh. What do you call that when you extend? Is it like syllables or not syllables, right? Still one syllable, but. Isn't the vowel. No, that's true, but you know, Vlad. What is the, what is the
00:01:37
Speaker
The linguistic difference between blood and blood. I have to write it down. We're not linguistic experts here. So if you are listening to this podcast and you are the linguistic expert and if you want to win an amazing prize of we saying your name on the podcast, please let us know.
00:01:59
Speaker
Who the fuck is X? Yes. So maybe it's a good idea to introduce yourself. So tell us about your, you know, what are you up to? And where did you come from? And where did you come from?

Vlad's Journey: From Design to Programming

00:02:16
Speaker
Exactly. I came from Russia. Oh my God. The Russians are coming. The Russians are coming. They're invading everywhere. Is this going to be a disinformation podcast?
00:02:30
Speaker
Is this going to be a disinformation podcast? Maybe. Probably not. Well, if we've got anything to do with it, it will be. So I'm from Russia. Actually, I started to be a designer.
00:02:52
Speaker
But later in the university i realize that i prefer programming. But i still got my degree and i guess i retain some desire for good ui and ux. So my puffin programming started with.
00:03:16
Speaker
Games. I was writing action script at my very first jobs. So it was, it was, I was writing flash games for social networks. Nice. Yeah. Yeah. And now where is the flash? Yeah. But how do you feel about Flash's funeral, official funeral?
00:03:42
Speaker
I guess I moved on already. I don't feel anything anymore. You've gone past it. You're in acceptance now. All the five stages are done now.
00:04:00
Speaker
But early on, I discovered Java, and I was blown away by its power, which I guess may sound silly now, but compared to ActionScript, I could write generics. There was so much possibilities for that. And then I discovered... Because that means you must have joined Java a little bit late then, because they were only in Java 5, so that shows that you're still a youth, you know?
00:04:30
Speaker
So I think we now measure people's age by, you know, uh, do you know diamond, Java diamond operators, you know, is there all the time. Ah, okay. Now we know you're one, you're one not seven, you know. Yeah. I joined, I joined Java and one that seven. Okay. And then I run Scala and I was again blown away by its power. Yeah. And then I discovered closure.
00:05:00
Speaker
And then you're just putting like, you know, you're not blown away. You're just, you know, stably staying because lack of power. No, but then I was truly blown away because. So you blew away from Russia. Yeah. Because I guess, yeah, I just realized that with color,
00:05:29
Speaker
I felt very powerful, but I struggled with actually writing stuff because there was always this desire to make your problem, like the whole problem be checked at the compile time. And it gets harder and harder. And eventually I realized that there is not much benefit to it if I can just
00:05:59
Speaker
For example, I fitted in a repo and have it working. Yeah. But what kind of projects did you do in Java and Scala before coming to closure?

Java and Gaming Career at King

00:06:10
Speaker
Because you said you had a bit of a gaming experience in ActionScript, and obviously Java and JVM is not really known for gaming. Yeah, but I actually did write some games in Java. Yeah, for Android only. OK.
00:06:26
Speaker
Yeah, which is, I guess, a bit strange for a mobile game. But that's what I could do. And I didn't have access to iPhone. I think, I think they're one of the most popular games of all time. It's written in Java, isn't it? Minecraft, right? Yeah. Actually, I currently work at King, which is
00:06:52
Speaker
And as far as I know, Marcos Pearson, the creator of Minecraft, also worked at Kink. And yeah, I heard some stories that he pitched this game to Kink, but it was rejected because they didn't think it will get popular. Yeah, that's like the Beatles, turning down the Beatles, isn't it? That was a pop band in the 60s, by the way, of Ladsauce.
00:07:22
Speaker
Nobody knows your references. Yeah, exactly. I think by this time, we're like, we're just not. We were not boys. We were not. So we are at that situation now. But I think most of the games that King builds are also mobile games now? Yes. And they are not written in Java. They are written in mostly C++. Oh, OK. So what are you doing there with Closure then?
00:07:50
Speaker
Well, actually, I don't write closure on my day job, unfortunately. Yeah. Yeah. Then what brought you into closure from Java to Scala to closure? Well, yes. The power to do what I intend to do. I guess I feel the most
00:08:20
Speaker
So it's like expression, expressivity. Yeah, yeah, I feel the most enabled writing closure. Yeah. Yeah, I think it's like you said with Scala or some other languages, you can feel like you've got a big sword, but you don't exactly know how to wield it. Closure is you know, you can definitely it's a pocket knife. Yeah, it's a pocket knife or a dagger or a scabbard. I don't know.
00:08:47
Speaker
What the fuck is this cup with? You must have really long pockets, man.
00:08:58
Speaker
Nice. Yeah, so I started in-game dev, but then I thought that maybe more enterprise Java pays better, so I tried also that. And I wrote some Java for Russian government a little bit.
00:09:26
Speaker
Nothing about meddling with elections, just... Well, I mean, why would you say that anyway? Maybe I'm obliged to say that. Yeah. Did you use any frameworks or something in Enterprise Java then? Spring, yes, Spring Boot. I have never understood it. I just...
00:09:54
Speaker
Just used it. I just slipped some annotations on classes and enrolled with it. Yeah. And then I discovered closure and was...
00:10:09
Speaker
pretty happy with it. And I, yeah, I worked writing closure for a Russian logistics startup. And then I moved to Sweden to write closure there at Kink. So I did write closure at Kink at the default editor. It's a default is a game engine for
00:10:39
Speaker
Well, for developing games. An editor for that is written in Clojure. So I joined the team. It was very fun. But then Kink decided to... Default on default. Yes. So now I'm writing Java. Okay. But is the default thing, was it JVM Clojure or was it something like Arcadia?
00:11:08
Speaker
Like the Mono. No, the thing is the engine itself is written in C and C++. And the scripting language for this game engine is Lua.
00:11:25
Speaker
But closure is used in the editor for that. So you have like a desktop application, which is written in closure that allows you to iterate on this editor, iterate on the game using this editor. So what is it? What is it? What do they use now for that? Sorry. Is it still closure that you use or did you just switch jobs or did you, um,
00:11:53
Speaker
Did they decide to write it again in Lua or something else? Sorry, I don't understand your question. The editor, you said you stopped working on it.
00:12:04
Speaker
Yes, because Kim decided to shut down the default. Oh, they just completely shut it down. They open sourced it and there are two guys working on it and I hope they will make it fly. I'll be able to get back to them, but currently they just don't have enough funds to also have more people at the dev team.
00:12:35
Speaker
But I think using Closure for desktop applications is an interesting choice, right? Because that's usually not that common in the Closure community, I would say. Maybe using Electron. So how did you build this one? This could lead into your open source

Introducing CLJFX: A React-like Framework

00:12:51
Speaker
projects now. Yeah, so we are still leading to CLJ fix. Yes, yes. Spoiler alert.
00:13:00
Speaker
Yeah, so before joining King and default team, I was in a small startup that they used Closure on the backend and Closure Script on the frontend.
00:13:13
Speaker
And I was using reframe and regent and was pretty happy about how this whole stack works because from my previous experience using in-game dev where everything is super mutable, usually it was very painful to do any UI. So I was kind of curious like, how is it going to be a default? Do they have something like that?
00:13:42
Speaker
And unfortunately, they didn't. So they made the core of the editor, which is all about incrementally building your project and hot swapping parts of it when you are developing it to provide some repl-like experience for a game dev. So they had this very
00:14:10
Speaker
functional core, but the UI for that was still this imperative mess. So that's when I decided that there needs to be something like a React for Java fix. And I just did it. So that's the CLJFX then. Yes.
00:14:40
Speaker
Okay. And you built the default editor in CLJFX or is it just a plain swing application or Java fix? It's Java fix application. I mean, they already had it when I joined them.
00:14:53
Speaker
for like quite a long time. It was, it's like a quite a big application. So we started replacing like smaller parts of it with CLJ fix, like where it's made sense, but we didn't have time to, to rewrite it, to use CLJ fix like as a whole. Yeah. So what about Java effects then? I mean, I'm kind of like, uh,
00:15:24
Speaker
I don't know, it seems like a, maybe it looked like an abandoned project a few years ago, but then I think there are enough people just about keeping it alive in Oracle. So, or am I wrong now? Cause I lost, I lost touch with it, you know, maybe it's five years ago.
00:15:42
Speaker
What's the current state of JavaFX itself? Well, if you judge it by Twitter accounts of people who maintain it, it's very rocking. Right. Is it still maintained by Oracle or is there something on OpenFX or something? Yeah, I mean. Because I remember there was some open dolphin at some point and then
00:16:07
Speaker
some shit happened around it. So JavaFX was a part of the GTK distribution in Java 1.8 and then they decided
00:16:20
Speaker
they want to split the part and make that just a separate dependency that you can install. So they moved it out. But as far as I know, there are still team at Oracle that develops it. But now they're on GitHub. Nice.
00:16:44
Speaker
So what kind of changes have occurred in JavaFX in the last few years, then, that you've noticed? I mean, I guess the question is, you're using it. You're just using it because you're using it? Or are you using it because you think, actually, it's a pretty good platform now?
00:17:06
Speaker
I would say actually and this is maybe a little bit of a spoiler before we start talking about review, but I had some thoughts about like had some vision of review even before I started writing CLJ fix.
00:17:27
Speaker
I just felt that if I want this kind of visual tool to be extendable by people, they wouldn't want to write in this imperative mess, which is Java fix. They would prefer to use something declarative and just like vision data structures and be done with it. I think
00:17:57
Speaker
Java fix is a fine framework, but it's like, you know, I would split it, like my perception of it in two parts. First, there is like a lower level UI element, like labels and some layout, like grids and horizontal and vertical boxes. And
00:18:26
Speaker
Those are great. But then there are controls and tables and charts and they are very fragile and they really go against you if you want to behave them differently or look differently. So there are good and bad parts.
00:18:57
Speaker
That would be my opinion of JavaFX.

JavaFX vs. Electron: A Comparative Discussion

00:19:03
Speaker
So the integration with Closure, then, is it because JavaFX has, I'm assuming, does it have its own programming model? Like Swing, you know, because I did some Java desktop development a long time ago.
00:19:17
Speaker
And there was still AWT, and then we moved to swing, and then a bit of an Eclipse RCP related things. So does JavaFX bring in its own programming model that you need to translate into Clojure? How did it work?
00:19:36
Speaker
Well, you just create multiple objects and call setters on them. Okay. And in addition to that, there are like some sort of observable pattern that is used everywhere in Java fix where you can like
00:19:58
Speaker
bind every mutable place to another. And, uh, well, in still your fix, I just don't use it at all. I just translate the data structures to calls to setters. So in terms of like, like, let's say reactive react, like the idea of react is that the, you know, you have a function to transform the view.
00:20:27
Speaker
Um, but it's got a sort of, you know, a virtual dorm and all this kind of stuff. So, um, how does that, how does that play out with Java effects? Is it just, are you really just doing a straight pass through or are you doing some buffering or some optimizations or are you doing some other things that are like working on the rent, making the rendering more efficient or am I just talking out of my hat now?
00:20:52
Speaker
I'm doing pretty similar thing to what React does. So it has diffing. So it's like you don't recreate the whole display graph on every change. But that's it. So JavaFX isn't meanable to that. It's actually got a kind of view. You can grab the whole view and do a diff on it.
00:21:21
Speaker
That's something that I'm quite impressed by, actually. I didn't realize that JavaFX had that kind of... But, I mean, I don't read from JavaFX. I just, I mean, all the different that I do is a different in front of closer data structures.
00:21:41
Speaker
Ah, okay, okay, I see, I see, it makes sense. So I see, like, I compare new one with the previous one, and if there are changes, I just call setters. Right. So I completely, completely ignore the state of Java fix objects. And it seems to work out fine. Yeah, good.
00:22:07
Speaker
But how is the threading model in JavaFX? Is it something similar to swing? Because it's not thread safe. It's not thread safe. Yes. And there is a UI thread. But there are, like, in CLGFX, there is a,
00:22:26
Speaker
I an entry point for that which does which is a frets safe and you can just i don't know the dose it with data. It's it's it's dossing it is a single distributed it's just just do not love services.
00:22:47
Speaker
Yeah, and it will do all the duplication for you and will queue like the minimum amount of refreshes on UI threads. So even though there is like a phrasing model, when you're using CLG fix, you don't have to care about it at all. Well, I guess, except when you are doing event handlers, because they happen on the UI thread, so you shouldn't really
00:23:16
Speaker
do blocking IO in your event handlers. But yeah, that's all. OK. And how does this compare to things like, for example, Electron? Because these days, I think all the desktop applications, they're basically built with this Electron framework, the web UI stuff, bringing them to the moon. We're talking in Discord and all this shit. I think Visual Studio Code and every fancy thing is now built in.
00:23:43
Speaker
I don't know, 20 gigabytes of RAM requiring browser window running in a native application. Yeah. I mean, Closure and JVM is also pretty intense on resources. That's true. So it's probably not as much as the electronic applications, but... Yeah, I guess. I don't know. I mean, I'm using VS Code. It seems to run very smoothly. Yeah.
00:24:11
Speaker
But yeah, not every Electron application is like that, I would assume. Yeah. So if I were to compare Java fix to Electron, I would say that Electron is a solid choice. But I mean, as a language runtime, GVM, I think is better than JavaScript VMs. And this is also true even when you're in closure, because
00:24:40
Speaker
They have different compilation models and in Closure you can define markers in the same compilation stage, like in the same namespace. In Closure Script you have to be very careful about that. So I would say a development experience is better when you are using the GVM and if you want to be in the GVM.
00:25:07
Speaker
Then, then I think JavaFX is a good choice because Electron is a different process probably, so you will have to, there will just, there will be just more moving parts that you will have to be careful about.
00:25:23
Speaker
Yeah. And also, I think if you want to use all the libraries, I think JVM has better access to those libraries, I'm guessing. I don't know. I mean, maybe now JavaScript ecosystem is way better now with node and shit and whatnot. I think the difference is that it's like, I mean, it's the UI part. The funny thing is, I would have thought that, again, like the JavaFX is a bit starved of frameworks or render, you know, sort of things to make it look pretty to things to kind of like
00:25:52
Speaker
to make the UI experience more modern, I guess, all the typefaces and all this kind of stuff. But I don't know. Maybe, like I said, I've lost a bit of touch with JavaFX. Does it have web fonts and all these kind of things? How kind of like startable is it compared to the browser, which has got tons and tons and tons of options?
00:26:15
Speaker
resizable and scalable, all these kind of things that have been happening in the modern browser apps in the last sort of 10 years. I just was about to mention that if you want some kind of type setting, then I think Electron and browsers are obvious choice because they evolved from that model that
00:26:35
Speaker
the web pages are documents of text so you can like just use ctrl f to find any text on the page this isn't possible in java fix you have to implement it yourself if you if you need that and like effortless effortless zoom in or zoom out so in that sense web is better so i think the
00:27:04
Speaker
I'm not sure. I think maybe it's a Java effects is more intended to replace swing, right? I mean, like the building desktop applications, which are not, I mean, you can't zoom in and zoom out into any native applications anyway, regardless of your system. So I think it's the similar kind of, um,
00:27:20
Speaker
It's another stab at, OK, let's use Java. That's going to deploy everywhere, sort of. That never worked. And they always looked ugly. And that's a funny thing, because the only application that, even at that time, that didn't look like Java application was IntelliJ. I think JetBrains folks were doing a lot of stuff to not to make it look like Java application. And every other thing, by just looking at it, people can say, oh, this is Java application.
00:27:49
Speaker
It's like this one stinks, so I know there's a shit, you know? Well, the reason you could say it was a Java application was it took about three minutes to start. Yeah. And also the stupid logo. And then there is this abomination of Java web start or something. And that's another shit. Anyway, good old times. But Java fix uses CSS for installing.
00:28:12
Speaker
Oh, OK. So you can configure it pretty far to click something else. So you can configure it to just enough to say this is not a Java application. But I think these days, the difference is not going to be that difficult, especially given that all these electronic applications, they don't behave like native applications.
00:28:42
Speaker
So the proliferation of electron-driven shit. There's so many apps built in this one. And none of them behave in a reasonable way, you expect on a platform. So I guess it's OK now, I think. The bar is low. Yeah, exactly. The way I look at it, it's like a lot of these Java effects applications. I mean, it's interesting you say that, Vladio. I've got a design background, because a lot of people
00:29:10
Speaker
use JavaFX because they're Java programmers and they want to do something in the UI. And actually, the UIs are always shit. I mean, really terrible, you know. I think the nice thing about Bootstrap and stuff like that in the browser was you could be a developer and, you know, just use someone else's CSS and it would kind of look half decent, you know, even if, I mean, obviously Bootstrap is kind of like aging a little bit now and everyone's a bit pissed off with it.
00:29:40
Speaker
It looks a lot better than most people CSS did. Handcrafted web pages and stuff, you know. And I think JavaFX applications, you know, I'm looking at a few that I've seen in the recent years mentioning no names. Rebel! But ugly pieces of code. Rebel just uses the default JavaFX styling. Exactly. Yeah, I guess they need a better CSS. Yeah.
00:30:10
Speaker
They should use bootstrap CSS. I mean, come on. It would have used to be just better. Exactly. One little line, you know. Anyway, yeah. No, but definitely, you know, we're coming on to reveal, I guess, now. The big reveal. Yeah. This is the big reveal. It's time to reveal it. So what is reveal? Revealed reveal. Reveal is a read-of-all visualized loop.
00:30:40
Speaker
Oh, yeah. I like that. Yeah. I was pretty happy when I came up with it. I mean, as they say, that is the most difficult problem to solve. And then if you solve that one, like naming the thing properly, then yeah, then you're really much done. I like that. I like that you went with reveal or rather than revel. I mean, you could have went with that. Like, you know, revel is a sort of like repl and revel in something is very, you know, you're kind of happy and
00:31:09
Speaker
So, but reveal is more, yeah, because of the visual aspect. So I liked that. Yes, exactly. Actually, I still have like a private repo on GitHub, which is called it's called rebel. Yes. That has early experiments. At some point, I realized that it shouldn't be called rebel. It should be called. Yeah, it's, I think you made a good choice then. Yeah. So, so what is the, what is the idea behind it? So.
00:31:42
Speaker
Well, there are many ideas behind it. But I guess the main, like, I think the main vision I had for that is to be able to hold a value in your hand, which is, I guess, impossible thing to do. But I guess I'm trying to get closer to that.
00:32:06
Speaker
And as a step which brings you closer to holding a value in your hand, is being able to select it and do immediately something with it.
00:32:26
Speaker
So this is, I think, one of the bigger things about review. Can you explain it like I'm five?
00:32:39
Speaker
No. Okay, three then. Okay. Hello, Vijay. Are you saying comfortably? Put the crowns down. No, no, stop, Vijay. Stop, stop, stop. It's going to be like the Sesame Street sort of thing. My daughter is three-year-old. I can't explain anything here.
00:33:06
Speaker
So what does it mean actually to hold a value in your hand? Well, to me, holding a value in a hand means being able to quite easily see it from different angles just by rotating your arm.
00:33:34
Speaker
And if we translate this metaphor to a desktop application model, then what Reveal provides is a way to select any text that it outputs when you print the data structure. You see the text, and you can select parts of the text.
00:33:59
Speaker
For example, you can select some value inside the map. And you can immediately evaluate some code in it. So you just bring up a context menu and can write any form that will do something with it. And there are many built-in contextual actions for different types of objects
00:34:29
Speaker
to make ability to look at the value from different angles, like closer at hand, which means easier. So how do you compare this to Rebel, for example?
00:34:44
Speaker
It's better. Okay, you said it, not me. It has better CSS, I'm assuming. Yeah, at least it has better CSS. I remember when I was doing early prototypes of Free Wheel and then Rebel was released,
00:35:09
Speaker
I was very worried like, oh, shit, now I have to compete with CodeNetect. I'm doomed. But I think the ideas behind them are very different. So I guess to each their own. What was I talking about?
00:35:33
Speaker
So the difference between comparisons, what you perceive the different visions to be. Yeah. Well, I think one of the bigger differences is that I don't use data file.
00:35:50
Speaker
which is a newer protocol which was later added into closure pretty recently. Because I think when I develop something, I am working with objects in the VM. And DataFi transforms these objects into something else.
00:36:20
Speaker
I mean, it transforms them to data, which is, I mean, usually it's very good because, I mean, if you are,
00:36:34
Speaker
Well, it's usually immutable and you can inspect it. But the problem is that you had an object and now you have something else. So your ability to view what's in your process is reduced because of that.
00:36:51
Speaker
Because you were thinking you have an exception, like objects, but all you see is that the fight throwable. And I think this is the thing that angers me most is that it transforms atoms to single element vectors for inspection.
00:37:18
Speaker
But I mean, it still puts the original atom into metadata of that vector. But I think it's very confusing when you try to work with the atoms, but you just can't see them. So Reveal uses different approach that it doesn't try to hide what you have, and instead it allows you to
00:37:45
Speaker
See what you have from different angles and that if I and now is just one of those angles, so I. Even though I don't use them by default, I still have contextual actions for them if they make sense.
00:38:04
Speaker
So it reveals something like you're going to use it in addition to the REPL, or can it be just like a REPL that I open?

Exploring Reveal: A New REPL Tool

00:38:16
Speaker
So how do I use that thing then?
00:38:19
Speaker
I use it as a REPL. So I use cursive. And in cursive, there is a default REPL output panel. And I just don't use that one. I just close that when I start reveal, and I use a reveal window to see the output. So it's just like a window that is
00:38:47
Speaker
like on the side of the screen, which contains the output. So it can plug into, so essentially you start reveal and then you connect to that reveal session from your code.
00:39:05
Speaker
Is it just a normal REPL or something that you can connect to? It's a normal REPL or I mean it's many things.
00:39:17
Speaker
You're revealing one by one now. It's one, it's normal REPL. It's a REPL itself that you can see from many angles, I guess. How do you hold a REPL in your hand? The simplest thing that is revealed is it's a function that has a OS window. And when you call this function with some value, it shows it in that window.
00:39:47
Speaker
Okay. So you can just create this reveal windows at wheel and use them to submit values to them. And there are a bunch of repos and they are just built on top of that like lower level primitive
00:40:09
Speaker
They're just lightweight wrappers of other repls that just submit values to that function. And it also has nreple middleware because nreple is popular. So it has many entry points. You can use it as a REPL or
00:40:28
Speaker
in as a part of an apple or just as a window if you want to submit only like very occasionally while it's a bit so so the editor integration is just via apple then so it doesn't matter which editor you're using so you can just connect to yes your code from that one
00:40:53
Speaker
Yes, I think it's a great thing. It's a process and that means it's available to every closure ID that can send forms to Apple. I mean, the only closure ID that matters is Emacs anyway. As long as it works in Emacs, then it's fine. I think that's one or two people who are using other shit. I still have PTSD from Space Max.
00:41:26
Speaker
I know. This session is going to resolve them. Don't worry. We are here. From your designer point of view, I'm pretty sure it might be completely different experience, right? Looking at all these different editors. Yeah, but it doesn't matter because reveal is available. So just to escape badly designed editors, you had to build your own.
00:41:57
Speaker
I think actually it also might be a good thing for ecosystem because it might lift the burden from the IDE offers to create exploration and inspection tools because currently
00:42:20
Speaker
Basically, every ID has their own, and they are not transferable. It's like you have your debug panel in IntelliJ, and that's it. It's only there. And then you have, you know, ciders inspect you, and again, it's only there. Yeah. But I'm guessing that you don't really integrate to the debugger, do you? Or is that, do you do that? No.
00:42:50
Speaker
I don't use debugger and I haven't felt the need to use debugger enclosure. I think one honorable mention here would be top. So I used to use print lines for debugging and now I don't use it anymore because top is much more powerful.
00:43:18
Speaker
So, yeah, it's also a recent addition, the closure. Yeah, yeah.
00:43:29
Speaker
reveal, reveal to me, haha, what the actual point of tap was, you know, you know, it was fucking ridiculous, really, you know, that the people who made tap couldn't explain it. But but actually reveal shows that once you tap a value out to something like reveal, then it's just a data rather than a string. So therefore, whoa, you know, if you can hold a bit of data in a in reveal in your hand, then
00:43:59
Speaker
Suddenly, the print line is a waste of fucking time. That is brilliant. Forget pretty print, forget print. All print subsystems are dead now.
00:44:12
Speaker
Tap is the king, you know? Yes. You just need to tap into reveal. Another pun. Oh, yeah. But it's really awesome. I mean, I'm really, it's super fabulous now that the tap is suddenly like, you know, useful. Yeah, it's suddenly useful. Have you ever used it, PJ? No.
00:44:35
Speaker
No. Yeah. Why would you? You're thinking, what the fuck is this thing? It just disappears into the ether. Exactly. It's just like data file. And then, OK, we heard about that one, and then moving on. And then, oh, we heard about it, and then it's moving on. And especially if it is behind the closed source thing, and I'm like, yeah. But I think I got to try a reveal, and then probably it will. Then I can tap into the awesomeness.
00:45:03
Speaker
Yeah. So reveal can also be used for both closure and closure script, or I'm still trying to wrap my head around it. So how does it work? So can I just open CLJS REPL into reveal?
00:45:22
Speaker
It's complicated. Yes, it's doable. So when I was thinking about reveal and designing it, I felt that there is not much need for this kind of tool in the closure script, because when you are doing closure script, it's usually in browser and you already have pretty powerful tools there. So you have like a.
00:45:49
Speaker
a page inspector and browsers console output, it's actually sort of a reveal because when you console lock something, you don't lock strings, you'll update there. So you also can inspect from there.
00:46:07
Speaker
So yeah, I mainly felt that such a tool is needed in the GVM land. So that's why a review is primarily about the GVM. But since, I mean,
00:46:24
Speaker
since reveal is just a window and you can wrap different apples. Reveal in its default package provides a way to talk to remote peer apples.
00:46:44
Speaker
Uh, and that makes it usable or that makes it composable with the color script, for example. So you can have a color script purple and you can connect review date and you can evaluate forms and see your results in the review.
00:47:04
Speaker
But I mean, there is a slight difference still, is that when you show the values in the real output window, they are the values that you received from the network. So they are not the objects in the target process. So the exploration ability in that sense is limited.
00:47:30
Speaker
But I think it's still pretty nice. And reveal has various table and chart views that you don't have to do anything to use. You can just
00:47:49
Speaker
Just by having data in the proper shape, your wheel can show it as a chart or as a table. And you still have this when you're talking to Closure Scriptable, for example. Yeah. I think one of the things, because I work on a reasonably large Closure Script, Closure Application.
00:48:10
Speaker
And the front end is completely reframed and that kind of stuff. And then it uses the pneumatic tubes to send the events back and forth on WebSockets. I think over the period, I get really pissed with these two repls and all this stuff. And still, the development experience is still kind of hacky. It feels a bit fragile.
00:48:35
Speaker
So obviously, I'm not a guy who can come up with new ideas. So I'm just hoping someone is going to think about this shit and then build a better tooling around this crap. When I was writing only Closure Core, it was pretty easy because I just use Emacs, and then I have Cider, and then it's happy La La Land. And then suddenly, this Closure Script shit comes in. And then there is fig wheel, fig wheel main, shadow CLJS, and all this. And we keep adding all these things. And then suddenly, there are two different places that I need to inspect the stuff in.
00:49:04
Speaker
And especially because they both are talking web sockets. So there is no unified way to resolve this, I think. Well, there are two execution platforms. So what are you going to do? Yeah, but that's what I'm saying. But the whole idea of Clojure is that to have like, OK, it's going to be the same language, and we have CLJC, and then it's the same kind of things available. That's not the idea of Clojure, in fact.
00:49:33
Speaker
Yeah. Well, the whole point is that you use the same kind of structures everywhere. If I have like fucking... No, it's a host of language feature. Remember that? Yeah, then that means there is going to be only JVM somewhere, and then we just use shit there. Now, we don't need to jump between these apples. It gets so fucking annoying and frustrating these days. You're like, oh, fuck it. You know what? I'm just going to write Java effects, and I'm just going to... I think you've got your answer. Exactly.
00:50:03
Speaker
eventually give up and then just use Java effects. Everything is on JVM, so screw this. Yeah, just a single process. How simpler can it get? Yeah, but it is something that if I had to explain this to someone who is already new to Clojure and then I'm introducing them to this project, it's
00:50:25
Speaker
It is slowly getting to a point like, wow, this shit is pretty difficult to configure and then get your everything up and running.
00:50:34
Speaker
So yeah, yeah, I will say this is one of the reasons why I love soccer triples. Over and ripple. I mean, I don't have anything against and ripple. But yeah, soccer triples are just so simple. I mean, it's just just dreams in out. And what do you think of the the P ripple and Vlad because that the P ripple to me is even more awesome, because you're getting data out.
00:50:59
Speaker
Yeah, it's pretty awesome. You've got soccer ripples, then you've got data on top of soccer ripples. Nice. Yes, I think ripples are useful only when you're doing inter-process communication, because then you have data over wire, and this is something easy to deal with.
00:51:28
Speaker
But if you have a REPL in the process, then you just don't need it. I mean, just have your regular REPL. So yes, I think it's great for networking. I think, talking about the developer experience, remember there used to be this thing called Meteor Framework.
00:51:56
Speaker
with the MongoDB as the back end and everything. I think that they tried to solve that in a pretty decent way. I mean, starting a media application and then it's a full front end and the back end and everything. So it was much better, I think, at some point. But I don't think Herwheel can do anything about it. Hello. Yes. Hello.
00:52:27
Speaker
No, I think the thing about Meteor, again, it's an island mentality, isn't it?
00:52:34
Speaker
So, you know, if you think that meteor is the future and everyone's going to come to meteor, then great. You know, but in fact, I think meteor just like flamed out, you know, just like a meteor would. So I think that was it was kind of in the name, you know, I was like, I was always going to flam out. So a nice idea, but it was never going to never going to win because the other islands are just too big. You know, yeah.
00:53:01
Speaker
The server side and the front end are just dominated by other tech. So Reveal is built in CLJFX? Yes. And you can extend it like it has a pluggable extension point.
00:53:20
Speaker
uh where you can define your own uh like contextual actions on objects like contextual inspections and you can also use such a fix there uh so if you have your
00:53:39
Speaker
problem domain that is visual, you can easily build a UI for that in Reveal. So what are the future plans for Reveal then? Revealing the future plans. So is it in a production state right now? Like, you know, people can just download it and then use it, like going to vlog.github.io slash reveal. Yes, I think it's in 1.0 for a couple of months already.
00:54:09
Speaker
Nice, I actually have been using it. I guess more for more than a year. Like as soon as I would stop this. So it was usable as a repo. I just use that. Yeah. But about future plans there are some. One of them is I want to investigate JavaScript and web support.
00:54:36
Speaker
Because job fix can show built in browsers you can build in the browser as a view but there's still a big problem with that is when you.
00:54:49
Speaker
go from Java to JavaScript, it is possible that you no longer have access to your Java objects. I mean, this is the part that I haven't investigated yet, but I plan to do it. And for enable continuous exploration of objects and inspection of them, one of the problems to solve is that I want to see
00:55:14
Speaker
I want to get a hold on the reference to Java objects from inside that JavaScript subsystem for reveal or how can I name it? This is to be done.
00:55:37
Speaker
Another big thing is, I would say, being able to control reveal from the REPL. Actually, I got these kinds of requests from Emacs users who, for some reason, just don't want to leave their operating system.
00:56:03
Speaker
So they just want to control. I know how it feels, yes. But I think it makes sense to do such a thing. I think it can be very useful. So I'll think how to make it controllable from the ripple or from somewhere. It would be nice because when you set a new window, I mean, usually, Emacs is full screen. So I'm not going to use any other windows here.
00:56:33
Speaker
Yeah. Well, you've only got one screen now. Come on, that's not good enough. Well, I have three now, but everything is just mirrority max, you know.
00:56:51
Speaker
One thing I want to ask you actually, in terms of usability, if I can get some user advice from you, the thing that I find a little bit with Reveal is that I use it on Linux with cursive, like civilized person.
00:57:11
Speaker
the, just, that's the only reason I do it. So when I open reveal, and I sort of do things, all the views are kind of lined up at the top. But it kind of like runs out of screen pretty quickly. I'm navigating, it seems to be a bit tricky for me. Am I missing some trick here with don't use the options are in terms of the UI? Yeah, I'm an idiot. Yeah, I should read the manual. Maybe it's but
00:57:52
Speaker
No, yeah, it's OK. Not a bug close. Use the error. Fuck off. Exactly. You know, the B, B, C, S, K, S, you think, like back in the day, there used to be like, problem makes us between keyboard and the chair. Oh, God. Yeah, absolutely. That's the problem there. It totally is. No, no, so just to... I'll have another crack at it, OK?
00:57:57
Speaker
Sorry, I couldn't understand the problem from your description.
00:58:22
Speaker
So let's say you right click on some map or some data. Yeah. And it comes with a list like Java Bean or nav or table or pie chart or whatever. So you click on something at view table and it gives you the table and it's all very nice. Then you click on other views and that view is also, it's all part of like a line across the middle of a reveal.
00:58:50
Speaker
So you have this long line of things and you can, you can go, you can kind of go left, but I can't find a way to scroll it. I can't find a way to like, other than to sort of click on the left. It's difficult to scroll through. Maybe I'm missing something. Yeah. So yeah, two points. First is that there is a bug with scoring. Oh, okay. But fuck you. No, duplicate close.
00:59:22
Speaker
It's either one fix or it's a duplicate. We know that it's okay. Fuck off. Do you know that you can use control left and control right to switch between the views in the results panel? Oh, I didn't know that. There we go. Yeah, it does work.
00:59:48
Speaker
So if you have multiple tabs there. Oh yeah, I forgot to mention this is like a part of a more closer.
00:59:59
Speaker
plans of reveal is that I'm reworking the navigation. One part of that is that I'm making structural navigation and I will also experiment with how auto scrolling works. What does that mean to me? I don't understand. From your description.
01:00:44
Speaker
You're going to be a repeat, Gasploit.
01:00:50
Speaker
Sorry, I wasn't sure if I should say that. Please don't apologize. We invite people to tell, you know, basically that thing to Ray. Oh, come on, DJ. You've missed out for too long. Go on, Vlad.
01:01:11
Speaker
Yeah. Applying to improve the navigation a little bit. So it's like currently if you evaluate some value and it's like really, really big, usually you just, the screen just keeps scrolling down, down, down and you don't really, I think like when you evaluate something, you expect to see like the beginning of the value, not the end.
01:01:37
Speaker
So this is one of the things I'm planning to experiment with. And another is a structural navigation, which is currently absent, but I'm working on it. And it's going to be great. It's going to be better than any other structural navigation that exists in the market. Maybe this question should have been asked in the beginning. So what is the inspiration for review?
01:02:06
Speaker
So is there any prior art or something that you saw or some idea that you got in sleep, like DNA helix thingy? It was a long time ago. I think it was summer 2018 when I started to think about review. And this is all I remember. It does be a long time ago, man. I think it maybe started with dev cards.
01:02:36
Speaker
So I was looking at them and I had the idea of like having some similar thing for the GVM. But initially the idea was to have like, like, uh, like a dev car, sort of a pop-ups, like, you know, post notes on the window that just,
01:02:55
Speaker
Appear when you request them and disappear when you request them to disappear. Yeah, but since then it's evolved to something else. Okay. So maybe dev cards. So right now, so it's 1.0 and then you're working on a couple of fancy new features and structural navigation you said, right?
01:03:25
Speaker
Yeah, this is what's currently on my plate. Yeah, yeah. So is there something that, because it's open source, right? It's on GitHub, so we can contribute. So is there something that, are you looking for contributions? Or are you saying, OK, fuck off. Open a Jira ticket, and then fuck you. A Jira ticket. Oh, my god. We fix it when we fix it, you know? Do you have a Jira of land, do you?
01:03:54
Speaker
Not yet, but why not? It's free now. Well, I mean, if there is something obvious to improve in code that I'm, of course, I'm open for contributions, but I'm not currently seeking for contributions. And I mean, I think the best
01:04:22
Speaker
think you can do for a view is use it and tell me about your experience with it. And I don't know, whenever I've done that, I've always found that you've told the fuck off. So I guess it depends on who opens it.
01:04:43
Speaker
But it's coming from deafened people in a direct-to-deaf null. Fuck it. I mean, I guess in that sense, it's a proper closure experience, really. It's not about me. But there is a Slack channel in Closurians. I don't tell people to fuck off there, so you can ride there.
01:05:05
Speaker
No, I mean, it's very good actually. You're very, very, what I should say, very affable and charming host. Thank you. And I think, you know, there is, as you probably with your design experience noticed that, you know, the whole
01:05:23
Speaker
Um, in general, the developer experience is less concerned about the user experience, I think most of the time. And, um, it's, I did some flash development a long time ago, uh, when it was still macro media thing. And, you know, writing code in different IDs and all that stuff. And it never goes to a point where you, you really like the tool and enjoy the experience. Okay. This is, this is very well thought out from, from, uh, user experience point of view.
01:05:54
Speaker
Well, I mean, apart from Emacs, you know, Oh, it's great. We're having a great time tonight. I think closure is about user experience. I mean, repl is a great user experience compared to compiled languages. Like being able to see the results of your code, the code immediately. I think that's a great user experience. Yeah.
01:06:26
Speaker
Yeah, I don't know. I think the problems I work in them are sort of open, so it's not like there's any obvious thing to do. For example, I was reworking a talk by Brett Victor, which is called invention on principle, which is a very interesting talk. Yeah, true.
01:06:55
Speaker
Yeah, I don't know if Closure was inspired by that or not. I think the Brett Richter talk came later, I think. Yeah, yeah. Or at least the Closure script and the fig wheel thing probably inspired by Brett Richter thing as well. Yeah. I think it's a live editing sort of thing, or live changes.
01:07:14
Speaker
Yeah, but it's like, I feel that there is a unsolved problem that I currently can't quite formulate, but I can try a little bit. And the thing is like, the tools he talks about, for example, are for problem domains that are very visual. And
01:07:38
Speaker
For visual problem domains, I mean, using some kind of reactive UI, it's sort of easy to build interactive tools. But I think the general programming is not that visual.

Challenges in Code Visualization

01:07:54
Speaker
We are dealing with highly interconnected graphs of
01:08:00
Speaker
I don't know what. Yeah, systems of components, yeah. Yeah, or symbols that have different connections and trying to display them as a box that's connected with lines. I mean, it's just a complete mess. So I think there are yet now not many good, maybe, visual metaphors for
01:08:26
Speaker
the kind of stuff we are usually dealing with like on the daily basis and well I guess apart the visual problems that we have. So this is another thing I'm thinking on is that how do you make visible what is such an abstract thing
01:08:50
Speaker
Yeah, it's like, yeah, I mean, contributions for that kind of stuff are very welcome. I think one of the things that I'm kind of interested in is these, there's a lot of this stuff around like, like you say about like graphs and nodes and edges and stuff like that. And it's a lot of still, you know, to me, that's a very interesting, like space because
01:09:20
Speaker
On the one hand, it's kind of like it's very quick to get like an unwieldy graph because, you know, if you visualize a graph that's got all these interconnected edges, then it suddenly just becomes a kind of like, you know, just a mess. It just becomes like a spider's web or, you know, it just becomes like a tall labyrinth. But, you know, if you can say, OK, well, something along the lines of
01:09:47
Speaker
if a particular predicate is true, highlight this truth through the graph, through all the vertices, through all the edges. That seems to me quite promising, but I haven't seen much around that really in a lot of these kind of graph visualization things.
01:10:07
Speaker
don't seem to be that, um, programmable. Yeah. Or maybe they're just, they're maybe just like the visual metaphor wasn't invented yet. Yeah. Oh, it's a lightest. They're not programmable. I mean, they are programmable in the sense that you can, you can program them, but I know
01:10:27
Speaker
in terms of live interactivity. Isn't this because it's too general, right? I mean, the problem domain is too general. And also, I'm assuming everybody, when they're reading the code, they will build this model in their mind. When they're working on a project, I'm pretty sure they have some idea of, in the case of closure, how the namespace are connected, how the functions are getting called by each other. Yeah, yeah. All this stuff. But yeah.
01:10:53
Speaker
Yeah, that's what was bothering me from my very first days in my career is that there is a code and there is a mental model. Yeah. And they're different. And I build this mental model from code like over the very long period of time. And it would be nice if I was able to see like to make this process of learning, of building this model more easy.
01:11:21
Speaker
Yeah, yeah. Attractable. That's the Brett Victor thing though, isn't it? That's the Brett Victor thing is that you should be able to sort of visualize from the text to some visual thing and then from the visual thing back to the text. But I think it's a very elusive kind of dream in some ways. He made some interesting examples, but it does elude us in the general sense.
01:11:49
Speaker
Yeah, I feel that all his examples are sort of about visual domains, so it's possible to
01:12:01
Speaker
I mean, one example he gave that was not visual, but was the, I think he was doing a sort, a quick sort. Yes. Yes. Yeah, I remember this example. So there's like an algorithm that you implement in a text editor on the left and on the right, there is a sort of a ripple output.
01:12:28
Speaker
Yes, exactly. Yeah. Yeah. But isn't this something like, you know, code visualization is something kind of sort of, you know, UML shit was trying to solve? But they solved it. No, they didn't. But that's what I'm saying. Because one of the, for what it's worth, I mean, when if you have large
01:12:54
Speaker
Java code base, I mean, I can quickly whip up and then say, okay, show me the class diagrams for all this shit then. Then of course, you know, it will, it will point to all the links are everywhere. And then you could at least, at least mix, you know, generate that kind of stuff, but slowly, but these kinds of tooling was, was very popular in the nineties, I guess. And then, and then later,
01:13:16
Speaker
none of the other programming languages, nobody seems to focus on this side of the programming. Like how do I visualize this one? This is a big challenge when you want to explore the code, right? I mean, I just want to open some large code base and I don't know where to start from. And then I have to have a lot of implicit knowledge about which modules are connected to what, where should I start and these kinds of things.
01:13:44
Speaker
Yeah, I just think that the metaphor of boxes connected with lines is wrong. It's like, it's very wasteful on space. It's like, you know, there's a loon along, which is a visual programming language. Yes.
01:14:01
Speaker
And I just saw some demos of it where, for example, they build the charts from to stock market tickers, like Bitcoin and Ethereum. And they have the whole screen to connect three nodes, like Bitcoin, Ethereum, and then something new that they connect to.
01:14:26
Speaker
And I mean, you can represent the same thing in text in like, you know, for words or free words, and some parents. Yeah, I mean,
01:14:42
Speaker
the text is already a very visual and dense environment. So I think text wins over boxes connected with lines. Yeah. But I think you make a good point, which is essentially the complexity budget or the complexity capabilities of visual programming is very limited.
01:15:12
Speaker
I think that's essentially the big issue. Maybe that helps in writing simpler programs, you know? If you're bringing the constraints in, then...
01:15:23
Speaker
By the time you introduce the complexity, it will be fucking in your face and like, oh, fuck, OK, this is now getting complex now. Because we hide away the complexity in text and then modules and then move that away. I mean, obviously, the rest of the 200 classes, I don't care about them. I'm only going to put an annotation in this tiny place and move on. So this shit will be much more visible if it is visual.
01:15:49
Speaker
That's the interesting part. But I think this kind of ideas keep coming to all these text-based user interface. I mean, there is this new wave of terminals that are much more richer rather than just plain dumb bash, just piping shit into text in this way and that way. And then that is another place where people are trying with
01:16:14
Speaker
web tech or make everything clickable and that kind of stuff. But doesn't it boil down essentially to Vlad's point earlier, which is essentially, and it's closure's point in general, I think, which is, or it seems to be the evolution of closure. That's the way it's going.
01:16:32
Speaker
more and more and more and more things as data. And then once you've got things as data, then they're innately more explorable and more kind of open than text or kind of classes or things like that. Because they're just more obvious and more, yeah, more explorable, more. Yeah. So until we solve this problem, it has got revealed. Yeah.
01:17:00
Speaker
Well, this is the nice thing about reveal to me is that suddenly as as closure itself is becoming more data oriented and things like tap, which I didn't get before, but now I do, thank God, you know, and as a lot of the frameworks are moving towards data as well, you know, feeding data as kind of like.
01:17:19
Speaker
input to how systems work, you know, use maps and configurations and this kind of stuff, then your ability to visualize those things, it's going to be more powerful with things like reveal. Yeah. Yeah.
01:17:38
Speaker
Yeah, and I can say that, well, Unreal already has some interesting things that I experiment with from time to time. It's like, for example, it has a ref watcher. Right. So you can create your view that is reactive on the contents of some ref. And vars are refs.
01:18:05
Speaker
So you can create a quick sort example from bread victors, where you can create a watcher that watches your expression, your var that you iterate on, and continuously show the result of evaluating it.
01:18:32
Speaker
write some codes, send the form that defines this var and it will immediately update it. And I think it might be very useful. Maybe right now it requires some setup.
01:18:56
Speaker
But I mean, that's not a big setup. It's all can be built from the built-in extensibility features. You just have to know how to use it. You're using it wrong. That's another way to close the bug. You're holding it wrong.
01:19:27
Speaker
No, I think it's very important to know that there exists something that you can use. Yeah, I think this is one of the biggest challenges with the new age UIs. I mean, the discoverability is a really big problem. And obviously, that's the reason why I prefer Space Max, because with discoverability, I just press space and I know what is available.
01:19:51
Speaker
And I think that is truly not possible in any other IDE so far, or editors. Yeah, I really love this part of Space Max. So reveal also uses space as a domain shortcut to open the context menu. So that's where you got inspiration from, Emacs, we know now.
01:20:21
Speaker
Nice. I think we're out of time now. So let's talk about Space Max then. So that's when we say, oh, no, no, no, no, no. Anyway, so any other things that you're doing that were to mention now?
01:20:44
Speaker
Because I think mostly CLJFX has multiple projects in it, I think, and Reveal, and also the bigger problem space that you're thinking about. Yeah. I'm not sure if there is anything left to mention. Well, maybe. Well, I guess.
01:21:03
Speaker
The problem is that reveal is visual and we are in the podcast where no one can see it. Yeah. Well, I guess they can visualize our podcast by now. It's basically bleeps and you know. Yeah, but I'll be giving a talk at Cyclosh on 7th of November where I will give a presentation with slides and anything.

Episode Conclusion and Upcoming Presentation

01:21:29
Speaker
And we will be talking about reveal.
01:21:32
Speaker
So if you want to have a look at it, please join. Perfect. I think hopefully our episode will be before that 7th November, because our episode is usually lazy loads. So in fact, they're going a little bit later, I don't know, depending on the situation. But if you are listening to this before 7th November, what time, by the way? Oh, I don't remember.
01:21:56
Speaker
I think. Okay, 7th November at some point, you know, follow Cyclo's Twitter account. And obviously the people at Cyclo's, they're doing some awesome stuff. So if you're listening to this before 7th November, now you know. If you're listening to this after 7th November, we told you so. Just watch the YouTube video. Watch the YouTube video, yeah. Exactly.
01:22:19
Speaker
So on that, I think you've got some very nice, just before we finish, I think you've got some very nice visualizations on the GitHub page as well and animations and stuff like this. So I think people can very quickly get a good feel for what Reveal does. Yeah. Yeah. Sorry to invite you on a podcast.
01:22:44
Speaker
We've got to make a live videos again to show what is happening. But maybe, I'm not sure. I think, Ray, you can do this on Apropo, right? Then you can show. We actually featured Portal, so I might invite Vlad on Apropo as well, because then we can do a YouTube. We do it on Discord again, but it's all kind of streamed live. So that could be another good place for you to actually do a demo on. So we can do a bit of cross-promotional work here, OK? Yeah.
01:23:14
Speaker
Yeah, I think that sounds great. Right. Excellent. Because obviously, I mean, the biggest challenge is how to visualize. We have a hard time visualizing stuff in an audio-based medium. I think it makes sense to just show it instead of telling about it. That's much easier, I guess.
01:23:33
Speaker
Yeah, I think this has been very good exploration of the ideas and of the architecture and stuff like that. But yeah, you're right. We need another way to actually show it off for real. You know, it's a pretty excellent tool. So, you know, I encourage everyone to go and try it out and have a look no matter what you edit. All edit is welcome. So it's. Oh, that is only one that matters. So as long as it has a connectivity between emails and everybody's happy.
01:24:01
Speaker
And sooner or later you will be able to control it from the Emacs. Exactly. Then it is the perfect world. Everything should be controllable from Emacs.
01:24:18
Speaker
Nice. Okay, so on that bombshell, I think we can wrap up the episode. Thanks a lot Vlad for coming on the show and then trying to explain something such a visual thing via the only sound.
01:24:40
Speaker
Thank you. Unlikely, I haven't tried it yet, so I'm going to give it a try, certainly. Then probably bother you with some questions on Slack, where I'm going to get to a point where, if I cannot connect it using Emacs, then you'll close it as won't fix. I think that will be a big fuck off. Fuck off from me. Fuck off from him. That's a perfect way to end the show. Exactly. So does everybody fuck off now?
01:25:17
Speaker
And hopefully everybody is staying safe in these times. And we will see you in another episode soon-ish. And don't forget to check out
01:25:29
Speaker
or maybe you have checked out already, 7th November, the presentation by Vlad on Cyclodge. I think you should be able to see the links for them on the regular stuff like Closure Reverse, Closure Worse, Closure Worse, and also Cyclostrator account and all of the places and Reddit. So that's it from us for this episode. Thank you.
01:25:57
Speaker
Bye! Bye bye! 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:26:19
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 closure in slack or closure verse or on Zulep or just at us at Deafened podcast on Twitter
01:26:48
Speaker
Enjoy your day and see you in the next episode.
01:27:25
Speaker
We keep insulting old guests so they will show up again to kick our asses. Who is this fucker that we've wanted to show before?