Become a Creator today!Start creating today - Share your story with the world!
Start for free
00:00:00
00:00:01
#29 - Zach "The Mighty" Oakes image

#29 - Zach "The Mighty" Oakes

defn
Avatar
51 Plays8 years ago
Hold on to your Explicit Tags cowboys as we take this wild ride into the dynamic world of Clojure's own Bob Ross aka Mr Zach Oakes. There is a special surprise at the end for those who can take the pace ! A very, very proud Happy Clojuremas to one and all.
Transcript

Introduction to Zach, the 'Cowboy Coder'

00:00:18
Speaker
Welcome to Duffin, episode number 29. This is Vijay from Holland. Yeah, it's Ray from Belgium. We have the cowboy coder himself. Is that my name? Yeah, I think so. I just made it up, but why not? I think I was matching you as the closure cowboy lone coder, Zach.
00:00:44
Speaker
So tell me who you are anyway. You know, I was trying to push that I'm the Bob Ross of closure, but I like that even more. Then you need the fancy hairdo, right? You guys know Bob Ross? No. I wasn't sure if the Europeans knew. Of course. Everybody knows Bob Ross. I don't know Bob Ross.
00:01:02
Speaker
Oh, you to that dude, man. He's he's I'm him, first of all. All right. Except for closure. I don't know if that helps. Not really, but you know, give me one more clue.
00:01:19
Speaker
So you're going to make screencasts about things like, oh, let's just put the parenthesis over there. There's nothing wrong with the parenthesis. Let's keep adding a couple of more there. There you go. That's exactly it. Turn every mistake into a happy mistake. That's what he's all about. And all of my projects are happy mistakes. Nice. So this is episode number 29 with Bob Ross of Closure, Mr. Zach.
00:01:44
Speaker
Right on, right on. Mr. Zach, the mighty orcs. Yeah, mighty oak.
00:01:52
Speaker
First of all, first of all, I have a question about your, your domain name.

The Story Behind Zach's Last Name

00:01:57
Speaker
What is sick? Oh, it's all backwards, dude. Come on. Oh, come on. No, but I thought O A K K S is O A K E S. Yeah. That's sick. Oh, because I kept typing you. I kept typing your name as oaks, like Oak tree, thousand year old Oak tree. Well you misspelled it both ways.
00:02:20
Speaker
Yeah, oaks, my understanding is, you know, the whatever American settlers that we are ancestors, they used to spell it your way KS. But then they it just felt a little too ghost, a little too common person. So at some point, they decided to add the E.
00:02:43
Speaker
A silent E, you know, because silent E's are fancy. Okay. Right. And so now it's O-A-K-E-S. That's what I've been told. But who knows? That's nice. Well, it's an interesting question there though. Do you drop the E or do you drop the A? Nowadays, because actually nowadays you say oaks and it's just like O-K-E-S. So the E is still good there, you know? Or do you say, well, I mean, I don't know where you're going on that one.
00:03:10
Speaker
I'm not going to be changing my name anytime soon, but you know. Especially after you registered the domain. Yeah, exactly. I can now. That's now written into the internet forever. Yeah. Sequoia sounds like Sequoia in some way. So it's a bit of a kind of tree reference there. It's still a tree. I didn't even think about that. You guys are blowing my mind right now. Yeah, we know.
00:03:36
Speaker
It's just three minutes in. I mean, you need to wait for another 30 minutes and it's going to be like fucking awesome and weird. And then you start seeing rainbows and unicorns. It's just going to be amazing from now on. What exactly have you taken before this episode? Just so I understand, Vijay, where are we going to go now?

Journey into Clojure and Burnout Experience

00:03:58
Speaker
I always come prepared. Right. OK.
00:04:04
Speaker
Okay, so let's let's talk about the stuff that so Zach closure or anything else you want to talk about? How did you get into closure? I am? Well, I guess I'm not sure how I originally found out about it. But back when I was younger, I was really into cryptography and
00:04:28
Speaker
peer-to-peer networking, all this cyberpunk stuff. And I wanted to make something along those lines. And I found a Java library with all the crypto code that I wanted to use, but I didn't want to write Java. And I came across Clojure. I had never used a list before, but I decided, well, it works with Java, so I'll try it out.
00:04:58
Speaker
That project was called Night Web. It ended up kind of crashing and burning, but I stuck with Clojure since then and for the most part abandoned the crypto stuff and I got into what I'm doing now with making beginner tools.
00:05:18
Speaker
and games and stuff like that. But that's how I got into it. It was really just the JVM. You know, a lot of other people that get into it other ways, but it was definitely that was huge for me is actually being able to work with Java code.
00:05:34
Speaker
So was that the Bouncy Castle stuff, was it? Or was it some other more obscure? I think it was using Bouncy Castle, but the main project was called I2P, which is a anonymous network, similar to Tor. All right, okay. You know, it's like less well known. It's for the hipsters who you want to use something that no one knows about, you can use I2P. I think that's your shtick though, isn't it?
00:06:03
Speaker
Yeah. Oh, yeah. I'm a hipster. Look at me. I got a mustache and a baseball cap on. But but it's true, though, I do like to try different things. I don't really like I said, I don't really do the crypto stuff very much anymore. But
00:06:24
Speaker
But I mean, I fell in love and I've been using closure for five years now and haven't gotten tired yet. So that's basically how I started with it. But before that though, I mean with the crypto stuff and all the cyberpunk stuff. So it was a bit more about that because that sounds, you know, I mean, you didn't stick with it, but what brought you to that?
00:06:49
Speaker
Wait, are you Satoshi? Let's get it out of the way first. I am not Satoshi. I am not Satoshi, but I... That's what Satoshi would say, though. Exactly. I worked for the NSA, for the National Security Agency, and I was... I don't know. At the time, I was fascinated with that subject.
00:07:19
Speaker
And this was before Snowden. So it was before the NSA was something that everybody knew about. They used to call it no such agency. That's what they used to call NSA. But now everybody knows it because all the revelations. But I don't know. That was part of the reason why I was really into it.
00:07:48
Speaker
I think after a while I just got burnt out and I don't want to fight the man. I want to pursue other things now and so that's part of the reason I abandoned it. It was just, Night Web really burnt me out because I really poured a lot of effort into that and the nice thing is that it got me into closure.
00:08:17
Speaker
You know, every, every, it was a happy accident. You know, same, same thing we were just talking about. Yeah. Yeah. Yeah. Like you're the Bob Ross of closure. But why, why beginners tools tools though? I mean.
00:08:33
Speaker
It seems like there is, if I see your list of projects, there is IDE, IDE, IDE, and IDE, and this kind of thing seems to be like extremely, I don't know, I would never start an IDE project because I know how monumentally it sounds actually. Even starting an editor itself is like, oh, fuck, that's going to be too much work. Yeah. Why did you pick this stream? Well, originally it was because I, after the crypto stuff, I got into teaching.

Focus on Beginner-Friendly Tools

00:09:02
Speaker
And I wanted to have a good tool to teach closure. And I think both Emacs and IntelliJ are a bit too much for a beginner. And I mean like a ground level beginner, like someone who has no programming experience.
00:09:24
Speaker
Both of those are very powerful tools, but I think they can be overwhelming. So that's how I started getting into it. Also, I'm weird in the way I write code. I'm my biggest user, by the way, of my tools. I use all of my own stuff, even though they're beginner tools. And the reason why is that
00:09:51
Speaker
I'm not one of those people who sees programming as an art form, like people who actually care a lot about coding style. And these are the same people who also tend to love tweaking their tools. They just love everything about
00:10:07
Speaker
you know, getting the absolute best setup, you know, and just tweaking it constantly. Hide your Emacs file immediately. Yes. Perfect example. Perfect example.
00:10:26
Speaker
Um, me like, honestly, when I accidentally open up Emacs, I don't even know how to close it. I'm not even joking. I was never like that. I even before closure, I was always like, I look at programming as a sledgehammer that I whack my problems with.
00:10:55
Speaker
I don't think about it in terms of an art form. I just hammer at my problem and often it's ugly. Often I duplicate code and it's just like don't look at any of my projects. It's often quite gnarly but that also means I always hated configuring tools.
00:11:19
Speaker
It just drove me nuts because in my mind, it had nothing to do with the problem I was trying to solve. It was just like, just give me notepad or text edit or something. And I might not even notice that there's not syntax highlighting. And I was always that kind of person. And so beginner tools were actually perfect for me too, because they're all about you don't need to configure it. You just launch it and use it. And that was the case with Nycode. The whole idea of it was
00:11:49
Speaker
You don't have to actually do any configuration. You just download it, you launch it, and everything's already set up. So I might be weird in that respect, but that's one of the reasons I did it, is really just for myself and if it helps other people and all the better.
00:12:12
Speaker
I think that's a nice, nice pitch for this episode. I say, oh, Zach Oaks, everybody, closure programmer. And then from Zach's voice, it's like, don't look at my code. Yeah.
00:12:22
Speaker
Yeah, please don't. I'm embarrassed about all of it. Actually, when you were doing your screencast, I was looking at some of your code and I was thinking, shit, there's a bug right there. This guy, what is going on? I'll have to talk to him about it on the cast. We'll talk about it afterwards. I don't want to shim you in public. Oh, I already have. OK, shit. My users are well aware of
00:12:48
Speaker
of what my bugs are like. They happen early and often, as they say. With all the methane, with cows and everything, bugs are necessary these days. I mean, we need to live with bugs now. So you can't just say, this is for the planet. So keep more bugs in the code. That's nice. That might also... Yeah, go ahead. What are you talking about?
00:13:16
Speaker
Okay. My, okay. What I'm talking about is that now people start eating bugs. Jesus Christ. I wasn't even trying to follow it. I was just like, I think it was like book coin or something, you know? That's true.
00:13:35
Speaker
Don't don't give me ideas because last week I saw crypto kitties and I and I keep thinking oh maybe I should make crypto I don't know puppies or something and then have you have you read about crypto kitties already that's like a Ethereum based online kittens that you can buy okay collectibles
00:13:56
Speaker
So everybody gets a unique, whatever the fuck that is. Like Pokemon for... Yeah, exactly. Like Pokemon, but digital. Yeah, but digital. And the biggest kitty, not biggest, but the Genesis Zero kitty is almost like, I think, six aetheriums, six ether thingies, and that would be around, I don't know. Two grand? 2,000 euros or something. Yeah, for a digital ship. Anyway, coming back to closure now. I'm lost.
00:14:28
Speaker
See, I told you this is just 15 minutes in and then you are just flabbergasted in about five minutes. I told you in 15 minutes, we don't know where we'll be going by the time we finish this. I think we should just call this out. We will introduce closure coins. Start again. Right. Anyway, just before we go back, just a little bit more of the background. So Zach, I ask people, I don't always ask people, whatever, we sometimes ask people.

Critique of Clojure's Beginner Experience

00:15:00
Speaker
Normally, Clojure is like the zenith of all programming languages. It's just a beautiful language. And people say, oh, it doesn't matter what the programming language is, but fuck off. It doesn't matter. It really matters. And I'm sorry. And I'm not sorry, actually. I love Clojure. I love coding in it. I think it's a beautiful language. I enjoy it. I'm proud to be programming in Clojure. I like the fact that we can do it. People knock it, but whatever.
00:15:27
Speaker
My point is that some people code in shitty languages to begin with, like Java or PHP or whatever. What about yourself? What's the worst ever programming language you've used? And maybe you don't agree with me, by the way. Maybe you think close is just a thing, but I think you'll live it as well. Yeah, it's hard to say. I mean, I use both of those quite a bit. And the thing I always liked about PHP
00:15:57
Speaker
which is a sentence I'd never thought I would start with. This is going to be online forever. No, it's PHP, not PCP, okay? Remember that. When I was about 17, 18, my first foray into web development was PHP. Sure. I didn't choose it. I just thought that's what every website was built with.
00:16:25
Speaker
and I got a dream host account, and I think they still exist. They're like, they're- Yeah, I host with them actually. Oh, you do? Okay. Yeah, I've been paying them since 1998 or something. Yeah, they've been around forever. Exactly. What I loved is I was a stupid kid, but I could just write a little PHP file and go to their little web FTP thing, upload it, and then hit the right URL and it would just run.
00:16:55
Speaker
We don't actually have that right now. With Clojure, there's no similar beginner experience there. That's something I'd like to work on. Part of that is because CGI style web apps are just inherently simpler, but I think PHP in particular was so good at that.
00:17:17
Speaker
It was built to run inside Apache, and it was such a simple mental model. Maybe it's a bit anachronistic now because it's all about single-page web apps and whatnot, but I loved that about it. The language itself was ugly. There's some inconsistencies and different naming and stuff like that. I don't actually care about that. It's the same thing like people who complain about
00:17:44
Speaker
the inconsistent naming enclosure. There is some kind of weird naming conventions, the any question mark, that sort of stuff. I just personally, I don't really care. It's just hard to get work done with that. It's probably the same reason that I use notepads. I just don't care about this stuff at all. So when you say bad languages, to me,
00:18:13
Speaker
If it's just ugly and sort of a surface sense like PHP, I don't actually mind. Now, my first language is C++ and that was bad in a different sense because it was very easy to mess up and really too low level for a 15-year-old to be messing with it. It's just at least for me at the time.
00:18:42
Speaker
But I don't have strong feelings against any programming language. But I totally agree with you, though, that it does matter. It's not like it doesn't matter. Programming languages definitely do matter. Closure has absolutely totally changed my career. It's not even just a hobby anymore. And so I definitely think it matters.
00:19:11
Speaker
The things that I hate about programming languages are not surface-level things like naming conventions. It's more like what I now understand to be things like immutability, that kind of stuff. But I still miss the simplicity of PHP in that one sense because I'm so focused on beginner tools that I would love to have that kind of experience with Proclosure.
00:19:36
Speaker
I think you absolutely nailed it there. This is one of the biggest complaints of closure is that beginner experience isn't as good as it should be. It's not just slipping off a log. I think the work that you're doing really will help that as well, so kudos.
00:19:56
Speaker
So just a small question back to your points there. Why did you walk up to C++ as a 15-year-old? I mean, that seems like, you know, it seems like you're just like walking into a door or something and then you should just walk away or see how you can open it and get a better language. I mean, what happened? Yeah, well, I didn't choose it, unfortunately.
00:20:16
Speaker
I was in 10th grade, and it was a class that I took. Man, that's a cruel teacher. Oh, yeah, absolutely. But you know, the funny thing, I mean, in the US, programming is still not a standard thing that is taught in all high schools. I was lucky enough in my high school to have at least some kind of programming, but they don't typically have actual programmers teaching it.
00:20:47
Speaker
They have, it's usually math teachers. And so, you know, it's not always ideal. But I was lucky just to have something. So it was a half year C++ class. And I don't know, I was not the best at it, but I kind of liked it. And then my senior year, I had a full year Java class.
00:21:09
Speaker
Right. And once again, wasn't the best, but I thought it was interesting. I was not good enough at math and physics to actually major in computer science. It's just, you know, that those subjects just didn't work well for me. But I taught myself in my free time and eventually convinced someone to let me write code for money. It took a long time, but it like,
00:21:37
Speaker
it eventually happened. Awesome. Yeah. I think many, many programmers are like that. It's very, very, especially in the sort of 90s, it wasn't so easy to get in the college. The science wasn't so well developed. And I think even now, if I look at computer science, I didn't follow a standard route either. And I just think it is fucking boring.
00:22:05
Speaker
Do you need all these maths algorithms all day? To me, I don't give a shit about that. I want to move pixels on a screen or I want to... Yeah. Well, that's how I am. I think that we just need a separation. There's room for the more abstract part of this discipline. But there also needs to be a separate curriculum for software engineering, which is not as math-y but focused on building things.
00:22:35
Speaker
And I would have loved that, but it did not exist where I went to school, so I just taught myself. Yeah, what I find when my son is, he's still here, he's probably listening to it. He's 13, but they're doing like these robotics things at the school. And that seems really nice because then they can sort of feel, all right, I'm moving this robot around.
00:23:01
Speaker
you know, a bit like the kind of logo thing that was available to some people. I had never saw it when I was at school, but I know some people had it and it's kind of a legendary bullshit thing now. But robotics seems to be a thing which is getting into schools everywhere now, which is really good because I think that makes people feel like they can do something for real, you know? Yeah. Oh, yeah. That sounds perfect.
00:23:24
Speaker
for younger people especially. I hope that that happens in the US as well. So if you guys are getting it, then probably 20 years from now, we will too. This is awesome. Oh my God, the US. You know what US means? When you write US on something? I thought it just meant us. Does it stand for something? Yeah, it means useless actually.
00:23:53
Speaker
It does. It's an army saying, actually, if you write US on something, it means it's totally fucked. I think you will be our last US guest. Well, I think you're going to all burn in flames pretty shortly anyway. Assuming if anybody is listening from the US, I mean, you'll be the last guest. That's OK. Have you guys been to the US? Of course, yeah. OK. No, no, I've never been to the US. You haven't?
00:24:22
Speaker
I just went to Europe for the first time this year for Closure D. I felt like such a fish out of water. Some things were similar.
00:24:37
Speaker
Goodness, like I already told you earlier that the train system blew my mind. That was awesome. I had never actually ridden on a train before at all. We don't ride trains here, man.
00:24:53
Speaker
I mean, I come from India and then we have a pretty, well, we have a shitty railway system, but we have a railway system. We need to go from one place to the other. I mean, there's an experience here that you can't get in Europe, like the cross-country road trip. You need to do that. A lot of Europeans will come here and they'll rent a car and go to Grand Canyon.
00:25:16
Speaker
shit like that. You got to do that. Yeah, I mean, I want to because I'm not sure if my skin gradient is convenient enough to get into the U.S. easily. So, you know, that's one of the shit that I that I hate about traveling. So you never know. I'm assuming they have some sort of a some sort of a gradient card to check my my code or something. Go to Canada first and then sneak in through the northern border.
00:25:41
Speaker
Because we don't really defend that very much. It's just like too long. That is a surefire way of... Because we are offending all of them anyway. So I'm thinking if I get into from US from the north, they'll throw me into Mexico because, you know, you look like more from that guy. Straight through. Just straight through. Exactly. Just pass through.
00:26:08
Speaker
But I would like to travel at one point. Let's see in the next six years what happens and then you know everything will be cheaper in the U.S. assuming you know. Anyway, I don't wish bad things were bigger. What are we talking about?
00:26:30
Speaker
We were talking about going to different countries and stuff, and the US being a piece of shit because they don't have robotics under 20 years. When I was growing up, the US used to be like the place where all of the modern things happened. And now it seems like it's the other way around. It seems like the US is like a third world country almost. I go there. I'm not joking about that even. I mean, it hasn't got a railway system. The long delays at the airports. Come on. They just launched the- The roads are all falling to pieces. The bridges are all falling to pieces.
00:26:59
Speaker
All of our infrastructure is crap. But there are Teslas. They're not making decent coffee. I mean, honestly, everything about that country is just like now. Now I'm a grown up, I realize that actually. We have pretty good beer. We have pretty good beer. I mean, I come from Belgium, so I don't think so. Have you ever had yingling? Come back to Belgium? You need to try yingling. It's my home state's beer. All right, OK.
00:27:24
Speaker
I don't know. I like it here. Fuck you guys. This is the best episode ever. Finally, people are opening up to us and telling them the real things. This is what we started this podcast for.
00:27:48
Speaker
Exactly. Finally, this is the peak episode. On the 29th episode, we finally hear people's voice. Fuck you, guys. Respect, Zach. Respect. I think what you said, what everyone else who's listening actually wanted to say. That's true. And this is coming from Bob Ross of Closure.
00:28:15
Speaker
I'm a spokesman for all your unsatisfied listeners, conveying their thoughts to you. I much appreciate it. All the two of them. Thank you.
00:28:33
Speaker
Actually, we do occasionally get Americans coming in and sort of, you know, being a bit dissatisfied, but fuck them. Yeah. Fuck everybody. They're normally the people that were like, oh, keep the politics out of this. You started it.
00:28:53
Speaker
Exactly. You elected that guy. We didn't start it. All right, anyway, look, you get it. Right, let's go back to closure. Yes. No, no, before going to closure. All horrible things are out of the way now.
00:29:09
Speaker
I have no, no, no, not yet. Oh, maybe, maybe, maybe not. Yes, obviously. But I was, I was thinking, I was taking a look at your, your, your list of projects and I was wondering what is your experience with Rust because you had a little small experiment or I'm not sure if it was an experiment. You did some Rust IDE as well. So you played with Rust. What is your opinion about Rust? Well,
00:29:40
Speaker
Part of it is that because C++ was my first language, I always wanted to go back a little bit to low-level programming because it's kind of been a while.

Exploring Rust and Returning to Clojure

00:29:50
Speaker
Also, to be honest, there was about a six-month period where it had what you might call a crisis of confidence with Clojure. Part of it was because I had to work on a Clojure code base
00:30:03
Speaker
that someone else wrote. Closure is awesome until you have to read someone else's closure and you're like, what the fuck is this? This was before spec came out, so there wasn't really any answer to the whole question of how could we document what's coming into this function, what's going out.
00:30:29
Speaker
And I had a bit of a crisis. I played with Rust. I made an IDE, of course, because what else am I going to do? Obviously. And it was a fun six months of just messing around. But ultimately, I mean, I started to miss the REPL. There's no real REPL with Rust. And also,
00:30:56
Speaker
Honestly, the kind of software that I want to write, Rust is not necessarily the best choice for. Rust will be great if you've got resource constraints.
00:31:08
Speaker
Or if it's something that's very safety critical, you know, if you're programming someone's heart monitor, I hope no one lets me do that because they're dead, you know, they're gone. And so I just started realizing. But how difficult can it be? It has only two states, on or off.
00:31:34
Speaker
No one let him do it either. That is not the right model. It was a fun excursion, but for the most part, I just realized Closure is a good fit for my brain. I really like to play around and experiment with code and the REPL is the perfect tool for that.
00:32:02
Speaker
And so I went back to closure with a fresh perspective. I definitely will still reach for Rust for certain things, but I haven't really found a whole lot of excuses recently. And with spec now, it's really filled in that one gap that was in my mind. I just think it's one of the most exciting things to happen since closure was released.
00:32:32
Speaker
It's still blowing my mind like even today because I finally started using it to actually parse or destructure data structures. I was only using it as a runtime checking thing and it just blew my mind. I actually feel really lucky that I can use something like this.
00:33:02
Speaker
I mean, I'll probably play around with Russ some more, but that's really the story there. It was six months where I dated somebody else and then went back to the old, yeah. Just a quick question on that. The funny thing about Russ to me, I mean, maybe I've got this wrong and I get some things wrong occasionally, apparently. Occasionally.
00:33:28
Speaker
This is not just you guys telling me this, by the way. I've got a family here. They're keeping it real. The thing about Rust is it comes from Mozilla, doesn't it? And it's like the idea is that next generation browser will be written in this piece of crap. So why? Why isn't anyone writing some proper browser stuff?
00:33:51
Speaker
you know, enclosure or something more dynamic, which, because it seems totally annoying to me that we have this like browser that's written in a crap language, C++ or C, and then it has to run this other crap language, JavaScript on top of it. It just seems like the whole infrastructure of the internet is built on shit. I mean, am I wrong or is that just like where it is what it is? So let's just deal with it. Well, you know, closure runs on top.
00:34:19
Speaker
of these platforms, which means you're saying that it's running on top of shit too. Well, it is but I mean, I mean, the thing I love about closure is the fact that there is a very strong streak of pragmatism to it. You know, if you if you want to reinvent the world from the ground up,
00:34:44
Speaker
You're not going to write a hosted language. You're going to do something that is completely ground level, boil the whole ocean, and it will be gorgeous, I'm sure. It will be gorgeous and useless. I love the fact that Closure not only embraces these
00:35:10
Speaker
you might say ugly platforms, but it even doesn't try to hide them. It actually lets the details seep through it. Like with both the JVM closure and closure script, it doesn't try to hide the underlying platform, which is fairly unique. A lot of the other hosted languages, they try to pretend like that underlying platform doesn't exist and they try to wrap it and hide it behind some layer
00:35:41
Speaker
And I actually think that's a mistake. I'm convinced now that it's a mistake to do that. I mean, it's not just that it's a performance hit. It's that you're constantly creating this leaky abstraction that you're going to have to continuously maintain as the platform changes underneath it. So I don't actually mind the whole embracing the ugly world thing. You know, I think that's like a big part of how closure works.
00:36:10
Speaker
Um, and it, I mean, I think, you know, the world itself is ugly, you know, uh, instead of making, Oh God, I don't want to go back to the old discussion. That's okay. But, uh, but I love that philosophy a lot. That's, that's my point. I agree with you.
00:36:31
Speaker
No, I mean, it's not about just ugliness, right? It's the way the world is. I mean, it's not about beauty or ugly. It's inconsistent. That's how the world is. I mean, you can't put platonic solids onto the world and then say, you know, everything is going to be like this. Then you try to fit everything into these categories. So that's what I think the dynamic languages shine through this kind of thinking.
00:36:57
Speaker
But I think the actual, the example, I don't know if you were thinking about this example, Zach, but the example of where they try to not have that is Elm, where they say, okay, we're not going to leak the JavaScript world into Elm. Everything is typed and we're going to make everything hard and we're going to have these like hard barriers on the input and the output side. And you're going to have to maintain that. And that, you know, I think Elm is very nice in, you know, you can do some nice things with it in itself.
00:37:27
Speaker
But I think, I think that to your point, it's one of the things that I think Rich was saying at the beginning was that it's an island type mentality. You know, you can stay on the island. And if you're on the island, that's great. You know, you can have a nice life on the island, but you're going to miss out on a hell of a lot of infrastructure. You know, you don't have modern plumbing. You don't have, you know, running water. You don't have sanitation or you do, but it's going to take you a shitload of time to make it all happen. Yeah.
00:37:53
Speaker
Yeah, no, that's a perfect example. I mean, I can't claim to be that knowledgeable of Elm, but that's definitely the picture that I got as well. You know, you have to wrap everything. And it looks like they're not really trying to utilize things like React. They're trying to write their own thing that does the same thing.
00:38:18
Speaker
And that's kind of an example. I mean, maybe your thing ends up being better, but you're on your own now. And ultimately what that means is you're going to have a big project with lots of hairs in it and all of the parts that interact with JavaScript, you're going to end up just writing in JavaScript because it's easier than going through this layer that you are forcing people to go through.
00:38:45
Speaker
How is it better to make people write more JavaScript? It's a terrible idea. With ClosureScript, it's just as easy to call a JavaScript function as it is to call it from JavaScript. That's such an incredible thing that you take for granted, but that's part of the reason why is that it's just a philosophical difference.
00:39:14
Speaker
All right. So I think, you know, after like 40 minutes, we've probably done the background, the background check. Your old friends at the NSA might have requested. Right. Okay. So cool. So actually there was a.

Creation of Parensoup

00:39:32
Speaker
It was a project that you and I talked about a long while. I had a small conversation about was parensoup that got me kind of, you know, put me put you on my radar at least. And I think we will come on to these editors in a bit. But tell us a little bit about parensoup because I mean, I kind of amaze by parensoup. Just everything is like from the beginning, purely 100 percent closure script. You know, it's not using all the other stuff like CodeMirror and things like that. So
00:40:02
Speaker
What was your thinking there? Well, I don't know if I was thinking anything. It's instinctive. You're coding instinctively. I love it. That's the zen. My initial goal was that
00:40:24
Speaker
You know, I noticed that all of these blog posts, okay, David, Nolan, all these people with ClosureScript blog posts where they need to show code, they're always using CodeMirror. And, you know, CodeMirror is fine, but it actually, you know, it has very basic support for ClosureScript, you know, very simple syntax highlighting and whatnot. I knew you could do better.
00:40:49
Speaker
Um, if you actually wrote it in closure script, I mean the great thing about lists because it's really good at reading itself. It's like it, uh, it knows its own syntax. And, uh, and I knew you could do interesting stuff like, uh, not just rainbow parentheses, but, uh, things like an insta-reple, um, which previously was only available in a light table.
00:41:12
Speaker
And so I built this out and the first version was horrible. It was almost unusable because
00:41:21
Speaker
On a fundamental level, the way it worked is it uses tools.reader to parse the code every time you type something. Well, if you break the syntax, you type in open paren, but there's no close paren. Tools.reader says, I'm not dealing with that. Screw that. Yeah. And so everything breaks. And I was scratching my head. I didn't really know how to solve this. And then shortly afterwards, Sean Lebron came out with
00:41:50
Speaker
and it was just like mana from heaven. It just came down.
00:41:58
Speaker
right there on a silver platter and I integrated it into parens soup and it fixed the problem completely because paren for, it does that, it instantly matches parens and now all of a sudden the AST was almost never breaking and so now we have this nice little browser-based editor with all these cool features that CodeMirror will never have.
00:42:27
Speaker
and it actually worked now. And I thought that was going to be it, but eventually I realized when I rewrote night code that I could actually put it into night code.
00:42:38
Speaker
And that's what I did. Nightcode has a little web view that is running parensoup in it. And ever since then, I've made a whole bunch of other IDEs that also use parensoup. So now that one little library is feeding into four different projects, and they're all using the same parensoup editor.
00:42:59
Speaker
Yeah, print soup ended up paying off, but that was the original idea. It was just like make something better than CodeMirror that was just focused on closure syntax and that's it. Yeah. Maybe you should have called it paren turtle soup because then it would be paren turtles all the way down. Paren turtles?
00:43:20
Speaker
Well, with your accent, it took me a while to figure out. No, it's really good. It's really good. Really cool. And so one of the things that we got a little bit of feedback about was like making sure that we explained some of these tools before we start talking about them. So I think that was good for parentheses. So you mentioned this other tool, the night coder. Yeah. So can you explain a little bit about that one? So what is that about?
00:43:49
Speaker
Well, it's a very simple IDE for closure, and it follows a very mainstream IDE design, kind of like IntelliJ. You've got your project tree on the left, you've got your big editor pane, you've got the build pane underneath, and it was my first attempt at making a good beginner closure tool.
00:44:16
Speaker
I still maintain it. In fact, I released a new version last night from a hotel room. Long story, I won't get into it.
00:44:34
Speaker
Honestly, though, since then, I've been attacking this problem from different angles, and I don't even really recommend it anymore as your first taste of closure, because it still requires some setup.
00:44:53
Speaker
it'll fork off a separate process to run line again or boot commands. But you still need to have a JDK install or something like that. There's still some setup. So ever since then, I've been trying to reduce the number of steps, just collapse it down. So I try making an online thing, nightcoders.net, and that obviously reduces the steps. You just go to a website, you log in, and you start coding.
00:45:23
Speaker
Is that where you run the horse? Do you run the server side? Yeah, I run it. It's on a German host because they're really cheap, but just need to keep in mind. Germany has certain rules about what you can put on there.
00:45:44
Speaker
What the hell are you going to put on it? The Germans want like, come on. Compared to the US. Civilized closure program is here, you know. Maybe some of the Charlottesville guys, you know, I don't know.
00:45:58
Speaker
I have not had any problems so far, but nightcoders was my attempt to make it even fewer steps. But it's limited in that you can only do closure script. You can't do server-side code because I don't want to run arbitrary code on my server. So I started rethinking the problem
00:46:19
Speaker
And recently I released LiteMod, which is a client-side tool, and it lets you do full stack

Introduction to Lightmod

00:46:25
Speaker
closures. So you can do server-side code, client-side code.
00:46:29
Speaker
all in one package and now I feel like this is my ideal. This is the thing I've been trying to build. It's in that sense more powerful because it lets you do actual full stack closure and it doesn't require any other installation step. You don't need a Java runtime installed because it has a private Java runtime built in. You don't need any
00:46:55
Speaker
boot or line again installed anywhere, because it runs everything internally. It doesn't even launch a separate process. It actually runs your web app inside of its own process. So that's what I try to point people to now. Let's just back up a little bit there, Zach, because you blew through that one, which is great. But I think it's like, whoa, all right, full stack.
00:47:22
Speaker
Let's just take it apart a little bit by bit because I think it's a pretty mind-blowing project. How do you approach it again?
00:47:32
Speaker
Lightmod. What do you do as a user of Lightmod? It's a client side tool, so you download it. There's a version for Mac OS X, Windows. So it's like a big executable, a big ball of goo. Yeah. And when you launch it, it shows a window that looks like an IDE, maybe a beginner IDE.
00:48:01
Speaker
But unlike Nightcode, which is more of a traditional looking IDE, like I mentioned before, it looks kind of like IntelliJ. This keeps everything in one window. So it actually even has a little web view built in. So when you open up a project, you can have your web app on the left and then your code editor on the right. And all that is built in, it's like really vertically integrated. I don't know if any,
00:48:29
Speaker
It's hard to talk about this because there's actually, as far as I know, nothing that's similar in other languages. Something that is this vertically integrated, it basically bundles your back-end code compiler, your front-end compiler closure script, a text editor,
00:48:49
Speaker
a web view, it just like shoves them all into one thing. It's like the opposite of the Unix philosophy. It's just like everything in one. It's kind of like an Emacs replacement for video. It is a kitchen sink. The only thing I don't have is an email client. That's one thing that Emacs has.
00:49:14
Speaker
But it's a similar idea. I think that vertically integrated tools are better for beginners, so that's why I built that. But anyway... This is also targeted for the beginners, right? Because once you've finished the application, so to speak, you need to find a way to... This is a learning tool, or do you think this is more like a production level thing that you can... I'd say it's a learning tool. Export from.
00:49:40
Speaker
Yeah, and I provide a way to export your project later when you're ready to use a normal build tool. So it's definitely a beginner tool, but I think this is a piece to the puzzle we were talking about. How do we get closure to where PHP was 15 years ago?
00:50:08
Speaker
I think Lightmod is part of that solution. It's not the full solution because I still don't provide a way to deploy.
00:50:18
Speaker
But the editing part, that experience is, I think, about as easy and pre-configured as possible. The deployment part is still interesting. I need to work on it. But that's what I want to do. I want to get my 15-year-old self to
00:50:40
Speaker
to use closure instead of PHP. But if I could talk to him now, I still, I'm not sure I would recommend closure. And that's what I'm trying to fix.
00:50:52
Speaker
That is stellar, yeah. So in terms of like the actual thing that you download, the thing that you get, you're executable. So you say it's got like a web server and all this kind of stuff built into it. Is that something which anyone can play with or is that like all completely opaque and all people can do really is just like use the editor?
00:51:12
Speaker
How much configuration is going on there? If you actually want to take a deeper dive into it, what can you do with it? Or are you kind of saying, look, this is off limits and you do the editing and I'll do the rendering and that kind of stuff? No, there's some restrictions for sure. You do give up some flexibility for the sake of simplicity. So you do have to use HTTP kit.
00:51:41
Speaker
which is, that's just built into Lightmod. You don't get to choose that. But you do have quite a lot of control over the server. You can use whatever ring middleware you want.
00:51:56
Speaker
and you have almost total control over the server side code. So you can create your own routes. You can use Senti to do WebSocket stuff. There's a lot of stuff you could do, but yeah, there is some limitations. You have to give up some control for the sake of, for the ease of use. You also have the database embedded in it, right?
00:52:25
Speaker
Yeah, there's a database template. I tried to provide a bunch of templates that just showed different... Yeah, because I was just playing with the tool. I just downloaded it and it has a very nice way of saying, okay, if you want to build a small basic app or if you want to connect to the database using H2, so that's a really nice way to get started, actually. Yeah, I mean, I always learned, well,
00:52:50
Speaker
when I saw small sample projects. And the whole idea of code examples. This is a good segue, by the way, in a Dynadoc.

Explaining Dynadoc and Its Impact

00:53:02
Speaker
And code examples, I think, are a much better way to learn than trying to read some dry technical description in a doc string and anything else. Actually watching the code do something. This is even more important for Clojure.
00:53:20
Speaker
being a language centered around the REPL. So that's a lesson that I learned myself just from learning Clojure. I learned most of it just from messing around the REPL. And so to make a good documentation generator, I think you need to
00:53:39
Speaker
incorporate that into it. It can't just be, okay, I'm going to show you the doc string and maybe the source code and that's it. Having an interactive example embedded in that, I think is the perfect way to have way better documentation than other languages. I think too often people
00:54:02
Speaker
They think about documentation in a static way because static languages, that's what they do. You know, here's the function. Here's the arguments. Here's the doc string. I think if you want to do a better job than they do, you need to not think the way they do. You need to actually like...
00:54:19
Speaker
you take advantage of what's actually unique about closure. That presentation reminded me of was like, maybe I'm sort of having a laugh here, but the Brett Victor talk, I don't know if you're a fan of Brett, but he was- Yeah, I've heard of him. Yeah, okay.
00:54:40
Speaker
Well, but he's all about that. He's all about that kind of like the interactivity, the feedback loop. But actually, if you ever watch some of his demos, they're all awesome. But I wonder whether he's catfishing the shit out of us because he's not releasing his code. Where are his tools?
00:55:00
Speaker
I mean, showing us what's possible, but it really sounds like, it really feels to me like, yeah, 10 years on, where is this shit, you know? And that was off somewhere else, whatever, you know, in this dynamic land stuff. But what you're doing is really like essentially realizing and kind of like bringing to life many of the things that he spoke about when he was inventing on principle, you know, it was like, how do I get that loop going? How do I get that feedback loop going? And this seems,
00:55:30
Speaker
It's like the reality of that dream is what you're bringing to us. Maybe that's too high praise, but you know, I think you're doing absolutely great work. I actually think you guys need to praise me more. You're not really doing enough. We went off the rails a bit early on, that's for sure.
00:55:49
Speaker
But I've seen the talk that you mentioned, and yeah, I mean it definitely had an effect on me. And it's the same reason I returned to closure after using Rust. I was like, I need that interactivity.
00:56:06
Speaker
you know, to make better tools, you actually have to realize that fact instead of trying to copy what static languages do. So that's what Dynadoc does. Now, it's still mostly promise because the only way for it to really fulfill its goal is if people write code examples. And I don't know if my solution is the best, but I made a macro where you can define a code example for anything.
00:56:37
Speaker
I'm already using it for my game library, my Closure Script game library called PlayCLJS. At least for my purposes, it works really well. It's literally like when you write a spec and you put it right next to the function, you can do the same thing with a code example. Put it right next to the function, death example, and then provide a little example inside of the function with
00:57:05
Speaker
whatever arguments you want to provide. And Dynadoc will do the rest. It will actually display it inside of the appropriate page. It will let you play around with it from the browser. And I mean, I think I've got a good response. I put it on Reddit. I've got a long discussion.
00:57:24
Speaker
You know, most people were positive. There was one asshole, by the way, but that's okay. I mean, I actually, I love arguing with people on the internet. Cause I grew up on web forums, just like throwing mud, not even like polite arguments, just like,
00:57:48
Speaker
Yeah, they'll just... And so I actually enjoy that. I hate how society expects us to do all these stupid things like being an adult all the time. And sometimes I just forget that I'm not that teenager anymore. Maybe I should rise above the fray, but it's okay. It's all right.
00:58:13
Speaker
No, the response was awesome though. I had all this great feedback about it. My next step is I'm going to try to make a central repository of code examples. You can put code examples for any library, close your core, anything, and you don't need it to be part of those libraries. It can be a separate thing,
00:58:42
Speaker
that anyone pulls in a Dynadoc and they just get the code examples for free. And I think that's great because it means we don't need to get library authors to buy into this. We can just write the code examples for them and everyone will get them.
00:58:58
Speaker
So I haven't created it yet, but that's my next goal. Because if we could do that, then I think our documentation would be incredible. I think I'm like 1,000%. Just a second video. I'm 1,000% behind it because that's one of the things. I mean, I use Closure Docs all the time. Closure Docs is superb. It's a great resource. But it's a total frustration to me that it's not live.
00:59:24
Speaker
You know, that it's not editable. I can't actually play with it. It's ridiculous, actually, like you say, given the power of Clojure and ClojureScript. Okay. It came from an earlier age. I get that. But what you can do potentially is have a whole new generation of Clojure docs examples that are all completely live, that are all completely interactive. And I think that's going to be absolutely spectacular for people's first experience.
00:59:54
Speaker
Yeah. And I don't think there's a whole lot of chance that this is going to be integrated and close your docs. It doesn't matter. It can be separate. It's fine. Yeah. And also, and I didn't mention this before, but the primary way you use Dynadoc is you run it locally. I mean, you can create static docs. You can put it on GitHub pages.
01:00:18
Speaker
That's what most documentation generators do, right? They create these static HTML pages. You put them online. And that's good. That's important. But I actually think it's more useful to run it locally. You get documentation automatically for every dependency in your project. It's like a developer tool at that point. And I think it's a lot more powerful than creating static documentation that you put online
01:00:45
Speaker
Because obviously the closure examples are not going to be interactive in that case because you need a JVM. But running it locally inside of your project, it has access to every namespace closure and closure script. It can provide like full documentation for everything so
01:01:02
Speaker
That's how I think people should look at it. I did a project a while ago where we were using Swagger and that kind of stuff to give interactive APIs. You can have these REST APIs. You have the Swagger documentation. Then you have this little
01:01:24
Speaker
Like a kind of REPL, I guess, where you can try the API out. You can see what the results are coming back from it. But it's not a proper REPL. It's a bullshit thing. But this is like that kind of thing, but for local developers.
01:01:39
Speaker
Yeah, I haven't used Swagger very much, but I think that aspect is very similar, the fact that you can interact with it. But this works with every Closure or ClosureScript function you can think of. It's not just APIs. You can make anything interactive. And the cool thing about ClosureScript examples is that you can make them visual. So when you go to the documentation page, you'll see the doc string,
01:02:08
Speaker
see the source code, but you'll also see optionally a little rectangle that displays, let's say it's a reagent component, can actually display it right there inside of the documentation page and you can interact with it.
01:02:23
Speaker
And that's very powerful. It's similar looking to dev cards in that sense. You have the little rectangle just like in dev cards. But the big benefit here is it's integrated into the documentation. Well, now you can put it online, you know, and people can play with it there. And so it's like you get two for the price of one, basically, you know, documentation and interactive front end tool, you know, it's like a combination of the two.
01:02:54
Speaker
So just to be clear, and so it's like a way of explaining your code to fellow developers initially, that's what you're kind of gunning for. It's like this notion that I've got this namespace and I want you as a fellow developer to understand how to use it. And these examples explain that visually or technically to that fellow developer. Is that the goal of this project? I mean, you could say that's the goal of documentation in general. Oh yeah, but this is a higher level obviously, yeah.
01:03:24
Speaker
Yeah. And this just covers more ground because it can output static docs, just like old school documentation. So you can still put it online, let people read it. But then you also got this thing that you can run locally, which will just cover every dependency. I always thought it was stupid. If you have a project, a whole bunch of closure dependencies,
01:03:49
Speaker
you want to see the documentation for all of them, what do you do? You go to each of their individual GitHub pages, look for the docs. Closure is a language that provides everything at runtime. So we could just generate this stuff on your local machine and have a comprehensive documentation viewer for every library that you're using.
01:04:13
Speaker
Why do you need to go all over the place to find this stuff? You can just have it all in one place. So that's what I'm trying to do.
01:04:22
Speaker
That is incredible. So just to explain a bit more about how that works then, I mean, how does it, uh, is it, is it looking for, is it, what is the runtime part of this? I mean, how do I, if I'm in like, if I'm not, if I, if I might not put on a bit screwed, but I mean, how do I, how do I get this thing thing working? Do I start up a local web server or what do I do? It's just, it's either a line again plugin or a good task.
01:04:48
Speaker
All right, whichever one whichever bill to use. It's, it's, it's just a matter of one command. You know, I'm a big fan of boot, but obviously line again is still majority. So I have both.
01:05:04
Speaker
And a Leiningen plugin, well, both of them, they just spin up a local web server to display the interface, but you don't need to worry about that. I mean, it does that undercover, basically. But the key is, because it's a plugin, it has access to all your dependencies. So you don't need to tell it that, right? You just run it.
01:05:29
Speaker
And because it's inside of your project, in Closure, all you have to do is call the function allNS. And it'll just find every namespace in the entire class path. And Closure Script is a little bit more complicated, but it's a similar idea. It'll just find everything, and it'll just bring it all together and display it in the interface. And that's something that's just part of the list tradition, making everything available at runtime like that.
01:05:59
Speaker
Yeah, this seems to be like your another part of your philosophy as well is like having everything included in your project rather than having it as a separate tool.

Advocacy for Interactive Code Examples

01:06:07
Speaker
I think that's a really nice philosophy also that you don't have to go anywhere else to pick up these things. You know, you can just have it all there, readily available. So what does it look like when you're actually running this thing? Then you have to, it runs at the web server. So you have to open it in a browser and then you have to just scan through it. Um, like follow links, essentially like web links.
01:06:28
Speaker
Yeah, yeah, yeah, exactly. It's a web interface. Like people were asking about integration with Emacs and IntelliJ. I don't have any plans for that, honestly. Screw them, yeah. Yeah, yeah, screw them. Let them come to you, come on. But it is, but it is integrated into Lightmod, right? So it's already there. Exactly, yeah. It's inside of... It's like Google is privileging his own products.
01:06:54
Speaker
Oh hell yeah, this is a vendor lock. This is a vendor lock in. That's how it goes. Exactly. I just need to figure out how to make money from all this shit because I haven't yet. That's a damn shame.
01:07:11
Speaker
Oh, for sure. But yeah, it's a web server. So obviously, you can access it with any web browser. Yeah. I don't know. My focus is more on making the tool itself and making it really easy to use. I don't really use Emacs or IntelliJ very much. Sure, sure.
01:07:39
Speaker
In my limited time, I haven't found the time to do direct integration, but you can still use it, of course. You're not going to see it directly in the editor or something.
01:07:53
Speaker
So a quick question about like that. So coming back to the sort of different example thing. So how does it, like, let's say there's three things here. There's like the function, there's the spec, and there's the example. I mean, how do these three things all kind of interact or relate to each other? And how can we leverage one off the other, if you know what I mean?
01:08:18
Speaker
Yeah, well, I mean, the spec integration is very basic right now. And I need to do a lot better because right now it just displays the spec, but it doesn't even try to unroll it because you know how specs, you know, you can have lots of layers of specs inside of specs. Well, if you just see the bare spec, you don't see a whole lot. You got to you got to got to unroll it. I haven't done that yet. So that is a plan.
01:08:45
Speaker
And the example is displayed right next to it. The other thing is it might be useful to actually generate example data using specs. People have mentioned that on Reddit. I just haven't really thought about it that much. I don't know if it'll be practical.
01:09:06
Speaker
But, but spec is certainly important. I mean, it's a, it's a part of the documentation. If you have it, then Dynadoc should, uh, should make use of it, at least displaying it. So, um, so that's, uh, that's like an ongoing thing to look into, but right now, yeah, it's kind of primitive how I, how I use it. Well, spec isn't even one zero yet. So I think, you know, you've got time. Oh yeah. It will be eventually.
01:09:35
Speaker
Yeah, like I said, I'm excited about it. It's going to be huge. It already is huge, but it's been really important. And for Dynadoc, I think there's so many possibilities for how we can use this in documentation. And I think it's, once again, because it's part of the runtime and you have access to every spec at runtime, Dynadoc will have no problem
01:10:05
Speaker
Leveraging it because it's running inside of your project. It already has all of your specs. It already has access to it So that's going to be pretty cool. I think what I like about what what you're doing with like these The Dynadoc thing is you're saying look we need something which is Which is kind of like well understood in terms of how to use these examples because there's been lots of complaints in the closure community about documentation and examples and
01:10:31
Speaker
what they call it, the docstring, not being properly formatted. But you just say, okay, look, just trash that. Let's have a proper way to define an example rather than these arbitrary keywords that other people have talked about.
01:10:47
Speaker
Let's just have a proper way of doing it. I think you're onto something there because leveraging keywords in a docstring is just total bullshit. It's never going to be solid. It's never going to be right. It's never going to be properly applied or followed. Whereas if you've got a proper example model for doing this thing, and I really hope that this becomes a proper standard or a well adopted standard in the community,
01:11:12
Speaker
Because I think this is the kind of thing where if we all get behind it, then we can really leverage the power of the actual language in the runtime systems, rather than the power of the subsidiary tools. Yeah, that's like, you know, docstrings provide maybe some good context initially. But yeah, like I said in the past,
01:11:42
Speaker
A good code example is more powerful than a very lengthy doc string. It's much more direct. It also happens to be language neutral essentially. Someone who doesn't speak English can still probably learn from an example.
01:12:03
Speaker
And there's so many good advantages to it, and it just fits for a language like Clojure. This is a dynamic language that wants to be eval'd all the time. So let's do it. Let's eval'd. And the idea that I hate, and I've done this too, putting example code inside of a docstring, I just twitch at the thought of it.
01:12:27
Speaker
Because what can you do with that? You know, you can do nothing. It's a hidden hope, isn't it? It's a hidden hope. Hope that some tool in some distant galaxy picks it up and makes some sense of it. Well, fuck that, you know? Yeah, it's not data. If you're putting it in a stream, I can't do anything with that. So, storing it as data, as closure data, which is what death example does, means that I can leverage it. I can eval it. I can do interesting things with it.
01:12:53
Speaker
Like I said, I've put examples in docstrings before, so I'm guilty of this too, but we should stop it. Start providing examples in a much more machine-readable way, and our documentation will be a lot better. So we should say data is examples, examples is data. We need some kind of strapline here. Yeah.
01:13:33
Speaker
So we'll give you the necessary boost in the marketing anyway. So that'll be awesome. I think we are slightly above the time, unless we have any other topics that we want to talk about. Yeah, but the time can go fucking self as well. We've got Zach on the show. I mean, you know, this is, we can't stop. We've spent a lot and we're not letting him go, you know.
01:13:44
Speaker
I haven't thought about the marketing part.
01:14:00
Speaker
We all just hit pause, take a toilet break and we come back and keep on rocking, you know? At this point, dear listener, you might be wondering, why am I still listening to these two idiots? Just like Zach. But fear not. As their son overlord, I have decided that this will be an extended sanitary stop. The currying and cursing will continue next week in the second part of this episode.
01:14:49
Speaker
you