Become a Creator today!Start creating today - Share your story with the world!
Start for free
00:00:00
00:00:01
#75 - Philippa Markovics image

#75 - Philippa Markovics

defn
Avatar
18 Plays3 years ago
#75 - Philippa Markovics by defn
Transcript

75th Episode Jubilee Debate

00:00:15
Speaker
Welcome to Deaf and episode number 75. Is it like a... What kind of jubilee is that? 75? It's like a... Okay, I think if you are listening to this, please tweet at us what we should celebrate with. I think it's like a paper anniversary or something, like something like that. I think maybe his diamond is 75. Oh, okay.
00:00:40
Speaker
Gold is 50. So it's diamond then. So I think our listeners know what to send us. And I'm getting close to it. Please send us diamonds. So do you actually remember what 50 was? Like who 50 was? Gold. No, but who was the guest? Oh, right. Wait, come on, don't ask us. I mean, we don't remember what happened in the last episode. But it probably was pure gold though.

Introduction to Philippa and Next Journal

00:01:09
Speaker
probably I'll look up while we are while we are you know doing this so that's okay anyway so episode number 75 um already we have I mean you have heard our guest putting us into super uncomfortable position that we only have a shit we don't know shit about this podcast ourselves no worries no worries um so yeah this is Vijay from from Holland and um
00:01:35
Speaker
Ray from Belgium. Ray from Belgium. Yes. And your special guest today. From Austria. Yes. Yes. Right from the Austrian countryside. Oh, sorry. I'm having some audio issues here. Like we say, I have like lots of, lots of reverb. Not sure what's going on there, but yeah. Hi, I'm Philippo. Like I'm a closures. I'm working mainly on the UI side.
00:02:04
Speaker
I spent most of my time working on Next Journal, which is a notebook platform for doing science stuff. And yeah, not much else to say, I guess. I mean, maybe you have a question. Let's just stop there. I think we're pretty much.
00:02:26
Speaker
We're pretty much fine. My comp is empty anyway. Bye. So, Filippa, I think it's a good idea to start because you say you are closureist. Have you been closureist all along or how did you become closureist? If you did. So I guess,

Philippa's JavaScript Journey

00:02:55
Speaker
for most of my ancient, or no, let's step back a little. So I guess it all started with JavaScript for me. And it's like JavaScript is kind of like this thing that seems to stick on me that I can never really shake off. But yeah, but I'm doing this for a long time, probably something like 17 years now or something.
00:03:25
Speaker
been there like with all the really hardcore old browsers, like, yeah, used to fix bugs in IE 5.5. Those kind of days, they were terrible. Let's not go there. And so yeah, so I think it all kind of like started with JavaScript.

Transition from JavaScript to Ruby

00:03:46
Speaker
And at some point, I was also kind of like firmly planted in this in the Ruby community.
00:03:53
Speaker
And I think that was mostly about that it was probably the first community that took JavaScript seriously in that you can actually animate with these things and so on. So it's like a lot of the stuff revolved around the Ruby community. And I think from there, JavaScript had this phase where I tried to,
00:04:23
Speaker
always be a little bit better than it was or than it is. So that's kind of like when all these transpilers came up and then you had like webpack at some point and whatnot and all this crazy build tools popping up. And so I think for me, it was just like out of sheer frustration that I looked at all these compiled languages in the hope that I can escape JavaScript somehow.
00:04:52
Speaker
And I think like I found Elm, which is kind of like a typed functional programming

Elm and JavaScript Interop Challenges

00:05:00
Speaker
language. I really enjoyed Elm, but at that time we really had to do a lot of like JS interrupt stuff. So in the way Elm handled this at this point was really annoying. So you had kind of like this parts and like, let's say you're interacting with a WYSIWYG editor or something and you had like 200 of these typed
00:05:22
Speaker
port kind of things that let you interact with the outside, unsafe JavaScript world. So that was really annoying. And I mean, at the time, I think I just like played around with a bunch of stuff. And a good friend of mine was using Clojure script. So that's kind of what dragged me into it. It was also my first list ever. So
00:05:45
Speaker
That was good. So mostly you worked on the front end then, or you said you also did some Ruby stuff as well, or was it Ruby on Rails or some other thing with Ruby? Yeah, I like Ruby on Rails and a little bit of Merp back then, but I think they merged at some point. But I never really did like the hardcore back end database stuff, so it was mostly always revolved around the front end.
00:06:09
Speaker
Yeah, yeah. Yeah. Because you spend a lot of, well, I mean, you have a lot of experience from back in the day. I'm assuming like jQuery days or even before that. Oh, way, way before that. Yeah, before that. Yeah. So it's actually HTML thing. Yeah, right. You actually, you actually, you actually know, sorry, go on. No, it was just like table layouts.
00:06:35
Speaker
the HTML, there were names and frameworks. Good stuff. You probably, you're probably, you know, you remember how to program the DOM, you know? Oh, yeah. Since after jQuery, I think essentially the DOM kind of started to go away a little bit for a lot of developers. Yeah. Just like that. You can actually change stuff and so on. That was really, that was a big step.
00:07:01
Speaker
But I guess that's why I started this whole thing with the word ancient. It feels like lore to me at this point. It's not real anymore.
00:07:14
Speaker
Yeah, exactly. I think nobody even will recognize the days of the web. I think especially the front end is like the rate of change in the front end is so high. Yes, yeah. It's crazy, I think. I think back end, you can still have like, if you're writing CGI script back then, it's still kind of similar kind of shit somewhere. You can still have the same modeling ideas somewhere. Front end seems to be evolved like crazy.

Front-end Technology Evolution

00:07:42
Speaker
Yeah, and it's really the build tools that it's kind of like a really crazy situation, I think. Like a million. Yeah. What about the, because it's the other thing that's happened, I think in the last, I'd say the last five years, maybe post React is like the way that CSS gets treated in JavaScript as well. It's changed quite a lot. So, you know, is that something that you're also, I mean, are you a JavaScript or a HTML, CSS, JavaScript?
00:08:10
Speaker
kind of like all parts. Because those are things which I think, to me, those are things that really complicate the front end, that makes it such a sort of daunting thing to attack. I think like, I mean, I'm kind of like doing everything like the HTML, CSS, JavaScript, whatnot. But
00:08:36
Speaker
I mean, the more I'm actually spending time with Clojure and just functional programming in general, I just wish that I could use this for everything, right? So I think at this point in my life now, I just don't want to use CSS to place something against another thing.
00:09:01
Speaker
I mean, at this point, I really wish that I could just program and I could maybe use a constraint solver kind of thing to position stuff and actually have logic in there and not this. I mean, it's not a toilet. It would be unfair to say that CSS is a total language because it's not. It's like it does a lot of computation and stuff already now. It's quite
00:09:30
Speaker
quite complex, but I mean, just having to make this jump from, let's say a language like Closure to into CSS, that's just like, I think a cognitive barrier that I just don't want to have anymore. So I really wish it would be like one language to do the full stack. Because the other thing that I think is like under appreciated is like these animations.
00:10:02
Speaker
Because it's quite easy to, yeah, the CSS animations, animations on the front end in general, you know, it's quite easy to think about like the layout, sort of a bit logical, I think the layout and we've got flexbox now, which looks pretty, you know, looks like it's a keeper, you know? Yeah, it's a keeper.
00:10:24
Speaker
No, I mean, there's a lot of good stuff, actually. I mean, the Flexbox and Grid CSS stuff, it's all good. It's like for most, for all the basic stuff, it's really well done. But I think for me, it's like if you're doing application-style layouts and you know there's still all these strange cases where you open a pop-up or something.
00:10:52
Speaker
gets weirdly placed out of bounds or out of screen. And I mean, all these things that are kind of like to be expected in a proper functioning UI, those are still missing. I mean, just like basic hit detection.
00:11:17
Speaker
Because I was wondering, because initially, I think, as I remember, you probably have more experience with it as well. Like, the JavaScript was just, you're just sprinkling some things around, and then it's just pages, and then that stuff. And then later, we have these frameworks, and then this whole spa thing took over, like the single page stuff as well. So did you use things like, what was it called again? Back. Backbone.
00:11:41
Speaker
Backbone, yes. Spine. Yeah, yeah. And CoffeeScript and it was like a huge change in how you build applications. Because I used to do some stuff in YUI, EXTJS, and then it became Sencha, and then I also did some Dojo things as well. They were crazy. Yeah, I mean, I did them all. It was terrible. But it was...
00:12:08
Speaker
like I had this unreal situation where I ended up in like some dive bar somewhere in I think Budapest or some somewhere I forgot exactly where it was but it was with they would know that I ended like in this in this in this dive bar and both of us both of us were drunk
00:12:27
Speaker
And we had this sobbing moment where we were comparing all those awful libraries that we had to use back in the day. And we tried to came up with who used the more esoteric stuff. And at some point, we both realized that we used a library called Kooks2. And it was this super,
00:12:55
Speaker
Yeah, it's something out of Germany that I think nobody ever used. And it was quite esoteric. So yeah, sorry for the long answer. I used that phone.
00:13:08
Speaker
No, no, no. Okay. So you were just comparing battle scars, like, okay, that's what it felt like. Yeah. So I mean, given that it's like a total pain in the ass, you know, why did you do it? So, because most of us just think, I forget it, leave someone else do it, we'll go to the back end. It's easier.
00:13:35
Speaker
No, I think I've always been super interested in UI, basically since forever. That was always my thing. When I started with computers, just playing with games, seeing all this great UI stuff, that was something that I always wanted to do. And I think back in the days, it was like you had to use Flash to do this stuff.
00:14:04
Speaker
Yeah, if you want it to be on the web. And I never really used flash because I just hated the tooling. Like, I think I just found the whole editor awful. And just like being able to use a text editor that that is not like this monster felt great. And I think I got just got stuck there.
00:14:33
Speaker
It's actually my first ever gig in this field was actually animating, using JavaScript to animate stuff. So that was like scriptaculars and prototype JS. I don't know if that sounds familiar. Yeah, yeah, yeah. Yeah, I did, yeah. Yeah. So speaking of writing, instead of using tooling and then writing stuff in text editor, so Emacs or some other shit, what do you use?
00:15:03
Speaker
Um, so at this, at this point, I'm using cursive. So sorry, I'm neither nor, but, um, I used, I used, I used to use Emacs, like I used to use Emacs and I used to use VS code. Yeah. But, um, so my big frustration with Emacs was always that it's kind of like this, this ancient piece of software.
00:15:31
Speaker
that never really, but I mean, if you look at the rendering stack of it, like the GUI stack of Emacs, it's just not, it seems like you're, that I felt like I'm fighting this all the time. Like whenever I had to touch like the lispy stuff, it was great. Like all this like, yeah, basically life reloading the entire environment is just fantastic. Insider is just fucking fantastic.
00:16:01
Speaker
The GUI stuff is awful. Yes. But isn't Emacs just basically a terminal on the mainframe? So what's the rendering problem? What's going on here? Maybe you know better, Vijay. I think it's because they don't have any fancy VSCORE things. I mean, it's not written in JavaScript, so obviously it's better. Come back to other stuff. No, I mean, it's just like the little stuff,
00:16:31
Speaker
like pop-ups you want to autocomplete some stuff like you want to show stuff in place next to your cursor it's like
00:16:40
Speaker
I think that probably the reason is that Emacs has been in existence longer than all the different UI frameworks that we had. So it never picked up one thing. It was never written in Qt. It was never written in any of these stuff. So it always had its own rendering mechanisms. So it's much more consistent over the, I don't know, 40 years of existence.
00:17:07
Speaker
Is it? Is it? I love that phrase. I mean, whether it's consistently shitty or whether it is consistently awesome, that's in the eye of the beholder, but it is at least consistent. So did any of you use small talk?
00:17:30
Speaker
No, I played with it for some time. Yeah, a little bit. Yeah. So my first experience doing that, like loading up the environment, loading up the editor was that it didn't support high res.

Limitations of Emacs GUI

00:17:44
Speaker
So I was using this on a HDMI display and I had like this pixelated mess in front of me.
00:17:52
Speaker
And I think Emacs sometimes has the same flavor. It's kind of like, it's just not there. I think we can have an extended Emacs section this week. Keep on going. No, I just don't. Is it because we're complaining about Emacs? Not complaining. I think stating facts. I think, you know, that's different, Vijay. Come on. No, these are alternate facts, man. These are not real facts. Anyway.
00:18:22
Speaker
No, but I mean, lots of great stuff in Emacs, like all this like, I mean, there's just fantastic packages that that you can learn so much. Like, I mean, the we the the which key stuff, especially that's something that we really took a lot of learnings from for the last iteration of next journal. Yep.
00:18:44
Speaker
So, by the way, I think it's a really, really great talk that you gave at ClosureD where you were explaining the discoverability and everything else. I really loved it. It's a really good talk. And so people who are listening to this, you should go out and check out. I think we'll put a link in the description for that one as well.
00:18:59
Speaker
So maybe, maybe you can, um, uh, give us stay on a max for a little bit longer. Hold on. Hold on. Sure. It'll pop up again with no worries. Yeah. So just, just, you know, seeing a few nice things at the end there, which is good, but let's go back to it. Okay. I heard everything. So bring it on.
00:19:29
Speaker
No, so apart from vomiting on the screen with the pixelations and everything, I think that's what you said. That's what I heard anyway.
00:19:49
Speaker
So what, um, you know, apart from that, what triggered you to, you obviously still look at it sometimes for inspiration, you know, what not to do. Um, but what, what, uh, what bits, you know, what triggered you to eventually to sort of say, you know, screw it. I'm leaving emacs behind. You know, so I always, I already always went back and forth between, uh, we as code and emacs, I guess, because just not because emacs is so bad or whatever. It's just because, uh, the.
00:20:17
Speaker
Kalva stuff got so much better. And I really like this notion of having a an environment where I can hack the UI. So that always kind of like attracted me to this tools like we as code or atom. So it felt like in Emacs, that was a much harder, I would have a much harder time doing this.
00:20:47
Speaker
because of this kind of like ancient GUI stack. I felt like since like we as code is just like HTML, CSS, and JavaScript, I can just basically do whatever I want. And I kind of like used with code to experiment around with a bunch of ideas that I had for getting started with new software projects or kind of like diving into existing software projects that I felt were missing.
00:21:16
Speaker
But then I also always ran into troubles with rebel issues that just felt better inside her. So it was this back and forth. And it felt like the cursive stuff is already really solid. So it felt like it covers both worlds fairly well. So that's where I ended up.
00:21:46
Speaker
I think that's an excellent choice. Yeah. Are you using cursive? I'm using cursive, yeah. I like to pay the man the money, you know. Yeah, no, I'm paying. I'm paying the money. I just like to pay low, I pay something. Colin has got, uh, fuck off. Colin has got, he pays for fonts, but he won't pay for software, you know?
00:22:09
Speaker
He pays for fonts that don't render properly on Emacs when he prepares the software. You should see his face to your listeners, you know. Just because you can't get Emacs to work and you can't blame the tool, you know.
00:22:25
Speaker
Anyway, what was I going to say? Yeah. Just to, if Colin ever listens to this, he's got an open invitation to come back on. Yes. I'll come and switch to Emacs. I think that'll be hilarious. Colin comes out and then says, which editor do you use? I use Emacs to develop cursive stuff. I'm like, yes.
00:22:48
Speaker
He flips between e-max and cursive. Just before we go there, what were your experiments, Philippa? What were your experiments around VS4 that you were getting into there? I mean, I'm just like, I'm super interested in alternative visualizations of a software project. So we just used to this
00:23:14
Speaker
to this way of looking at a tree of files, basically, or like a directory structure. It kind of always looks the same. And to me, it feels like, especially if you're taking over somebody else's project, or you just dive into an existing big code base, maybe there's some different visualizations of what's going on is better.
00:23:43
Speaker
maybe a network graph that just shows you clusters of stuff. And you visualize the age of stuff with biopacity, essentially. So you could end up with much more useful representations of what's going on. Or let's say, visualize change better, again, in a weighted graph, weighted network graph kind of thing.
00:24:12
Speaker
So those were the things that I was playing around with. I remember when we've talked about this before, well, maybe we haven't talked about this before as three, but I think I mentioned about when we were talking with ClosureD about like the Brett Victor stuff.
00:24:29
Speaker
Oh, the thing about Brett Victor is I was found, I mean, I know it's just a, in some respects, it's a toy, but it's a kind of like path to try and describe or show. Okay. If I'm, because I often think if you look at the system that's running, especially UIs, it would be really nice to be able to see, well, what is affecting, you know, if I move around the cursor or I trigger a particular action, where is that in the code? And, um,
00:24:55
Speaker
And that doesn't seem, I mean, it doesn't seem too hard to do in many ways. Although I imagine, you know, again, it's probably I imagine it is quite hard, but, you know, there is some must be something around that it's possible.
00:25:10
Speaker
Yeah, I mean, I mean, like, a lot of this stuff is about tangibility, right? So you want just want to have like, an immediate immediate observable effect and kind of like follow the chain to this effect somehow, ideally. But there's like a lot of like unsolved issues with with with with some of what Brad shows like justice like sliders kind of thing. I mean, it's like this demos where you're kind of like scrubbing numbers.
00:25:40
Speaker
And it changes like the output of an equation, but then you could, he also shows like that you can scrap the result and then you see like how stuff in the equation changes. I mean, that's just not like, it's just not doable. It's like, there's a lot of math that's missing to kind of like just do that. So, but yeah, it works. It works great as an inspiration. Can you just go to your, your, your, your view on, um,
00:26:07
Speaker
Because you said how to represent the code, how to represent software, rather than the text format, because it seems like, you know, there is always some experiments going on, because if I say with my experience looking at different types of editors, different types of visualizations,
00:26:24
Speaker
But something, all these experiments, they never gain the mainstream view because every new editor comes in and there is a left-hand side file browser, right-hand side editor, a bit of a map and rest of the shit is okay, the same thing. So what is your view on this? Like why we are not able to make that quantum leap of switching to different kind of things?
00:26:50
Speaker
It's also kind of like practicability, I guess. So I mean, you're used to this textual representation, and it's easily manipulated in your editor. You're used to your editor. It's just like, I don't know. I haven't found any much better representations up to this point, to be honest.
00:27:17
Speaker
And I'm like, at this point, I'm really, I'm not sure they exist, like maybe they do. I mean, I'm totally convinced that a directory tree is not the best representation for the file use case. But for code itself, I'm not sure, you know, whenever I try to use like the noodle programming stuff,
00:27:46
Speaker
It was not it was not good. Like, yeah, and you end up with this tangled mess. And so I would be interested in exploring like a not like this file based approach, but rather like a snippet based approach.
00:28:05
Speaker
I think there's a lot of stuff people are talking about. I mean, one of the nice things about cursive, I don't know about Emacs, whether it can do this. But for instance, if you have a function and you want to just go to its definition, you can just click the, when you hover your cursor over it, it will become alive. The link will become visible and then you can just click and it goes through to that function definition.
00:28:29
Speaker
I mean, that is so obvious to me. It's such a nice, simple thing that you can just navigate code via... No, hold on, Vijay. Calm down. No, you cannot say... The thing is, you cannot say, I don't know whether it is possible at any maximum. There is no...
00:28:47
Speaker
It doesn't matter what it is. It's always, yes, the answer is yes. Do you have cards as an Emacs? No, I mean, I agree. I mean, this stuff is super useful, but then I'm kind of like, I'm still kind of like missing what's going on with this interaction. Like that's something that frustrates me, for example, like I'm using this, I'm using this all the time, but where's the breadcrumb that shows me like the last five,
00:29:16
Speaker
items that are navigated through. Yeah, yeah, exactly. I mean, these are the kind of things where my history
00:29:22
Speaker
Yeah, that would be, that doesn't seem beyond the wit of man. These kind of, like you say, affordances on top of these kind of editors. They're not kind of like, let's say seismic changes or quantum leaps, but additional affordances that would just, you know, just, yeah, improve the experience and make the experience a bit more, yeah, like you said, improve your memory, essentially, you know, the two things that you forget. That's a really good point, by the way.
00:29:52
Speaker
I've never thought about this. It's easy to kind of like get lost in this, like what's a different, better representation for code, but it's actually these tiny things that I think could make a big impact, like just... Yeah, it's like coffee cup holders in cars, you know? It's pretty much that, right?
00:30:19
Speaker
Are you familiar with like dark angle parts work? Like the augmented intellect? Yeah. Yeah. So I really like to think in, in that, in that way, like, actually what, what can we do to augment ourselves? Like little things that make us better. Like that's also kind of like the idea about the next journal stuff that I spoke about at ClonerD. It's like just showing little,
00:30:47
Speaker
like mnemonics, right? Just like reminding people what they can do, making them learn that stuff. So maybe as we come on to that a little bit then, because I think one of the things that you were talking about there was this like, this this discoverability, I would say, you know, is essentially the problem that you were trying to address. Is that fair? Right. No, that's fair. Yeah. Definitely. So maybe as you could just give us a little, go on.
00:31:17
Speaker
Sorry, I should give you a little bit of context as to what you think the problem is and what you were kind of working towards. Just so that lazy people out there can get a quick summary of your talk. They should watch the whole thing. Sure, sure.
00:31:37
Speaker
No, it's like the next journal is actually, what are you doing? For some reason, Vijay is bringing his dog into the podcast. He's biting my feet and then he needs attention. Sorry. We discovered our dog moving on to the software discoverability. So yeah, like next journal is this,
00:32:03
Speaker
five, six year old product. And it does a lot of stuff now. And it has tons of features that are basically just applicable to certain contexts. But the the old UI favored some contexts over others. And that makes like a subset of features inherently hard to discover.
00:32:28
Speaker
So we tried to emphasize this notion of context. So instead of providing a default context, it's always about the current context. So you have your cursor in rich text, and the system shows you all the actions plus shortcuts that you can do with this rich text. And there's possibly more, but you can pick something or press something to show this.
00:32:58
Speaker
the other stuff. And once you switch into a code context, the UI kind of adapts. And we took this notion of context not only to the thing you are working on, like let's see where your cursor is at a certain point, but we also applied this to
00:33:22
Speaker
Let's say, is there a modal open, or is there some graphic in the text flow that cannot be hidden? And the UI tries to adapt to that. Hide as little as possible, or in that other context, it's fine if we hide stuff. So we have this observation of multiple
00:33:46
Speaker
Contexts happening at all times and from that kind of like we we infer what the UI should look like Sorry, that sounds it's always kind of like sounds very general How do you let me I'm trying to understand Sorry, I was ranting
00:34:09
Speaker
Sorry, yeah. I was thinking maybe I don't know how to ask the question in a specific way, but I'll just think out loud. Because if you say that there are certain actions possible within, depending on the context, for example, and from the user perspective, isn't it going to be a bit difficult to
00:34:35
Speaker
go to that point because I'm going to bring up some shitty UI thing like Microsoft Ribbon thing that they hide all the things and then you select a table and then they only show the table related stuff.

Creating Context-Specific UIs

00:34:49
Speaker
But the thing is that if my context is not there, then suddenly I don't know what is possible with the tables anymore. So how do you see this problem?
00:34:59
Speaker
I mean, you need some some form of default context. I mean, I think there's no way around that. I mean, I think the ribbon does this as well, right? So I think if nothing is selected, it still shows a bunch of stuff. So I'm not sure you're you really get around that. But ideally, I think I mean, having no specific context is also a
00:35:27
Speaker
context, right? Yeah, yeah. Sounds like super Zen thing. Yeah, it's the Zen thing. Yeah, yeah. So let's loop it back a little to closure and your experience from switching from JavaScript to

Transition to ClojureScript

00:35:44
Speaker
Closure, ClosureScript. How was the transition has been from writing a lot of JavaScript and kind of chasing the new features in JavaScript, learning that we're just constantly changing, and then switching to ClosureScript? How difficult was it? And how easy? I think in hindsight, it felt fairly easy. So there's a lot of, I think at some point actually gave a talk about this.
00:36:15
Speaker
I think the biggest hurdle was, I think there wasn't a real hurdle. It was just like, there was some amount of anxiety towards the parents. And there was some anxiety about the JVM
00:36:39
Speaker
And I think none of that stuff actually was that hard. So it was actually really easy to, to get into it. I think like, just, just like coming from JavaScript, like everything immediately felt way more consistent. I mean, even the JVM, like it felt way more consistent and way better than at the time having to deal with Webpack. I mean, I don't want to be unfair. I don't have no idea how it is right now.
00:37:09
Speaker
But I think that was my biggest source of frustration at that time is having to spend all this time with the tooling. Felt like I was constantly fighting this. It was immediately gone with switching to Closure. And just language-wise, it felt like, I mean, I mentioned I was also using L.
00:37:34
Speaker
Yeah, for a long time. So you are familiar with functional programming. Right. At this at that point, I was already pretty familiar with functional programming. And I was I had switched back to JavaScript script after Elm, because of reasons. Yeah. And I was missing that part so much like that immutability and everything. And closure gave that back to me. So it was like, yeah, it wasn't instant love, but it was like,
00:38:03
Speaker
took me three weeks to fall in love. In JavaScript days, it's like, I don't know, decades. With JavaScript, it's an unhealthy relationship that I have. That still keeps going.
00:38:23
Speaker
And so because Elm is, as far as I know, or my little knowledge of Elm is that it's a statically type thing, right? It's almost like Haskell. So did you feel like you were missing out any of that stuff when you switched to, when you switched to Closure Script?
00:38:42
Speaker
Not really because at the time where I switched like all of the cool stuff like fig wheel, dev cards, it was already in place, right? So I mean, the really awesome stuff about Elm was always that so you produce an error, right? And the system kind of like life reloads and shows you the error and you kind of like, follow it back until you do the fix and then go on.
00:39:09
Speaker
And figural kind of like provided same experience for most for most errors. So okay, I mean, it's not the same thing, obviously, like, but but it had a similar feeling. And the other thing was also, I actually liked this, this notion of everything is happening at runtime way better. Hmm.
00:39:33
Speaker
Because in Elm, just having to deal with UI, having to give focus to an input field, that was just awful during that time. I mean, I have no idea how it is, but actually doing something, describing something that needs to happen at runtime, it was terrible. And since ClosureScript has this notion, no problem.
00:39:58
Speaker
Yeah. And in Closure Script world, I'm guessing Use Next has your own homegrown framework, or did you use Reframe or one of these libraries that are available? So Next Journal is heavily using Reframe. But we are...
00:40:26
Speaker
using more and more of our own stuff also in between. So I can't give you a proper ratio at this point. But yeah, it's some of the stuff we build ourselves. And there's also reframe. So I guess you're also using like from a toolset perspective, you're probably using the shadow stuff. We're using shadow, yeah. Right. Yeah. And that's actually also really, really well done. So I really love that we switched there.
00:40:56
Speaker
And we're also using dev dev cards. But at this point, probably I think our own implementation of dev cards. Yeah, right, right. That does a bunch of more specific stuff. And we're actually building something that we we don't have a proper name for yet. But it's we call it the next journal toolkit. So that's, that's a bunch of things that we want to open source as we go. So
00:41:25
Speaker
using more and more of the stuff that we use for ourselves and releasing that as open source. OK. And so the whole styling part, as well as the logic and DOM control, everything is in Closure Script in your project.
00:41:43
Speaker
Right, there's no, I think at this point, there's no JavaScript. I mean, there's a bunch of like JavaScript enclosure scripts, like we're still calling all these API's, obviously, but, but I think there's no real JavaScript code anymore. I think the last bit that we removed was for integration testing. And that's gone now too.
00:42:07
Speaker
So I'm a bit more, I don't know, kind of a philosophical question. You can say everything is philosophy if you look at from some lens. Your approach to UI over the years, because you tried Elm, sorry, you worked in Elm, you worked in JavaScript, a lot of you worked in ClosureScript. Did the language influence the UI? Like the UX ideas anyway, because I'm curious, the developer experience translating into the user experience.
00:42:37
Speaker
I guess that's hard for me to answer because I was using React before I was using ClosureScript. I mean, it just feels like React is fitting the functional paradigm like a glove. And I'm pretty sure there are translations happening where my dev experience translates over to the UIs.
00:43:07
Speaker
But yeah, I guess I'm not I think of it. I don't have a good example. I think I'm wondering because yeah, sorry. Sorry. I think I haven't used this extensively yet. But there's a thing called the glamorous toolkit that are you familiar with that? No, which toolkit? It's called the glamorous toolkit. And it's a thing that's coming from the small talk world. And it's essentially a
00:43:34
Speaker
It's a custom UI. I hope I'm not like messing this up now. But because I'm not not like from a small talk community at all. But my understanding is that it's kind of like a custom ID that's made for for for small talk, essentially. And it has all this really
00:43:59
Speaker
great UI ideas. So the author, Tudor Gieber, he's calling this multiple development. And it's kind of like this. You are creating this little inspectors for your own code as you go, but at some point they might become the actual product. So everything has a single render tree. And you can say, in my code editor that I'm using,
00:44:29
Speaker
I want to replace this expression with a graphical visualization, let's say a progress bar instead of something else or a slider instead of a variable or whatnot. And it has this single render tree that allows you to do that stuff. And it might be that you just need to create this little visualization or network graph or chart, whatever.
00:44:57
Speaker
to find a bug in your code, but then you learn that this might actually be the better result of your work anyway. So you might want to ship your, you might want to ship the dev tool that you custom made to debug your code. And it's really, it's really fantastic. Like it's, there's so much to learn from that stuff. That's really, that's really where it's happening right now.
00:45:21
Speaker
Oh, warm work. Yeah. Okay. We've got to look into this stuff. BJ, get straight onto it. I'm pretty sure there is going to be a glamorous dotty yellow for him. I was going to install and then I'm done, you know. Yeah. And it's going to render so well. Yeah. No, they fix horrible stuff. All of this works really well now. So.
00:45:51
Speaker
no rendering issues anymore.
00:45:53
Speaker
Yeah, I was going to say that some of the, some of the things that I watch about, like, um, like from the games programming world, uh, like you were talking about earlier on, you know, those people that they say, you know, we, we make, we look at, we look at the tools, we look at like the data, we look at like how people play the game and we find a bug, you know, and then they find all, you know, okay, they, they track the path through the code and they make tools to do analysis on for that bug, but they're doing, but they end up doing analysis on their code base.
00:46:23
Speaker
to find out how often does that bug happen, blah, blah, blah. And then they say, yeah, actually these tools end up being part of the environment. And how you press that, we've suddenly got a whole new bunch of very specialist debuggers that just work, even just for that one game.
00:46:40
Speaker
know, could be the physics engine or the platform or whatever. But I really like that approach because it's sort of, yeah, it's very much focused on the problem at hand. But like you say, you might find a general, a general use for it as well. Yeah, I mean, I just love this notion of having a, a little toolkit available that I can just, can just like, use to debug my stuff. So it feels like, like,
00:47:10
Speaker
I mean, I guess it's not much different for back-end programming, but the front-end world, it's just so easy to throw in a console.log and just like print something out, right? And it's still like after what feels like a hundred years, we're still using this approach, right? And it's like every time I use this, I swear, like I'm thinking like, I just wish that I had like a little thing, like,
00:47:39
Speaker
Because usually, I can think of what I need in this situation. But it's just easy to do this console.log. And I wish I could just throw something in.
00:47:50
Speaker
Did you see these other things, the things like Reveal and the things we've been talking about? It's really fantastic. Portal. Portal, yeah, because they have these, they use their own thing, but Closure also has this tap thing now where you can throw objects at things and do rendering. That seems like good infrastructure, you know? Yeah, so we did. That's actually something that's probably be part of like this next channel toolkit.
00:48:19
Speaker
So like internally, we are having our custom tap. And at any point, we can open a little draw in the app. And it will use our own, like viewers API that we use to display like the kinds of results that an external piece of code can can produce. So and at any at any point in our code base, you can essentially say tap
00:48:49
Speaker
this result to this drawer. And then you can select the representation for it. That comes in super handy. So that's some form of a better console.log.
00:49:01
Speaker
By the way, I mean, just a quick small, not completely big digression or diversion, digression, I don't know what it is called. It's better to explain what next generation is. I think I'm pretty sure most of the people know in the closure community, I hope. Maybe it's a good idea. But this podcast goes all over the world, doesn't it? That's true. That's true, yeah. I mean, especially for people who are using Emacs, and it's a good idea, too. Because we're very popular in Emacs podcasting world.
00:49:31
Speaker
Yeah, so yeah, sure. Like, so next channel is a like, I can I assume that people are familiar with what a notebook or a notebook editor is? Maybe not. Maybe it was like, so one or two minutes on that. Right. So you have like, so notebooks are these things that are fairly popular in in data science, or I guess in science in general. So they are
00:50:01
Speaker
there a page essentially, that you can fill with some form of like narrative text, and pieces of codes that can be executable.

Next Journal Platform Overview

00:50:13
Speaker
And from that, you can produce something that looks like a report that is runnable. So and the most like, like, Mathematica is probably the one thing that popularized this format. But nowadays, it's Jupiter,
00:50:31
Speaker
that people are probably most familiar with. And our next channel is one incarnation of this type of editing. And so it's a product that's essentially focused on data scientists. I mean, you can use it for everything because it's like just code and it produces some sort of output that can be graphical or whatever.
00:50:59
Speaker
But it's geared toward data scientists, and it should make it very easy to experiment with machine learning stuff. So it's just very easy to open, create a new external notebook, add a bunch of code cells. Say you want to use a GPU for that. And it runs in the cloud. It does all the scheduling for you.
00:51:28
Speaker
You don't have to worry about having the correct drivers installed and whatnot. It's just like it does the expected stuff. And it's special in that everything that you do in Next Journal is immutable. And at any point you can roll back to a certain point in time and, um, restore that, or you can reference code from another time, stuff like that. And, um,
00:51:57
Speaker
So that's also important for reproducibility. That's something that's super important in science because you have all these issues where code that was written in like three years ago cannot be run anymore because you don't have the proper libraries and so on and so forth. And we kind of like solve this because everything is containerized automatically behind the scenes and you don't have to think about it. So that's kind of like what it is.
00:52:25
Speaker
So the whole, you talked about frontend being completely closure script and also the backend is also closure, right? It's a complete. Right. So at this point, we have like everything is kind of like, right, closurey. And we're also like experimenting with Nix and Gix, I think. And maybe that brings in more lispy stuff. Let's see. Okay.
00:52:52
Speaker
Yeah, I think we wouldn't talk in first time about geeks or geeks. I don't know. I mean, I can't give you I can't give you information on any of this. So not my turf. Like, sorry. But but the general idea about nicks and geeks, I think it's called, I think the general idea is that the operating system, all the packages installed and those kind of things have reproducible
00:53:17
Speaker
Let's say they're well-sourced, so you know that they're from a particular branch or a particular bit of code or a particular release or a particular tag on the code base or whatever. I think the talk we went to was like how, I think, was it the GCC compiler, VJ, which took something like four years to become reproducible?
00:53:40
Speaker
Yeah, because you want to have the same exact build or same exact version again and again.
00:53:48
Speaker
they really strive to make everything completely reproducible for every piece of software that you're using, the dependencies and everything, which is super cool. And coming back to the next channel, so obviously it is built-in closure, but you can just use any kernels or whatever they call it these days, right? You can use Python. Yeah, that's probably the other thing that's special about it. So you can, like, special compared to other notebook platforms.
00:54:15
Speaker
you can mix and match languages. So it comes in with a bunch of default environments. We call this containers that come with a language pre-installed and essentially everything that needs to run that language, we call those environments. And it comes with a bunch of default environments.
00:54:42
Speaker
You can run Julia, Python, R, Closure, Bash, a bunch of popular languages. And you can use those together in a notebook. So you can say you want to pipe the output of one language into another, and so on. But you can also bring your own. So you can essentially upload a Docker image that comes installed with a bunch of language.
00:55:09
Speaker
And you can get that to work as well. And we are also compatible with Jupiter. Sorry. So you can also kind of like go back and forth. How do you ensure that people aren't uploading bit mining? Oh yeah. That's like a constant source of pain. Like it's like, it's just like, um,
00:55:28
Speaker
I mean, that's kind of like where I'm really happy that I'm in the front-end department and I'm not having to deal with this crap all the time.

Challenges with Cryptocurrency Mining

00:55:37
Speaker
But this is like an ongoing source of frustration for our DevOps folks. It's really amazing. It's kind of like it's happening all the time. And yeah, it's a cat and mouse game.
00:55:51
Speaker
Yeah, you've got GPUs that people want to mine on. It's not only the GPUs, like it's, I think at this point, we don't even allow, we don't even allow GPUs on the free plan anymore. I'm not sure at this point, but still, like people just want to mine. Yeah.
00:56:14
Speaker
I think it's also becoming a big problem in free CI, CD tools as well, I think on GitHub or CircleCI. Wherever there is free computing available, people are jumping onto it and then putting something hidden in the database.
00:56:31
Speaker
Anyway. Just parasites. Yes, horrible. So obviously, you talked about a few things and the things that you like about Closure, ClosureScript like immutability, functional programming, and the good tooling available. Are there any frustrations that you face building such a complex product like Next Channel using Closure and ClosureScript?
00:56:57
Speaker
There are some cases where I really wish we had types. But this is getting better and better with spec. We're not using spec that extensively yet. So I guess a lot of those issues could be solved with using more specs. I really wish sometimes that it feels like sometimes you run into these errors where you hit the compiler.
00:57:27
Speaker
like the closure script compiler, and then it just feeds you garbage. I really wish those could be done better in some way or another. But I was at David Knowles closure, closure script compiler workshop. I don't think I think what's possible is done at this point. So I think that just be my sense of aesthetics here interfering. Yeah, but yeah. But no, I mean, I guess in general, I'm really happy with the language. Like there's no real
00:57:57
Speaker
There's no real pain point at this point, you know? Nice. But it's like one of those nice examples. It's kind of not like a run-of-the-mill front-end, back-end sort of application, right? The stuff that you're working on. No, no, no. Lots of stuff is like super custom, and yeah.
00:58:17
Speaker
Exactly pushing the so-called envelope forward sort of thing like the ux is different the ui is different the target is different it's a very Exciting project to be part of and then you know being not definitely and it has this like research character so and it's I'm actually really grateful to be in this and that's actually something I think where closure really plays into well because it feels like being part of the lisp family and having like rich is kind of like this
00:58:48
Speaker
inspiring guy that kind of like brings you a tad bit nearer to like the computer science history maybe and it feels like the community feeds on this on this computer science history stuff so it feels like if you're part of disclosure community you're it's easier to get into this old stuff as well and for that I'm really grateful because like you said when you try to push the envelope a little bit
00:59:17
Speaker
like going history shopping from time to time can be a really fun and rewarding experience kind of like stumbling on this old piece of list from the eighties that describes some algorithm. It's like really fantastic thing.
00:59:31
Speaker
I think a lot of these things in the eighties, yeah, in the seventies and eighties were well-described. It's a bit like, remember we were talking to the people from, uh, the jux who did the crux database at this, uh, different, different times. And obviously the atomic as well has that concept of like, okay, well, we can just store everything. Uh, why? Well, because we've got, we've got cheaper CPUs, cheaper storage, cheaper this, cheaper that, you know, all of sort of these ideas were being like conceptualized in the eighties.
01:00:01
Speaker
And then you're dusting off now that we've got the compute power. Yeah, no, it's like, um, it's also, um, yeah, it's basically just like, um, somebody would somebody please just realize what they tried to do back then. That's what it's kind of like feels a lot to me. Like, like once you discovered this wealth of stuff, like it's just like,
01:00:25
Speaker
I wish I had more time. Martin was on our podcast. I hope Martin is listening to this. Hey, Martin. Did you place Kafka that he was talking about? Sorry, I didn't think that he was part of. Oh, I mean, that's kind of like, oh, Shafkov. Yeah, that's why we know each other from.
01:00:49
Speaker
It's kind of like most of our team has been working together since over 10 years, at least. And we all kind of like met at the same Ruby conference and started working in Rails and did the ShopKop thing. And now everybody learned Closure. Okay, so you're also a ScafKop.
01:01:18
Speaker
I don't know how to say that. Okay, that one. So you're also the pro in that one. I'm not like this is one of the most embarrassing things, I guess, most embarrassing facts about me. Like I'm kind of like, I'm doing this thing since forever, but I can't properly play yet. Like I tried to teach me the rules so many times. It's like,
01:01:45
Speaker
But probably half of it you actually developed and then you built the stuff. Sorry, I did not hear you enough. So like the half of the stuff that you actually built and then, you know, you never play it. You never, you know, got into the game. Yeah. I mean, I played, but it's like, you can't let me, can't let me lose on the actual players. Like it would be so embarrassing. And it's probably the worst player ever. Okay.
01:02:13
Speaker
By the way, I looked up, yeah, sorry, go ahead. I probably understand it enough to build UIs at this point. By the way, I looked up what is the 50th episode of DeafN, or at least the one that we deem to be number 50 is Borgdude's episode. So, Michiel Borgkent. Sorry, I did not hear you. You're really cut up now.
01:02:42
Speaker
the 50th episode that we were looking for like which who was on the 50th episode it's uh oh yeah it's uh it probably was pretty much pure gold yeah yes but this is diamond yes yeah
01:03:02
Speaker
I won. Anyway, yes, you did. On that note, is there any other topics that you want to mention or anything that we missed poking your brain? No, I think I'm actually good. I was hoping for being able to mention Jeff Reskin because that's a book that I'm just reading that I find really interesting.

Book Recommendation: The Humane Interface

01:03:28
Speaker
It's called The Humane Interface.
01:03:30
Speaker
For anybody who's interested in building UIs, it's a fantastic book. I'm almost done with it now. He's also like a really good UX... Yeah, right, Asa. I have no idea what Asa is doing now, but some of his past stuff is really great stuff.
01:03:51
Speaker
Yeah, yeah, totally. Because I remember you, he was talking about this, you know, on, on Mac, there is this Quicksilver thing, like, and you can just, you know, like, we have more things now, but something on Windows. Yeah, exactly. On, on Windows, something there.
01:04:10
Speaker
his ideas about his blog was really good. I think I used to follow this stuff some time ago. I think it's like, whether you think from noun to verb or verb to noun, you know, that there was really. Yeah. Right. Right. Right. No, but it's also kind of like in this, in this humane interface book, like it's really not like, yeah. And it's like all this work that, that Raskin did on the canon cat, like it's just really good stuff. Like it's like, yes. I think the,
01:04:37
Speaker
I think people should listen to and listen to or at least read in them. That's a really awesome book. That's a good point. Yeah. Cool. Nice. Yeah. Okay. Sure. No. Thanks for having me. I mean, I feel honored.
01:04:55
Speaker
I think it's, it's, it's, it's like one of the best episodes right in the 75th one, the diamond episode. I think we know that there's a lot of awesome UX stuff, uh, that we usually don't do deeper. It's like, it's like an Emacs roasting episode as well. So it's been for everyone, you know, sorry about that. But it's also like whenever you invite an Austrian to your table, like the conflating happens quickly.
01:05:23
Speaker
Like remember that like we started and lost so many wars at this point. It's deeply ingrained in our nature.
01:05:34
Speaker
just start hating on something and I'll be a best friend. No, I think, I think, you know, it's, it's, there is a lot of fake criticism for, for every piece of software. And I think Emacs is beyond criticism. So, you know, it doesn't bother me. So that's fine. It's transcending a lot of things. Yes, exactly. It's, it reached enlightenment. So nothing worldly things bother Emacs anymore.
01:06:04
Speaker
You tell that to yourself. I'm that piece of enlightenment. Okay. Thanks a lot, Philippa. Thanks for joining us. It's been awesome. Yeah, it's been great. Cool. Have a good time.
01:06:24
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:06:41
Speaker
If you'd like to support us, please do check out our Patreon page and you can show your appreciation to all the hard work or the lack of hard work that we're doing. And you can also catch up with either Ray with me for some unexplainable reason you won't interact with us. Then do check us out on Slack, Closureion Slack or Closureverse or on Zulep or just at us at Deafened Podcast on Twitter.
01:07:10
Speaker
Enjoy your day and see you in the next episode.
01:07:38
Speaker
you