Introduction and Participants
00:00:17
Speaker
Vijay, do the opening. Yeah, go on. Okay. Welcome to Deaf and episode number 22. So, just before, okay, this is Vijay from Holland, the Hague, and we have Ray from Belgium.
Ray's Citizenship and Identity Discussion
00:00:35
Speaker
Living in Belgium. Yeah, living in Belgium. Did you become Belgian now? It's in the pipeline, but it's not quite there yet. It's a core async process.
00:00:46
Speaker
So your Belgianness is lazily loading. It's lazily loading. I'd rather be a bit more eager, but there we are.
Podcast Stats and Audience
00:00:53
Speaker
By the way, before we get on with the show, I just want to say a couple of things. So this is episode number 22 and I was looking at the stats of our show. So far we have, I think that one of the largest audience for us is in Germany, I mean after the United States, of course.
00:01:14
Speaker
It's interesting. So maybe we should start speaking German now. Yeah. And we have so far, yeah. It's going to be Das Defen. So we have almost 40,000 plays.
Euroclosure Conference Road Trip Plans
00:01:28
Speaker
And out of that, almost 15,000 from United States and then 4,000 from Germany, which is pretty cool, by the way. Yeah. Well, I think there's a pretty big closure community in Germany, isn't there? Yeah. I think maybe we should do a road trip.
00:01:43
Speaker
Yeah, well, we are going to do a road trip to Berlin, aren't we? To Berlin, yeah, for Euroclosure, yes. Yes. But actually I was thinking about that because, you know, I think the other week somebody was saying, I think it was Eric actually was saying that Europeans are spoiled by the number of conferences that they have. So what is it, America? What's the matter with you guys? You know, why don't you listen? You've got, there's no audience there, so.
00:02:09
Speaker
Another podcast would be great, I think.
Conference Culture: Europe vs America
00:02:11
Speaker
Another podcast would be great. Another conference would be great. You know, you Americans should really catch up with those Europeans. And that's, you know, you're lagging behind big time. You've got slow Internet. You've got not enough closure conferences and podcasts. So call to action, America. Come on. Do something. Yeah. OK, I think that's enough for our largest audience. You know, I think we insulted them enough. So next time it's going to be the Germany on the top now.
00:02:36
Speaker
So speaking of Europe, and then we are getting more and more European guests here. I'm not sure today's guest is European, but we'll see. I'm not good with geography, though.
00:02:53
Speaker
Jesus. Okay, we got a bit French on that one. Okay, now you heard a voice, so maybe we should introduce him.
Guest Introduction: Yohanathan Sharvat
00:03:01
Speaker
Yes. So welcome to the show. Yohanathan Sharvat, right? Did I pronounce your name correctly? You did great. Okay, thank you. So we have today our guest, Mr. Yohanathan, who is joining us from
00:03:18
Speaker
Israel, right? Yes. Which city are you based in? I'm based on a village named Tekoa that is near Jerusalem. It's a very small village with around 800 families. Wow, but better internet connection than I have apparently.
00:03:38
Speaker
Yeah, we have a good connection everywhere, almost everywhere. I just have to pray that we don't have an electrical outage, which happens from time to time. Ah, that's something that I did not hear recently.
00:03:54
Speaker
Well, you should be running on a battery. You'll be okay.
Yohanathan's Background and Clojure Discovery
00:03:57
Speaker
So, for the people who don't know about Yannathan, he's the creator of Clips, one of the, I think, very popular projects on GitHub in Clips Script these days, almost like a thousand plus stars or something. And Clips, we'll get more into that. So, before we talk about Clips, Yannathan, can you introduce yourself and tell us your journey into Closure and your experience and what you're doing with it, what you did? Yes, sure.
00:04:23
Speaker
So before closure, I was a regular software engineer doing boring stuff like C and C++. And even before I completed master's in mathematics. And I was always frustrated by the fact that I couldn't really use math at work.
00:04:49
Speaker
And then I discovered Lambda Calculus back in 2007, I think, which was something very, very challenging intellectually and very exciting for me. But I was sure that there was nothing to do with Lambda Calculus. It was just for the fun.
00:05:13
Speaker
And then one day I discovered the LISP. Great fun. Through the lectures, you know, the SICP lecture by Sussman. Yeah, yeah. Then I discovered, okay, actually you could do something with lambda calculus.
00:05:32
Speaker
But then I tried to build something in the scheme or lisp or doctor scheme and I found myself that I was like in prison because the only thing I could build is something inside kind of an idea that I had no way to communicate with the world. So I considered lisp like the Greek, something very interesting but not so useful.
00:06:00
Speaker
And then one day at work, I used to work at Conterra, I saw in the computer of the CTO,
00:06:10
Speaker
a lot of parenthesis in the wrong way, in the least way if you want. Then I told you, oh, this is least. And he told me, no, it's not least, it's closure.
Real-World Clojure Applications
00:06:20
Speaker
Oh, and then as well I was excited because this guy was very pragmatic and he told me that one of our web server, one of our web server that was doing search engine was written actually in closure.
00:06:34
Speaker
So this was... Is that an Israel, Johanathan? Yeah, it was in Israel. So Israel closure success story there? Yeah, the first and the last probably. Oh, come on. Hopefully not last. What a great start. I'm kidding. First and the last. Phew. People on Twitter are already shouting closure is dead and then long live closure. What a bunch of dicks.
00:07:02
Speaker
And then this is how I came into Closure and I worked with this guy, refactoring his code and learning. I was spending all my nights on Stack Overflow. It was before the Slack days. So I was asking a lot of questions in Stack Overflow and getting answers very, very quickly. So that was fun. And this is how I came into Closure.
00:07:29
Speaker
And when I left this company in 2013, I told this guy that introduced me to Closure that I was going to build a startup of my own with a decent part of front-end code, front-end and audiology in the web.
ClojureScript in Startups
00:07:51
Speaker
And he told me, you are going to write in ClosureScript, right? And I told him, no way.
00:07:57
Speaker
No way I'm going to recruit junior developer. There is no way that they are going to learn a ClojureScript. It will be too hard for them. But somehow I did it. And I wrote the first line of code of this company named Odix in ClojureScript. And it went pretty well. And actually I discovered that with junior developers, it goes much better than with experienced developer.
00:08:28
Speaker
to learn closure. Right. Because they've got less baggage to unpack. Yeah, they don't have to leave their comfort zone. Right. They don't have to admit that they are beginners. They are beginners, so they don't care to admit that they are beginners.
00:08:48
Speaker
But what is the size of the team that you built up? We were up to six people. And we wrote 30,000 lines of Closure Scripts. And one of my engineers gave a talk at the Closure Conch about the Odix last year in Texas about Odix. What was the subject?
00:09:16
Speaker
The subject is 30,000 lines of Closure Script Code to build the first web-based sonogram. Can you give us more details about the application itself? What does it do? Basically, it's an application for Audiology Center to do hearing tests online.
00:09:36
Speaker
and without any dedicated hardware. So basically you have your 5.1 audio system and you can do professional earring tests. Just by using browser. Yes, browser and five speakers.
00:09:53
Speaker
Yeah, software. Okay. That's very nice, actually.
Innovative ClojureScript Projects
00:09:57
Speaker
Well, Rich Hickey is Mr. Sound Recording, isn't he? So I guess you're using the platform. So I was just wondering, did he use Web Audio or other APIs or something for that? Okay. Sorry, Ray. You're saying something about Rich Hickey.
00:10:13
Speaker
Well, he is very into the audio stuff, isn't he? So it must be quite gratifying for him to see it being used as an audio platform as well. I don't know if you guys got any feedback on that at the conge. No, not for him. Not from him. No, not to worry. Just a bit of gossip. OK, when he is on the show, we are going to make him speak. OK. We are going to make him talk about this stuff.
00:10:44
Speaker
Yeah. So what happened after that? I mean, are you still going with that company? Is that still growing or what have you moved on? So I left this company and then I did a bit of Ruby and tried to introduce closure in this company, but it was not such a success. People were too mind closed, so they didn't want to hear about closure.
00:11:11
Speaker
They prefer even to write big data workers on top of Storm, which used to be written in Clojure using Java, but not Clojure. So that was a big deception for me. And then I moved to another company, Barclays Bank, where they do something very special.
00:11:39
Speaker
They wrote their own version of Closure in Scala.
00:11:47
Speaker
That runs on JVM. It's all turtles all the way down from there. Well, actually, I think Barclays Banker was one of the responsible actors for fixing the exchange rate, weren't they? The Libo scandal. So I guess if they can make their own exchange rates, they can make their own version of closure. Yeah. Yeah. This is not libelous, by the way. This is public knowledge. So, you know, don't worry. Yeah.
00:12:13
Speaker
But can you tell us a bit more about it? I mean, what do you mean by actually, is it actually real closure? It's almost closure. Not the whole closure is supported. They even have stuff that is not available in closure like anonymous macros.
00:12:30
Speaker
Don't try to think what does it mean, but it is something very deep. So they had in their evaluator, they had anonymous closure macros. They didn't have a destructuring and multi-arity. But the nice thing is that because they had the eval layer,
00:12:56
Speaker
they were able to integrate almost all the Closure stuff. So they basically they copy pasted the closure.core namespace into their own code and then it worked. Almost everything worked. That was very... Almost everything works. Perfect engineering there. Great engineering. I mean, the fact that one thing works is already a surprise.
00:13:24
Speaker
Yeah. That's very true. Yeah. I mean, we shouldn't mock somebody. But what was the reason? Yes. The reason is that I think they started not from Clojure. They started from Big Data Scala. And you know, in Big Data Scala, it's much more popular than Clojure, especially with Sparks.
00:13:41
Speaker
So they wanted to be in the Spark environment and then they decided to put a layer on top of it that could be more functional or with less boilerplate code around. So they decided to have kind of a frontend language which will be closer and then after that maybe to have other languages with other syntaxes and maybe visual languages.
00:14:07
Speaker
That's the reason why. I don't know if it was a good choice, but that's the historical reason. Fascinating. Okay, so and then what happened? And then something like two or three months ago, I decided that the bank was too big for me and to start to work for myself as a freelancer.
00:14:30
Speaker
in the world of Closure, but not only Closure, full stack web
PHP to Clojure Transformation
00:14:36
Speaker
development in general. And my first project was a refactor of a PHP server into Closure, and I was able to transform 17,000 lines of PHP into 1,700 lines of Closure.
00:14:57
Speaker
code. So Facebook is looking a lot more lean these days then. Sorry, sitting in. So Facebook is looking a lot leaner these days. Yeah. It was Facebook's written in PHP. So I guess they're the company you're working for. Yeah. But you're, you're just, um, so it's from 17,000 to almost 1.7 K. So you're already saying, Hey, you're saving a lot on the, on the disk space already.
00:15:26
Speaker
actually interesting question that though is because because people ask this question is you know what what okay 17 000 to 1700 but that in itself is a kind of a shocking number but i don't know about you but i find again there's a is it get more experienced in closure
00:15:46
Speaker
It's actually quite easy to read closure compared to PHP or Java or C because everything is kind of together and the amount of complexity inherent in the language is quite low. So even though you can bring it's weird to me, it's kind of like contradictory. Even though it's simpler, you can bring the lines of code down and retain a huge amount of simplicity compared to the other language. What do you think about that?
00:16:13
Speaker
Yeah, I think it's because you, in Closure, you always want to compose. So... Yes. You will happen to use a lot, many, many small functions that are reusable. And I think... It's kind of back to your lambda calculus thing again. Yes, something like that. Yeah. And what was the application doing, actually? So is it a web application? It was, yes, a web server for price comparison.
00:16:42
Speaker
Yeah, I was going to ask you, just back to the refactoring piece, is where did you see the biggest gains in terms of, you know, what accounted for the verbosity of PHP? Was there a lot of cut and paste, a lot of repeated code? What do you think accounted for the 10x reduction?
00:17:07
Speaker
I think there are two things. One thing may be the inherent verbosity of the language. And the other thing was that, at least for myself, I was striving for simplicity. And instead of having, for example, different suppliers with different pricing models, I always try to model them as one model with different configurations, instead of saying the model is completely different.
00:17:37
Speaker
So this is something philosophical, if you want, that one could do in PHP, but with closure, it really fits well. Because you were using data to drive the configuration, data to drive the program, basically. Yeah. And also, I think the fact that I was able to write a lot of unit tests, and that was fun.
00:18:05
Speaker
I had a lot of opportunities to refactor without being afraid of breaking code that works. So when you refactor, usually the code also shrinks a bit.
00:18:19
Speaker
Okay, so I was I was asking about the stack that he used in the in the in that application.
Web Stack Transition to Clojure
00:18:24
Speaker
So PHP, I'm assuming there is some sort of a database and other other tools. But when you switch to closure, did you did you keep the rest of the stack? Which database I use the MongoDB and my SQL, the database and the web server for I use the catacomba. Okay, that is, I've never heard of it though. Yeah, it's one of the last
00:18:47
Speaker
It's by Fancool, which is on GitHub, and there are a lot of parts. There are many parts that you need for building web server like authentication and SQL drivers, et cetera. So it's a very comprehensive stack with a decent documentation. And they're quite responsive on Slack, so it's a real pleasure to use.
00:19:18
Speaker
Okay, wow. I have never heard of them. Is it fun cool or something? Yes, fun cool. F-U-N-C-O-O-L. Ah, man. You keep learning every day. Katakumba, yes. Interesting. So is it ring based thing or is it? It's like ring, but not exactly a ring. Don't ask me to go into the details. Oh, no problem. But I'll look it up. But it's, oh, it's Neti and Rat Pack. Okay. That's interesting.
00:19:48
Speaker
Thank you. Thank you for pointing me towards this one. Of course, we know the buddy thing already. Okay. Maybe it's just one of the same people. Okay. And so maybe we should get to the next step. So you, you helped with the PHP thing and then are you still working on the project? So this project has been completed and now I'm doing other projects. One of them is on the front end side.
00:20:13
Speaker
And I had a dilemma because it's a project that I need to bootstrap and then lend the customer, yeah, lend it over to the customer. So on one hand, I really wanted to do it in ClosureScript because it's more fun and also it's a kind of job security for me. But on the other hand, I wanted to be a bit ethical.
00:20:42
Speaker
And also it was an opportunity for me to learn in-depth React in JavaScript and Redux. So I decided to go for React and Redux. And just this afternoon, I discovered a short demo on YouTube by Thomas Heller.
00:21:03
Speaker
that built a short script, Shadow CLGS, that allows you to integrate in a React project pieces of ClosureScript code. So I think I'm going to do that to write a complex logic or data manipulation in ClosureScript and integrate it into the React app.
Choosing Tech for Client Projects
00:21:27
Speaker
Okay, yeah, because I think there's a similar there's a similar kind of obviously react and reduxer following this functional programming model, but the surrounding ecosystem and language JavaScript is very weak in terms of
00:21:44
Speaker
Safety in terms of immutability know you can bring it all you can bring it all if you you know if you bring in a mutable j.s. And all these other pits and pieces, but you have to be very Careful disciplined and very careful. Yeah, yes, and that's where the weaknesses. I think whereas with closure script you have all those good defaults so you can
00:22:06
Speaker
And all those abstractions as well, you know, like core async that you can bring in that are just not available in JavaScript. Yeah. So there is something that you could look at it like something dramatic or maybe something awesome from the Closure community, because if you look at React, immutable.js and Redux,
00:22:28
Speaker
The people that made it, they mentioned everywhere that Closure Script 1 was one of the big source of inspiration. So in one sense, you could say that Closure is not a niche language because it has a huge influence. But on the other hand, Closure as itself and Closure as itself still is a niche language. So it depends how you want to look at it.
00:22:55
Speaker
Well, I think it's classic JavaScript, isn't it, where they adopt the parts that they see that are nice. And kudos to the first book engineers for seeing that and for doing that implementation. I think it's an awesome job. But it doesn't rid you of the platform. It doesn't rid you of the language weaknesses of JavaScript.
00:23:20
Speaker
Like I say, you just have to be incredibly careful and disciplined to stay within those parameters. I've worked with many engineers who, despite liking what JavaScript gives you and what immutable JS gives you and all these other things in React, are very tempted, always very tempted just to slip outside of it.
00:23:42
Speaker
Just one little bit of variability, please. Just one little variable. Yeah. It's dangerous. Anyway, yeah. So, but you're right. It's a good influence. I mean, you know, closure is having a good influence in a broader sense.
00:23:56
Speaker
But that is the point, right? Because when most of these languages, for example, Haskell has the similar kind of notion when the ideas from Haskell are pulled into the other languages slowly. And closure is closure. I think it's a slightly more practical compared to Haskell or more better. I don't know, it has a better reach.
00:24:15
Speaker
probably because of the JVM. But more and more, I see that if you have those ideas incorporated back into some of those mainstream languages, you're already getting a bit more mindshare. So that in itself is a nice idea.
00:24:30
Speaker
I think that just a small issue on that one. I think what interests me is, and we come on to what Jonathan is doing with clips, is that I think part of the problem with Haskell and to a lesser extent closure, but certainly closure as well, is
00:24:49
Speaker
that the tools on top of the language don't have as many engineering resources as JavaScript has. If you've got half a dozen engineers or a dozen engineers at Facebook working on one library, then they're gonna polish it, and they're gonna document it, and they're gonna blog about it, and they're gonna have conferences about it, and YouTube about it, and they're gonna pimp the hell out of this thing. And of course, it's in every browser, so people, it's more readily
00:25:20
Speaker
acceptable to people you know because they're kind of already in the swim of things and they've got those huge engineering resources at Facebook and Google and all those other guys whereas you know what we're talking about here with ClosureScript and Closure is generally kind of you know ad hoc efforts and getting getting the rocket ship taken off is a little bit more difficult then you know
00:25:43
Speaker
But I think we've gone.
Clojure Community Values
00:25:46
Speaker
If you look at the closure community, at least until last year, they were not so interested by promoting closure.
00:25:57
Speaker
by having a decent website, by having easy tutorials, simple tutorials. They care more about the truth, the fact that the language is great. And then you want to join, please join, but if you don't want to join, it's your problem. So this philosophy has limits. You need to be a marketing sales guy to promote your language.
00:26:25
Speaker
Hey, we're doing our job with the podcast. Yeah, exactly. A bit. Yeah, but you're right. That's true, I think it's true. Yeah, that is true because, you know, most of these languages need a lot of marketing. I mean, if you see the other languages, they are pitched a lot. And when you talk about tooling, for example, you know, I do Scala during the day. And if you remember in the beginning for Scala, I mean, there was no intelligence support, there was no IDE support. And Scala is not that like a
00:26:54
Speaker
lightweight Lisp type of language that you can just plug into the editors easily. So there was this Eclipse plugin that was blessed by Martin Odensky and others, which was pretty horrible. Not just because the plugin itself, but Eclipse has become something like a beast or the period.
00:27:11
Speaker
And so the tooling was horrible. Compilation times were very slow initially. And there were a lot of issues that were bogging down the language initially. But still, it got a lot of pine share because of, OK, I don't want to call it just pure marketing. Of course, every language has its pros and cons. I'm being a bit more diplomatic today, less than usual, more than usual. But with closure, I think it is picking up. I mean, if you see the tooling available now with
00:27:41
Speaker
with the cursive and other things. It is slowly picking up. And as you said, you're perfectly right that the closure.org was not at all like, okay, I want to learn this language. It was just a wiki, a bunch of pages. So now I think the cognitive is putting a lot of effort into that one. At least that's how I see. And they're publishing case studies, for example. So that's already a big step, I think.
00:28:08
Speaker
I think for me, though, I think the sort of work that you're doing, Jonathan, is really important because what we're suffering from, I think, is a lack of onboarding capability. I think the learning curve is still too high, access to the tools is still too complex.
00:28:28
Speaker
And actually, we should come on to this. Let's get clips front and centre now because I think it's an amazing piece of work and I think it addresses definitely an issue about how do we onboard people into the closure community.
Development of Clips
00:28:45
Speaker
I know you've got bigger ambitions than that, but let's start there.
00:28:49
Speaker
So tell us a bit about Clips. What kind of motivated you to write the tool? Just tell us a bit about the background of the project. Yeah, so there is the history of Clips.
00:29:05
Speaker
And there is the backstory. So after you have done this, you say, oh, I did it because. So let's start with the history. At the beginning, there was a closure. Then came closure script.
00:29:26
Speaker
Then in July 2015 came Selfforce Closure Script. And there is this amazing post by David Nolan, Closure Script can compile itself. So basically, he was able to write eval in Closure Script. And it means that he had a short demo on the blog itself where he was able to
00:29:53
Speaker
to run a piece of code inside the blog post with code mirror and nice fonts and colors, et cetera. And I was really excited by seeing that, by the fact that I could press some button in the web page and see the result of the evaluation and modify a bit the code and see how it evolves. So that was the first step.
00:30:19
Speaker
Then I watched a video by some girl, I always forgot her name, Maria, something that made a project on Google code. And she helped in this Salesforce Closure Script. And she explained exactly the inside of the Closure Script compiler. Yeah, you know who I'm talking about.
00:30:46
Speaker
Yeah, I think she gave a talk at Closure Code as well, right? I think that's what he's talking about, yeah. And again, in her slides, she used Bootstrap Closure Script to demonstrate that you can modify the background color of the slide by executing a piece of Closure Script code. And I was, again, excited by that.
00:31:07
Speaker
And then completely not related to that, I had a question about, I don't remember exactly, extend protocol or extend type in ClojureScript. So that was something very, very deep in the language. And I asked a question on the Google Groups, and someone explained that when you extend the type, it depends if it's a native JavaScript type or a ClojureScript type,
00:31:35
Speaker
many many details and I wanted to check these answers and the best way to check would be to compile two lines of code with extend and to see what the compiler is going to do with disclosure script code. So I had a running project with my 30,000 lines of code so it was not a problem for me to create a small file with the excerpt of the code and to see the result.
00:32:02
Speaker
But then I said to myself, why do I have to create a project just to see the transpilation of a Closure snippet? I heard this talk about Maria Geller that you can compile ClosureScript on the web page. So I was sure that there was plenty of tools to compile ClosureScript on the web page. And I looked for such tools and I couldn't find anything. So I decided to do one of my own.
00:32:32
Speaker
So I met with five lines of code, the first version of Clips, where I had four quadrants, and one quadrant, the closure code, the second quadrant, the transpilation of the code, and in the third quadrant, the evaluation of the code. And that's it, that was the beginning of Clips.
00:32:56
Speaker
And then one of my friends at work did a bit of design to make it not so ugly. Still ugly but not so ugly. By the way, you can see it. It's here.
00:33:10
Speaker
It has not evolved too much over the bounces from the design perspective. It has evolved from the features perspective. So I stayed with that. And then I started to be interested in digging into the details of the language and to see how different pieces of code are going to be transpired from Clojure script to JavaScript.
00:33:35
Speaker
And then I started to blog about it. So I always dreamt to be a blogger, but I had nothing to blog about. And it always seems like some sense. I also say that it is too complicated to
00:33:52
Speaker
to have a domain and a blog and a platform and so many technical stuff to do. So I never did it. And then I discovered that it's not too complicated to use Jekyll and to host your blog on the GitHub pages and to buy a domain for $2 for the first year and then $30 for the second year.
00:34:14
Speaker
That's how they pull you in, it's like dope peddlers. So I wrote my first blog post telling the story of clips and then I wanted to put interactive snippet into the blog post.
00:34:30
Speaker
So the way I did it was by embedding an iframe of this kind of ugly app inside blog post. And I did it and it worked pretty well. And then the dynamics was that I had to implement new features to serve my needs as a blogger.
00:34:53
Speaker
For example, I didn't need every time the four quadrants. Usually, I need only two of them, either the translation result or the eval result.
00:35:02
Speaker
So, and then this was how I ran for, I don't know, maybe four or five months else, writing, being excited by writing more and more blog posts and discovering the depths of the language. But then it had some limits because it was not too convenient to always have to create
00:35:24
Speaker
clips snippet embedded into an iframe having to deal with the width and the height of the iframe, et cetera. It was a real headache. And then I discussed with, we had a brainstorm with a couple of persons in Israel that was interested by clips and one that visited in Israel, a smart guy named Chris Zeng that built a couple of nice closure library. And he gave me this idea of creating
00:35:53
Speaker
of making the process much, much smoother for bloggers to integrate, to embed interactive snippets. And then I said to myself, no, it's not so hard to have a JavaScript tag, a regular plugin that will take several DOM elements from the DOM and crucify them. And this is how, I think it was in June 2016,
00:36:23
Speaker
That was the first release of the Clips plugin. So where did the name come from? OK, so I wanted something that reminds Lisp. So Clips is almost the same as Lisp. And Clips in Hebrew is the thing that you use to catch the laundry.
00:36:46
Speaker
When you want to dry it out, there is the... Like pegs. Like a clip. Yeah, clips. We call them clips as well. And I don't know, somehow it makes me good association to try to clip something or...
00:37:01
Speaker
Oh, okay. Respite, if you want. Yeah, yeah, yeah, yeah. That's nice. Can you just give us a little bit of, I mean, one of the things that, you know, we spoke over the past couple of weeks, months even, I think, about the fact I did a couple of blog posts using clips. And can you tell us a little bit about the CodeMirror part? Because that's the bit I was, I didn't understand very well until now. Well.
00:37:30
Speaker
Not until it's very moment, but until recently. Yeah, so CodeMirror is an amazing JavaScript library that allows you to embed a mini ID inside the web page. And when I say ID, I mean syntax highlighting and automatic parameters is closing and a bit of key maps.
00:37:54
Speaker
So this is, I don't know, several years old JavaScript library, and almost every webpage that you will see that where there is pieces of code, it is powered by CodeMirror. And it's super simple to add it on the webpage, or maybe on the blog, or on the web app. So this is CodeMirror.
00:38:22
Speaker
So when you want to use clips on the blog post, you get CodeMirror for free. It's bundled into clips. So is that how you, sorry, I was just going to say, is that how you do the highlighting? You integrate with your extend CodeMirror in some way, or is it already built in? No, I'm just using CodeMirror almost as it.
00:38:47
Speaker
Does it support Closure? Does it have a Closure binding? Yes, yes. The Closure Script binding. They support a hundred languages. One of them is Closure, they support JavaScript, they even support Brainfuck.
00:39:03
Speaker
I was wondering how you got support for that in your repository. Yes. So I think that is the most important language right now. It's coming up. Exactly. I think that is the next biggest language. It's next Java, next C, next everything. We didn't need two links for that. Exactly.
00:39:28
Speaker
So you built whole clips using ClosureScript, right? It's a pretty much a completely ClosureScript based thing.
00:39:42
Speaker
And you have different backgrounds as well for it. So initially it was basically for Clojure script, but then you added different language backgrounds to that. Can you explain a bit about how those things work? Yes. So I wanted to be famous. And then I said to myself that... Trust us. Once this episode is out, you're going to be like...
00:40:04
Speaker
I'm sorry, I forgot your village name. So you already told the village name. So there are going to be people flying there and there will be eight strips and helicopters landing. Yeah, I'm sure. We're getting all the attention now.
00:40:16
Speaker
We're happy to share. I think Trump will drop by in his visit. Yeah. Yeah. Sure. That's true. Sorry. Yeah. So different languages. Yeah. So I said to myself, why supporting only a closer script? I can support JavaScript because JavaScript is obviously self-hosted. It has this
00:40:36
Speaker
this metric function called eval. So I can eval any piece of JavaScript code. So it was a no-brainer to integrate JavaScript into Clips. And then I looked for other languages that have
00:40:51
Speaker
an evaluator inside the browser. And then you need to be a very, I need to do a refinement. So there are many, many, many languages that are transpiled into JavaScript, like Scala. For example, there is Scala.js. And there is also FSharp.js. It's named Fable. And there is Ruby.js. And there is Python.js. And there is everything, almost everything.js.
00:41:19
Speaker
But it doesn't mean that all of these languages can be evaluated in the browser. So if you go back into the ClojureScript story, before 2015, it was possible to transpile Clojure code into JavaScript, but for that you needed Clojure running on the JVM. It was only in 2015 that the JVM-based compiler was bootstrapped.
00:41:47
Speaker
So the same for Scala. Scala, as far as I know, you can, there is a Scala piece of code that knows to transpire Scala code into JavaScript, but this compiler is not bootstrapped yet. So you cannot run Scala in the browser. I mean, you cannot evaluate Scala code inside the browser. And if you go to the Scala console demo, you will see that in order to evaluate the Scala code,
00:42:14
Speaker
they do it with the help of a back-end. So they send the code to a back-end that returns the JavaScript back. I think that was the thing that Fogus did, wasn't it, in the first place? Yes. I think Fogus had a site up like that. Closerscript.net, et cetera. It was evaluated in the back-end. Since last year, I have started to look for languages that are
00:42:44
Speaker
that can be evaluated in the browser. And I found a couple of
Clips' Multi-language Support
00:42:48
Speaker
them. The first one was Ruby. There is an amazing project named Opal that can evaluate Ruby code in the browser. And then I found Python with a project named sculpt that can evaluate Python code in the browser. And then I even found something for PHP.
00:43:12
Speaker
Your old favorite. Yeah, my favorite. And then after that, I found something for C++ or at least part of C++. Okay. And there is also Lua. Someone wrote a Lua transpiler and brainfap, as I mentioned.
00:43:37
Speaker
This is the brain for a kind of presentation. What about these like these pure script or typescript or these more closely? Yeah, so I could also, yeah, so I did also Magdon, just for the fun, because Magdon has a version of it. Magdon JS. Oh, by the way, I did also HTML, which is pretty simple, but it's cool. Yeah. So you can have inside the blog post and Cliffs blog post pieces of HTML and
00:44:06
Speaker
just have to read the HTML render. And I wrote... Isn't that what the browser is doing already? Yes, but in the browser, you cannot modify the source of the page. Yeah, that's true. Unless you read the source. That's React.js is forget HTML. We just embed all of the HTML inside of JavaScript. Yes. Yes. But the thing I wanted to tell you about HTML is...
00:44:36
Speaker
Oh, by the way, you can do also SVG because SVG is just part of HTML. So you can build nice tutorials about SVG and about CSS and whatnot. So if you look at the page I just sent here in the chat, I don't know if it's available for the listener. We will show it out, app.clips.tech. No, another one, read.clips.tech.
00:45:00
Speaker
Okay, we'll add it to the show notes. So here there is a page with a couple of clips snippets in HTML and one, so take a deep breath, one of the snippets is a full HTML page with an iframe that embeds clips itself, the clips plugin itself inside HTML. It's turtles all the way down, absolutely. And somehow it works.
00:45:30
Speaker
Oh man. It's a clip-ception. Someone called it. Okay, so you're really going all the way deep on this clips thing. So just to change the gears a little bit then, Jonathan, one of the things we spoke about a while ago as I was doing some of these clips with you
00:45:51
Speaker
Was the the sort of background to this stuff this interactive coding stuff So I think we've both seen we've all seen and if you haven't seen it the Brett Victor demonstration of interactive coding Did that serve as a good inspiration for your work? Sorry, I couldn't hear which one
00:46:14
Speaker
The Brett Victor video. Yes, yes, yes. I watched this amazing video. Inventing in principle, yes. A couple of years ago. Yes, when I saw that I was free. I was completely, it was completely mind-blowing. And I hope that in a sense this is what Crips tries to do. And the nice thing is that it's available for everyone. You don't need a special tool. You don't need to install anything in your machine.
00:46:45
Speaker
You're just in the browser. Yeah, that's the nice thing I thought about it, actually, was some people asked me on Twitter about what did you use to do it, how hard was it, et cetera. And I've got to say, as a user experience, it was pretty straightforward. You just essentially put a clips tag up, you just embed, make a link to the project and to the CSS, and then you just put the tags, the clips tags before and after your code, and bam, you're pretty much done.
00:47:15
Speaker
There are some extra tricks and fun bits you can do afterwards, but that was it. I personally found that I had assumed that it would be much more complex than that. But actually, it was very easy to embed code and to make it live. It was a beautiful thing, yeah. I try to make it as simple as possible, mostly because I am my
00:47:43
Speaker
I'm just praising you, it's okay. I mean, this is the consequence of the fact that I am my own customer. So I'm building this tool mostly for myself, at least at the beginning. So I'm in for the most difficult customer.
00:48:02
Speaker
with a pretty high standard. So you're like, OK, screw this. I don't like this one. So you keep rejecting your own code. But what are your plans for this one, by the way? Where do you want to take the project? Of course, you explained its uses already. And I see just as an exploration platform that you don't need to install anything. You can play with multiple languages. But where are you heading? What is the big vision around it?
00:48:32
Speaker
I think the challenge now is to increase the adoption in both enclosure community because I think that we are not there yet. Many, many people are not aware of it or many good bloggers haven't tried clips even because I don't know, they are probably busy with so many good ideas.
Clips in Education and Challenges
00:48:59
Speaker
So this would be my first challenge or my first objective to have, I don't know, 30 or 30, 50% of the Closure Blogger that have at least written one blog post with clips. And the big challenge would be to do the same with the JavaScript community, where there are many, many, many tutorials out there, React, Redux, Ramda, image.js,
00:49:29
Speaker
Yeah. Quick question for you over there in Cognitech land. Why don't you talk to Jonathan and put clips on the front page of the Cognitech of the closure.org website? Because to me, this would be a great thing to have people come to the closure.org and be able to immediately start evaluating code.
00:49:51
Speaker
This is an obvious thing to do and it's actually something that I'm doing for the Belgian closure group You know as part of our as part of our meetup sort of site Or like the page we're gonna have off that And I'll have some you know, very like one-liner type things. This is what closure looks like This is how easy it is to evaluate do it right now yeah, that's funny because the objection I got back is
00:50:18
Speaker
I, so obviously I asked people, uh, I asked Alex Miller for, I suggested this idea. And the reason, uh, there is even, uh, an issue on one of the closure.org repository about that not opened by me, opened by someone else. And the objection I got was no, it's not a good idea because it's going to slow down the page. Oh, okay. That's.
00:50:46
Speaker
Interesting. But I remember in most of the... Well, if it is not the home page, there can be a button that says try and then you go to a different page and that page can be slow, right? When the rest of the shift can be fast. But now I want to be honest and to mention one big issue that there is with clips.
00:51:10
Speaker
So another candidate for being a very nice host to clips would be the amazing closure docs.org. Where you see a lot of documentation examples. But there, at least for the world, it's impossible to be there because of security issues. Can you see why? Tell us a bit more about that then.
00:51:37
Speaker
Yes. So basically, if you host a page that contains a clip snippet, this clip snippet runs inside the page and has unlimited access to the page resources. So it can steal cookies, it can do
00:51:57
Speaker
It can get the login credentials and do a lot of bad stuff that you don't want to do. So if you are the one that writes a page on your own blog,
00:52:12
Speaker
You're not going to be to destroy yourself, right? You're not going to write code that still cookies for your user. And anyway, you can do that by adding a script tag to your blog post. So that's not an issue. But if you're on the platform, like closeyourdogs.org, where everybody can upload code examples,
00:52:33
Speaker
and clip snippets, so it's too dangerous. Because if I am a malicious user, I can upload an example for the map function that will steal cookies from everyone that will load this page.
00:52:48
Speaker
So, where the platform is, I don't know how to call it, the Web 2.0 platform, where a visitor can edit the content of the platform, where the content is user-generated, for the moment clips is not acceptable because it has a security hold.
00:53:07
Speaker
But is it something that you're considering to make clips a bit more sandboxed or prevent some sort of things? I'm considering it. I tried to cut a low-hanging fruit and to do it with just a sandbox version of JavaScript event, but it doesn't work. The proper way for doing it is to run the code inside the web worker with limited access.
00:53:38
Speaker
and then it will be sandbox and that will be okay. Okay, so it is in the pipeline? It is in the pipeline, yes. Actually, if you go to the Clips project on GitHub, there are a lot of issues opened by me for new features, and there is this Kanban board in GitHub, so you can see there a couple of ideas that I have. Code completion also would be a good idea.
00:54:05
Speaker
being able to get the source of the code, like in a record. Well, you can always improve things. So what you're saying is that just to review this, so security wise, there isn't really a problem with putting clips on your blog. There's no security problems there. It's just taking random bits of clips from the internet where there's a problem. Yes, exactly.
00:54:31
Speaker
Okay, so we don't want to frighten the bloggers off there. It would be nice, but this security hall kind of kills it. So it's just for those platforms, yeah. Okay. Yeah, so it's not a feed for medium, for example. You cannot use clips on medium. Right. It's too dangerous. Yeah.
00:54:51
Speaker
But you can use it on the, so you cannot use clips on GitHub also on your, you cannot put clips on your README because on GitHub you cannot embed any script tag, but you can use Gitbook. So there is a clips plugin for Gitbook. Okay, so you can make complete interactive things when you're writing a book about any of these languages that you support. Yes, exactly. That's pretty cool actually. Yeah, I've seen your GitHub book. It's very nice, yeah.
00:55:19
Speaker
And there is someone that is building a GitHub book about React with interactive examples. Okay. It almost aligns with the breakfast idea of, you know, you read something and then you just immediately try it out and then see how it works. I'm experimenting with the pages. Yes. And by the way, one of the things that I have been doing over the last weeks was giving closure workshops in the companies here in Israel.
00:55:48
Speaker
So deep closure workshops, four days workshop. And obviously I use the clips with HTML based slides powered by DeckJS. And by the way, there is a company in London named Jaxxed.
00:56:08
Speaker
And they made a Mac file or a Mac system. They created a script for a Mac script for embedding clips into a deck.js presentation using AskiDoc.
00:56:28
Speaker
So I saw a presentation by Malcolm here because they were also, you know, sponsors for Dutch closure day, which I organized. So he talked about that in this presentation.
00:56:42
Speaker
Yeah. So I use their tool because it's much more fun to use Magdon or Askeydock instead of PlayHTML to build slides. And I created many, many decks in order to teach the closure basics. And it was an amazing experience for the students because they didn't have to install anything.
00:57:06
Speaker
And they could solve the exercise that I gave them right into the presentation. And actually, when I gave a talk about Core Async, I didn't use clips because there is too much of a difference between the Closure version of Core Async and the Closure Script version of Core Async. Because in Closure Script, there is only the Async version of Core Async and not the synchronous API.
00:57:36
Speaker
Of course, yeah. So I had to teach them inside the IDE. So first of all, the slides were ugly because it was justified, a closure file. And then we wasted maybe an hour because everyone had his own IDE where the repo was not properly set up.
00:57:56
Speaker
And so the students were not able to run the code examples, and we really wasted an hour. Okay, you are using Atom, you are using ZI, you are using Emacs, let's set up a ripple, and it doesn't run here, it runs there. So it's a completely, and I'm talking about closure programmers, right?
00:58:17
Speaker
Yeah, yeah. When you write a blog post, nobody is going to never, ever, never, ever clone your repository. It's impossible. Nobody. That's true. So you're giving four days workshop enclosure. That's an interesting topic. So what do you cover in that one, four days?
00:58:43
Speaker
Yes, so in this one, there were two groups, basic, beginners and advanced. So with the beginners, I covered the syntax of closure, the high order function, the immutable data structure, lazy sequences, testing, a bit of testing, pattern matching, multi-arity, polymorphism,
00:59:12
Speaker
And with the advanced group, we had a deep session about ClosureSpec, a deep one about macros, and another one about co-racing and pattern matching. And by the way, during the ClosureSpec talk, one of the students found a security hole in ClosureSpec. Oh, cool. Well, not that cool, but okay. What?
00:59:41
Speaker
Not that cool, but okay. Yeah. So we stopped. It was amazing because all these people, all these programmers were not so much into the Closure community. So they were not aware of Slack. So I stopped. When the student discovered the bag, I stopped the workshop.
01:00:00
Speaker
Everyone went into Slack, and we started to send messages to Alex Miller and find, here there is a bug, there is an issue, and people from all around the world were reacting, yeah, you found something very interesting. And at the end, Alex Miller said, it's not a bug, it's a feature.
01:00:21
Speaker
That's the proper defense against bugs. We don't write bugs. We just make them by design. But I'm curious about that one, though. Do you remember any background of that feature? Yes, yes. So in Closure Spec, you can spec a map, right, with s slash k. And there is something very confusing that even the keys that you don't specify into your definition
01:00:50
Speaker
they're going to be conformed. So let's say that you have a spec named AAA, and in your map, you don't talk about AAA. If you try to conform a map that contains AAA, it will be conformed, right?
01:01:09
Speaker
So every key is optional in a sense. Every key in the map is optional. If there is a spec that matches one of the keys, it is going to be checked by closure spec. And you cannot avoid it.
01:01:23
Speaker
I think that is a design feature though, because I think what they said was they didn't want to make it strict. Yes, I know. They didn't want to circuit. Only these keys are allowed in, so... So that's not the bag. That is a design choice and fails. Okay, that's the design. Not the bag. Is that... Imagine that I'm importing... Yeah, so that's the design and it's a bit confusing, but you can agree with that. Now the problem is that, let's say I'm importing a library,
01:01:52
Speaker
And someone wrote a spec called AAA slash BBB. And there is a bug in this spec. Maybe an infinity clue, maybe a security hole, or I don't know what. If someone is passing me to my web server, a JSON that contains AAA slash B, when I'm going to read this JSON,
01:02:12
Speaker
It is going, the key is going to be interpreted as a namespace key. And I'm going to run the code of your spec that you wrote in the library that I just imported. And I'm not aware at all of this spec. So that's a huge security hole. Because it's- But in the production, do you think, well, I don't want to speculate if you pardon the pun.
01:02:40
Speaker
on spec that much, but it's still in alpha, first of all, and it's out of core, a lot of core now. But one of the things that I maybe understood is that you're not going to run it on production. It's only for validating your core.
01:02:56
Speaker
Sometimes you want to validate the parameter that you get, so you are going to use conform explicitly. I'm not talking about the implicit conforming that is going to happen. I'm going on place, I'm talking about the front-tier of the API you want to conform. And if by mistake one person has created a malicious spec, then you are dumb and you cannot avoid it.
01:03:21
Speaker
Yeah, that's true. Yeah, I think saying keep it out of production is a bit of a kind of, yeah, tricky one, really. You know, I think normally the reason why they say don't put it into production is because of performance issues and that, you know, that's true. And that's up to you then. You know, you can make a choice whether you want to value performance of correctness. Yeah.
01:03:47
Speaker
But I think you're right, Jonathan, if correctness is compromised by it, then it's a weakness here. OK. I just looked at the time, by the way. We're wrapping on here and it's like we're well over an hour. So I think we should. We've got so much more to talk about. It's like it's crazy. Exactly.
01:04:11
Speaker
And I was just about to ask you, maybe on a different note, that before the show you were just chatting and you were telling that you were teaching your girl's closure. So are they like the beta testors for clips or how are you teaching them?
Teaching Clojure to Kids with Clips
01:04:26
Speaker
Completely. So there is a cool experiment named kids.clips.tech, where I wrote something like six or seven articles just for my daughter.
01:04:42
Speaker
By the way, there are 13 and 14, but it was a year ago, so there were 12 and 13. And I tried to bet on something that you can teach computer languages without having animation or code monkeys or someone that needs to grab banana. Yeah, like real coding. Yeah, I mean, the code itself, if it's interactive, should be interesting enough.
01:05:14
Speaker
So I tried this experiment. I don't know if it's a success or not, but my girls were excited when I told them that the article I wrote for them was going to be live. And when we saw on Acorn News how many people say, yeah, we like it and all the points, they were completely excited.
01:05:36
Speaker
They're reading Hacker News every day. That's already impressive. Not every day. Every day that their father is on the front page. I think every day they're busy writing code, not slacking on Hacker News. That's very nice. I mean, you're making future generations of closure programmers. By the way, the experiment failed a bit when I had to teach them what is a function.
01:06:04
Speaker
I couldn't find, so evaluating code is pretty simple. You do plus two, three, you get five. But when I couldn't find a good way to explain what does it mean to build a function? To reuse something, to compose, it's a box that receives something and returns something. So this is where I stopped the experiment.
01:06:28
Speaker
Yeah. I think the Lego people on theirs, they have these blocks, don't they? I think that's what they use, these block metaphors, like Lego blocks. But yeah, it's tricky. Yeah, kids are awkward. But also, these things build up on different concepts, right? I mean, it's not like
01:06:50
Speaker
It takes some some other experimentation to see the abstractness of the things probably for. When explaining Haskell shit for for most of the people is already a big challenge i mean when the more higher levels abstraction you go to the more difficult to explain when people ask okay is it actually a list or no it's a monad oh is it an option no it's a monad okay what.
01:07:16
Speaker
But what is it? Yes, list is a monad. But still, monad is a different thing. It has laws. But the abstraction level, I think it will take a couple of iterations to just get a hang of it, I think. But this looks pretty cool, by the way. I think I should try it. Maybe I'll get some. Maybe finally, I'll understand closure if I go through this thing. But very nice. Very nice. OK. So as Ray was saying, I think we are almost out of time.
01:07:45
Speaker
Plenty of stuff to talk about. Maybe we'll have you again on the show, maybe, to see how you're doing with your new adventure of being an independent consultant in... Sorry, what was your place name again? Tekoa. Tekoa. Okay, Tekoa, near Jerusalem.
01:08:04
Speaker
Okay, okay, cool. So, I know the tech scene of Israel, every now and then it comes up in the news that okay, there's like very advanced tech scene there and hopefully you'll get more and more people interested in enclosure there and you're getting them excited with your workshops.
01:08:20
Speaker
So that's pretty awesome. And I know it took a long time for us to schedule this one, but I'm finally glad that we are having you on the show. Yeah, pleasure is mine. Yeah, it's perfect. Anything else, Ray, that we want to talk about?
01:08:36
Speaker
There was just one, I mean it's a small thing actually but we were having a little, I was watching a video actually of Jonathan a while ago and I noticed when you were presenting you couldn't touch the computer, you could talk but you couldn't touch the computer because you were obeying the Sabbath.
Sabbath Observance and Tech Breaks
01:08:58
Speaker
So what's that like for a programmer where you can't touch the computer for a day a week?
01:09:05
Speaker
Yeah, so I'm an observant Jewish. So every Saturday I have to rest. And rest means to do spiritual stuff like praying or meditating, walking or learning the Bible. And you are not supposed to touch any electricity or electrical device.
01:09:30
Speaker
So you are not allowed to cook. You are not allowed to switch the light. You need to prepare everything in advance. So we have timers in our house. Timers that control when the light is going to switch on and switch off. And so you cannot touch a computer yet. Maybe the rabbis will become
01:09:53
Speaker
More more advanced. But can't you do something like Alexa, turn on the lights? Yeah, I don't know. You're not touching technically. Yeah, maybe. That must be one of these theological fine points then, where the rabbis have to have some sort of summit to agree with how Alexa is allowed on Saturday.
01:10:18
Speaker
But actually I think it's a blessing because the whole week I'm in the hurry of interactivity and reading, writing, and checking on Slack if somebody mentioned me on Twitter, etc.
01:10:32
Speaker
And even if it's hard, I think it's really important for my mental health to stop for 25 hours and to say never mind. I want to stop everything and to concentrate on something maybe more important in order to refresh and
01:10:53
Speaker
Yeah, I think having that kind of downtime really helps, right? I mean, it is your brain booting up again. That's interesting. I think it's very easy for tech people to burn out, isn't it, on obsessing over these things. So it's good to have a very clear break there. I get burnt out on some of these things sometimes.
01:11:16
Speaker
I've been trying different techniques as well. I switched my phone to grayscale and my watch to grayscale. That kind of calms me down if you use the grayscale thing because everything looks the same. Now if I switch to the color to see some photos or something, suddenly I see a burst of colors into my eyes. I'm like, holy crap. Another thing is I ordered Nokia 3310, so I'm hoping in our next...
01:11:41
Speaker
Next one, I'm going to use Nokia 3310 for some time and then see, actually, a phone. You're a hipster. That's a total hipster move. Either you're a hipster or you're getting into drug dealing. One of the two. Soon, soon.
01:11:58
Speaker
I'm looking for alternative careers, so why not? But anyway, it sounds like a very nice idea and then your brain reboots and then... It's not mine, by the way. It's a 2000 year old idea. They already envisioned it. People are going to get bombarded by this shit so much that they need this break all the time, which makes sense.
01:12:23
Speaker
Okay, on that note, I think we'd like to, you know, read out some credits and then close the show. I think we had a fantastic talk and thanks a lot for joining all the way from Te Kova. Yeah. You have another? And hopefully, I think, you know,
01:12:45
Speaker
We'll get back to you, we'll get you back on the show again or we'll keep in touch and Clips goes into practically every blog post about closure.
01:12:56
Speaker
Yeah. Okay. I have a blog, so I'm going to make sure that I'm going to use clips for the next blog post. I'm going to write a book closure. That'll be a hundred percent. That'll be a hundred percent support from from Deafen because I've already used it on a couple of blog posts. I'm a big fan. So we're halfway there. So next time, come on, we have to hold our feet to the fire or anything. We have to be a hundred percent pure eclipsified. OK.
01:13:23
Speaker
Yeah. 50% conversion rate is already nice. That's pretty good, actually. Yeah. You live with that. Yeah, it's true. And good luck on your projects and your endeavor on being an independent consultant. And we hope you're going to get more exposure in and around, not only just in Israel and from around the world. Thank you. And please, and thank you for making this amazing tool for the community and releasing it for free.
01:13:53
Speaker
Hopefully, there'll be more visibility to the tool and maybe one day we can convince Alex Miller at all to put clips somewhere. Yes. We'll see. Come on, Alex. Yeah. That's it from us today and maybe Ray will roll the credits.
01:14:12
Speaker
Okay. Yeah, no worries. Yeah. So okay, so we get the music from Pizzeri, the vegetarian music, the veggie burger.
01:14:27
Speaker
Melon hamburger. If you want to visit his SoundCloud, that'd be really good. And then we have the sound guy, Wouter, who is doing all the tricks and tips on making an audio fest for everybody on the Deafen.
01:14:45
Speaker
And then finally we have Luboff who's done the artwork and all of the materials for us and she's done a great job and she's an independent artist and you follow her on Twitter and you can see her work and she sells that kind of stuff so anything you can do to support her and say how awesome her stuff is that would be great.
01:15:07
Speaker
So that's it. So like you say, Vijay, thanks again, Jonathan, for all your work and for coming on the show. It's been a real pleasure. We've had a few technical issues on this one, but I think it's came out pretty well overall, I think. And I think you represent the tool very well. I think you represent your work very well.
01:15:29
Speaker
and I'm looking forward to doing more stuff with clips in the future. I think it's a fantastic piece of work and congratulations on that and best of luck for the future. Thank you. Thank you for having me. It was a real pleasure. Okay. Yeah. Awesome. Thank you. Bye. Bye.