Become a Creator today!Start creating today - Share your story with the world!
Start for free
00:00:00
00:00:01
#83 Tim Zöller aka The Java Hippie image

#83 Tim Zöller aka The Java Hippie

defn
Avatar
20 Plays2 years ago
We got Tim to talk about Dogs, Cheese and his journey into Clojure and test containers project and his startup! Check his website: https://javahippie.net
Transcript

Introduction and Episode Milestone

00:00:15
Speaker
So welcome to Deaf and Tim. I think it's a... Thanks for having me. Welcome to Deaf and... Episode number... 83, I think? Yeah, 83. Wow. Okay. We are octogenarian now. Well, we have been octogenarian for three episodes already. So we're almost reaching 90 and 90 is basically 100, right? So this is our 100th episode pretty much.
00:00:44
Speaker
Give or take. I'm just rounding it, you know? It depends on where it is after the decimal.

Meet Tim Sura: A Taste of Europe

00:00:54
Speaker
Anyway, welcome, Tim. So please introduce yourself and your dog, and then we can move on to, you know, random crap like closure and other shit.
00:01:03
Speaker
Sure. So the dog's not here because else I wouldn't get a word in. I'm Tim Sura. I live in Freiburg in the beautiful southern Germany. Already said so before, around 45 minutes away from France and Switzerland.
00:01:24
Speaker
So we get to reap the benefits of the best cheese and the best croissants. I'm working for the company.
00:01:36
Speaker
Ooh, that's a loaded question, isn't it? Yes, it is. I think he's talking about Germany. Best cheese is from Germany. Best croissants are from Germany. They're all sausages anyway, moving on. Croissants really stop being good as soon as you set a foot into the German area. Boundary, yeah. They never make it over the border. The butter just stops being good at that point.
00:02:05
Speaker
I think when the croissants have like only two layers. In France there is like two million layers and then only two times like I'll call it croissant. In Germany they're burned always. That's so sad. But I'm kind of like I'm thinking the French are going to be a bit upset that their cheese isn't the best as well because they're pretty cheese heavy. They're different. I wouldn't put one above the other but if you want if you make a cheese fondue you have to have the Swiss cheese. Swiss cheese.
00:02:34
Speaker
But I think it depends on the usage of the cheese, right? The type of the cheese. I'm not a cheese head, if that is the thing. It is now. Yes. There are lots of holes in my brain, so yes. Then you're a Swiss cheese head. Yes, Swiss cheese head, yes.
00:02:56
Speaker
I thought it's like every region has a different type of cheese that goes with some specific thing, whatever, I guess, in France, maybe.
00:03:06
Speaker
In France for sure, yeah. Yes, yes. So for me, I like the hard cheeses from Switzerland more and the soft cheeses from France, but that's personal. Yeah. Okay. Not to offend anybody here. That's for sure. I think we should do that Monty Python cheese shop skip now.
00:03:26
Speaker
Any common bear? I don't care how fucking runny it is. It's runny. Oh, look at it. It's running away. The cat's just drank it.

Culinary Adventures and Swiss Projects

00:03:40
Speaker
Anyway, okay. So Swiss cheese, Tim said it, best cheese is in Switzerland and best croissants are in France. So I think now, because of your comment, I think Swiss can't be a neutral country anymore because they're going to fight now because of you, Tim.
00:03:55
Speaker
Yeah, I will start a new project in Switzerland next week. So I have to lay some groundwork here. Oh, that's the reason they paid you in cheese already. And you're like, pimp my cheese. That's part of the contract. We get it. What's the great food of Freiburg?
00:04:18
Speaker
Um, Freiburg is usually very meat heavy. There's, uh, um, the Langoroto that's a very long. Hold on, hold on. This is a vegetarian podcast. I'm vegetarian too. We're not allowed to discuss meat on a podcast. Oh, wow. Okay. No, go on. Oh, anyway, this is a, this is an all vegetarian podcast. This is pretty epic. And I'm talking about sausages. No. So, um, and on vegetarian specialties, you have, um, vegetarian Maltechle.
00:04:46
Speaker
It's like you make a pocket out of pasta dough and fill it with with a lot of stuff. And then you can either either cook it in water or you fry it in a pan.
00:04:56
Speaker
Oh, like a dumpling pierogi sort of way. Like a big ravioli. Ah, nice, nice. People from the area will argue if it's okay to say that it's a speciality also in Freiburg, because it is from another area in Germany too, and there's always fighting. It's like with the cheeses again, so I can't go around the hot topics today, can I?
00:05:20
Speaker
You're starting wars about food now. Wait, I mean, I was in Hamburg and then I think I was eating some dish that is like a filled with macaroni sort of pasta and then lots of cheese on it and then deep baked sort of thingy. They said it's another German speciality. Maybe it's a Bulgarian. There are also very popular in this area here. Oh, okay.
00:05:50
Speaker
Man, that's a heavy, heavy dish. Oh yeah, it is. That's why it usually gets served with a very small side salad to freshen it up. Two leaves and then 20 kilo of cheese. Usually that's the ratio, yes.
00:06:08
Speaker
oh that's from your area and is the is the the the dance with Liderhosen is in your area as well no no no no that's Bavaria that's far off there's mountains in between and that's a good thing okay
00:06:29
Speaker
I think that fills up our offense part of this podcast. Yes, I'm afraid so, yes. So, Tim, is it like an Alpine area as well, or is Alpine adjacent?
00:06:43
Speaker
No, no, we are on the foot of the black forest. So the whole imagery with cuckoo clocks and the big pine trees. No, no, it's not pine. It's lacking the English word for the tree. In German and someone can translate it for us.
00:07:01
Speaker
Yeah, it's the Tannen, so I'm not sure what the English word for that is. I have no idea. Okay, tree, I guess, moving on. Wooden trees. Yes. Is it pine? No, it's not pine. You said it's not pine. I'm not sure if I thought pine was a different kind of needles tree, but I'm not a tree expert. Some conifer of some type. Yes. Yes, that sounds about right. Sycamore.
00:07:27
Speaker
No, that's the same choice, isn't it? By the way, that backs me now. It's a fur. Oh, a fur tree. Yes. Oh, a fur. OK. That's what I keep. Every time I type F-O-R, and then my keyboard keeps correcting me for F-I-R, it keeps showing me that fucking emoji. OK, that's the thing. Now I get it.
00:07:53
Speaker
And the area is not Alpine, but we still I guess the last areas with snow are now closing ski for skiing. So yeah, in the winter, we can drive 30 minutes up to mountain to ski cross country usually for me. And yeah, we don't have that white slippery stuff here in the city. So
00:08:22
Speaker
Yeah, it's nice of you. Okay. Perfect. Yeah. Sounds like a really nice place. Yeah. Love it here very much. I think most of the closure people, they tend to live in really cool places, I think. Everybody we talk to, they're living in somewhere remote and most of us are doing remote work anyway. So I think you have a choice to live in a much, much nicer place than
00:08:51
Speaker
in the bigger cities and going into metro every day and that kind of shit. Well, I believe the biggest closure happened. Germany is Berlin. That's not bad remote, but yeah.

Clojure 1.11 Release: Insights and Upgrades

00:09:00
Speaker
Yeah. Well, I think that they'll get there. Yeah. All right. So I think we, uh, uh, well, we have five minutes left, so I think we should, uh, switch to, switch to some topic about, uh, about closure. But, uh, I think Ray,
00:09:19
Speaker
You said there was a couple of things. Talk about the latest term. Yeah, there's a couple of things. I don't know if this is going to be a regular thing, we'll see, but given the irregularity of the podcast, I'm not sure. I think it's regular, really. It's regular on the regular schedule. Yeah, if I can regularly think about it, but we were
00:09:42
Speaker
given the good news this week that closure 1.11 is out. Yeah. So I wondered, you know, what do you, what do you, what do you think about it? Is there a big fanfare or are you kind of like dying to try it or are you kind of like, Oh, wait, I thought this, this segment of the show is basically us reading through the whole, um, you know, a change log. No, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no, no
00:10:13
Speaker
whatever comes out of your head rather than like what we're not going to read this shit.
00:10:22
Speaker
I mean, for me, it feels like a kind of like, what was that? There was a version of OSX, which was just kind of quality of life improvements or like robustness or whatever it was, mountain line or something. Yeah. It feels, 111 feels a bit like that to me. It feels like they're just kind of like, they're putting a release out. That's fair enough. It's good to do, but you know.
00:10:44
Speaker
Yeah, much to shout about, I think, really. But yeah, maybe you guys have different views. So I have already upgraded all our productive code to
00:10:56
Speaker
111 just to get rid of the whole Java UUID interop code. I believe that's one of the smallest things in that release, but the random UUID, I just was eager to throw all that Java interop out because it just so annoys me that I had to write so much code for this. The funny thing is, as far as I know, that's been the first area where we've seen bugs. Really? Yes.
00:11:25
Speaker
I think the version 5 UUID between version 110 and 111 is somehow non-deterministic between the two versions. This is what I've read on the interwebs anyway, but could be wrong. I'm just saying, check your code. Yes, I should. Thank you.
00:11:47
Speaker
But isn't it using just the same Java random UID code in the background anyway, right? It's just like a utility function that we can do in Clojure now. Yes, it's just like we did it before. So it's just our utility function moved to core now. Yeah, exactly. That's what I mean. I mean, I understand everybody's super excited about this because I was reading about 1.11 and then the chatter on the interweb is like,
00:12:17
Speaker
Oh my God, there is a random unity function now. Yeah. And I can, I can do a small amount of like maths in, uh, in men, which is, you know, I mean, you know, it's, it's fine. You know, it's nice. It's, uh, but it doesn't exactly, you know, the aubergine isn't exactly popping up, you know? But that's the, that's the fun, fun part. Like, you know, now that means.
00:12:47
Speaker
We are excited about such a small thing. People are waiting for this stuff. Thank God, no, I can replace one line of Java with one line of closure. I'm so happy now. I mean, obviously people worked on it and it's good stuff, so I don't want to knock anything.
00:13:09
Speaker
Just does, just feel like a kind of, yeah, you know, it's fine. It's good. Going forward is nice, but, uh, I, yeah. I mean, it's not just like full version bump for adding random UID function. Three things, as far as I know, like random UUID, this keyword argument for multi, for our orgs thing. The alias namespaces.
00:13:35
Speaker
Uh, yeah. And then, yeah, yeah. Okay. And then as, uh, as, uh, as alias or something, something like that. Yeah. Uh, I need to open the change log. I think this has to be that thing, you know, and I'll read through the Jira tickets. I was just looking at the random UAD thing and it was opened in 2016. So I think we should be very happy. Oh, that's good. Yeah. Yeah. It only took six years. They're really getting me through the backlog here. Yes.
00:14:00
Speaker
So that means we wanted to tell me there was a patch for it in 2016 as well. No, no. So that wasn't really because it seems like there could have been.
00:14:19
Speaker
I still have to look at the new iteration function. It's something that it looks really useful and really nice, but I haven't really figured out a use case for it. I need to play around with that for a while, I believe. Yeah. Yeah. Well, you've got to get past reducers and transducers first, you know. Yeah. But I think, I mean, it's in the nature of the closure, right? I mean, we kind of settled after, I don't know, at some point one eight or something at some level.
00:14:49
Speaker
Like, okay, the language is pretty much done as in, I mean, there is absolutely zero changes to the language, right? I mean, these are utility functions. Maybe you can say the namespace thing is a bit, it's not language, it's still kind of a namespace macro change a little bit, sorry, required thing. But I don't think there is much needed because everything is happening in the community, in the libraries anyway, all the fun stuff.
00:15:18
Speaker
So I don't expect magical changes in the language, which is a good thing in my opinion. Yes, absolutely. You see that when you see that in Java, they remove stuff from Core now because they considered that there's too much stuff in there that should be in its own module or library. Yeah, exactly.
00:15:40
Speaker
Yeah, I think Scala went through the same kind of thing, because when they release, they have all the XML parsing, JSON parsing, all the shit into the standard thing. I think there is always this discussion in the languages. Maybe this is something interesting to hear your thoughts about, your thoughts as well, Tim. There is this batteries included versus airborne language.
00:16:03
Speaker
Yeah, because Python did the batteries included thing and they're also kind of doing like a, you know, removing some of the shit from the core anyway, you know, people are not using. I'm not, I'm not a big fan of batteries included. So I'm, I believe that closure does this really, really well. There's a ton of useful libraries and everything you include, you need to maintain. Yeah.
00:16:29
Speaker
And that's also a reason why Java removed a lot of stuff because they didn't want to maintain everything or they saw that maintaining that stuff is expensive. And I believe that also makes it much easier to be backwards compatible, which is the glowing example currently. And I'm completely fine with utility functions and just importing what I need when I need it.
00:16:59
Speaker
I think it's really good standard library as well. I mean, it's kind of like a mix of like batteries included. And, you know, it's like, there's a sort of small, like, one of these small metallic batteries included, you know, it's not like, it's not the full car battery included. Yeah, you know, there's a really nice standard library. So I think that's,
00:17:22
Speaker
That's one of closure's wins as well you know you can do a lot just out of the box but like you say pj the language itself is very stable yeah. I don't think there is much because if you see most of the work is happening in the in the library is even from the core team right there it's happening within within specs or.
00:17:42
Speaker
Um, depth, for example, depth, even, uh, all these things are, are, you know, much nicer.

Tim's Clojure Journey and Company Vision

00:17:48
Speaker
So Tim, you, you said that you moved to 11, like how, how, when did you start with closure and then how, how the journey has been? Um, I believe I started, um, to learn it, uh, as a hobby in 2013. Oh, okay. Um, but I had a really rough start, uh, into the language. So I, um, I got the books, I read the blogs, tutorials.
00:18:13
Speaker
Um, and it always, I really liked it, but I couldn't really get the use case out of it. So I wasn't really able to, um, to build really running software from that. Um, I'm not sure I've started with a web, web library, noir. Yes. And, uh, I got the grip of that and then it was kind of abandoned or not the status quo anymore. And, um,
00:18:42
Speaker
For me personally, it started to click when I started using Luminous. Before Closure, what were you using? Java. I'm writing in Java since 2008, I believe. And I still partially write Java for living, for customers, for clients.
00:19:05
Speaker
because the closer service market is not that big in Germany. Yeah. And coming from Java, it's here in Java, you have that framework set it up and you have a web server running and everything is batteries included. Yeah.
00:19:20
Speaker
And yeah, with Closure, I had that epiphany when I started with Luminous, because you told it what you wanted in to have it included. And then you have a running site with middlewares and routing and everything. And then it started to make sense for me from there on.
00:19:40
Speaker
Yeah, then more. Shout out to Yoctis, Dimitri, friend of the show. Yes, yes. Great framework. Our library collection and templating mechanism. I'm not sure if I should call it a framework. Yeah, yeah. I don't think it's a framework, right? Because on its own, you can pick the bits and pieces with the luminous, for what use case, which library you want to use, I guess.
00:20:05
Speaker
But he's doing a version two of it, isn't he? Or a new take on it. Kit, isn't it? Yes, Kit. So, which is even a smaller call, so. Yeah, so I should get him back to talk about Kit. Anyway, we should later. Anyway, Tim, back to you. Yes. And yeah, the interest got bigger when I started visiting the Closure Deconference in Berlin. Right.
00:20:34
Speaker
Shout out to Dr. Wandink for organizing that. And Sandra and Ingo, all the magical people who keep their closure fire burning from Berlin. I believe I have been there now, including the online version.
00:20:51
Speaker
four times. Oh, so we might have, we might have met in Berlin maybe. I'm not sure. It might be. We might meet again this year. I don't know. Yeah. But I'm a celebrity, you know, I meet a lot of people and people come to me and they're like, Hey, we need your autograph. And I'm like, sure. Why? I'm a dick to everybody. So yeah.
00:21:16
Speaker
And it peaked in the beginning of 2021, where I decided to leave my old job and found my own company. And we are writing our own stuff in Clojure. We're building a product right now with Clojure and ClojureScript. And when we founded that company, it was really not a question which language to use. So we now still have to learn.
00:21:46
Speaker
a lot of stuff. We didn't start building everything at the beginning of 21. Um, so the whole, um, yeah. Um, tell us a little about the company. I mean, you know, and the product and what you're doing. Yes. I can't tell too much about the product because, uh, we're yet to release our first, um, preview. Um,
00:22:13
Speaker
We're building it on React Native. So it's a shuttle CLJS app which gets cross-compiled to iOS to Android. And we have Luminous Stack in the back end with XTDB, also amazing piece of technology. Very good. And that's what we're currently building. Very small code base. And the company itself, we are only three people currently.
00:22:42
Speaker
And we are two, I'd say consultants we get in the money. And the third one is writing the product. So with support and clever remarks from the sideline from the other two, of course. The Maxi drivers. Yes. Yes. Two managers and one developer seriously working on the product. Yes. No. Yeah.
00:23:05
Speaker
Are you talking about tabs versus spaces yet? Oh no, we have touched cheese, we have touched food and Bavaria versus the rest of Germany. We won't go into- We did cats versus dogs. Yes, we have to draw a line somewhere.
00:23:20
Speaker
Well, I mean, let's get all the flame wars out of the way then. So E-Max or some other shit? Switched to cursive from E-Max six weeks ago. Well, so that's all the time we have for this. Thank you, Tim. It's been a pleasure talking to you. And, you know, this 15 minutes were because you had a dog and then now we're done. We don't have anything in common anymore.
00:23:48
Speaker
We have one VS Code user. Okay. And two cursive users. Yeah. We'll get there. You'll get there. Literally. You will see the light. I have faith in you. You poor, poor man.
00:24:07
Speaker
Now it's just gonna stalk you. It's like inviting a vampire in, you know? I never talked about any invitations yet. Anyway. No, but you said you don't use Emacs. I mean, that's essentially the same as inviting a vampire in, no. But you have to say it three times in front of a mirror, don't you?
00:24:29
Speaker
Not with these guys. You're not using it? Right. You know, it's like, there you go. Like I'm a vegan. I told you that now, you know. It's the same shit, like how do you know somebody's Emacs user, they will tell you, don't worry. But first thing,
00:24:51
Speaker
My entire personality is me being an Emacs user. That's the whole point. Have you heard the good news? There's an update of Emacs. It'll be amazing. We just say, OK, maybe after an hour or so, we finish the podcast, and then your bell rings, and then I'm like, have you heard the good word of the new Emacs? I am from St. Ignatius. I like RMS.
00:25:20
Speaker
I'm the Emacs witnesses. Anyway, moving on. But that's not the issue with the commands with your dog, right? You're not saying MX sit or something like that. Pretty much. Okay. I mean, he has his own list machine in his brain, which seems to run a different kind of byte code, what I'm telling him. So the translation is always weird in his brain. No side effects at all. No.
00:25:46
Speaker
He has dog lisp running in his brain. Anyway. Seems like it's from a year of your conversation or it's difficult to change it while it's working, you know. Yes, I don't have a ripple into his brain yet. We will get there.
00:26:02
Speaker
Anyway, back to the thing. So you're building a mobile app then, right? With React Native, I'm assuming. Can you tell us anything about the demand at all, Tim? It's for end users, not for companies, not for enterprise cloud. It's a B2C.
00:26:24
Speaker
And we try a new take on the whole meeting up and calendar organization. So there's a lot of great apps out there or great web apps. And we try to get a spin on that with a little bit more privacy.
00:26:43
Speaker
So not exposing your calendar to other people and they can just block you when they see, ah, he has 10 minutes free time here. We won't let that happen. We planned on releasing the first version in the first quarter, which won't happen. But we had now for around three months of development time for that.
00:27:08
Speaker
Pretty quick turnaround. Nevertheless, so you still have four more days, you know for the first quarter So, you know, yeah, but the one developer doing closures on vacation now Yeah, you let him have a holiday at the end of the quarter I mean that's really you know, that's yeah the new way of employing people to him. This is It's very liberating very little you see I don't know when the person comes back and they're like, you know what we're switching to max Then you know, you're gonna deliver software like
00:27:40
Speaker
Now I'll just say we will go to using Java again and then they will leave.

Challenges in Calendar App Development

00:27:46
Speaker
The first thing to me about calendaring and meetings and that kind of stuff is that, like you said, there's a lot of options out there in the market, but it seems like it's really an unsolved problem. There are so many different ways of doing it and attacking it.
00:28:02
Speaker
So I'm looking forward to seeing it. I mean, I'd very much like to be on your beta, you know, because I think, I think people have like in the closure world, at least they have a different way of looking at things. And if it's privacy focused and stuff like that, then I'm all in. So yeah. Yeah, seriously. And you know, these kinds of things to me, there are definitely an unsolved problem. I think, you know, it could be very interesting to see what you're, what you're doing, what your take is. But it's, it's a very,
00:28:31
Speaker
It's not complicated as such, but I think it's like email, right? Like everybody uses it in a different way. That is the challenge I see. I think it's worse than email because most people's calendars are messy and we live in a tech bubble. So the big bet will be if people maintain their digital calendar
00:28:53
Speaker
So this becomes useful. Yeah. Yeah. So, um, that's, that's a little bit of, of gambling on our part. We'll just have to try it out. Yeah. Um, I think I did try several things. And, um, since we're talking about color and stuff, so I use desktop, I use fantastical thingy and, um, I use this moleskin, moleskind, moleskin. How do you say that? The book company. Yes. Uh, I have no idea. Yeah. So the black, a black fancy paper book, aren't there?
00:29:23
Speaker
Yeah, yeah, but they have digital software now, like a time page, like it's a really cool calendaring app. But one of the biggest challenges for me is because I have so many other calendars, like all the four different domains and all that shit. So I bounce between them and I use something called clockwise. I think that is the only one, so far I'm like, oh, this is pretty cool because I can set things, I can add multiple calendars and then give access to one
00:29:52
Speaker
Set of people and they see I'm busy and none of the other calendars show up which is cool. Yeah, and they also have something like Automatically making sure that there is no overlapping shit or there is space between things and but yeah, it's it's as you said I mean for us who are supposed quote-unquote supposed to know how to work with computers Calendars are like, you know
00:30:17
Speaker
fucking sadomasochistic way of, you know, spending my time. But I can't imagine people who are less used to all this weird shit, like, you know, people using Gmail, sending them right to Outlook and then getting an ICS attachment and all that. It's pain, actually. Yeah, I think it's a very, I think it's a completely unsolved problem. Yeah. I mean, I think first of all, it's like there is a problem with, with partly because it's crappy.
00:30:44
Speaker
that people won't use it. Like you said, there's always like a bunch of friction involved, which is very hard to get rid of, I think, because it's down to the kind of email clients or the calendar clients.
00:30:56
Speaker
So there's some friction there, but there's also just this whole notion of using technology. One of the biggest problems I've got with this kind of stuff is just visibility. If it's in your form, you tend to see things day by day, hour by hour. It's very difficult to see a week by week or a month by month flow, whereas if you've got it on the wall, like a shared calendar, then it's very visible.
00:31:22
Speaker
but then it's difficult to share so you know it's kind of like you have this you have this uh dichotomy really you know unless you have like a calendar on your wall which is digital or you have like a screen maybe that's what you should do Tim you know it's like everyone forget that just get a 4k tv put it on the wall yeah that's why it's not gonna be the way that you buy yeah exactly there's only one app running which is just this gathering app
00:31:49
Speaker
A 70-inch e-ink display. Yes, exactly. You know, it's like one of those minimal phones now we have. What is it called? One phone or something? It's like an e-ink phone that just does phone stuff. That's pretty much it. I think they have a couple of other things. You can send the directions to that one. Sounds like we used to have that at some point in time. We did. I think, OK, now we know what product you're building. So you're going to sell e-ink
00:32:19
Speaker
4k wall calendar. I'm going to sell e-ink for the e-ink displays, yeah. Oh man, that's... I wouldn't buy shares in that. It's one of those apps that used to claim, you know, we're gonna make your RAM double or something. Just install it. Yeah, but I wouldn't buy NFTs for his e-ink.
00:32:48
Speaker
Oh man, I think we have a nice product then. Anyway, I'm pretty sure you're going to take all this and then push them down to the top of your backlog and then when the developer comes back. We're building hardware. No, we are selling E Ink. Your E Ink cartridge is out, you know. Anyway.
00:33:17
Speaker
So let's let's talk about, you know, because you picked closure and for the mobile development. How is the experience because there is always a gap between what Apple and I'm assuming Android is doing with the APIs and there is always like a newer I felt like all of these things when you use non quote unquote native or approved thing, you're always going one generation behind. Yeah. So how is how is that right now?
00:33:46
Speaker
How do you feel about that? That's the point that is holding us back most, to be honest. So just writing the front-end itself, that's really easy with all the libraries you have, you name it. The back-end also, that's just a REST service.
00:34:09
Speaker
mostly, even the authorization wasn't that hard. But what really eats the most time is how we have here a component for, I don't know, Auth0 or for login with Apple. And we integrate that now. And okay, how do we make it work, we need some interop, and then you have a lot of JS interop code. You need to figure out how to import all of that stuff. Yeah, how to configure it, and then you run it on iOS, and it works. But it
00:34:39
Speaker
my favorite bug. If you have login with Apple, it doesn't work in the iOS emulator, you can just test that on the device. That's an open bug for two years now. So we are used to that kind of stuff. Yes. And yeah, and then you need to test it on Android and hope that it works. Yeah, so the getting started the setting up of everything the whole shadow project to
00:35:04
Speaker
to get the first results. That was really, really easy. And the integration of all the React Native components, that's just currently the hard part. Yeah. Yeah. Despite everything legal or approvals for app stores. That's exactly. Yeah. Isn't there a big, uh, isn't there a big like library of calendar integration stuff for React Native? Oh, there is. There is. So, um, that also works. We have the calendar access running. Um, but, um,
00:35:34
Speaker
Yeah, most of the problems we had were with authorization against the devices. Because you have to configure it in your Apple account. You have to configure it in your Google Play Store account. You have to configure everything with Auth0, what we are using for unified authentication. Then you wire everything together and you hope that there is
00:36:01
Speaker
Yeah, that the component works in your setting. Yeah. So there's a lot of trying out and a lot of manual testing involved. And that's really, yeah. That's always been, has been my hesitation whenever I think about, well, I only do it for fun for only for iOS, by the way. So I'm not, I have zero knowledge of Android because when I started trying to learn a little bit, it's all like fucking XML shit. And then I, okay, I'm not going to do this. Probably it's not the case anymore. I mean, it's all cottling and whatever right now these days.
00:36:29
Speaker
But iOS, I always felt like, no, I cannot use the latest APIs. I cannot use the fancy ship that Apple announces at WWDC, for example. I have to wait for another generation to have the bindings or whatever. And that's a tricky part because I feel like I miss out on providing the best UX for a given platform, for a given platform. That's the context.
00:36:56
Speaker
Yeah, we will have to have a closer look afterwards. What were the issues? Would it maybe have been easier to write native apps? But on the other hand, we have a lot of CLJC files in the meanwhile with sharing codes between the front end and the back end.

Exploring XTDB and Clojure Transition

00:37:14
Speaker
And that's just a game changer if you come from, well, any other language. Yes.
00:37:21
Speaker
And so that's really helping us with having unified validations. We have a spec which is used by the app and the backend. So yeah, that would have been a lot of manual work if you did it otherwise. And also incredibly difficult to maintain sync as well. Yeah, exactly. Then you'll end up like having three different products building, because everything you're building and then that's like a nightmare.
00:37:47
Speaker
Yeah, especially if you're a small, smaller company. Yes. You know, you don't want to have a web interface pretty easily as well, can't you? Yes. Yeah. Yeah. You know, yeah. Super cool. One of the things about React Native, just quickly, is are you going, are you doing, what kind of, how do you integrate with JavaScript with React Native via shadow or via, yes, modules or how are you, how are you react, react hooks?
00:38:17
Speaker
So we were integrating with shadow CLJS. And there's a whole, there's a whole circus to it. I'm not, so my, my colleague on vacation would be the better conversation partner here. So we start with those with the NPX package to start everything on iOS. So we, we build everything with shadow. We make a watch on that.
00:38:40
Speaker
And then there's like NPX React Native run iOS to run it in the emulator on the app. So that's the dev setup. And yeah, for the, let's say final deployment currently, we just make a release build with shadow. And then we have an overly complicated fast line script. That's a Ruby tool that's only purpose is to build
00:39:10
Speaker
iOS apps or mobile apps. And yeah, then this thing does the magic and pushes everything to the app store. Right. Okay. And do you, I mean, I don't know if you will, you can't do it as far as I know with React Native yet, but do you have something for the wearables? No, not planned yet. No. I think that's got to be pure native, doesn't it? The watch at the moment. Yeah. I think so. Yes. Yeah.
00:39:38
Speaker
Well, I mean, you don't have anything. Well, I guess Android has some Android wearables as well. But I'm not sure if it is the same level as Apple Watch maturity. Yeah. I've seen some really bizarre Samsung adverts with some creepy guys on ski lifts with watches. Look at mine. Look at my watch. I'm a hot guy. I'll see you later with the Apple ski. It's like, fuck, you know. It's like some Me Too moments on the ski lift here. I wouldn't buy Android wear, that's for sure.
00:40:07
Speaker
They're paid. This advertisement is paid for by Apple. I'm Apple and I endorse this message. I'm Tim Apple. Tim Apple. This doesn't die. Anyway.
00:40:25
Speaker
But Tim, I mean, have you checked like other things, like compared to, because I know that, um, um, Chris off ground and, uh, his colleague as well, they're building like dart closure integration and we have the flutter and have you seen these things and how is, how is that, uh, well, have you considered it? Yeah.
00:40:46
Speaker
Um, we, or I'm having a very close look at that. Um, unfortunately, uh, I don't think it's stable yet, or they don't claim to be stable yet. It's still in development. I think as our tweet this week of somebody using it and everything working for the first time and them being surprised about it.
00:41:05
Speaker
Yeah. So I would really, really love to go out of that JS ecosystem. Yeah. I'm not very comfortable in there. I don't say it's bad if you don't get catch viruses via NPM. Yeah, but as soon as it's
00:41:26
Speaker
almost stable. I would love to use it and try it out. Yeah. Yeah. I think NPM, I think it's a running joke, I guess. I think recently somebody released an update to their library, like protesting against all the shit happening in Ukraine by Russia, I think. So the update was deleting all the files on the developer machine. Yeah.
00:41:49
Speaker
and they they updated an existing version in place right they didn't just release a new version exactly and that's just horrible that it's even possible yeah anyway um yeah they probably have right reasons uh well wrong reasons but right thing i guess i don't know a right right thing for wrong reasons seems like two wrongs there and the weird justification yeah
00:42:16
Speaker
But yeah, I think the Dart, well, Closure on Dart seems pretty interesting to me as well on the Dart VM. So I think that that is something that can be super useful too. If you're trying to use Flutter later, I think that that's going to be like a really promising path, right? Yeah, but I would say it's at least, I mean, my only guess, but it's between six months and a year away before you can start to build a company on it, you know. Yeah, that's true. I'm pretty sure that.
00:42:44
Speaker
Well, you know, we'll try and get Christoph and his mate in the next month or two, I think, to try and talk about it, because it would be really interesting to discover it. We'll throw darts at Dart. Oh, OK.
00:43:01
Speaker
That's that's I think I need to protect subtitle, please please laugh or whatever something like that like Applause So let's talk about the server side because you're using a pretty interesting stack out there right like the XD DB for this one for your project So how is that set up and and why did you pick XD DB?
00:43:23
Speaker
I'm not really sure if we need XDB to be sure. It's the standard developer excuse, like, oh, that's something cool that I want to use it. For our first app that runs internally, we use that as a playground to just mess around and try out some technology. We had a default PostgreSQL backend for storage.
00:43:51
Speaker
I'm really a big fan of SQL. So you can do amazing things with that. But it was a break in the media. So you have your closure data structures, and then you have to map that into a relational schema. And you can select that back pretty easily. But if you have nested data structures, and then you start with
00:44:15
Speaker
building your grouping algorithms to just get the dependencies back into one map. So everything that belongs together. And in the end, we wrote some lengthy SQL scripts. And we spent a lot of time on testing that, writing tests for that, and doing the whole conversion.
00:44:40
Speaker
And for our new use case, we realized that our data structures are more like documents. So we were free to use a documentish DB style. And there are a lot of good databases in the closure area that
00:44:59
Speaker
work like that or that works similarly. And we selected XTDB because it is currently, in our opinion, the most stable. So they have a big team behind that. You can buy maintenance if it gets more serious. And yeah, maybe we're
00:45:18
Speaker
bitemporality is a bonus that we're currently exploring, but... Seems like a great use case for something that's talking about time and calendars and things like that. Yes. Having time as a first-class citizen in a database seems like it might be useful.
00:45:36
Speaker
Yes. Currently, we're only storing documents in there, so we're not leveraging the whole feature set. The selection process was not scientific. We said, this looks great, let's use it. That sounds scientific to me. It's honest.
00:46:04
Speaker
you know, you can quit, you know, excels out of your kazoo, but, you know, comparison evaluation, it always comes down to, you know, what do you fancy, you know.
00:46:13
Speaker
I'm pretty sure there is an evaluation Excel and then there is just a weighted distribution, right? And then there is one thing that says, do you like it? Yes. The rest of it is like one. Does it bring you joy? Yeah. But I believe that's a very, very big point. Um, so honestly speaking, so that's why we're closure programmers at the end of the day, you know? Yes. Um, we could have built the whole thing with our experience in Java and, um,
00:46:40
Speaker
I believe we could have built it faster because we didn't have that hurdle in the beginning. But on the other hand, that's not really, that's not really fun. And if you choose a stack and you know, okay, it's an okay stack, it will work, but writing your software will be a chore, then I think that's a big part to let out for. Yeah, your motivation is going to be through the floor. Yeah. But how is there? Because you work almost for
00:47:09
Speaker
what like 15 years in more than almost 15 years in Java plus closure in total. So, and you started from Java and then moving to closure. And how did the, when you're designing applications, like because in Java use different kinds of architecture and everything and different kinds of approach. And so how did you feel the transition was, you know, to switching to closure type of application development?
00:47:35
Speaker
That definitely took a while. So I'm not really sure what the predominant architecture style in Java currently is.
00:47:44
Speaker
Spring Boot. Yeah, but that's a whole other rant I have because Spring Boot is not object oriented. It's just creating data objects and passing it around to services and modifying it. So that's not really OOP either. But that's a whole different topic. So I believe it's despite the Java objects being mutable, I wouldn't say it's really
00:48:12
Speaker
different, because you, you have an object, you pass it to services, which modify it, and then you pass it to other services. And this could be a functional architecture with a little tuning and tweaking. You're not using immutable, but you're passing kind of mutated shit around. Yes. Yeah. And that's for web application, that's not so different. The big mindset change for me was writing functions that just
00:48:42
Speaker
transform these data structures into new structures, creating new interim structures on the go. Of course, that's something you never do in Java because you would need to, I don't know, create 20 classes for one algorithm. And that took some getting used to, but now I have the problem the other way around. I have, I don't know, in Java, a stream and I pass an object in and I think, ah,
00:49:08
Speaker
Now you wouldn't need some interim data structure. You could maybe misuse a tuple or a map for that, but that's not really idiomatic. So that took me a while. So does that mean in closure? Well, in right now, so you stay at the maps being the domain level, or do you actually have like records and this more quote unquote typed stuff?
00:49:36
Speaker
We currently have maps on as the main domain object, or entity, if you want to name it that way. But we are constantly checking with spec. So we spec them down. So if you pass anything into a method and it is malformed, you get it, they push it in your face immediately. So your ship is running in the runtime. Yes. And that works.
00:50:04
Speaker
Really well this this open validation. Approach but from spec yeah because now you.
00:50:14
Speaker
The issue in Java is often that we have these classes now, and these classes mean this is our domain model, and it's very static. And you try to push it into every subdomain where it might be a little different, and then you start mapping. And with spec, you have just, well, you have a spec for a different domain or a different subdomain, and you pass your data structure in there, and maybe there's stuff in there that doesn't belong there, or that's slightly different. But the subset is important, and that is,
00:50:44
Speaker
Yeah, really, really helpful. So you started using spec from the beginning then. And did you try using some other things like Mali or? We had Mali for our first application.
00:50:59
Speaker
Um, and I don't think there was anything wrong with it, but, um, for, um, why did we choose back? I'm guessing it's the whole like CLJC thing with the reactnet. Yes. Yeah. Yeah. That.
00:51:18
Speaker
You can do it with CLJC, also with Mali. It's okay, we don't need to know. I'm not so sure anymore. Again, we don't have that scientific approach, apparently. Let's give this a try. Okay, that seems good. Moving on.
00:51:36
Speaker
Well, maybe you just didn't want to have another library or, you know, well, spec is another library. Yeah. It's one of the batteries included, isn't it? Yeah. Anyway, so spec is giving you the domain validations and everything, right? And so you're running it at runtime as well, or only like just testing or reuse generative testing and all that thing that comes with spec as well.
00:52:06
Speaker
We're running it at runtime on the edge. So the REST service is using spec. We're using Reoted. You can just wire spec into that to check everything. And currently we're testing anything that comes in, but also we're specing everything that comes out. So if the REST service tries and sends something which is not according to spec, we just throw a server error. So we really see that because
00:52:35
Speaker
I believe that's the most dangerous thing about dynamic data structures, if you just aggregate them from your data. And if you don't validate that, you send a field out that you shouldn't send out. Yeah. So had that in a project some years ago, the front end team
00:52:51
Speaker
Um, did a small mistake and the Jason that was sent to the front end for the bank user contained his internal rating data and blacklist status. And, uh, it was a high defect and we don't, uh, we don't really want to have that. So, uh, yeah, we spec everything going in and everything going out.
00:53:08
Speaker
But I don't think it's, well, it can be potentially stopped using really, really heavily typed objects in other languages. But there is never a guarantee, right? I mean, there is always going to be some weird feel somewhere, somebody introduces it, and then there is going to be anywhere in color. Especially because most of the times you're on marshaling from JSON, so you're kind of like, you know,
00:53:38
Speaker
It's always going to be a runtime-like thing, isn't it? Because you're going to get a blob of data from somewhere, and it's either going to conform or it isn't. Yeah. Yeah. We're using transit, but it's still the same problem. Yeah. Yeah. Once it gets into non-on-the-wire, then pretty much all bets are off. Yeah. So it's like back in the core bird days. We can serialize the whole behavior.
00:54:05
Speaker
Anyway, so let's talk a bit about your consulting side because now you're also looking at different types of closure projects in the wild, right?
00:54:20
Speaker
Yeah, unfortunately, the consulting part is mostly Java currently. Because that's, yeah, for me and my other consulting colleague, we have around 10, 12, 13 years of experience in Java each. And so that's what we can safely sell currently.
00:54:42
Speaker
If the product works, then we would consider just cutting the consulting part of the company altogether. Currently, it's the means to build the product because we decided to bootstrap, so we're financing everything with the money we make through consulting. Currently, it works, so we'll have to see how long.
00:55:10
Speaker
There are some contracting positions for closure available, but it's usually closure script in front-end. And that's not my strongest suit, so I'm not comfortable for wanting money to do that work, because I'm better on the back-end. So let's maybe a bit deep dive into closure.
00:55:36
Speaker
We talked about the design and so if I understand you correctly when you like this functional approach of doing things in closure.

Clojure Coding Practices and Tools

00:55:45
Speaker
So what is it that
00:55:48
Speaker
makes you super happy about closure and what is pissing you off about closure right now. So the thing that makes me super happy is working in the repl. I'm not the person who can concentrate for hours and hours. So if you ask me to play chess, that would be complete hell for me. I'd be too super quick. Chess game can finish in three moves.
00:56:15
Speaker
And so the REPL and the whole working with the REPL is by far the best part for me because I can just create my function. I can play with it. I can reason about it in a very focused state of mind. I don't have to leave to go through the unit tests. I don't have to do something else. So that's the most fun part for me. Actually, last week I was at a Java conference with a Closure Talk.
00:56:44
Speaker
And I just showed the Java people how the REPL works and how we can create the database function that accesses the database. And you just test it in the REPL. You don't have to write a unit test. You don't have to create a REST service to test it. And yeah, some jaws dropped there and completely correctly. So that's the one superpower that I'm most happy to work with. What pisses me off? Is it a long list?
00:57:14
Speaker
No, no, it's really not when you're not when you're not working with the repl. Maybe it's because I have still far more experience with Java, but I believe reading closure code that somebody else wrote is harder. Yeah. So if you're
00:57:33
Speaker
If you're in the repl and you're reasoning about that, you combine those functions and it all makes sense. You start from the inner part of the function and then you add the other functions and you transform the results. If you have to read that, I believe it's a little harder to get into. If I mean documenting these pipelines is a little bit underdone, so you kind of have to work it out from first principles.
00:57:56
Speaker
Yeah. Or you don't really know what this interim data structure that the one function produces is. And so, um, that makes it sometimes a little harder to reason about for me personally. Yeah. I think it's, it's something that, that bugs me as well, especially, um, even the code that I wrote like half an hour ago, wait, what, I mean, this is the third function that I'm calling in this fucking map and I'm okay, what I'm doing, which key and what exactly am I trying to transform here? And.
00:58:24
Speaker
And then I think there is this kind of a trap that I fall into. I write it, and then, oh, I can replace this with a single reduce. OK, reduce. And then I finish, and then I'm so happy, like, fucking one line. It is amazing. I don't need to worry about it.
00:58:44
Speaker
And then after after writing a day of code and there's like five levels of reduced getting called, wait, what the fuck is happening? This might be like an accordion or something, you know, it's like you're kind of coming in and out. Yeah, exactly. That's the that's the that is the that is the most difficult part that I feel when I switch between a bit more
00:59:07
Speaker
statically type check and then closure every time. Because I have to have the REPL handy and then push some data at every level to see the output and then say, oh, this is what I'm doing here. But yeah, I guess this is a necessary evil, I would say. Yeah. There's still comments. Sure. That's not how I write code, so. Your code is documenting itself.
00:59:37
Speaker
Yeah, because you think I know what I'm doing to comment. I don't. So my only comment is like, I have no fucking clue why this is working, but it is working. Moving on. Anyway, I always think as well that like when you pick up someone else's code.
00:59:56
Speaker
What's interesting about the closure way, in my opinion, is that you pick up someone else's code and you start it up in the repl and you start playing with it. And that's, that's how you learn it. It's difficult to do it just through, and I think it's kind of like crappy just to do it through reading. So, you know, um, I think our expectations of other languages are that we kind of read it and play a computer in our head, but with closure, we don't have to do that anymore. We can just, you know, start it up and start playing with the functions.
01:00:25
Speaker
You know, and you can kind of also, if you can't do that, then you kind of get a bad feeling that it's not, it's not kind of designed properly. It's not good closure. If you know what I mean, if it's not rebel friendly, if it's not rebel oriented, then what's going on here? You know, why we got all this shit going on? Why can't I play with it in a rebel and see what's going on very easily. And also helps if there's a complicated or more complicated function. If you just drop a rich comment with a
01:00:51
Speaker
Yeah. Basic usage below. Exactly. Awesome unit test or whatever. But I think also, I think one of the things I've, it's underplayed a little bit because it's not, I don't know if it's like really out there yet so much amongst every Closure user, but is these things like tap? Because, you know, you can,
01:01:15
Speaker
really get a nice leverage from that, you know, putting it inside of the pipelines as well to see what's occurring in the middle of these data structures. And you can get, you know, a very nice visual view of these things with all the kind of toolkits that are out there now, the browser-based ones and the JavaFX-based ones.
01:01:36
Speaker
And the names are escaping me, which is why I'm saying the technology. We've had both of these people on the show as well.
01:01:46
Speaker
No, there is Portal and Revel. Revel. Reveal. Yeah. Yeah. Reveal, sorry. Reveal and the Portal. Yeah. The thing where Chris and... Sorry, man. I forgot your names. Don't mention anyone's name, you know. Don't mention the technologies. Don't mention the name. Let everyone work it out from first principles.
01:02:09
Speaker
Google for it. But I haven't seen enough maybe because, you know, I'm not that active on the social as they say, you know, like the top on these things, because I still see people just using the regular rebel way of things. And because there was a big announcement about rebel. I haven't seen much traction behind that either. For me, it feels like, you know, the big announcement of rebel then.
01:02:37
Speaker
I mean, like the data, you can add the, what is it called? Like the data, attach some additional metadata to the, to the thing. And then you can explore everything using the nav stuff. Yeah. Yeah, exactly. The nav thing. Yeah. Data navigation. So, but I haven't seen enough. Yeah. Identify. Yes, exactly. I mean, I haven't seen these things getting picked up that easily in the closure community for some reason.
01:03:05
Speaker
Maybe it's because, you know, we, we have a way, you get used to one way and then it's very productive for you. And then it's, it's hard to break, you know, that, that pipeline. Like I know there is depth, but all my projects are lining in. I can't, I can't switch, you know, I'm like, okay. Why? You mentioned that though, actually Vijay and I think movies, I don't know, it could be something good for Tim because like calendar entries seem like a kind of.
01:03:31
Speaker
With that if I enough could become some interesting thing. So do you mean he's just gonna ship an apple to everybody? Navigate in the hierarchy, you know Yeah, yeah But yeah, that's what my thinking is. I don't know. I mean if you do you adopt like there is depth so I'm gonna switch to that one or Are you still more like?
01:03:58
Speaker
I know aligning in very well. I'm going to switch to that thing, not I know depth very well or something like that. That's something really fresh. We're using aligning for everything because we're still building on luminous. But this week, last week, I wrote my first library with depth. It's a test containers plugin for kocha. Yeah, yeah.
01:04:26
Speaker
And I just wanted to try it out because I have the feeling that the whole ecosystem is moving there. And so it became painful enough for me not to know this stuff, to tell myself now I will try it. But it took some steps.
01:04:47
Speaker
First, I regretted it because I wanted to publish the library to Clojars. And with Lightning, that's just line deploy Clojars, and it does everything. And with depth, you need to read into everything. You are, okay, what plugin do I need? Are there steps? Oh, no, it's deprecated. And that was a lot to learn, but... But that is the thing that I mean. Like, Lightning has been one of these super mature
01:05:17
Speaker
thing that has been there since the dawn of closure, or maybe like two days after closure, on the second day or the third day. And, you know, DEPS is something that Core Team is throwing their weight behind. So I think it's, I see even more and more people adapting DEPS, I think. But I'm not there yet. Maybe one day I feel like you like, I'm going to switch to this.
01:05:40
Speaker
And then they say, like, an anger. It reminds me a little bit. Hope I'm not talking too much Java here. So in Java, there's the Maven and the Gradle people. And Gradle is also, you can write code to define your pipelines. And if you just have your project by declaration, it just works. And you know how to do it. And if you want to have the special cases, then you're in trouble.
01:06:06
Speaker
And with everything as code, build tools. Yeah, you need to have your code. You need to know where to find it or where to find your plugins. And so it's a little harder to set up in my opinion, but yeah, as I said, I just started it and worked pretty well for me. I think that's a good comparison, I would say, because I was also heavily invested in Maven 1, writing Java, including writing Maven plugins myself.
01:06:35
Speaker
And then every time I open a Gradle project, it's a different beast because there is no declarative, there is no common ground for, you know, there are some default build properties, of course, but rest of it like custom code. That means I need to switch my brain to, oh, this is also code. So I need to treat it like that instead of declarative shit that you have in Maven.
01:06:58
Speaker
Anyway, so why not? Why didn't you get into Closure Script?

Backend Development and Language Exploration

01:07:05
Speaker
Why I didn't like him? Why? Why not? Why I didn't get into Closure Script? Yes. Not as much as I'm telling you. If you can't answer this right now, we kick off the show.
01:07:19
Speaker
As I said, I'm I have a lot of experience in the back end. So I'm I have a lot of experience in paralyzing back and performance tuning Data storage persistence. That's my strong suit. Yeah, and I'm also working on our product in the in the front end So I also do closer script there but the whole front-end concept is yeah, not where my main experience is laying so currently our
01:07:44
Speaker
chief developer for the application. He's doing a lot of front-end. I'm doing the back-end mostly currently, because he's also used to writing front-end. He's a former Elixir guy. And so that's where we naturally divided the work currently. Is Elixir a front-end too? I thought it was a back-end too. Maybe you mean Phoenix, like Elixir, the whole shebang maybe.
01:08:13
Speaker
Um, let me, do you mean Elm? Ah, yes. Thank you. Ah, right. Okay. Yeah. You see front end is not my strongest. We get it now. Yeah. I think Alex here is just Ruby on, uh, on beam. Oh, okay. On beam VM. Yeah. Well, I probably insulted the entire community, but I'm guessing the people are listening to this stuff anyway.
01:08:41
Speaker
We still need to get the closure, um, uh, beam, uh, closure, closure, Atlanta person on the board. There is a closure OTP, isn't it? Yeah, that's called closure closure. Yeah. Anyway. Um, so do you dabble in other languages than, than Java and closure?
01:09:05
Speaker
Sometimes, so my wife is a statistician, so I dabbled in R. The pirates language. Yes, that's the worst language to Google. And when I quit my former job, my team gifted me a bottle of whiskey and a Haskell book.
01:09:26
Speaker
Oh, which go along. So, um, I started to learn a little Haskell, um, really liked the language, but now that I'm used to a list, uh, everything else is to verbose. Um, but on that conference where it was last week, there was a brilliant talk, um, on Frigga that's a Haskell for the JDM. Yeah. And, um,
01:09:52
Speaker
He did some amazing stuff with that. So he wrote a type system that could realize if you are in a Java effects threat and prevent you from evoking side effects there. And that's just completely insane. So I don't have a use case for that. I would like to have one. Actually, the fun thing, fun story of the side story is that, you know, I was just telling you I was in Basel. I went there for the free good day. And I was with Dirk.
01:10:21
Speaker
Kooning, I think. They're Kooning? Yeah. And Ingo, the guy who created Frigga.
01:10:29
Speaker
So we spent like a day, it was like four people back in the day. And Frigga is super interesting. I don't want to call it weird because the compiler actually produces Java code, not byte code. I'm not sure if it's still the case, but it's like literally writing Java from Haskell. And it's so super, super cool. And we also had a call with SPJ, Simon Putin Jones, and discussing all this stuff and Ingo and those people.
01:10:59
Speaker
I was just sitting there and everything is just flying above my head. I'm just basking in this glory of these super smart people and just blinding my eyes. But it's a super cool, interesting language, by the way. Because I always think that, in general, my principle is that I should have one language in every type of thinking.
01:11:28
Speaker
Like, you know, in terms of prototypical languages, you have IO, uh, language, and then you have JavaScript, which is kind of a monster. And then you have, um, you know, dynamic shared like Python and closure, and then you have the static things and static things I used to learn, uh, like you still keep learning Haskell every year. And then Frigo was one of the things because, you know, you're, when you're close to JVM, you want something that runs on JVM. So Frigo was one of the interesting things.
01:11:54
Speaker
I think Sean Corfield also contributed some to VIGA in the beginning. I remember having some PRs and I tried to do some string related stuff as well. But yeah, it's an interesting language.
01:12:11
Speaker
You need to have all the ecosystem. Anyway, what about the lower level languages? Did you come straight into Java or did you have a look at like C or assembly or anything like move up to sort of things? You're joking. No. Um, so it started with basic in school, right? Uh, started with Q basic. Yep.
01:12:32
Speaker
Um, wrote some stuff in that. Um, then the next step was Delphi. Right. Which is
01:12:42
Speaker
when you have programmed after that for 15 years, it's just completely weird. You drop functionality to the UI to edit to the application, that's just wild. Then I started after school my apprenticeship in Java, but the first half year the shop I was at used Cobol and ILE RPG. And I didn't know better, I thought, hey, okay, maybe.
01:13:11
Speaker
It pays. It won't be so bad. And after six months, they decided to move everything over to Java. And that was a very lucky day for me. And yeah, that's set me on the right path. Two bullets dodge there. Yeah. And for, for the low level languages, I never really had, had the neck for them. I sometimes jokingly said to friends that the further I'm away from the hardware, the happier I am with the language.
01:13:40
Speaker
I looked into Go, but it wasn't really love at first sight, so I stopped it again. But don't really know the reason, so. I mean, you need to have the production use case for it as well, to stick something. Otherwise, it's going to be like my experimentation with Freeger and Haskell. You keep doing, every time I finish the first two chapters, oh, I can run, hello world, moving on. And then you go back to your own stuff and then continue with that crap.
01:14:09
Speaker
Yeah, I think with, with these other languages, you need to be doing, especially these days, you need to be doing something on around like embedded systems or something like that, or very, very high performance technology, you know, games or something like that. You know, where, where every, you know, every millisecond counts and then, then it makes, it makes some sense. But, you know, even for a lot of these domains, you can get away with high level languages. Yeah. Hmm. That's true.
01:14:39
Speaker
Anyway, just a couple of more questions. What does Java Hippie mean? Is it like you are still hip about Java or you moved away from it? Why are you not close to Hippie? I chose that nickname out of spite.
01:14:56
Speaker
because I was in a big banking project and there was a brilliant database developer. So it was an Oracle, so everything very corporate. That guy had a PhD in math and he was just completely brilliant. He told me that for one client, he used relational algebra to prove them that their use case could not be solved with a database or a relational database. So this level.
01:15:21
Speaker
And he was completely bored because the project was just trivial, crud, banking stuff. And so he started playing with the database and tried to push more logic into the database. But he was the only one who could do that because he was the brilliant PhD SQL guy. And the other people were just Java developers. So obviously we pushed to keep most logic in Java. And that upset him. And at some point he just
01:15:50
Speaker
In a meeting jumped up and said I'm so sick of all your damn Java hippies and runs out of the room and I thought hey That's a great name. I keep that So you're still a Java hippie but doing more closure hippie now
01:16:04
Speaker
Yeah, about changing her name is very difficult. That reminds me, actually, when I worked with some men frame people, they always used to talk about like Unix and Java as a freak show. Yeah. What the hell? To my face, you know. They're the ones to talk.
01:16:27
Speaker
Now we are up to 15 years. I still remember how Java was like super cool and awesome when I was doing C++ shit and then first AWS came out and like magical, this is going to be the same shit. And I used to see the screenshots on every operating system, the same AWS shit, which looks like shit.
01:16:46
Speaker
on every operating system, which is amazing. It looks like crap. And then there is all these look and feel classes that I had to build in later years. Anyway. What do you think about all of this more rapid iteration of the Java versions these days, Tim? Because it feels to me a bit like they've caught their mojo a little bit again, especially on some of the projects. They look quite interesting, Project Panama.
01:17:15
Speaker
Project Loom will be the big game changer on GTA VM. So virtual threats, not having Java threats bound to operating threat, system threat. This killed the whole reactive Java community. We had just had a discussion that on all the conferences, the reactive talks have just disappeared or mostly disappeared because with Loom, there won't be any need for reactive anymore or for most reactive use cases.
01:17:45
Speaker
I think you put it right. They have caught the mojo again. Um, the decision to release preview features with the JVM, you can enable with the JVM flat was brilliant because they can collect user feedbacks. Um, Brian guts is amazing in talking about the rationale for the new features. He's doing an amazing job. Um, for my taste, they're a little too eager currently with throwing out things from core because the downward compatibility promise they have just broke.
01:18:14
Speaker
So migrating from Java 8 to a later version is in some areas it's pain. I had to migrate some older Java EE stuff from Java 8 to 11 and it was just really painful because yeah, that breaking changes. So that promise got broken a little bit. But otherwise I think they're doing a really good job lately. Yeah.
01:18:40
Speaker
And also that the release cycle and the way that they're churning on the things, I think things are getting at least slightly more interesting. But my thought there is that they're more competitive. These kind of things are more competing against languages like Scala rather than Closure because there is whole
01:19:00
Speaker
You know, there is less incentive to use Scala or Kotlin. If Java keeps up all these value classes and properties and all this shit comes out and things become much more, all the nice things that other languages used to have. And they're also part of the Java now. But I think the biggest thing for me is like.
01:19:20
Speaker
Or I think what they're doing eventually is improving the, like they're improving the infrastructure at the JVM. And I think these are the things which really matter to, you know, hosted languages. Because I don't think that Java really cares about Scala and Clojure and stuff like that. I think they care about, well, where can, where are we not deployed? Where are other languages, you know, like, or Rust or whatever, where are they winning?
01:19:45
Speaker
And where is Java losing, you know, so ML and stuff like this, you know, Java suddenly can't, you know, Python is beating Java in ML and that, you know, they can't take that. If they're going to keep relevant, if they're going to stay like, like a language that is applicable in a lot of very important domains, then especially in ML, I think they've got to get better at. Yeah. Currently they're focusing on, on functional features. So they, they're getting better matching.
01:20:12
Speaker
they have with their records, they're working on the immutable data types. So everything comes together that you have, at least the building blocks to do some functional ish programming. Yeah. Yeah, yeah. It's true.
01:20:28
Speaker
Anyway, wow. They're almost 90 minutes. Is there any other project that you want to highlight, Tim? Something that you open sourced or something that you're interested in or you're contributing or you want to contribute? Yeah, sure. I'm currently maintaining a closure library which wraps the Java test containers library.

Integration Testing with Docker and DHALL

01:20:55
Speaker
Yeah. Talked about it earlier. So it enables you to specify that before I run my tests, I want to start a Postgres database in Docker. Yeah. I want to connect to it, run my integration tests against that and then throw it away. So the Java library made a big splash in the Java ecosystem the last years. The founders even built their own company now.
01:21:19
Speaker
who wants to offer test containers as a cloud. So then you mean like Docker containers? Yes, yes, yes. Yeah, yeah. So that you don't need Docker on your machine, but you just run your integration tests against container images in the cloud. Okay. I was lucky enough to test that already because I have an early access because of that rep library, and it works amazingly well. Okay. So it's like a CI tool, is it?
01:21:46
Speaker
Um, no, it's meant you can run it on CI and we do, but it's also, you can also run it on your machine. So you can just define as a part of your unit tests. Yeah. And if you want to run integration tests, you don't need the database, the broker, the message queue, or the HTTP endpoint on your machine. You can just, um, pack that into a Docker container and, uh, just say in the test that it should start before the tests and be torn down afterwards.
01:22:15
Speaker
It's like fixtures, like Docker fixtures, essentially. Yes. So they hide the whole Docker API away from you, which is a very good thing. Very good. They also have a daemon running, which checks if the JVM that started the Docker container is not there anymore. And then it just kills everything. So you don't just collect Docker containers while you go. Right. And yeah, there are some really good ideas in there.
01:22:44
Speaker
really cuts down on all the administrative part of running integration tests. And if you set it up right, you can just check out code, run line test. And it works if you have Docker installed. That's a very nice thing.
01:23:03
Speaker
Okay. Yeah. Cause I mean, you know, I'm sort of a bit of an unfan of docket at some extent, but if you can, if you can get rid of the, uh, the, the bullshit around all of the, the, you know, this, this whole composition, this docket complies stuff. And yeah.
01:23:21
Speaker
They've, you know, in recent years, they've changed all the languages and how they're doing things. And it's all very tedious, you know, especially as, you know, in the sort of the period where they were migrating from one kind of model to another. Yeah. Yeah. So if you can get rid of that for us, then that's excellent for me. Because I kind of like, ah, why are they doing all this horrible? I mean, I get why they're improving things, but why are they making me suffer?
01:23:49
Speaker
And why do they still stick with YAML? I don't think that there is any reasonable configuration language. The only thing that I could find was the D-HAL. That's by one of the persons in Haskell community. It's an
01:24:12
Speaker
non-turing complete configuration language, which is pretty cool, actually. I always think of YAML as a bit like SQL, actually, in the sense that you see the advertising for YAML and it seems pretty straightforward, you know? Yeah. And you see like select star from employee and it seems, yeah, that's okay. I get it. That's nice. Then you do some real work. It's like, oh, fuck.
01:24:33
Speaker
You know, this isn't so nice anymore. But I believe SQL is more predictable. I don't know if you know that story that if you use country ISO codes in YAML, you shouldn't be in Norway because NO is cast to a false Boolean.
01:24:58
Speaker
I mean, YAML hates Norway, so more than normal. YAML is like the JavaScript of configuration, is it? But I think DHL is pretty dull, I think. I don't know how to pronounce it. D-H-A-L-L. Yeah, which is an interesting take. But it looks a bit haskelly. Anyway, but that's a rant for some other day.
01:25:28
Speaker
Um, cool. I think, um, oh, sorry. Uh, so this is the CLJ test containers project, right? Yeah. Nice. That sounds really good. Yeah. Yeah. Any, any other things that, uh, that you want to mention?
01:25:43
Speaker
Not so sure right now. I would give a shout out to ClosureDee, but it doesn't need one, especially in the front from me. No, I think I think we should. We should. I mean, we'll be there. I'm sure you'll be there. ClosureDee is an amazing, amazing thing. And as ex-conference organizer, I can imagine all the hard work needed to run a conference. So I think we'll be there. So I hope that that doesn't distract people from coming there.
01:26:12
Speaker
Or maybe, you know, that will invite more people to show up and then punches in the face because we insulted your cat. That is also a nice thing. Cat slash cheese. Cat, cheese. Yeah. All of the street editors that you're using, you know, come and pick a fight, bro. We'll be outside the, we'll be in the parking and I'll be fighting. We'll be in the vegetarian meal queue.

Community Engagement and Conferences

01:26:40
Speaker
So yeah, so I think a ClosureDee is in June? June 11th. So we'll be there, hopefully. Well, you never know given the world that we live in, but there is a high probability that we're going to be there. And Tim, you'll be there as well, right? Sure. Awesome.
01:27:00
Speaker
Also happy to be sponsoring the conference with my company for the first time. That's worth it. That is something that I think Closure Community is doing really well with CLGI together and Closure sponsorships and supporting all these amazing people putting out all the open source work.
01:27:22
Speaker
which is basically everybody's using, all the way from Lightning into CLJ condo and all the stuff that we are churning out. So a big shout out to the people and also companies like you, Tim, which is super awesome. It's always been a pleasure for me to contact people for sponsorships. It's always like a positive experience when I was doing that.
01:27:45
Speaker
Cool. So we'll see your company logo everywhere in Closure D as well. How do you pronounce the company, Tim? It's like Lambda Schmieder? Yeah, Lambda Schmieder. It's basically the Schmieder is where you process the hot metal into something else. Like a foundry. Yes. A little bit unfortunate because I found out after founding the company that there's also a company that's called Lambda Forge.
01:28:14
Speaker
Oh, yeah, yeah, which is building data hike. So I'm not sure how this slipped by me. And they're not so far away. I believe it's an hour and 90 minutes per car. So that might be awkward. If you're listening, I'm really sorry. That was not intentional. Well, you can say Lambda Schmure is a Deutsch. Yes. The Lambda Industrial Revolution. Yes. Awesome. Yeah, well, I look forward to seeing you at the conference then Tim. Yeah, me too.
01:28:43
Speaker
talk more about dogs and about the calendars and how it's all working out. I know we you know, we regularly chat on the closure Europe as well. Shout out to everyone on on hashtag closure closure Europe on the slacks. It was a very nice chilled out channel. I'm mostly a reader there. I see lots of nice discussions around they're like very friendly,
01:29:10
Speaker
folks talking about it. So I didn't want to jump in and then make everything bad for everybody. Just say good morning. That's all you ever do. Are you saying this is a good morning or is it a morning to be good on? Anyway, yeah, just just one more one more thing. I think that the cologne. Sorry.
01:29:33
Speaker
That the name is fucking weird, man. You know, Daniel and I think we did a long riff on Daniel's last name, so I don't think we should. Yeah, Higginbotham. So we should probably not make any more jokes about the names that these guys are picking.
01:29:51
Speaker
It could have been slightly better name, but awesome, awesome initiative though. I think it should be like, you know, they should have a logo of a clown because it's called the clown cell, you know? I mean, you know, it's a funny name, but we're joking about it with love though, guys, you know, friends, all friends of the show. Yes. I don't know. And everybody who is participating in this. Jordan. Yeah, exactly. So, uh, we love you all, but your name sucks anyway. Yeah.
01:30:22
Speaker
I mean, that that proves naming is one of the hardest things to do. So we bow to you for picking the.
01:30:30
Speaker
fancy thing, but I think it's a clownsill.org. It's a unique name. You can Google it pretty easily. It's got a lot of Google juice, I'm sure. Yes. Because I think Closure has always been, we've been complaining about beginner experience and this is a nice way of letting people in and getting there.
01:30:57
Speaker
Maybe it's a much more beginner friendly name. No, let's, let's count it out and have fun. Yeah. Yeah. It's true. Yeah. Maybe that, that makes sense. So anyway, so yeah, do join that one. Um, yeah, thanks. Thanks a lot, Tim, for, for joining us from a framework and, uh, good luck with the, with the, the, the challenge that you have taken up, uh, to, to solve, uh, world's, uh, calendaring problems. Uh, super. Yeah. I mean, it is, it is a.
01:31:27
Speaker
no fucking difficult thing as far as I know with my limited knowledge so not to dishearten you but you know yeah yeah yeah it's a possible problem to solve but shoot for the moon right yes exactly look forward to lambda schmider coin yes airdrop soon yes
01:31:54
Speaker
First you need to build your own chat client. Anyway, it's amazing to talk to you. And then it's lovely to talk to your journey from Java to Closure. And then you're using that to build a company and also sponsoring ClosureD, giving back to community. This is really, really appreciated, I think. And I'd love to see you.
01:32:23
Speaker
at Close Your Day and ignore you because of my celebrity charm. Sorry, who are you again? Don't get parasocial on me, mate.
01:32:36
Speaker
Yeah, so we should we should hang out and then have some nice, you know, Mila to close your D and then walk around Berlin and talk about all the I think by the time you'll be releasing a product, I'm guessing so I hope so. Yeah, super, super nice to have it. And we can make an appointment on the product. I think yes. Yes. Yes. Invitation. Everyone at closure D, you want to organize shit?
01:32:57
Speaker
I want this product. Yes. And if it doesn't work, I will pull the company logo from all the sponsors. I think, but yeah, it could be like a really good, like get organized with this thing. Yeah. I think if it doesn't work, you just give like, Oh, this is the end ripple socket. Go and fix it yourself. If it doesn't work, they're obviously holding it wrong. I think that's exactly. It's just a mindset. Yeah. Cool. And that happy note. Um,
01:33:27
Speaker
Thanks a lot for joining, and good luck with the dog. Maybe I'm going to bring my dog to Berlin, so maybe we'll have a dog reunion there. I will stay here. Too much excitement. Cool. And that's it from us. See you again in the next episode. It is going to be 873 episode. Bye. Bye. Bye.
01:33:55
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 Dallert. I'm pretty sure I butchered his name. Maybe you should insert your own name here Dallert. 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.
01:34:22
Speaker
And you can also catch up with either Ray with me for some unexplainable reason you won't interact with us, then do check us out on Slack, Closureion Slack or Closureverse or on Zulip or just at us at Deafened Podcast on Twitter. Enjoy your day and see you in the next episode.
01:35:21
Speaker
Yeah, dogs are closure and cats are closure script. I think that probably seems to work quite well.