Become a Creator today!Start creating today - Share your story with the world!
Start for free
00:00:00
00:00:01
#71 - The true and brave Daniel Higginbotham image

#71 - The true and brave Daniel Higginbotham

defn
Avatar
32 Plays3 years ago
We talk to Daniel and try to settle the age old dispute between the Higginbotham clan and the Higginbotham clan. There is some #Clojure stuff in the episode too ;)
Transcript

Introduction and Guest Introduction

00:00:15
Speaker
Welcome to Defend, episode number 71. This is Vijay from the Netherlands. Am I meant to say hello in Belgium? Sure. Yeah. And we have really brave and true guest of closure today. Daniel, please. Welcome to the episode. So I think a brief introduction is in order. Yeah, thanks for having me.
00:00:44
Speaker
Um, you want me to introduce, introduce myself? Yes.

Writing 'Clojure for the Brave and True'

00:00:49
Speaker
We're as polished as ever, Daniel. If you've ever heard this shit before, you know, this is exactly how, how delightfully polished it always is. It's like, yeah, go on, man. Zero preparation. Yeah, no, I don't know. Yeah. Uh, I wrote a book a while ago, a few years ago. It's called closure for the brave and true. Yeah. And that's, yeah.
00:01:13
Speaker
And since then I'm like, I'm set. I did it. You know, I'm done. So I haven't done too much, too much since then. But, uh, so, you, you, you paid off your debt for life. I mean, I think that's, that's for sure. You know, that's what I feel like. I feel like I'm like, okay to just like coast on.
00:01:32
Speaker
I think you should be, yeah. I mean, I'm not even joking. I think everyone in the closure world owes you a huge debt of gratitude. Yeah. I mean, you know that Ray is not joking because he didn't do the monkey court thing. That's right. Yeah.
00:01:50
Speaker
Straight down. This is like the serious posture here. Yeah. It's not this one. Watch out for that one. Yeah.

Daniel's Programming Journey

00:02:01
Speaker
But let's get into this then. So how did you end up doing closure? Maybe give us a little bit of background on where you come from. Are we allowed to give Daniel's full name as well? I mean, is that a nice thing?
00:02:15
Speaker
Oh, yeah, Daniel Higginbotham, I think is the fool. Yes. Yeah. You said Botham, not Botham. Bothbotham. Yeah, that's right. Yeah. I heard like someone recently told me that that's how they would pronounce it. Bottom. Higginbotham. Hugo Duncan, actually, if you know him, he wrote like Palette back in the day. Yeah. Yeah.
00:02:38
Speaker
Yeah, yeah. So he was surprised. I guess that's the proper pronunciation. No, I don't know. I think it's an English name, maybe. I don't know what it is. Yeah. Yeah. But you pronounce it whatever you want. You know, that's fine by me. So Mr. Higginbotham. Okay. Thanks. Yeah. I almost started saying Higginbotham or something because isn't there something like a cricketer that has the same name? He in Botham.
00:03:01
Speaker
Both of them. Yeah. Yeah. Yeah. Yeah. Okay. That's a Higginbotham is different to the yeah. Yeah. Yeah. Probably the Higgin changes the pronunciation maybe. But yeah, I mean, we'll, we'll, we'll, we'll go with, we'll go with, you know, exactly how you want. You're the expert. Yeah. You know, how, how, how dare you suggest as pronounced Higginbotham. It's like the Higginbothams and Higginbothams have been feuding centuries.
00:03:31
Speaker
I can't believe you would bring me on here and not do any research. Yeah. Well, that reminds me of a guy I used to work with called Burrell, but everyone called him Barrell. But he was very insistent that his name was Burrell. And it was like, yeah, mate, you're called Barrell. Come on.
00:03:56
Speaker
Anyway, cool. Yeah. Yeah. Okay. So, um, I think now we know we talked about your name. Yes. Yes. Um, so what, what has been your technical journey, like the programming journey? My programming journey. Wow. Well, well, wow. Back in the day. Yes. Back when I was a little lad. Yeah.
00:04:20
Speaker
Yeah, no. Well, so how I got to

Attraction to Clojure

00:04:22
Speaker
how I got to closure. Well, I'll say I guess it's like it's interesting. Well, maybe it's not interesting. You decide. You decide. You decide. Opening, opening hashtag interesting. Yeah. Okay. Well, because it's like I find I find that so many folks in the closure community part of the reason why I wanted to learn closure is because this is like, oh, my God, this is like all these smart people doing smart shit. I don't know what they're talking about. You know,
00:04:51
Speaker
Um, but I feel like, um, for myself, like when I started doing that, like programming, it was all just like stupid little websites and stuff, right? Like back in the day with like PHP, HTML, like JavaScript, you know, like dynamic webpage. It wasn't that, wasn't that what they called it back in the day? Dynamic web pages. Yeah, dynamic HTML. That's what it was. Yeah. Yeah. Yeah. Yeah. So, um, but, so for me, it's like a lot of, a lot of the, you know, what I've enjoyed is just doing like, like, so when the first,
00:05:20
Speaker
first little things I made was like when I was in high school, I just got like a bunch of, I photoshopped like my friends and like other acquaintances, I guess, heads on like various like bodies of whatever, like input like a little page. I don't know. I don't know why I did this. You know, I was like, like, I don't know, 14 or 15 or something. I think I made, there's this girl that was like, yeah, that's exactly why. Yeah. Yeah. And I just, I remember there was this,
00:05:50
Speaker
there's this girl that was like in band class with me like marching band who was like so fucking pissed that like I get how this turned out or something like that I forget exactly like what body I put her on but so it was just like
00:06:03
Speaker
Yeah. So that's like, this is something, something, something like that. Yeah. I'm pretty sure she's leading to the podcast episode now and then, you know, waving her fist. Yeah. Daniel, he can, I'm getting you bottom. She's never going to pronounce your name right, man. Yeah.
00:06:27
Speaker
Yeah, it's gonna be the last thing I hear. You know, goodbye forever, taken bottom. But but yeah, and then I remember like, I just this web page with load is on geo cities and it would like play like a wave, not wave, yeah, wave file. Yeah, yeah. But so, um, so so I did that kind of stuff for a while. And then like, I got into like Ruby and Ruby on like back, this was like, you know, like
00:06:56
Speaker
version 0.11 or something like that. My guess, by the way, just just before we go on a Ruby is like, I'm thinking PHP is the kind of modern because everyone's talking about like, why is programming so complicated? But I think for the web generation, like, you know, like you're saying, Daniel, people who grew up with really the web being the first place to program PHP is the kind of equivalent of like Commodore 64 basic, I think. Yeah, I really think that's and it's still obviously still a useful programming language. And, you know,
00:07:26
Speaker
Anyway, yeah. Yeah. No, I think that you're right. I don't know. It's something I've been, I don't know. It's something that I continue to think about too. Like how do you, how do you capture like the kind of immediate gratification, I guess, of like PHP and stuff, but without like all the, you know, the, the, the pain that comes with it. You know what I mean? Um, but so like, yeah, I did PHP for years and like, yeah. And I got,
00:07:54
Speaker
Yeah, I was I was like, I don't know what am I very early, not even 20. I was just like, Oh, so burnt out on this programming thing. You know, but then but then I found Ruby Ruby on Rails. And I did that for something like eight years. Yeah. And I started to get kind of burnt out on that. And that's when I started looking into common lists, because it looks it just it just looked very different. You know, we're very fun.
00:08:22
Speaker
someone who didn't go to school for any of this, right? We can continue to try to expand my knowledge and skills and whatever. But while trying to have as much fun as possible, too. So I learned common lists, but I wanted to make this game. It was called, I had this idea for a game, the command line base or terminal base, text base, I should say, called Hobbit versus Giant.
00:08:52
Speaker
And the idea with this is that you're a hobbit, and there's a giant who's coming and terrorizing your village. And you start out, and you're just equipped with a tobacco pouch and a Danish. And it's just like, how do you defeat this giant? And so it was really fun. I was getting into the Common List object system. That was interesting.
00:09:19
Speaker
thinking about like, okay, how do I model like the height of this giant versus like, you know, like the relative body sizes of these things. And then I started looking into like, well, what if I want to do something like this on the web? And then I was like, well, this is pain in the ass. And that's when, that's when I got introduced, like I heard about closure from Alan diaper, you know, who'd hop on and, and he came in, I was working at McKinsey, the consultant company at the time,
00:09:49
Speaker
And for whatever reason, they hired him to come in and talk about closure. And then I was like, holy shit, this is awesome. It seems like it has smoothed over so many of the weird little words and stuff with common lists. But then also you have access to the GVM and this whole ecosystem. So I was like, I'm going to give this a try. I remember one of my first posts after I started doing this on Reddit was just like,
00:10:17
Speaker
like trying to build like this whole little Hobbit system and stuff. And I was like basically asking like, well, how do I have objects? Like, where are my objects? Remember, I think I'm pretty sure is Demetri Sotnikov, who, who like very patiently explained to me like, no, no, no, no, like this is that's not how we do things here. Nice. And that's that. Yeah.
00:10:43
Speaker
But that is for fun, right? I mean... Yeah, but hold on. What happened to that hobbit? I want to know. I think the hobbit and Jane sat together and then smoked weed, I guess. They've got the tobacco pouch. This is an intriguing beginning for me. Is there something at the bottom of that tobacco pouch? That's the long bottom leaf.
00:11:06
Speaker
It's Higginbottom leaf. It's a different kind of leaf. Oh, that's the dank leaf. He needs to get the bottom. Higginbottom leaf. So you did end up making the game enclosure then? No, I never did. I actually just...
00:11:34
Speaker
So as we speak, everybody's dead in that Hobbit town because giant basically killed everyone. Yeah. Yeah. I know it's like a, like a Tomagotchi, but like, I'm like much faster scale. But then how did you, how did you transition into, um, so you were doing Ruby on Rails professionally, uh, you know, um, for some time. Uh, so did you pick up closure professionally as well, apart from having this, uh, um, text adventure?
00:12:06
Speaker
Oh, yeah. Well, it's like I turned all the McKinsey systems

Teaching and Writing About Clojure

00:12:12
Speaker
into like text adventure based like. All those points that they produce are now plain text now. Yeah, yeah, yeah, yeah, yeah, yeah, yeah, yeah. It's like all the all these consultants with their Excel files. I was just like, yeah, yeah, yeah. Before before you.
00:12:32
Speaker
before you do this analysis must answer me these these questions three. But no, I was able to it was cool. I got I had a lot of latitude and I was able to just start kind of introducing closure and just like just kind of small, small places like no, no wonder I cared. I mean, there was like a little bit of conversation stuff. But yeah, it was, you know, it was like the classic
00:13:02
Speaker
It's just a job file. Yeah. Yeah. So, um, it's cool. I ended up doing, uh, I think I built some kind of like internal, like community forum thing first with Ruby and then like, we wrote it with like the atomic enclosure. Um, and, uh, there was this other thing that they were, they were, they were building. I don't know. I don't want to get into it though. I feel like it's kind of boring. There's like a good,
00:13:28
Speaker
maybe like an okay story there about like management and how they oversell things, but like it's, but, but, um, but yeah, couldn't possibly be true of McKinsey though. They would never, you know, you don't work for them still. Do you? No, I don't. Okay. Let's go. Right. Fuck them guys. No, of course, you know, yeah.
00:14:01
Speaker
Okay, whatever. Yeah, I'm pretty sure you're happy not to work for them anymore.
00:14:07
Speaker
I think we should put a disclaimer saying that, you know, listen to the podcast, please note that, you know, we don't endorse this. We're not sponsored by McKinsey. We're not sponsored by McKinsey. We don't want to be sued by them, either. I mean, thanks. Yeah. So, yeah, it's great. For balance. Yeah, McKinsey. Yeah, whatever. That's about as good as balance I can get really from fucking. Yeah.
00:14:35
Speaker
Anyway, they may be neutral, probably not. Right, so yeah, you left Mackenzie in a cloud of glory. Yes, yes. Yeah, no, I was halfway through my book at that point.
00:14:51
Speaker
And I was just like, yeah, halfway through. I don't need you anymore. I've got this book that's free online. What's that? Before going to the halfway level. So why did you start with writing a book about closure? What was the thinking process? So I guess part of it was I wanted so
00:15:19
Speaker
I liked Closure, I wanted to use it more. And I felt like part of the way to get there would be to have more people actually in the company that could use it with me. So I was like, when I started teaching people, and I started doing that, and as part of that, that's when I started writing. I've been writing some of my Closure blog posts for a while, and that was fun. And then yeah, I just started doing it. I think part of it too was like one of my co-workers was like,
00:15:49
Speaker
No, you don't write in an intro book for this programming language. People have already done that. I think part of me was just kind of like...
00:15:57
Speaker
but you don't tell me what to do. Nobody tells me what to do. And people tell me what not to do. Yeah. Yeah. But have you written? I mean, you wrote the blog posts. But I mean, I've got to say, I think you're a very good writer. So like, did you have did you have practice before then? Or what, you know, what was this your first actual book book?
00:16:22
Speaker
That was definitely my first book. I wrote, I think probably the largest thing I wrote before then was like, I wrote this kind of short guide to visual design is visualmes.com. It's really, really nice, by the way. Oh, thanks. Yeah. It's funny to me to look at it now because it looks so dated, but I feel like the content is still pretty relevant. Yeah. Thanks.
00:16:48
Speaker
Well, you did do some research. Five minutes before getting on the podcast. Who is this guy again? He can bottom.
00:16:59
Speaker
I don't know. I mean, honestly, I mean, this is this is I think, especially the, you know, when you see or when I see the way that you build websites, you know, all of a sudden that you build your your fly mission studios or closure for the true and brave, or the closure jobs website that you're building, you know, there is a there is a certain sense of design sensibility that you have in style that you have. So if I see that, I can I can see, oh, you know, this is this looks, you know, there is there is a kind of a overarching
00:17:27
Speaker
principles that you can see. But those are difficult to explain, right? And when I saw some time ago the
00:17:35
Speaker
visual guide that you explained with the cats pictures and everything and like how, how to group things, how to redesign things. It reminded me of, um, you know, um, there is this, um, lawyer turned, um, um, he, he was also into into racket, uh, Matthew, but Rick, you know, yeah, practical guy to depography. I mean, like it reminded like, you know, something like that, that level of, um, thinking behind the design, you know, it's not just, oh, I'm going to slap him in some CSS and shit. But.
00:18:02
Speaker
I really appreciate it. That's really, really nice. So people who are listening to this, I think you should go and check that out. And I think you also have the link on your home page as well, right, for that one. How else did you get it, Vijay? So come on. No, I mean, I knew this because I told him not to do this.
00:18:23
Speaker
But yeah, it's really super cool because this is something that you don't usually see in programmers, right? I mean, they think that we are not designers. We just write code. Yeah. Anyway, yeah. So please, please give the background about that thing now. Oh, sure. No. And I appreciate that. I feel like Matthew Butterick, like he's one of my heroes, you know, because it's like he is like his his work is just
00:18:49
Speaker
Really good. It's like he created this whole language for writing books and then wrote books with it. He's an excellent author. All the fonts that he made are fucking good. It's still used to replicate from him, which is a really beautiful monofont. Nice. Cool. Let's talk about the visual design thing. How did you compare that part as well?
00:19:16
Speaker
Sure, yeah, no, I don't know. I guess I feel like it's, I've always been interested in design. I like art, I like visual art, I like photography. I do a lot of photography myself, but I think, you know, so I have spent, I've spent a lot of time reading about design and trying to design my own little things, like here and there too. And I think I decided,
00:19:45
Speaker
pretty early on my career. It's like, okay, I can pick, I can like pick one and get kind of kind of okay at it. And so I pick programming, you know, I still like to, you know, here and there, like dive into things where I get to actually design, design stuff. But to me, it's like it is, um, you know, I feel like all this stuff is just about, you know, how do you communicate with other people? Right. And
00:20:12
Speaker
I feel like that's totally relevant in programming, too. So much of the best practices and whatnot that you have to learn when you actually get a job and have to work with other people is how do you communicate these different ideas in your code with other people? And I mean, I don't know. I guess a lot of it for me is I think about the stuff coming down to cognitive ergonomics. You only have so much working memory.
00:20:42
Speaker
Right. And then for example, and then they're like, your brain has like certain biases and has like certain ways of processing information. So like with programming, it's mostly linguistic, but there's also a bit of a visual element to it, like to how you actually structure like with white space, the code, your code. And then there's like a little bit of structure too, with like, you know, file system and layout as well, that that's arguably just more kind of like the linguistic part of your brain as well.
00:21:12
Speaker
And then visually, there's rules to how your brain processes information in a way that it's very easy to make sense of something. So I don't know. So thinking along those lines, do you think, how do you compare closure with Ruby stuff that you did? Because Ruby is also kind of like, there is a certain sense of beauty to Ruby, right? And it's a very simple language, very readable, and that kind of thing.
00:21:42
Speaker
Um, and, and with Ruby on Rails being super popular, because, you know, as you said, like, like cognitive ergonomics or something, you know, that the amount of things that you need to know is a bit less to get started with Ruby or whatever. So how do you, how do you compare on this? Um, yeah, on this item, Ruby and enclosure. Yeah, that's, I think there's, there's a few different ways. I think that that could be answered. Um, so.
00:22:11
Speaker
Yeah, there's just, I think, based on the kind of basic level of the emphasis on naming things descriptively. That's more of a kind of cultural practice, I guess. You could write C code and just really insist that people name things descriptively. But in Ruby, they just happen to, that's just kind of
00:22:40
Speaker
omnipresent, I guess, right? It's part of the Ruby way, I guess. But in terms of, there's another element of your question, too, in terms of talking about Ruby on Rails as a framework and being able to get started quickly with that and building things versus enclosure, that's not really
00:23:08
Speaker
You know, that's not really the case. Though, like, plenty of people have made, like, a lot of things that you make it a lot easier and you can, you know, follow, for example, you know, Dimitri's books and guides and stuff and just, like, get started.
00:23:25
Speaker
But I feel like there is a difference there between, like in the Ruby on Rails world, there's like a very well-defined set of concepts. So like when you're talking about cognitive ergonomics, like one of the main ideas is this idea of chunking, like being able to, you know, it's just like another word for abstraction, I guess, right? You want to like rely on just like one kind of token in your mind to like represent like a kind of broader thing.
00:23:53
Speaker
And with Ruby on Rails, it's nice because you don't actually have to know what actually that took in, all the details for what that stands for. There's a kind of progressive enhancement, I guess, to the process of building a website. And you can learn more about the internals, but you don't have to know them at first. And then you can learn more until you get frustrated and quit using it because it's like, this will never do what I want it to do.
00:24:23
Speaker
But that's okay because it can do a lot of things that a lot of people want it to do. So the other thing that's been going on for me that this is like my weird little obsession, my side obsession is like I have been trying to build closure framework for like four fucking years. I was just wondering, you've got a side obsession.
00:24:52
Speaker
Yeah. We're coming to your main obsession a bit later. Is that the idea? After we go through all the side obsessions, then we go to find the main quest. Right. So the side obsession is the frameworks for closure. Yeah. Yeah. Framework. Yeah. Framework for closure. I'm like, what would that look like? How can you, how can you take all the, you know, um, all the amazing,
00:25:20
Speaker
benefits that Closure gives you in terms of data orientation, immutability, all that stuff. And then make a framework that could only be created in Closure, for example. What would that look like? And I feel like I've been flailing around at this and I don't know. So we don't have to talk about that.
00:25:43
Speaker
Yeah. Well, bizarrely, I was listening to DHH today on another podcast, a co-recursive podcast. And he was saying that his perspective is that it's all contextual, essentially, is that you end up kind of picking tech for the thing that meets your needs, either be that technically,
00:26:13
Speaker
kind of like aesthetically, emotionally, or whatever, you know, something matches your needs. I mean, you can always get told what to do by your boss, but that's, you know, that's a different story, if you're like, you know, but if you're picking technology, if you're deciding what to do, then those are the kind of drivers for that kind of thing. But I think with him, I mean, obviously, he's a really interesting guy.
00:26:35
Speaker
But he's very strongly opinionated about certain things and he makes decisions and that's the decision that he makes and if you don't agree with that decision, then essentially you're out. I think that's okay. I quite like that view of frameworks where it's very opinionated and that's kind of what you're coming to as well, isn't it? What you're saying is your opinion is that daily orientation,
00:27:00
Speaker
is the big thing of closure. So if I'm going to make a framework, it's going to be opinionated around that concept, for example. Yeah, yeah. There's a lot of interesting things about what you said. Because what you said about meeting needs and bringing up the aesthetic and emotional needs, that's super interesting.

Data Orientation Debate

00:27:22
Speaker
talking about it is just like, we're all humans. And like, you know, we're making these human choices. But yeah, yeah, when it comes to opinions, I mean, so I mean, for me personally, like the data orientation, I think is, you know, like that, that's one of the huge things that that closure brings to the table. I don't know that necessarily thought about like, that as being like the thing for
00:27:46
Speaker
for what I'd like to do. The reason I mention it is just bizarrely that you haven't heard the previous podcast because it's not released yet.
00:27:56
Speaker
But the last podcast we had was with Jonas and Sharvitz. And he's written a book about data-oriented programming. And he was talking about this. So maybe it's like in the zeitgeist, I don't know. But I think data orientation around closure has been in the zeitgeist for a long time.
00:28:17
Speaker
Um, but you know, uh, he reckons that dead orientation is not in wikipedia. It's not it's not out there. It's not a concept which is well understood You know, so we have to talk about it more. So we're so we're doing our duty here by you know Helping to promote that concept a bit more Okay, okay I appreciate that. I like that i'm like i'm like, I don't know if that's the main thing for me And I like that you're coming back with but I think it is or at least it should
00:28:50
Speaker
Well, I don't know if it is. I know. Could be, it couldn't be. It's up to you, you know? It sounded to me like it was, but you know.
00:29:01
Speaker
And you've been building this web stuff with Closure, right? So did you kind of reach to a point because you said you've been thinking about it for four years already. So did you reach to a point where these are the core principles that I built my Closure applications with that are a bit different than Ruby on Rails, for example?
00:29:24
Speaker
Yeah, gosh, you know, it's like, it's hard because it's been so long since I've like, Ruby on Rails, it's like, so far in the past for me, like, the, I guess, like, the points that the parts that still stick out for me are like, the more human parts of like, I want to, you know, I'm like, chasing that high of like, I can just do this thing. And I got, like, a website out there, I can show it to people, like, that's fun. You know, like, I had, one of my early websites was phobiotopia.com.
00:29:52
Speaker
And you could, you could, this was like around when, uh, what Google released, like, um, you know, like the Google maps API or whatever, and people could, um, just type in whatever they were afraid of. And I like, it would put a pin down and you could see, like, you know, kind of like look around the world, what people were afraid of. Um, and like people are afraid of like what the twin towers or something.
00:30:18
Speaker
Maybe that's a bad example. You put those two things together, this could be a powerful tool. Bears, a lot of people put bears, which is surprising.
00:30:45
Speaker
Yeah, maybe it was around like 2004 or 2005. But anyway, stuff like that is just like fun. And so that's kind of like what sticks with me, I guess. But yeah, I don't know. I guess some of the things that I got burnt out on on Ruby were like some of the kind of classic uh-oh
00:31:07
Speaker
problem is that we as like proper functional programmers, like look down on like, I have no idea how this object got into this state, like, and this has happened to me like, you know, 20 times today, I'm sick of that shit. You know, so like, so like, let's, let's do that. I do think
00:31:26
Speaker
People always talk about frameworks, there's this magic there, and it gets to be so frustrating having to untangle all that magic. I think, unfortunately, I've added a little bit too much of that to my thing. I'm trying to go through, I want to do another iteration of my private, Daniel-only framework before I put it out there, to un-magic it a bit.
00:31:53
Speaker
So some of the, anyway, so you said that I've been thinking about this for four years. I don't know that I've been thinking about it so much. It was just like, uh, stressing about it. And, um, but so some of the, some of the ideas, do you want to get like the greatest, greatest hits ideas that I've had about this? Yeah. Okay. One, one, okay. One of the ideas is I think that this simple versus easy thing in the closure community, I think that that's like, that's,
00:32:22
Speaker
idea, I think it served its purpose, but I think it's like reached its expiration date. I mean, honestly, I think even some of the earlier talks that like, you know, Rich gave, and, you know, obviously not to, to knock Mr. Hickey and like, who cares if this, you know, if Daniel Higginbotham knocked Rich Hickey on this podcast. But there's like, there are a couple of these podcasts, which I felt like were
00:32:47
Speaker
were kind of strange and almost pretty illogical when it comes to this idea of simple versus easy.
00:32:55
Speaker
And so I think that that idea is like way past this expiration date. And I can talk more about that if you want to. But just a second. I mean, don't you think that people want, I mean, I think his initial thing was easy has kind of got us a whole bunch of hidden complexity. So we need to make it simple. But I think simple and easy seems to be like no one's got, no one's going to object to that.
00:33:22
Speaker
I think if you drop simple, then people are going to give you shades, let's say. They're going to throw shade on you and they're going to give you shade. I think simple is probably going to be something which is going to be, hang on, mate. We need it simple.
00:33:41
Speaker
Yeah, but but so when you say people are going to throw a shade on you, are you referring to like to closure programmers or to like people like on the street? Keep it simple. But here's the thing. Here's the thing. What I mean, like, would you like, would you want to work with something that's like,
00:34:11
Speaker
Um, build as like, this is simple, but it's also like really fucking hard, you know, or, or like, like, obviously not. Right. So, so to me, it's like, it's, it's so it. Okay. I want, like, this is, this isn't like my backlog of blog posts, but so here, here's some of my thoughts on this. Right. So, so first.
00:34:33
Speaker
In order to make this point about simple versus easy, the definition for easy that's given is a speculative definition and it's not how anyone actually uses the word. He talks about easy as things being close at hand. Who uses it that way? You know what I mean? But the idea of easy to me is just that there's not much work involved.
00:35:00
Speaker
Like, less work is easier, right? And so, like, and so, in one of the talks, too, he talks about this idea, like, like, why do we prioritize making a website in a day? He says, that's stupid. And like, that, to me, like, that feels wrong to me. Like, I feel
00:35:19
Speaker
It's just because that is valuable to so many people to be able to make a website in a day. That's not stupid. People are able to improve their lives dramatically by being able to do that. And so when you talk about these tools exist in that context, for a lot of people, people don't necessarily want to be like the John Coltrane of making websites or whatever. And that's fine.
00:35:47
Speaker
But this idea, simple versus easy, and then having this disparaging attitude toward people who don't want the simplest possible thing and then have to compose all that stuff together themselves somehow. But I think it could just come back to the disparagement is around this kind of
00:36:14
Speaker
I think if the machinery that was giving you the thing that was built in a day, the website in a day, was itself a simple tool and had like, it was easy to understand or whatever or was kind of like, it had growth in it or whatever, then maybe I think the disparagement would be a bit less. But I think that's what he's trying to disparage is complexity.
00:36:43
Speaker
you know, to me, he, it's a bit annoying that he chose easy because what he really, I think what I, my takeaway from that is that he's just against complexity and complexity is often hidden by systems that, that make things easy for other people. But then they're taking on a burden themselves that is maybe some sustainable. Yeah, no. And I,
00:37:08
Speaker
I get that. I get that that's the kind of argument that he was making. I just think that the overall thing was I ended up finding it unhelpful. Because if the idea of complexity is combining things together, in a way, in my mind, what we're talking about is the amount of work involved over the entire lifetime of your interaction with this thing.
00:37:38
Speaker
Right. So that's why, that's why complexity sucks is because it like, like, uh, it's, it's like there's, uh, armed mortgages or whatever that led to the housing crisis, right? You pay the, like the low interest rate at first and then like, you know, later on you get stuck with like the really high interest rate and you can't pay that anymore, you know, and then you're fucked. And then like, uh, 2008 and then Daniel Higginbotham is like, lost his job, like, you know, twice, like, cause the financial crisis, you know, and you know, so like, I get it.
00:38:08
Speaker
But I, but I also do think that there's, um, but because, um, like that, that, that is like a more, I feel like that, that nuance hasn't really become so much of the closure culture, but what part of it has become is just like easy.
00:38:25
Speaker
Oh, gonna look down on that. And like, I feel like that's maybe maybe not so much not with everyone, not not and maybe not so much anymore. But I feel like that was that was maybe a part of it. And like, that just makes me sad because it's just like, I think that I think that things I don't know, I do want to make things easy.
00:38:45
Speaker
I do. Right on. Come on. This is the barge you're spitting down here, right? Come on. What are we doing as programmers if we're not making things easier for people? You know what I mean? Absolutely. That is the value of simplicity. If we had infinite mental capacity and could keep track of infinite complexity, right?
00:39:14
Speaker
then these issues wouldn't really matter. You know what I mean? Does that make any sense? Because it won't be any additional work. The value of simplicity is that it makes things easier. I'm just saying that it's backwards. It's backwards. But isn't it more contextual because I think I'm trying to
00:39:38
Speaker
come at this from a different angle. When Richiki was talking about simple versus easy, in the context of programmers, you were saying, we need to make things easier for everybody, not just programmers. Because these days, the programming is now not only a programmers thing anymore, given the whole no-code stuff and
00:40:01
Speaker
millions of companies that are on Excel, for example, without having any programming, quote unquote, program experience. So there is the easy part, right? There is the easy part that we're pushing for, because programming is not just, you know, these elite people who understand the systems and abstractions and we can keep in mind and this kind of shit, you know, this is now slowly
00:40:24
Speaker
Programming is being more commoditized and more, how do you call that, brought to everybody knows about. Democratized, I think is a good word for it. So in that context, if 10 years ago, when Rich was talking about maybe 20 years ago, based on his experience, probably at that moment,
00:40:47
Speaker
I understand that it was mainly targeted towards programmers. So we wanted systems that are simple, but OK, we know that they are difficult to build. So that was OK. But now the world has changed. So that's my understanding of it. So do you think, is that the way that you're going as well in terms of the expiration date of the concept? It's not just limited to that. Or do you think this is completely expired? So we shouldn't use this analogy anymore.
00:41:16
Speaker
Well, I think, to me, the value of that analogy and the value of that talk is to really clarify the value of simplicity and, to some degree, clarify what simplicity means. And specifically, I do think that when we're talking about closure and when we're able to look at object-oriented programming languages and we're finding state
00:41:45
Speaker
And and the methods for like, changing that state together into like this one thing, right? Like, it turns out like that was a bad idea. Right? I mean, I think it's, I think, you know, we can all agree here. Yeah, exactly. Yeah, right. And so to me, I don't know, this is how I took it. Like, this is like the main the kind of the kind of a kind of broader
00:42:13
Speaker
rationale or justification for why that is not a great way of doing things and why having immutable data structures by default, for example, is a good idea and a good way of doing things.
00:42:26
Speaker
Um, and, and I, you know, this is like, okay, this is, I'm just here, you know, day in and day out with like my, my, my cats and my dog and stuff. And like, I don't like, I'm never going to have like a rich, a key level of impact or be able to, I don't know. I don't think I'm necessarily even interested in like thinking through things through to the same like degree in depth. But I will say that like the, um, the value of that, like simple versus easy.
00:42:57
Speaker
it was because it was provocative and it was a way to really highlight the nature of closure and the rationale behind it and the value that it brings and how it can make your life easier over the long run. And I'm also like, I'm not trying to do his talks disservice or anything too. I think that he's, like you were saying earlier Ray, it's like he's,
00:43:27
Speaker
Um, no, no one would say, uh, simple and easy. Oh no, thanks. I'll just say take simple, please. Right. Um, but, but, but what I, what I mean by that is like, when I talk about, um, I think that this kind of, uh, I mean, it's just like a weird debate to be having. It's like, it's weird. I don't, I don't think it ever, like it doesn't come up as much anymore.
00:43:52
Speaker
But I think it's weird for there to still be some kind of initial friction if someone were to try to make things that would make programming easier for closures. I don't know. I'm saying that now, and I'm like, wait, that's not fair. People make things easier all the time, and no one's like, eh, too easy.
00:44:17
Speaker
But I think I'll give you an interesting example where, you know, I feel like in closure, it's still a bit of a live debate, in my opinion, where people, I'm not saying again that anyone did anything wrong or bad, but somebody somewhere wanted to make like life at the repl a bit easier. Yeah. And what they wanted to do was they wanted to make like this, like,
00:44:41
Speaker
Like Stuart Sierra wanted this like reloaded workflow. Why? Well, because it made his life easier. Yeah. But when I look at that, I don't like it because yes, I know it makes your life easier, but it means that now I have to think about components everywhere. And it's like an infestation in my thinking, in my brain.
00:45:03
Speaker
And it might could, because he's mixing up the state of the application with my program now. And I've got to think about that. And I really hate that. Well, maybe I don't hate it, but sorry, Stuart. Please do come on the podcast. Yes.
00:45:26
Speaker
I'm pretty sure he would have a lovely debate about it. But you know, I'm not a fan of that. So then you have other people doing these things, you know, like Dimitri and there's other people as, oh man.
00:45:39
Speaker
Guy give a talk at the closure days and he's been on the podcast. I'm coming from life for me. Guy will ring. We've just. James Reeves. James Reeves. Yes. Yeah. Yeah. I mean, he is great. You know, he made a great talk about about how you can use data to drive them. You know, we love to work for this is really interesting. It's really good because then but again, he's saying multi-methods of the way, you know,
00:46:08
Speaker
That's the way you do it now. You don't have to think about components, you have to think about multi-methods, and it's less intrusive. I always think that this is a really good discussion enclosure, actually.
00:46:24
Speaker
they're both trying to make things easier for us. And some kind of like, let's say, there is some abstract, some taste around this, around what's palatable to a kind of like, maybe all closure programmers, let's say, you know, a lot of closure programmers really like this idea of the reloader workflow, and nothing wrong with that, you know. But I think, again, it was kind of got rejected a little bit because of this, this
00:46:52
Speaker
It's joining together. I'm not going to say the C word, you know, it's a family show. Yeah. Yeah. Yeah. Well, I don't know. So the thing that like what I'm left with is that like, like we have to, we have to join things together somehow.
00:47:17
Speaker
And I think that's where what I wish that there was more of in those talks was like, but how, like how? What are like, okay, so with like object oriented programming, like that was a bad way to do it, right? But then like going forward, you know, there's so many, you know, aspects of a program or a system that you have to join things together to make them. So like how, you know, and I mean, I don't know.
00:47:45
Speaker
But my boss isn't listening. I don't know. But anyway, I hear what you're saying, though, about like, I mean, yeah, I really like I really like integrant, you know, the James's system there. And I think it's I don't know, I could
00:48:11
Speaker
I can talk a little bit more about like my my thinking around like, well, you know, you have architectural components in your system, you just do, you have to, you have to capture them. Somehow, they do have a life cycle, you have to, it's, I mean, it's probably a good idea to eventually like, capture that somehow, right? So like, so how do we do it, you know? I see a sign.
00:48:36
Speaker
No, no, no, I'm not sighing. Jesus, no, I'm absolutely not. No, I'm happy. I'm really happy. No, because I think these are really the challenges that programmers deal with a day. I think all this architecture, all this theoretical stuff is great and it's great to motivate the thinking. But in the end, you're right. We need to
00:48:56
Speaker
need to have practical answers. You know, I like like Eric Norman has this was not his thing, but he has this this onion architecture thing where, you know, like this, I think several people have written about this, where you kind of essentially, you know, you have the pure functions in the middle, and then you have the IO transformations at the edge. And I think these these are like interesting architectural
00:49:24
Speaker
patterns, let's say, to keep things simple in the middle and accept some complexity where it's completely necessary. I mean, where are you going from an architectural perspective then? Well, so like with my little thing that I've been toiling away on for four years and obscurity in the dark in my closet,
00:49:52
Speaker
Yeah, well, it's all it's integrance kind of the foundation for it. I mean, I think it's just like, it's just a really good idea. And it's executed really well. And but so so part of part of part of my thinking around this, what I kind of keep coming back to, and I'll be I'd be interested, like really interested, actually, to hear your thoughts about this, because I don't, I haven't talked about it too much, like, like one on one with people. But what I keep coming back to is just this is the operating system.
00:50:21
Speaker
It is, I mean, I was, I was reading something like back in the eighties, I guess, like, so I read someone saying like, there'd be like an operating system coming out like, like once a month or something, right? And that's kind of like the situation that we have kind of like with frameworks, right? And, but, but so like the problems, the problems that we're solving, like with, with, with a framework or with the operating system,
00:50:47
Speaker
I have this whole blog post where I'm like, I think an operating system is actually a framework. But the idea here is you have some kind of resources, and you have to manage those resources somehow. And that's not the main work of whatever your application is. And as new resources come along, you have cloud resources, browsers. That's a new medium. You develop new frameworks to
00:51:17
Speaker
to kind of capture those, capture like the life cycle and interactions with those resources, like management of those resources, right? And so like, like integrant, but when I see that, I'm like, this is kind of like, you know, system D or something, right? Like you are defining like the graph of things that need to get started and like also how to, you know, how to start them and shut them down. So that's kind of like where I'm like, how, how I think about it. And then so
00:51:45
Speaker
Like with web stuff, I'm like, okay, like thinking about forms as a kind of resource in the same way that like, you know, a file or something like that would be a resource. Like it has a pattern of interaction with it. You have, it has its own life cycle. And, you know, it'd be nice to just capture that once so that people can easily write their forms so that people can, you know, you can get that, you know, fear data collection website out there as quickly as possible.
00:52:15
Speaker
Right. Um, but so that's something like also, you know, Ajax requests doing things like, um, when I submit this form, um, it should show some kind of activity indicator while the Ajax request is, um, live. That's something that should be like, why, why do I need to do this? Like come up with this again, like every site that I make it, you know, I don't know if this is really answering your question, but, um, so yeah, like architecturally, I feel like integrant is like great as like the,
00:52:44
Speaker
the kind of foundation for this is expressing like these are the different, I mean, I like that and I like the kind of component mindset because it gives you, I like how it gives me, it's kind of like an aid to thinking about like what are the boundaries of the different parts of my system and how do they relate to each other? How do I make like, you know, expose like the smallest interface I guess possible, like among these different components, right?
00:53:13
Speaker
integrants particularly nice because it is like you express that all on data and then that gives you like a lot of nice properties about being able to swap out different components like for your tests and that I've had a lot of success with.
00:53:34
Speaker
So I don't know. That was about two minutes, I guess, of stream of consciousness around this stuff there. I'm trying to think about with web, with the web. I think web is very interesting. But it's also complicated in the sense that I think it was a good analogy between system D and the integrant, like the lifecycle of things stopping and starting them.
00:54:01
Speaker
with the like you're filling out a form and you're then like giving back the answer. These interactions always seem much more complicated in the end. They're always, they seem almost unique. So where do we get the abstraction that kind of like nails that to some extent, or, you know, it gives you the kind of like 80% experience that you can then kind of like tweak according to some
00:54:28
Speaker
some needs because that seems like a very, like, uh, what should we say? That's a ineffable, kind of difficult to, well, for me anyway, I'm a small brain guy. So I'm not quite, I'm quite blessed. Well, after the podcast, I'll give you the link. Okay. My members only secret, secret framework, GitHub repo. Yeah. Yeah. Yes. That's your channel. Yeah. Um,
00:54:58
Speaker
But yeah, no, it's like, but so I think it's a really good question. I don't know. Some of it. So I don't know if I have a great answer, but some of the things I think about are like, you know, we over time, different different kinds of resources get introduced like a database, I think of as like a kind of resource. Like, yes, that's its own program. Right. But it's also like now like in people, people write databases and get paid money to do it. Like for them, like that's their product. Right.
00:55:27
Speaker
But then for other people, it becomes like a building block. And now here's a set of interactions for a database. And databases are fairly complicated. And yet we're able to define, here's the set of interactions with this thing. Here's the set of events that it will respond to. Here's the kind of different operational states it will be in of, is it in the middle of a transaction or not?
00:55:57
Speaker
Like with forms, you can do the same thing. You can just try to enumerate like what are the different events that it can respond to? What are the different operational states which it can be in? Like that's different from like the kind of content state, you know? Like operational state would be like, is this valid or not? Has this been submitted or not? And so the kind of like where I've been going with it is in part part of it's like for me, like what I've been doing is breaking it down
00:56:27
Speaker
to starting with inputs, right? So each input. So my little thing uses reframe, which is also, I think, just really good. I like it a lot. Yeah. Thumbs up. Yeah. Thumbs up. Big thumbs up. Yeah. So one of the ideas I think has been one of the better ideas that I've worked out over the last few years is to use
00:56:54
Speaker
kind of use the global state Adam and reframe as like the file system. And to say like every form is going to have a path basically on this file system. And you're going to like name all the different inputs. And so because there's a kind of consistent organization to how you model and capture your forms, that opens up some possibilities, which I can talk about in a little bit. But in terms of like actually
00:57:24
Speaker
dealing with, like, you know, there's there's so much that's possible with forms. Some of some of the things I've found useful, like, one is that, like, form. So one of the things that's tricky is like form validation, right? Because there's so many different you can have it like the server side validate it. Right. But so what we're I've kind of landed with it is just like, oh,
00:57:51
Speaker
It's not even just validation, because you don't want to just say, is this valid or invalid. There might be other metadata that you want to display with inputs. There's a specific example that's coming to mind, but we've seen stuff like that.
00:58:16
Speaker
I'm trying to think of a specific example. I can't, but they exist. Trust me. But what you want is actually a function. You want to have a function of the input, or maybe perhaps of the form as a whole. But the function would be, its output would be scope to just that input.
00:58:42
Speaker
But when I say the function of the form as a whole, it's not just what is the contents of that input's value, but it's also what are the DOM interactions? What are the browser events that it's respond to? Has it been blurred or not? You don't want to start yelling at someone that their username is too long as soon as they click in the field. That's a bad user experience. I don't know. That's where I ended with it. I feel actually pretty happy with it. With just validation,
00:59:12
Speaker
And then like with the framework itself, it handles things like it produces a kind of like component factory in the sense that like you have a multi-method, which you can say like input, like input keyword text or text area, or just even create like new custom form elements. Like I use this myself on my websites to use like a markdown editor. But like that's,
00:59:40
Speaker
That's something that's really cool about Reagent, where you can say, oh, functions are components. That's what allows you to do that, which is really nice. But the way this input component factory works is that, by default, it has all these different handlers set for you to call the reframe dispatch of unchanged. This input is going to, it's pre-populated with the path
01:00:10
Speaker
for that particular attribute that you're trying to modify, like in the global state atom, right? And it just kind of like takes care of that stuff for you. So you don't have to, like I said, that's a decision you don't have to make anymore. Like, am I going to store this locally in some kind of atom, like store it in the global state atom? That I feel like it's like become
01:00:36
Speaker
a lot easier to just like pump out of form, you know. So you're building on, so you're using reframe and integrant and things like that to compose your new framework or is it the right thing to say or? Yeah. That's accurate. Yeah. Nice.
01:00:57
Speaker
So with the, going back to the kind of like the paths thing is just to, sorry, understand it a bit better. It's the idea that like, let's say you have like five input fields, you know, I don't know, name, email, phone number, three. Okay. I can't do more than three.
01:01:19
Speaker
There's a list, three is the max. So yeah, we got the name, the email and the phone number. So are you saying there's going to be a path for each of those three things, and then there'll be a validator associated with the phone number, with the email, with the name? And then there's another thing which looks at the whole form, or is it more clever than that?
01:01:49
Speaker
Yeah, no, that's, it is not more clever than that. Um, it's, that's good. That's good. Um, so it is simple. I don't know. I don't know. Sometimes I go back. That seems pretty simple to me. What did I do? Yeah. Well, it's like, um, you know, I, I feel like after I've got this, I'm building this, I'm rebuilding this job site and I'm going to go back and like revisit my framework thing.
01:02:16
Speaker
Hopefully, in the next few months or something, I can put it out there. Because there are some things I'm excited about. That's one of them. But yeah, to answer your question, specifically, where this form gets put, it's basically under slash forms slash some form name. And so the form name is going to be a vector of post, or put, or whatever, the HTTP verb, and then a name of a route.
01:02:44
Speaker
So for my job site, it's like listings, right? So like post listings or something like that, right? And then so like underneath, so like that's kind of like one directory and underneath that you have a bunch of subdirectories of like the buffer, which is the current values that's like that are displayed in the inputs. There's like a base directory, which is like, if you need to reset the form, like this is what the form started with, right?
01:03:12
Speaker
There's also errors if you need to store errors there for some reason, like from the server, for example. And I think that there's a few other ones, but I think that those are the main ones, right? So this is like, okay, how do you capture formness, the essence of form? And so that's what I've been trying to do there. And so under buffer, for example, though, you'll have
01:03:40
Speaker
basically a file in this metaphor that corresponds to each attribute, like username, password, address, or whatever it was that you said. So yeah, so the function, this function, you basically point it at that and it's able to... The way that I've been doing it for myself, for the most part, it's not super efficient, and I think there are ways to make it more efficient. But the way I've done it for myself is I have basically a function that looks at the form as a whole,
01:04:10
Speaker
So that's another kind of subdirectory is like kind of input that these different fields have received. So the function looks at that as a whole and says, OK, if you've blurred, if the username has received a blur and it's too short, then display this message.
01:04:37
Speaker
And so it looks at the form as a whole and then outputs a map, and then there's something else. It's probably actually, I think, a reframed subscription, which says, give me just the values for this particular input.
01:04:55
Speaker
Yeah, that's nice. Yeah. Cause I think that's the nice thing about the, like, they can say the database is very reactive, you know? So you can, you can really rely on that to make things, once you kind of grok at fully, you can really rely on it to make things quite simple as well. You know, it itself is not simple, you know, but it does make your life a lot easier. It does. It does. It's nice. You can just, sorry, go ahead.
01:05:23
Speaker
I was just going to say this whole graph that's getting fired off and all that kind of stuff. There is some complexity there, and Mike's done a good job of implementing it obviously, but also kind of hiding it to some extent.
01:05:40
Speaker
And it does make our life easier. So I think this is a good example of simple, relatively simple from a programming perspective. And it is very easy once you kind of fully get it. Yeah. And it's quite clear. Yeah. Yeah.

Framework Components Appreciation

01:05:55
Speaker
And I definitely agree. Like reframe is definitely part of what I think about for that, like being simple, it's like, okay, there's like a limited number of concepts here. And he explains them all very well. And like, once they're new,
01:06:08
Speaker
I mean, they were new for me when I learned about it, right? But it's also, I guess, you're right, like it's not, conceptually, it's not a very complicated system reframe to work with. Yeah. Yeah, it's a real pleasure to build on top of. I think part of where I was coming from with it was I was using this, I was building this Hoplon app for a while.
01:06:38
Speaker
And so, which I definitely don't want to knock that off because it's like, you know, made by Misha and Alan and it's good. It has a lot of interesting ideas and it is good. And I also felt like the kind of emphasis on these cells where you like each, but the state is always kind of like isolated within the cell and you have like this cell graph that's not addressable. I ended up like finding like that was kind of difficult to work with.
01:07:07
Speaker
So you might be modeling something. If you're modeling some kind of input, it's all basically a local state. And if some other input outside of it wants to peer into it, that became very difficult. I'm not sure if that's making sense, but a typical use case might be, as I type something in, I want to filter a table reactively as I type in. So you can specifically code that
01:07:37
Speaker
code it to work that way using this kind of non-addressable cell graph that Hoplon had. And that was possible, but there are ways in which I could kind of code myself into a corner and be like, how am I actually going to get this to work without majorly changing everything? But with Reframe, having everything in this global state add-on, that's now accessible outside of
01:08:05
Speaker
Other things can actually view it and react to it. It's just so well done. I love it. I've used it for years now and I just fucking love it. Where's Mike Thompson? Get him on the air. I want to just high-five him while I kiss or something.
01:08:23
Speaker
Yeah, I think that that is the, you know, going back to the Ruby on Rails kind of discussion, I think that's what Ruby on Rails brought in, like the joy when you're first time in your recording, you know, it feels like you, you're so productive within, you know, so less amount of time. And then, okay, now lighter things go in different ways, but, but in the case of my frame, I think, you know, the idea sets are so simple. And once they click, you know,
01:08:49
Speaker
you enjoy building the whole experience, which is something that...
01:08:56
Speaker
Yeah, maybe this is this because closure podcast and maybe, you know, we are, we are preaching to the choir or something. And then I'm pretty sure in other, in other languages, probably there, there is equal and a more in the passion around, around what they're doing. I think, I think what, what you're getting at though, Daniel, it's like, I think to me, like if I'm just reacting and reacting in real time to what you're thinking, it's like the, um, it's the,
01:09:20
Speaker
One of the common arguments with boilerplate and stuff like this and repetitive stuff is just macro. Macro your way out of it. But then the other one is, don't ever use macros. This is a constant. For me, this is a problem because macros are definitely powerful, but also,
01:09:49
Speaker
if you like to avoid boilerplate, okay, use a macro. But actually, it's turned out that that's a pretty bad idea. So then you use data. But then as soon as you do that, it's like, it's, again, it's decoupling things. So with the macro, you know what's going on. You get the data in the macro. Everything's transparent, if you like, to some extent. You can't compose over it, so that's the bad thing.
01:10:19
Speaker
But it is relatively straightforward enough, you know, if you can get past all the pearl type squiggles and acts and shit, you know, then, you know, like you are reading pearl at that point, but, you know, it's a different language completely. But if you can get past it, then, you know, OK, you can kind of grok what's going on and you can. Yeah. All right. I see what's going on now.
01:10:41
Speaker
But there's limits to that macro, because I think it's more than three lines, really, it starts to explode, in my opinion. Then you're putting things into functions, and macros become a horror story pretty quickly, I think.
01:10:58
Speaker
At least in my hands. I think in more competent hands, they're probably fine. But in my hands, after three lines, I'm done. So what you're doing is you're saying, okay, there's a
01:11:12
Speaker
To avoid the boilerplate, essentially, we can use this data concept. And then we can take something and say, this is how we do it. This is how we avoid the repetition. Because that's the boring stuff, isn't it? That's the boilerplate. That's the stuff which is tedium.
01:11:30
Speaker
And so I think to remove tedium, you have to introduce another concept. You have to introduce something that says, I see you're experiencing some tedium. Let me help you with that. There's a clippy coming up. There's a clippy coming up, yeah. I'm Daniel. May I help you with your tedium? Oh my god. Yeah, Daniel's existential clippy. Yeah.
01:12:00
Speaker
I see you're experiencing some ennui. Yeah, I have some long bottom leaf for you.
01:12:15
Speaker
If only you had finished the Hobbit game, you would have never reached this level of existential crisis. That nagging open side project that you have. I know. That's a really nice idea, though, Daniel. I think it's intriguing for sure. I'm eagerly awaiting the subscription now.
01:12:44
Speaker
You'll be the first to know. Yeah, please use some early access, you know, code so we can, we can try that out. I'm ready to be like not done with it, you know, but I'm ready to be done. Just like doing it just by my, it's not, and it's all, the thing is like, it's, there's, there's this whole front end component and there's this like backend stuff too. And I wrote like all these Ansible scripts and stuff too to just be like, just, just do this and you can get your, your, your little,
01:13:13
Speaker
web app, like nothing like this is not, you know, you're not going to deploy like a whole like, you know, cloud or something with this shit. But you're playing around, you have a stupid idea, which I have like many of, and then you just want to get it out there. And then like this whole, you know, there's like this whole kind of group of tools that I've made over time of like, here's like how you build the thing and it puts it in a canonical place. And then like Ansible looks for it there. And we'll like, you know, deploy it to your server.
01:13:43
Speaker
And like, not only that, like it stands up all your servers, like in a way that like, nginx will look at your jar, like your uber jar, like jetty, you know, process correctly, like all this stuff has just been kind of like glued together. So I'm like, I'm kind of pumped to, I'm really hoping I can get it out there like soon because like, it's, it's on the one hand, it's like super fun, but on the other hand, it's like, it's just like starting to drive me crazy. I'm still
01:14:09
Speaker
doing this I'm like I want to put it out there and for someone else to take it over and make it like really good and then give me all the credit and then like this is this is you know my dream um just you don't you don't want daniel hegan bottom's family taking it over oh my god you're right
01:14:30
Speaker
As long as it stays in within your clan. I think that the lady, the lady is going to take it over and put a really horrible face on it. You know, like the branding of it is going to be really disgusting. Now you listen to me. Nice. Anyway. You know what? Yeah. Yeah. I think it's, it's, it's super interesting. So I think obviously I think you'll, you'll post about it on, on the interwebs as they say. So I'll be super curious to listen.
01:14:59
Speaker
or at least see your ideas, what you're thinking about it, and then how you thought about it, how you've been using them, right? Because as I said, you're also building these Closure-driven web applications already. So one of it is Closure, Close Jobs,

Clojure Jobs Site Plans

01:15:15
Speaker
Brave Closure Jobs. Yeah, yeah. Yeah. Yeah. Yeah, I've got a- Jobs for the Brave and True. Jobs for the Brave and True. Yeah. That's up there. That's been going for a while. Yeah. Jobs.braveclosure.com.
01:15:30
Speaker
And yeah, so I've been rewriting it and one I want, I mean, part of how I've been thinking about it is like, what would the best possible closure jobs website look like, right? And I mean, the big thing that's missing from the existing website is all the other closure jobs that aren't on there, you know? I think it's,
01:15:57
Speaker
I think, yeah, I want, I want market dominance. Um, I, but no, I really do. Um, you know, occasionally you'll see threads pop up, like are people hiring closure developers? Um, things like that. I think maybe that's changing because it's becoming, it continues to gain, gain traction, but I just really want there to be a place where it's just like, here's every single, um, closure job that people are hiring for.
01:16:27
Speaker
And so part of that is switching to a freemium model. And then another part of it too is just making it really easy for these companies. So the way it works currently is like you just some person creates an account and then posts a job. And they have to post like, if they want to post multiple jobs, they have to enter in the same company info and things like that. So there's actually no first class notion of the company. So that's,
01:16:54
Speaker
needs to change because I also want companies to be able to be highlighted too. Eventually, I want to be able to do things like highlight companies' interactions with the closure community. If they donate to Closure Bridge or Closure Us Together or things like that, there's these social badges, things like that. But then also for people who are interested in closure to be able to see like, holy shit, there's a lot of
01:17:16
Speaker
I think that's something that every time surprises me because I used to run this conference in the Netherlands called Dutch Closure Day and every time I start doing this every year trying to reach out to the sponsors
01:17:34
Speaker
And, you know, somebody who knows somebody who knows somebody will tell me that, hey, these people are using closure like the fuck. I mean, this is like two meters away where I sit and I don't know that there is enclosure. So the discoverability has always been a problem in enclosure companies, you know, like.
01:17:51
Speaker
There are bigger companies, some names that, you know, already, obviously Alex Miller is doing a really good job of, you know, every time somebody says, hey, we are using Closure, they'll put it in the Closure website. Yeah, I think this whole idea of, you know, we don't know who is using Closure or, you know, there are not any jobs or something.
01:18:10
Speaker
And, and also the most annoying part is that we, we use Slack, which is the open source, sorry, the free version, all the shit disappears, which is one of the stupidest shit that any, any, any programming community can do. Um, I quite like that in some ways because it's like the Snapchat of closure.
01:18:33
Speaker
Yeah, the shit keeps disappearing. You can put anything up there and it'll just disappear. Yeah, exactly. And now the shittiest part for me is that somebody replied to some thread that I wrote something at some point. Now the fucking threads thing is bold and I cannot make it like read all or anything.
01:18:53
Speaker
No, no, no, in my closure in Slack, every other channel is read like Markle message is read, but the fucking threats thing is still both fucking forever. Now I keep thinking, what did they give me? Like, you know, did they send me some Bitcoin or something? I don't know. Only Slack people know now. This is the, this is the OCD really kicking in heavily on Slack.
01:19:16
Speaker
And I'm not that active on site either because it's like a fucking close source crap anyway. But yeah, so I think that's a beautiful digression rant. Now let's get back to the closure jobs thing. Yes. I think that's a really good idea to highlight which companies are using and how actively they're participating in the closure community. So that's pretty awesome. Yeah, I'm so excited.
01:19:40
Speaker
Now I'm just thinking about like your arch nemesis, like listening to this and be like, I'm gonna get on Slack. And then keep, you know, swamping the keep, keep pushing more messages until it disappears. Yes. Maybe that's basically what they want to do. So, you know, they're already doing it. They're already doing it. The plan is already in action. It was you really wasn't it?
01:20:10
Speaker
Yes. I'm mentioning E-max in lots and lots of threads. Yes. But not in a good way. Well, if I don't see it, I only assume it's awesome. That brings to the question, obviously we've got the answer too. So E-max another ship. So what is your answer, Daniel? E-max or some other shit? Oh, some other shit. You know what's funny?
01:20:40
Speaker
About a year ago, I switched to Doom Emacs, which uses Vim key bindings by default. And so I was like, fuck it. Let's go crazy. We're in the middle of this pandemic. What am I going to do? Let's learn some Vim key bindings. So that's what I'm doing now. Yeah, Emacs.
01:21:00
Speaker
but like kind of evil mode. Yeah. Yeah. But that's, that's something that I do as well, because I've been using space max for long enough. And for me, you know, when I go into the insert mode, I'm in emacs mode. When I'm in the normal mode, I'm in the rim mode. We've now stopped this closure podcast and we introduce you to the emacs section of the podcast.
01:21:23
Speaker
back to you gentlemen yeah yeah yeah yeah let me uh recite my init.l to you yes find it find it moving thrilling yeah so that el stands for emotional language it is
01:21:45
Speaker
He means it. I mean, he really does. No, but it's fair enough, you know. It is. Fine. All right. E-max is a way of life. I'm not going to EL shame you.
01:22:03
Speaker
Nice. So I've been using Doom. And yeah, I mean, I give that a try like a few times, but I keep falling back to Space Max most of the time. Space Max is my thing. And then I remember like the first commits to the closure layer on Space Max. So I'm still using the same thing. But it's been, yeah, I don't think there is any other comparable things to E-Max anyway. So on that bombshell,
01:22:30
Speaker
Welcome back to The Closure Podcast. This Closure Podcast is brought to you by UMAX people. Sponsored by UMAX. Cool. So yeah, so maybe it's what else can we talk about ClosureWise now? I haven't got that shit out of

Book Availability and Second Edition

01:22:49
Speaker
the way. Because I want to just ask you a few things about The Closure for the Brave and True book, right? So that book is available now in print, in
01:22:57
Speaker
in digital form, everywhere people can buy it. I think this is one of the best introduction to introductory book, or I would say the first book of closure, I think. So are you planning to work on the second editions or something like that? I don't have any plans for a second edition of that book. And I mean, maybe someday it will happen.
01:23:27
Speaker
But, you know, I mean, there's some kind of mistakes in there that I still get kind of emailed about or, you know, tweeted at, and I'm just kind of like, you know, it's fine. Probably my biggest regret is like, EMACs, actually speaking of EMACs, even though I love EMACs, like, I don't, I just don't want people, because like, things have changed so much, like, on the EMAC side, and like,
01:23:57
Speaker
I don't really want to keep up with it. And also I don't want people to have a bad experience. I feel bad for the folks who have had a bad experience in that way, but I feel like the rest of it's like, you know, it's still...
01:24:09
Speaker
Um, more things have been added, but what's there is like good. Um, yeah, yeah, yeah. Um, so it's a testament to the stability of the language. Yeah, exactly. Exactly. Yeah. Yeah. Yeah. So you don't need to, you know, build a new book. Like every time there is a point one release somewhere in them, right? Yeah. Because the core concepts are still the same. That means, you know, um, that you have to know them anywhere to, to become a good programmer. So that's, uh, that's, that's, yeah. Yeah. Cool.
01:24:39
Speaker
Yeah, I remember. It's

Stability and Evolution of Clojure

01:24:42
Speaker
so true. I just want to share briefly. I remember a couple of years ago, I had to write actual JavaScript, and it had been so long. I remember telling my coworkers, it's like visiting my childhood home.
01:24:59
Speaker
There have been all these weird rooms added. One of them's gold-plated for some reason, and there's this dungeon. Who put that there? Why would they do that? It was so bizarre, but yeah. Closure, definitely. These various little side projects I have, it's nice. I can pop into them years later and make a little update or something.
01:25:28
Speaker
Everything works, yeah. It all just works. Yeah, it's great. Yeah, that's true. I think that is something that we...
01:25:35
Speaker
at least from my, whatever the little experience that I have in the programming world that I haven't seen in other languages, you know, that, because things, things are, well, obviously not JavaScript, you know, the shit changes like every nanosecond or something. It goes at fucking light speed that yesterday it was this one. And then today there are like 20 new frameworks now and new testing tools and whatnot and everything.
01:25:59
Speaker
Yeah, I think the biggest one for me the biggest one for me around closure and I think it's the only significant change I would say in the last five years is depth or Eden. Yeah. I mean, I think spec is like something else we we can we can shoot that one in the head later. But I think well, it's bought the owner of it is already shot in head as far as I'm concerned. So I'm just like watching.
01:26:26
Speaker
But, but, but, but Debs.Eden is a live thing. It's, you know, that's, you know, apparently it's Alpha, but, you know, um, some parts of it aren't, some parts of it are, it's very complicated, but, but I think essentially it's, it's, that's not going away. And then that's, you know, that's part of the closure thing now. So that's the only thing I would say that is like, I don't know if you cover that in the book. I can't remember. I haven't reread it for this show, I'm afraid, but, you know,
01:26:51
Speaker
I can't believe you wouldn't be like 200 whatever pages. Let me just quickly get it up. Yeah. But I think in general, it's very stable. So it's like the amount of rework that you need to do is like, say, pretty, pretty minor. Yeah, the core language is like, there's no changes. I think it's everything up to Core Sync. I think some of the core sync, I think some of the things like
01:27:21
Speaker
they came out after the book were like transducers. I'm trying to remember what else. There may be a few other things, but yeah. Yeah. Anyway, yes. Poor language. Super stable. So I think, um, Oh, um, we could go on, uh,
01:27:44
Speaker
poking your brain more and more, but I think this would be a good time to take a pause and then wait for you to release your awesome framework. Just one second before we do that. Daniel, is there anything else, Daniel, before we go that we've missed out or that is bubbling under the surface of your imagination?

Excitement for New Clojure Projects

01:28:04
Speaker
One of the other side obsessions. Oh, gosh. Well, what to share? What to share?
01:28:13
Speaker
I don't know. I think one thing is like, I continue to be like, so, so amazed. Like, I mean, I feel like there, I felt like for a little while, I felt like things were getting kind of like boring or dull, I guess, in the closure of community, like not much happening. And like, that's not the case right now. Like Babashka, for example, awesome. And like all the effects, the folks at like medicine and jucks and stuff and the stuff that's like the stuff that's coming out now. Um,
01:28:43
Speaker
It's like, I don't know, I'm super excited by all of it. I think for myself, yeah, I'm just gonna keep pushing on these different, like, the main idea I think I'm just gonna keep pushing on is like, how can I help people get like, stupid ideas out there quicker? And like, I don't know, that's, yeah, but the work that these other folks are doing,
01:29:14
Speaker
It's very exciting to me because I feel like I really want to spend more time looking at that to see how that can move that forward. I've got so many ideas, y'all.

Personal Projects and Future Vision

01:29:23
Speaker
I got the website, dumbidea.club, the domain name. I just want to make that. It's something I want to put out there. I have these different domain names, badnewspotato.club.
01:29:42
Speaker
So many, so many things I want to put out there, but instead, I'm just like just for some reason trying to make tools to make it easier to put them out there. But anyway, hopefully that'll be done. And then you can see bad news potato dot club at some point in the future. That's exciting. Yeah. Awesome. Yeah. So we'll keep refreshing that page now. Yeah. You know, keep I think we should write a Babushka script that is going to poke the mind continuously.
01:30:12
Speaker
And do I get a proper HTML response back? I agree with you, Daniel. I do agree with you that it's like, you know, um, there's a lot of like, Oh, we missed the

Optimism for Clojure's Future

01:30:23
Speaker
boat. You know, we missed the early days of closure and that was the best part. And I think actually there's plenty more to come. Yeah. And we see that burgeoning in the community right now. Yeah. Yeah. And that's good. Yeah. Yeah. Nice.
01:30:40
Speaker
Cool. Thanks for having me. Yeah. Thanks for joining. And yeah, thanks a lot for all the hard work that you're doing and especially for the Closure Brave, Closure for the Brave and Two Brook.
01:30:50
Speaker
I do recommend that to most of the folks who want to get started with Closure, especially because it uses Emacs. So let them see the light first and they can decide switching to some other inferior tools later. Yeah.

Conclusion and Podcast Support

01:31:12
Speaker
Yeah, Daniel Hickenbottom is a good user.
01:31:17
Speaker
I think if we ever find Daniel Higginbotham, I think we're going to have you and then that person on the podcast. So you can duo. The alter ego. Yeah, exactly. Duo the ideas at some point. Anyway, on that bombshell, I think that's it from us for this episode. So stay safe and thanks again. Big thanks to Daniel for joining us and giving peace of his mind. Yeah, thanks. Excellent.
01:31:47
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:32:07
Speaker
If you'd like to support us, please do check out our Patreon page and you can show your appreciation to all the hard work or the lack of hard work that we're doing. And you can also catch up with either Ray with me for some unexplainable reason you want to interact with us, then do check us out on Slack, Closureian Slack or Closureverse or on Zulep or just at us at Deafened Podcast on Twitter.
01:32:36
Speaker
Enjoy your day and see you in the next episode.
01:33:04
Speaker
Bye!