Introduction and Episode Overview
00:00:15
Speaker
episode number 67 quite possibly the last episode of this year or maybe more who knows um are you trying to tell me something here dad don't know
00:00:33
Speaker
Alan, we are really good at
Focus on Latin America and Cultural Insights
00:00:35
Speaker
keeping up with the schedule as our dedicated audience members. Plural knows, you know, like we're like clockwork, like a disabled clock. Sometimes we do release episodes. So this is episode number 67. This time we went all the way to
00:00:57
Speaker
Latin America. Is this still Latin America? Okay. Apologies. My geography knowledge is like negative 70 or something. So welcome to the episode. So my name is Vijay and I'm currently in Holland.
00:01:15
Speaker
And we have our our co-host from the same time zone, Mr Ray. Amazing, amazing introduction,
Spanish Language Variations in Latin America
00:01:25
Speaker
Vijay. Keep going. Yeah, I know. I know. I'll continue so we can fill up the 30 minutes of bullshit. Okay, I'll stop. So, first of all, all the way from Uruguay. Is it right? Juan. Juan. Juan. Juan. Juan. Juan. Juan.
00:01:41
Speaker
Juan, the one and only. Thank you. Thank you for inviting me. Juan and only. Never heard it before. Yeah. A lot of people pronounce it like like one, like the number. Yeah. Yeah.
00:02:00
Speaker
So, welcome to episode one. Maybe a quick introduction is due for our audience. So what is happening in Latin America? I don't know, Latin America can close your world and then get into closure. Is it really Spanish in Uruguay? Yeah, exactly. In Latin America, it's like mostly Spanish, but Brazil, they are speaking Portuguese, but yeah, Argentina, Peru, Chile, and the rest of it. Everybody speaks Spanish here.
00:02:29
Speaker
Is it Spanish, Spanish or is it different Spanish? It's a little different from Spain, but it's Spanish.
00:02:37
Speaker
OK, because I heard that I know a couple of colleagues who are working in Spain and then they keep on telling me that Argentinian Spanish is different enough than Mexican Spanish. And then the movie names and all the titles look completely weird in different places. Oh, yeah, that's for sure. But I mean, we can like for sure understand each other,
Juan's Background and Programming Journey
00:02:58
Speaker
but we can recognize from from where is someone just probably by the accent and stuff.
00:03:05
Speaker
OK. Some of the dialect stuff, I guess. Yeah, exactly. Like, I think, if I remember rightly, the words for things like car are different. Yeah. Yeah. A bunch of words are different, but we already know. I'm probably from the movies and all that stuff. We can understand each other. In Mexico, it's all speak English. Yeah, exactly. Like in India.
00:03:33
Speaker
exactly exactly just let's just switch to english you know why bother with other languages
00:03:41
Speaker
Nice. So a quick introduction about yourself, Juan. What do you do? How did you get into closure? Maybe you should give your full name Juan first, you know, because, you know, feature is going to totally butcher it. So maybe as you do it yourself, you know, that's my, that's my super power. Yeah. Okay. So my last name is Moneta, but my full name is Juan Pedro Moneta Sanchez.
00:04:09
Speaker
So, one, two names. One, two, Moneta. Moneta. Yeah. Moneta means like coin in Italian. Oh, I thought it's like money. Yeah. Like the money man.
Embracing Closure and Workplace Integration
00:04:24
Speaker
Nice. Well, he has a history on the blockchain, so we'll come to this. Exactly. It's written in the start. It's not written in this one, no. Yeah. It's like, this is like nominal, what's it called? Nominate of determinism? Yeah.
00:04:39
Speaker
Eric Norman is like... Can you say your name again? The whole one? The whole one is Juan Pedro Moneta Sanchez. That is how we pronounce it here. Juan Pedro Moneta Sanchez. Yeah. Great. Not bad. Not bad. Yeah. Hable Espaรฑol. Yeah. Nice. That's enough Spanish for me. I think... Muy muy muy bien. No, it's not bien, it's bien.
00:05:10
Speaker
Wow. It's Muy bien. Muy bien, muy bien. But that depends on the country, of course. I'm going local, Vijay. Come on. I mean, you know, you should really be pronounced, you should be pronounced Bihe.
00:05:30
Speaker
Yeah, that's true. I think that the worst part is the in Dutch, IJ is a vowel. No, my name is V-I-J-A-Y,
Innovative Projects Using Closure
00:05:37
Speaker
so it's a VJ. But IJ is I in Dutch. So they get super confused. It starts with fee and then there is nothing else to pronounce because everything else is vowels for them. Isn't it like a pirate sound? Like, why I?
00:05:52
Speaker
Yeah, yeah, something like that. Actually, I had to tell somebody how I say my name, and then they ended up typing it using a call center or something. And then they typed something like W-I-E-A-A-Y-A or something. And then I was that guy for at least one and a half year, and they had to give me some email address, and they gave me that email address with that thing.
00:06:15
Speaker
So yeah, names. Well, it's one of the hardest problems in computing. So why should human nature be different? No, exactly. Yeah, yeah. So yeah, it's time for the game for the introduction. Welcome to the episode. Okay, let's scratch the surface of your name so far. Well, you got to get the hard stuff out of the way first, you know, so yes.
00:06:46
Speaker
I don't know where to start, but I've been programming like my entire life. I'm 37 now. And I started, I think when I have like around, when I was around like seven years old, like playing around with a spectrum, like computers and basic. And like at that age, I remember like basically like, yeah, I had a book and I was like just copying programs there and running their like mostly graphical program. So like,
00:07:14
Speaker
And yeah, I don't know. I started working when I was 17 or something like that, and I was doing C and C++ at that time. And I moved it into Java after that, and working for a lot of different projects.
00:07:38
Speaker
My road to closure is like I discovered like in 2004, I think something around that, I discovered like Common Lisp. And yeah, NIMAC Lisp also on Scheme. And I got fascinated by those languages. And I started like, I think around 2004, using Common Lisp for all my hobby project and everything I could do in that. And I was using like Java professionally.
00:08:07
Speaker
And yeah, and I was always trying to use Common Lisp on my daily jobs. But it was always super risky because I don't know, like finding libraries. And at that time, I was working a lot with SOAP, web services, and all that stuff. And it was hard to find libraries for that.
00:08:32
Speaker
you are using cryptography on top of that, all that stuff. It was super risky. So yeah, I kept working in Java, I think, until 2010 that I discovered Closure.
00:08:46
Speaker
And it was great. At first, it wasn't because it was like, well, it's a lease, but it's all this Java thing in the middle. And I didn't like that because, yeah. But then I figured out that it was pretty cool and I was able to use it for my daily job. So I have been working professionally in closure, I think, around that time. So almost 10 years now.
00:09:14
Speaker
Wow. Nice. One of the original, one of the OGs. Introducing it at the company I was working at that time, little by little with some project that weren't
00:09:31
Speaker
didn't have a lot of risk. So yeah, small projects. And we started growing from there. I was never able to convince a lot of people in that
Evolution and Future of Closure
00:09:40
Speaker
company. So we were like two or three doing closure and in a like 20 something people company. But it always starts like that, right? Like just a couple of people saying, oh, it's just going to be, you know, we're just going to start a small project in a different way.
00:09:57
Speaker
Yeah, but being if you feel like I'm pretty already it helps a bit. Yeah. Yeah. But all the, all the, all the list stuff and all the functional programming and all together. And I remember also the tooling because the tooling was a hard one because I was, I was, uh, I have been using, uh, in max, uh, from like 2004, I think like, so like more than 15 years now. So it's, it's near my muscle memory and everything. Uh, but trying, I guess that concludes the episode then wanted to know.
00:10:28
Speaker
It's either a max or some other shit. If it is a max, then we are done. I think we don't need to discuss anything. We know everything now. But I remember that. You reached the Enlightenment. Exactly.
00:10:42
Speaker
But that was a hard thing back on those days. I was trying to introduce a closure in the company because everybody was using different IDEs and stuff and trying to do closure without all the paraded stuff. It was hard and too many things at the same time, like functional programming and parenthesis and editors.
00:11:08
Speaker
Can we say that, basically, Emacs was repellent? Is that basically what you're telling me? Well, I think in a way, I think Emacs keeps stupid people away. I don't know.
Exploring Juan's Developer Tools
00:11:24
Speaker
Well, I can say that, I guess. It's been keeping me away, so.
00:11:31
Speaker
Because I'm too busy configuring that, so not to create enough damage in any other area. So moving on from Emacs then. So I know you don't want to, but let's please. We're not moving away from Emacs. We'll come back to it, I'm sure. We'll circle back.
00:11:47
Speaker
But it's kind of interesting that you had such a lisp kind of background. Because I know a lot of people, like you say, if they've got a lisp background, they look at closure and say, why have you got the brackets? And yeah, it's a bit weird. And oh, you've got this Java stuff. It's horrible.
00:12:08
Speaker
But now you've been doing it for ten years and i don't know if you keep doing list stuff in the background or if you still can create that stuff for you know what you're feeling about that. No i completely moving to closure i mean around like two thousand eleven or something like that i completely moving to closure because i think that like all the system around the jvm is amazing and
00:12:34
Speaker
Yeah, it's also, if you compile it, you can compile it to JavaScript and that's also amazing because you can work with Node.js these days and React Native and the browser and everything, so it's reached a lot of places. Yeah, but it is almost like 10, or not almost, I think. It's 10 years, right? Yeah. So in 10 years, what type of applications were working on enclosure?
00:13:02
Speaker
Is it mostly web stuff, or is it maybe more desktop stuff? No, a lot of different kind of applications, even like a small compiler, transpiler or something. Yeah, I worked for the last company. I worked here in Uruguay. We were writing kind of a transpiler from Photoshop files into
00:13:25
Speaker
Java and Objective-C code for for drawing UIs. So basically you by creating yeah Wait, wait, wait,
Advanced Debugging with Flowstorm
00:13:36
Speaker
wait. Okay, that's something else No, I mean I mean you get we define it we define it a language. It's not a transpiler. It's a crime. Yeah
00:13:47
Speaker
Now we created as kind of weird idea like a friend had and we got pretty far with it. So we define it a language using names on layers and everything you can do in Photoshop. So we created a language there. So like graphical designers can create like all the stuff they create by using this language. So basically if you create a button you were creating like a layer, call it button and
00:14:15
Speaker
all that stuff. Okay, so we were reading that was our input and we were generating Objective-C and Java code for Android and the Objective-C was for iPhone for creating the user interface. So, for making this thing of like, I mean,
00:14:39
Speaker
like picking colors and sizes and everything, and have to do all that stuff by hand, that is kind of repetitive. And we ended up generating code for humans. So the first step was running that against some Photoshop files. And then you started working from there, like tweaking by hand, and you forget about the thing.
00:15:02
Speaker
And it was working. So you found out that it is way more difficult to make people who use Photoshop to teach them HTML and CSS than to build a Photoshop format reader and then compile and then generate Java code and Objective-C code. That's really amazing. That's just something about the people who are using Photoshop.
00:15:29
Speaker
I do remember those days. I mean, I remember when I was doing this kind of work a long time ago, they used to give us Photoshop files with splices. They'll split everything and give me small pieces. And then I had to open this particular PNG, whatever, in one window. And then other window, I had to code this shit to exactly look like that one. And then they'll keep complaining, yeah, it's Verdana, but it is a bit more different. The kerning is not right. I'm like, oh my god, fuck you.
00:15:57
Speaker
Who cares if the coloring is a bit off of this button? It's a challenge, but I don't think, is it still the case? I'm assuming now that people have settled down for, fuck it, we'll use bootstrap and then move on or just go forward. That's not the case. I don't think, yeah. But yeah, this tool was trying to get rid of or help with all that old science.
00:16:25
Speaker
But I think that's still, I mean, you know, funnily enough, we, you know, I don't want to get too, too waylaid by this, but we have something very similar where what you want to do and, you know, to your point, what you really want to do is you want to take some assets from some designer.
Closure's Future and Emerging Features
00:16:39
Speaker
and then kind of like be able to take those assets, put them into some sort of web form in a, you know, that's a strong with high fidelity. So, you know, the images come across the right colors, the right sizes, all these things. And it's kind of tedious that by hand, you know, the very
00:16:56
Speaker
You know, the best is to just do it by hand, you know, and the placements are slightly off, you know, so if you can, if you can automate it, it's fantastic, you know, and I think we've got this, there's a thing called, it might be butchering this something like storybook or something like that, which is a JavaScript storybook. It's like a JavaScript library or framework or whatever. And you can, you can, you can essentially make things like, you know, look nice there. They can take things from design tools.
00:17:26
Speaker
and then you can import that into native applications as well. Everyone's still trying to solve one's problem, essentially. It's still pretty.
00:17:39
Speaker
It was pretty useful because the designers just have to, for example, if they were representing tabs, they just needed to create a group and call it tab or something, and then inside other groups for the buttons of the tabs. And the compiler could verify that the language was correctly and give it errors and everything. So the designer can quickly figure out, I did it this wrong.
00:18:08
Speaker
and fix it with some nice error messages. And then it ended up generating all the code for basic layouts and all that stuff and some basic constraints and
00:18:24
Speaker
And then you grab it from there and you tweak it by hand. It's not something like it's going to do everything for you. But all that stuff was written in Closure. And Closure was great. It's notoriously crappy, right? Yeah, at the time we were like using even adding some Ruby stuff in the pipeline to read from those
00:18:48
Speaker
files and using something that was generating JSON and all that representation in JSON, and we were processing from there. From there on was everything like data transformation enclosure. In Photoshop's defense, I think PSD format is one of the most backward compatible formats, so it has a ridiculous amount of junk in it.
00:19:17
Speaker
that you need to handle to read through all this stuff. Anyway, so let's not make it a Photoshop podcast. DJ, proudly sponsored by Adobe. I wish. I'm not paying them anymore, but I used to. I used to work for
Reflections on Closure's Strengths and Challenges
00:19:36
Speaker
the competitor back in the day, a long time ago, with Quark.
00:19:40
Speaker
Yeah, yeah, when they had one quark and then quark just disappeared and I'm good times. Anyway, so that sounds like a very non-typical or atypical closure project, right? It's like, I don't know. I mean, closure is nice for that kind of transformation. I think it's just the context that was a bit different, I guess. That's the thing.
00:20:10
Speaker
Yeah. It's like a typical web application or anything. Yeah, exactly. But it was a structure like a compiler. I mean, we had a parser, and then we were in each step. We were like generating errors and verifying everything and then emitting something that was basically Objective-C code or Java code. And yeah. Nice. So we even have an emitter.
00:20:36
Speaker
I mean, it was like structural, like the pipeline was like a compiler. Just like a compiler pipeline. And I had a chance also there to use a lot of generative testing. And that was like amazing because I was trying to figure out how to test a bunch of those things. And yeah, I was able to use like generative testing for like generate the
00:21:01
Speaker
Generating a lot of input so that that that JSON that was the input with all the groups and layers we were like randomly generating a lot of that stuff and then running it through the compiler and and Just before the meeting we were like checking a bunch of invariants and things that should be there and that stuff And it was nice. It was nice. Yeah
00:21:22
Speaker
So what else did you work on then, other than this? A lot of things. I mean, there were some web applications. We were also working for a cinema network, a country-wide cinema network here in Uruguay. So it was a distributed application, and they had a web page where they sell tickets and the mobile applications.
00:21:51
Speaker
a lot of things. And yeah, and we're using closures for some of that stuff, even like the, I don't know, like the automated ticket spender machines. I don't know how they call them. Yeah. Those are still like fully parameter closure. Oh, wow. I didn't know that closure has this amount of reach in Uruguay.
00:22:19
Speaker
Yeah, I mean, how many people are writing clothes in Uruguay? The whole thing? No, no. I think like, I don't know now, but there is a company doing closure here, a lot of closure, I think, and atomic and all that stuff. And yeah, about that time, I think it was like only two companies I knew about.
00:22:42
Speaker
Yeah. Still, I mean, doing that level of projects in fairly new programming language compared to other industry big names is pretty awesome though. Nice. So what is your latest project then? So what are you working on these days? I think you should get to the money part now.
00:23:05
Speaker
So yeah, these days I'm working on two projects. Like one is just start working on it. But one of is like some, one application called Clash that is trying to compete with TikTok. So it's basically social network stuff. And it's a- So you're clashing with TikTok. Yeah, exactly.
00:23:29
Speaker
And it's a fully written in closure script and closure. So the cell phone part is React Native Closure Script.
00:23:38
Speaker
And on the back end, we have a lot of things, some of them like enclosure and some of them in the ClosureScript because of Lambda stuff and was a little better on ClosureScript. But yeah. So that is where I'm working on now.
00:24:00
Speaker
Nice. So that's a pretty massive kind of project to compete with TikTok. Yeah, it's super interesting. I think it's an interesting question because the government in the US got nervous about TikTok when they sold like a million tickets to one of Donald Trump's events.
00:24:29
Speaker
And then it turns out... Is it really government though? I thought it was just Trump getting a... It turns out he's in charge of the government though. You know, I don't know if you've noticed, but... For a few more weeks. Yeah, but he's really, you know, he has been there. But anyway, yeah, so because the TikTok teens kind of like, you know, what is it? K-pop fans, they're called, all kind of like tried to basically
00:24:55
Speaker
I use tiktok as a way to try and register or spread the word for, you know, buying or buying these online tickets, which were free. And they were expecting a million people and turn people away and they made a different stage and all this kind of stuff. Then no one turned up. And it was absolutely embarrassing. It was more, he was mortified. So he actually, I mean, it was a crazy thing. He said, oh, yeah, someone must bet someone's got to destroy tiktok.
00:25:22
Speaker
And now I think Oracle and Walmart, of all the people, I mean, fuck knows why, you know, but get the fuck in there first, because this deserves it, you know, Oracle and fucking Walmart, what the hell are they doing buying TikTok assets? I mean, it's just mental to me. You know, anyway, weird. I think he's a friend of Donald's, isn't he? Larry, Larry Ellison's a friend of the Donald's. And I think the Walmart.
00:25:48
Speaker
I think the Walmart thing, I read that because in China they are using like TikTok to sell stuff. So the people that is like creating the content there can also like, you're looking at what I'm doing and I can sell you this mouse or whatever. And so I probably Walmart is interested into that. Like the influencer model. Yeah. Yeah. I don't know. Yeah, but it's interesting. So, you know,
00:26:19
Speaker
But before that, before that, maybe we should talk about the project before that, and we'll come back to the TikTok one, because I think that's really interesting. But the bigger project, I think you run it for a long time with a friend of mine, Philip, was the blockchain one, wasn't it?
00:26:34
Speaker
Yeah, was working for a company that's still like, they are still creating some stuff that's called District 0x. And yeah, we were doing like Ethereum stuff, decentralized markets, places and all that stuff. And we were also doing everything in Closure Script.
00:26:55
Speaker
And we were using ClosureScript and not Closure because for interacting with Ethereum and all these web 3.js libraries, I mean, the libraries are much better in JavaScript than they are on the JVM world for interacting with Ethereum. That was like four years ago. I don't know just now. What's it?
00:27:18
Speaker
But what exactly is district zero extent? Is it like a decentralized contract thingy? Yeah, I mean, we were trying to create and decentralize the marketplaces. But instead of like creating it a week, we were
00:27:37
Speaker
It's kind of complicated to explain. Basically, we created some marketplaces by hand, trying to figure out some patterns to create a tool that was able to give people some functionality so normal, non-technical people can create decentralized marketplaces on the blockchain.
00:28:01
Speaker
So that's a completely closure script, you said? Yeah, I mean, yeah, exactly. We have some server stuff written in Closure Script and also like they were like single page applications in reframe. And yeah, so the browser part was everything Closure Script was. OK, so if you see like 10 years of evolution of Closure, beginning from writing Photoshop transpiler,
00:28:30
Speaker
all the way to cryptocurrency, to TikTok, well, mobile application, right? Or mobile, or I don't know if it is mobile anymore. It has a bunch of backend services.
00:28:42
Speaker
Yeah, but it's not just a mobile app that you release, right? There is stuff that you need to have. So it's like the mobile is just a tip of the iceberg in these kinds of applications. It's not something I just download and then disconnect with the network and then I can do whatever I like. So if you see all these kinds of things, like if you look back, how do you see your closure experience? Like what did you see? Oh, this is super nice about closure and this is the shitty part about the closure.
00:29:10
Speaker
Yeah, I mean, it's still for me a great experience, but I think that the tooling, it's still, in my opinion, the part that still needs a lot of improvement.
00:29:25
Speaker
And yeah, I mean, it's great in one hand that we can use all the Java tooling. I mean, all the profilers and the libraries and stuff like that. But yeah, I mean, in the past, I think
00:29:43
Speaker
I don't know, like five or six years, I have been always trying to create tools that improve the development experience in Closure. So, yeah, I don't know. But is this the reason why you thought, okay, Closure needs a better debugger? I mean, I'm...
00:30:10
Speaker
I'm currently working in Closure and Closure Script and I'm using Emacs and I love like Cider debugger, but in my opinion, it has some problems. One of them is like, it's really nice, but then I cannot use it in
00:30:33
Speaker
In Closure Script. So when I moved to Closure Script, it's not there. So that's kind of annoying. But also, yeah. I was just going to say, maybe we should back up a little bit because you just threw that in there, Vijay. Maybe we should talk about the project that you're kind of working on, which is more than just a debugger. It's a trace for myself. So maybe just give us a bit of a background about that project and how you came to it and sort of what it's all about.
00:31:00
Speaker
I have been working in a couple of different tools in the past years. This is one of them, but there's also one called Chlograms. I can talk a little bit about both. Yes, please. Chlograms is basically a diagramming tool.
00:31:29
Speaker
but that knows about your source code. Most diagram tools doesn't know anything about your source code. So the only thing you have is shapes and lines and all that stuff. So ClueRams, it knows about your source. So it can index your entire code base with dependencies and everything. And then you have all that stuff available to you when creating your diagram. So it's much faster. And what I'm trying to do
00:31:59
Speaker
do with that. It's trying to create a diagram in tools so when you approach
00:32:08
Speaker
a code base, a code base you don't know, for example, on the Closure Script Compiler or something like that. You can have multi-level diagrams in the same way you have Google Maps to explore the world. So you can zoom out and see your continents. In this case, it's like zooming out with the ideas to show you the high-level architecture diagram.
00:32:34
Speaker
And like the modules spaces. I don't know, but more like the really architecture diagram, like your machinery, your cues, how everything it's communicating, like big parts. And like you have like this mobile client and this database and
00:32:50
Speaker
this microservice and everything. But then if you start zooming in, you start seeing, for example, if you zoom in into some special microservice, you are going to see the architecture diagram for that specific microservice that was created by hand. And if you keep zooming the ideas, you end up reaching code.
00:33:13
Speaker
So you can go in the same diagram from high level stuff into code. But is it something that you draw in the tool itself? Yeah, exactly. It's a metadata that you put in the code. No, the idea is to provide a tool that makes creating this kind of diagram easy.
00:33:32
Speaker
But I would love to approach a project in GitHub, some library or something, and being able to scroll back and see, well, this is the big machinery, but I can zoom in and get into the code itself.
00:33:50
Speaker
So yeah, enclosure is I think it's a nice language for this because everything it's it's functions calling functions. So that is nice to represent into diagrams. And then for creating architecture diagrams, you can use like normal tools like shapes, lines, and whatever you like. But yeah, that's something I was interested in.
00:34:17
Speaker
So we use Clograms to design and also link the source code, essentially. Is that correct? Yeah. So Clograms is based on another project I have been working on that's called Kleindex. So Kleindex, yeah, it's pretty straightforward. It's something that can work your source code and all the dependencies source code.
00:34:39
Speaker
and create facts like atomic or data script facts and index them in a data script database. So it's meant to be used as a base for creating other tooling. So then you can create some tooling that instead of like when the tooling wants to know something like an IDE or something about your
00:35:03
Speaker
source, you can you can use like data log and pool API and all that stuff instead of talking about like files and text.
00:35:12
Speaker
Right. So you're still using your experience of building this compiler, but you're just splitting it out into multiple projects. Yeah, kind of. So yeah, I mean, Kilograms is using Kleendex, so it has all your projects indexed with all the dependencies and everything.
00:35:35
Speaker
So when you are drawing the diagram, you can use all this stuff. So instead of having circles and squares, you can also have all the functions and name spaces.
00:35:47
Speaker
Ah, OK. So see, this Clindex is, do you know there is a project called Sourcegraph, right? These days, there is this making a meaning of the code, like semantic indexing of the source code. So Clindex is doing something like that. So it's extracting information from your source code and then building up this index.
00:36:09
Speaker
to provide you, okay, this is a function, this is a file, all that stuff. Yeah, and Linux currently is indexing like everything, every type, every protocol, every protocol implementation, every multi-method, I mean, implementation, and a lot of specs, and yeah, a lot of things. So it's basically a closure parser.
00:36:32
Speaker
Yeah, exactly about generating a new exactly instead of generating like like a structure with nested maps or something like that. The idea is generating something like just data script facts so they have no structure and you can query it however you want. Yeah, yeah, nice. So is there a model associated with it or is it? Is it something which is output into?
00:37:02
Speaker
No, no, no, it's a model. Yeah. Yeah. There's this schema like that schema that will sit like, yeah. Okay. So that is used by clograms. So clograms can read this index and then give you, um, give you the UI elements that you can
00:37:22
Speaker
Not your elements, like things that you can put onto the diagram. Yeah, exactly. Can you track evolution in the program as well? Evolution in what sense? Well, like diffing, essentially. So if you see, OK, this is how the program was a year ago, this is how the program is now, can you see which parts had the biggest change or that kind of stuff?
00:37:51
Speaker
or whether the biggest change in the code best was. But isn't it compared to two indexes? Yeah, not currently, but yeah, I mean, Clindex just create facts about things. And when you change the original, I mean, if you remove a dependency or just go and change your function, it's going to re-index that namespace, for example, and create new facts about it automatically.
00:38:20
Speaker
OK, but because they don't have a timeline at the moment. No, no, because it's using that data script and not datomic and data script. You cannot have that history and all that stuff. What about something? But it could be Crooks. What about something like Crooks as a back end because that that has those kind of options as well? Yeah, I haven't I mean, I haven't tried Crooks yet, but I mean, I have read about it, but no, I haven't tried. Yeah.
00:38:49
Speaker
Yeah, it could be interesting. Yeah, because it would be interesting.
00:38:56
Speaker
There is a project I think from Rich Hickey like call like, yeah, that was supposed to do something similar. I think like there was a long time ago, right? When the Datomic was released, this was shown as an example that you can read from the history. I read that he's still working on it on like a new version, new idea of how to index code, but I don't know. I mean, I just read.
00:39:21
Speaker
He's working on spec two. Shut up, you know? Quite possibly.
00:39:29
Speaker
But who knows? I mean, that'll be one of the closure conscious and then he'll have a keynote and people will get excited and like, hey, there's a new stuff that I thought about. And then he'll give a word that we need to Google for our event. We get rich anyway. But I think what you're doing is really good fun. You're actually moving things forward in real time rather than hammock time.
00:39:53
Speaker
I'm doing a bunch of experiments, but I think it's nice to have an index of your source code, because you can even create some CIDR plugin or something. So you can use, for example, CIDR without using a REPL, because that is all statically parsing and indexing. And you can get autocompletion and references and all that stuff.
00:40:16
Speaker
Yeah. So how did this lead into the tracing and debugging part of Flowstorm? No, that's completely a different thing. But yeah, I wanted to try this kind of debugging that is kind of different, because the CIDR debugger, stepper, however you call it, it's something that it's going to block your execution and lets you move one step at a time.
00:40:42
Speaker
But because it's really executing the thing, you cannot, for example, step backwards or shamp around in time or any of that. So what I'm trying with Flowstorm, it's a trace-based debugger. So it's basically two parts. It's instrument your code so your code executes and generates traces of everything that's happening.
00:41:11
Speaker
That's one part. And the other part, it's like now we have traces of everything that happened, we can create a tool to analyze them in different ways. So yeah, that's the basic idea behind Flowstorm. And the debugger currently allows you to step through your code execution, forward, backward, in time,
00:41:39
Speaker
what I call in three dimensions also. You can move in time. For example, if you have a loop or something, a recursive function, you can move forward. So next expression, next expression. But for every expression, you can also move in another dimension because that expression in the loop has been executed many times.
00:42:03
Speaker
So you can move in that direction. So take me to when this expression was in its 20th execution or something, and then move forward from there. And so you move in three dimensions in that. So you can skip tracks. Yeah, exactly. You can you can jump around in time to try to figure out what is happening. It also provides you
00:42:31
Speaker
Because one of the other things that I don't like about CIDR is when I'm working with stuff that generates a lot of data, trying to inspect it into CIDR debuggers is kind of annoying. We have a CIDR inspector that is amazing. But I don't know. I mean, having it in a collapsible tree with some other UI tools, I think it's great for exploring complicated data structures.
00:43:00
Speaker
Yeah, yeah. Did you check the, because a couple of episodes ago, we had Vlad who was building a reveal rebel thing. So do you see any parallels between them? Because for me, it feels like at least the code exploration part seems to be kind of, you know, there is a bit of an overlap there.
00:43:23
Speaker
Yeah, I mean, first they are both using the CLJFX library. They are like the same there. So you wouldn't be anywhere at the very least. Right. But I tried this application like reveal. Reveal. Reveal. Yeah, reveal. Reveal, yeah. Or you pronounce it. Reveal. Yeah, reveal. Yeah.
00:43:53
Speaker
Yeah, I mean, it's amazing. They overlapping one thing, I think. It's like, for example, you can track how a reference, trace how a reference is changing. So you can, in reveal, you can watch a reference. And every time that reference change, you are going to see your value updated.
00:44:17
Speaker
But I think I took it one step further in Flowstorm that you get the history of all the state changes. So you can trace a reference and get this history and you can move in time by seeing the difference.
00:44:35
Speaker
So you can clearly see if it's a big data structure and just one number get incremented or something. You just see it in green there, like the browser one when you HTML. So it's like a DVR or kind of like a time machine where you can go backwards and forwards. Yeah, exactly. And do diffs and stuff, yeah. OK.
00:45:00
Speaker
Yeah it is using like the java VM instrumentation is that the idea or is it doing something no but no it's high level i mean but i'm i'm i'm about to try like using like java fly recorder.
00:45:19
Speaker
Because currently, it's just generating traces through a WebSocket, just creating some JSON traces. And that's it. But since the Java Flight recorder is a platform exactly for this, like for creating, say, storing or even streaming events, but super performably,
00:45:45
Speaker
But I haven't tried it yet because I was trying something that also works on Closure Script. So yeah, this also only works on the JVM. But I will try to see what I can. So what state is the project in right now? So people can just, I don't know, just download it or add it to their project and then
00:46:10
Speaker
open it and then enjoy the state changes in multi-dimensional way in 3D. Yeah. So I'm using, I have been using it for the past, I think like two or three months, like every day in my job. So my daily job. And it's nice because in this clash application, we have some microservices and the React Native mobile application. And if you instrument everything,
00:46:39
Speaker
Then you can just like press a button on the cell phone and looking at the debugger timeline, you can see like everything in a timeline. So everything you instrumented on the, but all that sorted in time, all that stuff. So for debugging distributed application and figure out what is happening, I think it's great.
00:47:01
Speaker
Okay, so it's production ready. How far does it go down? So that's like with React Native, React Native has like, you know, a Java front end or an Objective C front end.
00:47:11
Speaker
So is it at the point where the boundary is to the kind of tool on the native side, on the mobile side? Where do you hook in? It's assumed like you've got, let's say, I don't know, some non-closure script code to do some rendering or to do some library or whatever you've used. And that kicks off an interaction.
00:47:41
Speaker
Maybe you've got a QR reader or something else like that that you brought in from Objective-C. So how does it know that it's being triggered? Where are the edges of this thing? I mean, instrumentation is pretty straightforward. It's just a macro that walks over your code and generates exactly the same code, but that generates traces.
00:48:03
Speaker
So that's instrumentation. So you just go and it even has a literal thing. So you put trace in front of a function or something, and all that code gets instrumented. So you only instrument what you are interested in.
00:48:23
Speaker
And also it's pretty nice for React Native because we are doing reframe and tracing the database changes. It's super useful. Nice. So I just want to ask you about your, because now I know that you are working on
00:48:48
Speaker
tools, that means you've come to a point where, okay, this is what you already mentioned that tooling is one of the things that is the biggest challenge in enclosure development. Language-wise or otherwise, do you see any pros and cons of using Closure for 10 years?
00:49:08
Speaker
Just before we go there, I mean, I think we're giving them the chance to think about this one. Park it a little bit. Just coming back to the floor, debugger, okay? I think we need to spend the 10 minutes on this, okay? I mean, you know, Fije's not interested, but I am.
00:49:24
Speaker
Who uses GitHub as anyway? I'm going to have to run and then that's it. Exactly. You don't even need tap anymore. Tap is like something new. One small thing. Flowstorm is basically print lines, but you don't need to choose where to put them. It will put them everywhere. That's really nice.
00:49:51
Speaker
What I was going to ask you is like, do you have like a joined up view of things? So like, you're talking about like having a native application and a back end application.
00:50:00
Speaker
You know, so some users using clash to record a video and then they upload their video. I don't know. I don't know. I don't know how it works, but I'm assuming that's basic. Yeah, exactly. Yeah. Um, so, so then do you know, like, well, okay, yes, this particular call is, uh, is being traced in the, in the closer script side. And if I have enabled tracing on the website, then I know it's going to be, is there a sort of request ID or something like that that links everything together?
00:50:27
Speaker
It doesn't link everything together, but there is something called the timeline in the debugger that can sort everything that gets traced by timestamps. In single-user mode, it kind of works. In single-user mode, it works, but in multi-user mode. Yeah, exactly.
00:50:51
Speaker
Cause you know, you can use this extra quest ID normally. That's what we do. We use the ID and then you can kind of flow everything through on a call level. Yeah, exactly. But that needs you to like add that to your service or something. It's not like a general thing. Yeah, it's no, no, no. Yeah. Yeah. Okay. Cool. Cool. So, and then like, if you, if you're using some like backend libraries, does it, does it like trace into that as well? So if you're using, you know, some JDBC libraries or whatever.
00:51:21
Speaker
Yeah, exactly, because I mean, that part, it's not like super well-tested. I'm not using it a lot. But the idea, it's just grab the source. I mean, when you try to instrument a library from the REPL, it will grab the source and instrument that source and replace the function with the instrumented source. So that's... So how do you do that?
00:51:49
Speaker
Sorry, is there any performance penalty of this one? Because instrumentation so far, I've been using Peter Tassan's profile library so far for instrumentation. And then he does this bunch of statistics as well, how many times it is called. Is there any performance issue here or concern here if we keep that in these traces?
00:52:13
Speaker
Yeah. I mean, unless it's not using like Java flight recorder or anything now. So yeah, for sure you have a lot of performance penalty, but it's meant for development, for figuring out like where it's wrong. It's not meant for that code. I mean, you just add the traces around what you're interested in. And as soon as you figure out the issue, you remove them. Yeah, you remove it. Yeah. Okay. Yeah.
00:52:39
Speaker
So actually on that, if you want to do that, can you sort of leave them in and they put a, like a higher level flag that says, you know, don't deactivate traces or is it just, is it just all opt in at the code level? No, but that, that can be done. Yeah. So basically the macro ski can be done with the, because that can be done just using some.
00:53:03
Speaker
program level configuration, right? Yeah. Yeah, but it's basically like, so yeah, if a flag is saved, you convert the trace macro into identity and it does nothing. Yeah, exactly. Yeah. Nice.
00:53:22
Speaker
But it sounds like an interesting project. What about the visualizations? So on your timeline, the visualizations, how is that? I mean, it's unfortunately we're on a podcast.
00:53:39
Speaker
I'll have to get you one to a visual show one of these days. Have you done any kind of talks or stuff like that where you're showing off the timelines? No, I have been thinking about creating a screencast.
00:54:01
Speaker
That would be really good. That would make it more, well, it's a debugger with a visual medium. So I think it makes sense then, because it's not like GDB or something, then you type P and then N and then, yeah, just wait for it.
00:54:18
Speaker
Like good old days. When you finish this, do it and then we'll link to it, okay? Yes. No pressure. Next week. Yeah, that's really interesting. It's a very impressive bit of kit, I think. It's one of the things, I was wondering what you thought about
00:54:42
Speaker
You know, Vida is talking about the kind of evolution of Clojure. And the thing that I've noticed in my experience with Clojure over the last, I don't know, yeah, not quite the 10 years, but a long time, and is that everything has become more data oriented. And I see these tools like Reveal and like Flowstorm, and there are various projects that are just suddenly emerging, suddenly flowering all around, like revealing data and
00:55:11
Speaker
showing traces and stuff like this. This seems to me the next frontier in closure actually. It's getting below the surface of spec and below the surface of language and doing what you're doing. Is that something that you feel also? This is reachable now? Did something change in 1.9 or 1.8 to make this possible or is it just you've just got the time to do it or the itch has got stronger?
00:55:38
Speaker
No, I mean, I even started creating this like seven years ago. All right. Okay. There is, I mean, I started trying the idea, there is a project on my GitHub there that's called X-ray and I was doing exactly the same, but for the traces, I was trying to draw a tree of execution and I was trying to have a different approach on visualizing traces.
00:56:04
Speaker
But isn't it something with, I'm not sure, is it Closure 110 or something? The data fee data file thingy showed up. And then that could be one of the triggers. That is supposed to be one of the triggers to expose everything as data. And then you could use that one.
00:56:29
Speaker
Yeah, I mean, that is something I have also been planning to use. Yeah, the data file protocols there. Yeah. Yeah. But again, that requires changes again, doesn't it? I guess, you know, it's more and more libraries start to support those kind of like, nav, data file type options, then, you know, more options open up for the tool maker, you know? Yeah.
00:56:57
Speaker
So I think we can go back to the question. You can ask your question now, yeah. Exactly. So we can edit out all the questions that Ray was asking. And then we'll just make my question as the most important one, you know? Yeah, so a quick reflection on, because we are almost an hour now, a quick reflection on working on several projects and then working in Glozier Community and then building tools.
00:57:26
Speaker
So what do you see as the pros and cons in Closure? And then where do you see yourself going? Do you think Closure is going to be your next 10 years language or how it will evolve? Yeah, good question. I mean, Closure for me is still what I feel more comfortable with as a general purpose language. I think
00:57:55
Speaker
One of the things that maybe makes me choose one other language, it's probably performance, depending on the project, on the kind of project. With all the complexity happening on the chips this day, with all the cache pipeline and branch predictions and all this stuff, that really makes a difference if you can lay out your data in memory,
00:58:25
Speaker
And currently, we don't have any way of doing any of that from closure. And there are some stuff coming to the Shabiam, to the Shaba language, all these value types and all this stuff. But yeah, that is one thing that's
00:58:43
Speaker
But I don't know how that can end up in Closure either. But yeah, I think there are some projects. These projects really need performance. Since you cannot do any of these in Closure, you cannot express the idea of how to lay out stuff in memory. And I don't think it's the idea of the Shave EM either. I don't know.
00:59:03
Speaker
Yeah, I think probably because we are reliant on JVM pretty much. And then whatever the improvements JVM is bringing will show up in closure. And at the same time, JVM becomes the least common denominator for us. That's what we can have. Well, I think we have to be careful to write it off, though, because they're putting a lot of time and effort into optimizing these things. Yeah.
00:59:31
Speaker
And like you say, value types are coming, these kind of things. Obviously, there was all this stuff to do with lambdas and various type of hooks. I think the part of the problem, I think you mentioned yourself one, is that it's actually quite tricky for languages like Clojure to pick up on some of these things, not because they don't exist. It's just because the bank, the book, there's a tipping point. There's some point where
00:59:59
Speaker
There's enough features in the jvm that make it attractive to go below the kind of just transpiling to java or to bike codes or maybe make the bike codes change slightly different because obviously closer to transpiles to bike codes so maybe rich at some point other compiler people which is rich basically you know could it has to have there has to be enough benefit for him to change that thing no and let's say that comes in you know i know java
01:00:27
Speaker
1212 is already there java 15 or 25 i mean it's releasing it's already there i mean they're releasing every month you know so java 25 it's not there is it 25 there yet it's released yesterday
01:00:44
Speaker
I don't know about you guys, but we're still on JDK 8. We're just closing the gap to get to JDK 11. I think a lot of projects will be on JDK 11 for another five years. My guess is that getting people to actually adopt all of these things in the Java world is 10 years away, I think, to be honest.
01:01:14
Speaker
That's true. I think the new features at the language level are always complicated, right? I mean, but if there is a improvement at the JVM level, then it's always backward compatible. So it will probably speed up your shit on the underlying thing.
01:01:32
Speaker
But the language features themselves, you can't use them. Yeah. Yeah, all this that used to be called fibers, and now they are calling virtual threads or something like that, that's probably going to be amazing. I mean, writing code as performant as when you write async code, but don't have to deal with all the async await stuff. It's amazing if that happens. Yeah.
01:02:03
Speaker
So what's the other language you're kind of looking at in that sense then, Juan? I was looking at a little of Rust and also C. I mean, C, it's always an amazing language. And I also really like to do stuff on some very amateur, but I like to do electronics and microcontroller stuff and all that and C there. It's like, yeah.
01:02:32
Speaker
easier to reason about because it's easy to reason about the assembly it generates and all that stuff. I think it's a little harder on Rust, but it's possible. The advantage with switching to C is that all your projects already have C in them, so the naming is not going to be a big problem.
01:02:54
Speaker
That's true. You can say krundex is basically C index. Yeah. C line index. That's true.
01:03:05
Speaker
This thought about it. And one feature I'm really waiting, I think everybody's waiting for it. It's a spec, the new version of the spec enclosure. Because I kind of stopped using spec. I stopped using spec lately because it was about to change and I was waiting for that. And now I'm not using spec.
01:03:32
Speaker
So using anything else as a replacement for spec? No, nothing now. And the only thing I have experience with it is spec. I think it's really frustrating when, like you said, we know that it's wrong, so it's going to change. Then you have to satisfy yourself with a subset of it, which is a little bit frustrating.
01:04:00
Speaker
Or like you say, you just think, well, you know, the payback is just not high enough. Cause this is the, you know, I think the point about, um, you know, a stew and rich saying, well, you know, you get, you get documentation, you get generative testing, you get this, you get that, you get the other. You actually often you do have to put more than just the vanilla effort into getting all of those things back. I think that's what we've found. You know, you do have to write your own generators. You have to write your own dish. You have to write your own that.
01:04:27
Speaker
things don't just come out of the box as they say. I think you have to be careful how you sell this thing. But it is really a fantastic concept, but we need the new one. Otherwise, like you said, it's going to just end up being abandoned, which is a shame. That would be a real shame. I mean, if the first thing is more like
01:04:50
Speaker
Not abandoning, but it is showing up. But by the time the community has moved away and then nobody is adopting it. That's essentially much worse. It's hard to use the current version knowing that the next version is almost there. But sometimes it's almost there in a lot of years. You probably heard it like the Osborne effect or something, right? There is this computer lower.
01:05:19
Speaker
laptop company, I think it's called August Tospon or something, they released one laptop and then
01:05:25
Speaker
next day they announced that, oh, next version is going to come next, uh, whatever or someone or something that's going to be double, whatever. Then all this inventory, nobody bought this shit. And then they, they went bankrupt because they re announced the next one is going to be there. So I think it's, it's, it's all bothering itself. Yeah. That's why, that's why Apple keeps everything secret, isn't it? Because you don't want that effect. You know, anyway, exactly. Yes. Back to one. Okay. Yes.
01:05:50
Speaker
So what's the pros and cons of closure, Juan? We get back to that question in the future.
01:05:57
Speaker
So we heard some cons. I think the pros and cons of closures are the pros and cons of every piece of closure. I mean, because it's a list, a lot of people doesn't feel comfortable with it. Then if you want to hire people, it's a little harder.
01:06:21
Speaker
And yeah, because it's dynamically type, it has all the cons of dynamically typing, but also all the pros. And yeah, so I'm hoping like spec helps a little with all this stuff, like with making it easier to figure out what kind of parameter something, or what's the shape of the data that's a function it's receiving.
01:06:44
Speaker
And yeah, it's a group. I mean, because it's functional programming, it's passive pros and cons of functional programming, like that performance, it's an issue. Sometimes you need to go into interactive programming.
01:06:58
Speaker
But it's amazing that you can, you have all this escape hatches enclosure. I mean, you can always use that high level. And if you need to go to write like a JVM byte code or Java or something, you can do it. So yeah, that's amazing. Yeah. It's like an escape hatch. Yeah, exactly. Yeah. Yeah. I mean, you know, you've got these other things coming up with a growl VM as well.
01:07:22
Speaker
which is another interesting kind of option in terms of deployment. Nice. So any other projects that we missed, Juan, from your open source report? No, I don't think so.
01:07:45
Speaker
I mean, I'm always experimenting with this stuff. And all this stuff I just mentioned, it's experimental. I mean, I'm using it every day, but of course, it's not. I mean, I think that trying something like Flowstorm, it's a good idea, since it's something like the Java fly recorder is also trying. I mean, generating a lot of traces and a visualization tool. So it's not something. Yeah.
01:08:13
Speaker
I think it's something it's a great solid idea, very solid idea. Yeah, it's really good. And it's nice to see these sort of things coming through the closure ecosystem as well, you know, so we don't have to go down to these low level technologies, you know, you're doing great work there. I think, you know, I really appreciate it. Yeah. Okay, thanks. That's nice. Yeah, yeah. Because I think that, as you said, you know, initially, when when the language shows up,
01:08:38
Speaker
there are libraries that is the first thing that people say, okay, these are the things that are lacking because you have the language, but you have to build everything yourself, which is not really a good beginner experience, but closure being on JVM and JavaScript, that problem is more or less offset because you can use a lot of libraries that are existing already. And then the next problem is obviously the tooling. How can people use a different kind of tools to get started and also debug and then,
01:09:07
Speaker
When you're working in the code, you need to have these quote unquote professional tools to deal with it. Of course, Closure has always been like a wishy-washy, like, you know, if you have a print-alone, why do you need it? You have a REPL, so you don't need anything. So this kind of bullshit is always there on Twitter by somebody, we know.
01:09:27
Speaker
And the REPL is an amazing thing, one of the biggest pros in enclosure. And I think there is also room for a lot of improvement there. And I'm glad the projects like Reveal are trying to rethink what's a REPL. I mean, what else they can add to the REPLs. Exactly. Totally. Yeah. But I think people like you who worked on
01:09:54
Speaker
uh, worked on different types of closure projects and saw the shortcomings and then building tools for that. And then, you know, encouraging community to view these tools in a different way and then build these things. Um, that is something, you know, it's really appreciated right in, in, in the community. And because this, these kind of, uh, things come only from experience because, you know, if you, if you are starting with a programming language, you're not going to think about, okay, what kind of debugging I would need here, you know, that,
01:10:23
Speaker
That only comes after you have gone through enough pain of debugging different projects. Yeah. Yeah. And then you extract the experience into tools. So that's what I think, you know, it's really valuable the kind of things that you're putting out there. So keep doing great work. And then, you know, I'm pretty sure the people who are listening to this, you know, check out Flowstorm.
01:10:46
Speaker
on Juan's GitHub. We'll link to it, or we'll tweet about it as well. Take a look at it. And thanks a lot, Juan, for joining all the way from the other side of the world. Thank you for inviting me. Really appreciate it. Thank you. It was a pleasure. And that's it from us for this episode. We'll maybe see you this year or maybe next year. Who knows? Bye-bye. Bye.
01:11:16
Speaker
Thank you for listening to this episode of DeafN and the awesome vegetarian music on the track is Melon Hamburger by Pizzeri and the show's audio is mixed by Wouter Dullert. I'm pretty sure I butchered his name. Maybe you should insert your own name here Dullert.
01:11:33
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 want to interact with us, then do check us out on Slack, Closureion Slack or Closureverse or on Zulep or just at us at Deafened Podcast on Twitter.
01:12:02
Speaker
Enjoy your day and see you in the next episode.