Read the full show notes and download the full episode here
Michaela Light 0:02
Welcome back to the show. I'm here with Zach Spitzer from the Lucy Association Switzerland along with some other organizations that I'll tell you about later. And we're going to be talking about some exciting breaking news about Lucy six. All the features in that and when you can get your hands on it. And a bit about behind the scenes on what happens in Lucy and how you can best get support from the Lucy folks. Welcome Zach Debian. So if you don't know, Zach, he's quite quite out there in all the forums, you know, the slack forum on the Facebook ColdFusion channel. Because he is the community manager at Lucy sociation, Switzerland and helps with support and does a lot of other things we'll talk about in a moment, as well as being a senior software engineer at Razia. And does a lot of work for distro kid, which is one of the biggest ColdFusion sites in the world. So as you will know, if you've listened to the mark drew episode about trisko distro kid. He's originally from Melbourne, Australia, but now he's living in Berlin, Germany, and how to voice transplants so he could speak in a better accent than Australian. Just kidding. And he's been doing cold fusion since 1996. Back in the earlier days cold fusion 2.0. So thanks for coming on the show slack. And looking forward to hearing about what's going to be in Lucy six. Yeah, so what's the breaking news?
Zac Spitzer 1:39
So the breaking news is we're finally going to do a first beater of Lucy six in July. Whoo.
Michaela Light 1:47
So it's been a long? Where can people find that?
Zac Spitzer 1:50
So we will be doing I'll be publishing it all over the web. Once we do that. We'll be publishing it online via the Lucy administrator. Because with Lucy, unlike Adobe, you can just update your your local coffee, Lucy server to Lucy six. So we've maintained that we're maintaining compatibility with the old version of Lucy. So if you've got a Lucy 5380539 server, you can just go go to the admin when it comes out and try it out.
Michaela Light 2:19
Oh, cool. And so should we go to lucy.org or some other URL?
Zac Spitzer 2:24
Yep, you can download [email protected]. And you can download one of our existing installers or you can use command box. So we will be starting publishing builds we haven't published builds for the Alpha releases of Lucy six, because it's been a bit broken, and we don't want to waste people's time. Even though lots of people have been super keen to try it. We wanted to reach a point where it was ready to go. So yeah, in a couple of weeks, we will have the first piece of version out there.
Michaela Light 2:53
Excellent. How many Alpha builds? Have you been through that?
Zac Spitzer 2:57
Work? 206 point 0.0 180 At the moment. So that's been a lot.
Michaela Light 3:04
So 180 different builds, people have been trying it out inside the Alpha community. But you're getting ready in a few weeks. By the time this episode is released, I expect it will be released are soon available from lucy.org. And what is the what is the cost? For those who have been asleep for the last few years? What's the cost to use Lucy?
Zac Spitzer 3:30
Nothing you just need to be passionate.
Michaela Light 3:33
All right. Sounds good to me. Of course you can you can make donations to Lucy association or you can get higher level support ticket contracts, if you want to or sponsor features. But for anyone who who doesn't want to do that they can get started with with it for free. And I'm gonna second that suggestion. You had to use command box to get going with loose secrets that lets you get it up in minutes. Absolutely. So and in addition, it lets you segregate different versions. So you could have you could experiment with Lucy six while you're still running. Lucy 5.3
Zac Spitzer 4:12
Yes, that's actually a bit sponsorship is really important for the Lucy project. We have on open collective we've got a place where you can go and become a sponsor, you can do a monthly subscription or one off a one off donation that actually supports us because Lucy is only as good as the supporting the community. And I have to make a big shout out to all the people who work very hard to actually support the Lucy project. There's a lot of volunteers, people doing out of passion. People who love CFML they just want to go and fix things. And I love working on open source. It makes my heart shine because it's just fun. And people want to make things better. It's one thing is code speaks louder than words. So it's you know whether you go off and do testing and you find bugs and report them or you go off and make suggestions or you go off and say, this really should speak, I want to fix it and go off and make a pull request to fix it. You know, it all makes things better. That's why I got involved in Lucy, I think about five years, five or six or seven years ago. And then I started reporting bugs. And then I thought, well, maybe I can actually go and fix things myself.
Michaela Light 5:26
And you've been fixing them ever since?
Zac Spitzer 5:28
Yeah, I firstly, the two things I first got involved with Lucy was one, because the Swiss lead developers bishop who comes in Switzerland, and English is his second language. And he speaks pretty good English, but some of the error messages are a bit confusing and loosing. So I spent a long time just going to the GitHub web interface. And if I ever got an error message I didn't quite understand I'd go and make a pull request to actually improve the error message. And yeah, and then at some point, I decided, well, there's a Lucy docs project. And I went over and took that over, the guys from pixelate started that, and it lets us auto generate the docs for Lucy from the actual function and tag definitions in there. But that was really slow. And one thing I love doing in ColdFusion, is performance tuning. So I went off and basically timed that made it run much faster, and I cleaned up a lot of bugs. And then now there's actually an interactive GUI editor. So if you want to go off and helped up on Lucy docks, you can just go and fire, check out the repository, fire command box, and bang, you can actually edit the docs interactively in your own web browser, and then make a request.
Michaela Light 6:38
Yep. So that way, the docs get updated a lot quicker than the Adobe docs.
Zac Spitzer 6:43
Absolutely. It's all about the, for me, it's a case of when I go and you know, I'm Lucy expert, but when I'm confused by something, then it's like, well, then it has to be improved. And that's the lovely thing about it. Because as a developer, I love improving developer tooling. Because we all battle with our computers every day. And if there's something which annoys me, well, maybe I can go and fix it and improve it. And that's one thing we did with Lucy six with the build process, which is a whole Java and process which is quite foreign to most ColdFusion developers. But I started working with it and thought, this is a bit frustrating. I spent a long time making that really nice. So now when I'm working on the old 5.3 branch, I'm screaming. And then when I'm working on six, it's like oh, no, this is easy. So yeah. developers develop developers aren't lazy enough.
Michaela Light 7:39
There you go. And we need to be more lazy and have things work smoother. I just went to the the docs.lucy.org. Site, which looks really cool these days. Well, the beta docs for Lucy six, appear on there, or are they going to be somewhere else? Or what's the docs?
Zac Spitzer 8:00
That's actually a very good question, we will probably actually run up a beta site with that with Lucy's six stocks. At the moment, the Doc site reflects the latest stable version of Lucy, but obviously, we're six. There's lots of stuff in there. However, every Lucy install has its own local doc documentation installed and build server. So Lucy docks reads a definition of all the tags and the functions and generates the static HTML, because Lucy docks runs on CloudFront, s3, but every leucine store, it's got its own local documentation built into it.
Michaela Light 8:34
Okay. And then for folks using an IDE like Sublime or VS code, where, how would the, you know, tag insight or function insight? get updated at some point? Or what's the, that will mean, if you're trying out new features, how do you know the syntax is? You
Zac Spitzer 8:54
know, that's a good question. So everyone uses the karma. What's the default plugin for VS code? The Karma? I never had one of those things. I never said that. No, that plugin for VS code out loud. I only read it. Oh, and that reads down CF Docs. So we'll go and start contributing all those updates box. And, yeah, it's it's a continual, continual process. At some point, we also want to actually develop a round tripping of, we can update the docs outside release cycle on Lucy docs, which is really important. Okay, but we don't actually roundtrip the updates improvement sometimes from Lucy docks, directly back into the actual core of Lucy. So that's something we'd like to do, but it's a ongoing project.
Michaela Light 9:45
Cool. So, you know, at loosely, you're the community manager, but what does that actually involve sack? What do you what are you responsible for and do
Zac Spitzer 9:56
Okay, so let's give you a bit of background See was written by a started written by Michael pfiffner. He's Swiss developer, a Java. Java guru, who knows? It's absolutely brilliant to work with. I started getting involved in Lucy about six, seven years ago. And then a couple years ago, they said to me, would you like to be the community manager? Because I spent a lot of time reading all the commits, and the blog posts and forum posts and stuff like that. And so my job is basically, I'm the single point of truth, I need to know everything going on, I need to know what your problems are, what is there any regressions, what things we need to work on, and basically coordinate all of that sort of thing, because we were very small team. And I'd rather Misha spend time on a bug which I've gone off and triage. But already, I've got test cases and said, Here's a problem to fix. Then Java developer going off and spending two days trying to work out why something doesn't work, or what the problem is. So we work very well well as a team there. So my job is to insert like a good project manager, I insulate Misha from all of the day to day sort of stuff, I just come to the say, here's a problem we need to fix. And then he can go and fix that. And it also means I can I'm there to help the community people who post problems. For example, one of my favorite features in ColdFusion is query of queries, which Gert has mentioned previously, I think on his podcast that he doesn't like, But Brad wouldn't I love it read from water solutions, we share the passion for query of queries. And we've in the last two major releases of Lucy have done a lot of work to increase the performance, the reliability the to make query of queries work like a net, nog attritional database, and getting rid of all the quirks because anyone who's worked, especially with the Adobe version of it, it's quirky, and it's annoying, whereas we've been trying to make it very boring, I think good database.
Michaela Light 12:02
Cool. So you're also the build engineer, you know, yeah, triage the tickets, clean them up. And we'll talk about support a bit later in the show and how best to get Lucy support. But you're interfacing with people using Lucy and helping clarify the problems or solving the problems. And then you hand them over to someone else,
Zac Spitzer 12:27
being the build engineer. I mean, everyone will remember last year when the internet blew up in December, and we had the log for Shell vulnerability with log for j. Now fortunately, C was still using an old version of log for J, which wasn't vulnerable. But then we got a lot of feedback from up all over user base that we needed to address this. So then we started going down this path of actually updating the log for j two. And as part of that, I we, I think everyone remembers Travis CI was very popular in the open source community up until last year, at which point they got taken over by venture capitalists or venture capitalists. And then there was no more free tier. So I spent a long time migrating us to GitHub actions. And then part of the month we did that, we then realized when we're going through this blog, VJ stuff that we had a lot of interdependencies between Lucy extensions. So if you install the s3, extension and the image extension, but the image extension needed library, which was actually loaded via the s3 extension, you could actually get problems. So then we have this thing called Lucy lights, which is basically Lucy with no extensions. And so our entire CI chain, all of our GitHub repositories now will actually go off and run the tests for Lucy is the s3 extension by itself with Lucy lights. That way you can mix and match because we're all running Docker in the cloud these days. And we only want to run the extensions we need. So we basically have to go through and isolate all of these tests and isolate all these extensions. And so as my, as a build engineer, I was very happy with log log for Shell happened because it was like, Oh, God, this is going to be terrible. But actually, I've done the work. Because before I was, I was a lighting designer for theater, a stage manager, and your job there is to be invisible. Okay, and every good developer is invisible. Your stuff just works, right. And so I did a hell of a lot of work getting the build infrastructure in place for Lucy, which then when luggage shell happened, we could then leverage and actually then produce a stronger, better, safer, more secure version of Lucy. So
Michaela Light 14:38
excellent. So let's talk about some of the new features coming out in Lucy six.
Zac Spitzer 14:45
So the first big thing is we're moving to what's called a single context mode. So people familiar with Lucy, we have a hierarchy or Lucy and see if now we have a hierarchy or configuration level. So in Lucy 5.3, you've got a server context. where you can set all your base configuration in there. Then for each web site, you have a web context. And then inside each website, you have an application application MCFC. And then the configuration is inherited from those three levels. However, having two contexts requires more memory and requires more startup time. And it's more configuration, and it confuses people. Adobe traditionally has only had one configuration level. One context, which in the Docker, Docker environment makes a lot of sense. If you're running a server with 15 clients on it, then having this separated architecture is actually quite good because you can separate your clients from each other. So in Lucy six, we can have what's called a single context. So that will reduce the startup time for Lucy by half. It also means there's only one place to actually set your configuration. We're also moving from XML based configuration, hello, 1990s. Over to JSON, which we're all which we're all familiar with, which means everyone who's doing Docker and CI using yaml, or JSON these days, and every time you open up XML does feel kind of strange. So that's some of the big functionality changes in Lucy six. The other thing we're doing, which is really important, is we're going to break some defaults in CFML. Because CFML has been around for 20, coming up almost 30 years now. And there are some defaults in in CFML, which we strive to maintain backwards compatibility, but at some point, you have to say enough is enough. The CF location tag, everyone knows a token equals false. No, I don't want to send my session token to another URL on foreign server, just because I want to redirect them. So we're going to make that change to say that will no longer do that, by default. There's quite a few other ones in there, we've flagged them all and Lucy, JIRA is breaking changes. And to anyone listening, if there's anything you'd like to change, have a look and jump on the mailing list at Dev. Lucija. org, and make proposals because it's I love CFML. It's been around for so long, but there are some dumb decisions which made sense in 1990. But in 2022, no longer makes sense.
Michaela Light 17:27
That makes sense to me, just for the listeners, why is having CF locos location ad token false important for security and other reasons,
Zac Spitzer 17:38
because the token is your login. So you log into my website as the administrator, okay, and then I go off and redirect to a safe location to another website, by default safe location will pass your session token, which means I can log back into my web that your website where your administrator using that session token. So you'll see if Id
Michaela Light 18:01
Yeah, so it's a security hole to that for that fall, to be the right way round.
Zac Spitzer 18:06
Because ColdFusion is so old that back in the day cookies weren't reliable back then. That's why this was done. Yeah. And yeah, I cringe with horror when I think of it now. But back then it made sense.
Michaela Light 18:21
So people listening, if you have other suggestions on defaults, that should be done better in the 2020s, instead of the 1990s. Let Zach know through the Lucy forum, what else is coming in Lucy sex.
Zac Spitzer 18:37
So there's some very funky Java integration. So you'll be able to write a UDF or function in loose in Lucy, and then you can say type equals Java. And then instead of writing CFML, you can write Java code directly in your function. We're also adding in some auto wrapping of Java classes to make them more compatible with ColdFusion. And also, if you want to pass a CFML function into a Java function, will actually auto wrap that function, so the Java function, except that. So this is something quite new. And we'll be publishing some blog blog posts and demonstrations about that. We've also
Michaela Light 19:20
so instead of having to go out and write a separate piece of Java code, and then integrate it into the ColdFusion, you can just write it straight straight into your ColdFusion code. And it'll deal with all the, you know, compiling it and hooking it in to the ColdFusion.
Zac Spitzer 19:36
Exactly, yeah. Because as you know, ColdFusion gets compiled in both Adobe and Lucy, directly from cohesion down to bytecode. And so we're just going to step in the middle layer and do some of those steps automatically.
Michaela Light 19:54
Well, that makes it easier to reuse other people's Java code or write your own I mean, I'm if I'm remembering correctly, you've got to like, you know, build a jar file and then import it into ColdFusion. To make calls to Java, is that right? Or how?
Zac Spitzer 20:09
It depends, it's still a pain point in there. Like one of the things about Lucy is we use OSGi, which is people might hear that bandied around but everyone's familiar with, if you go and install proper jar into your coffee ColdFusion server, and you won't want to go and update that jar, it's locked for the rest of time you use it. Whereas it OSGi and Lucy, we can do the extension architecture where that will get loaded up dynamically, and you can change it as you go. I still want to see more friendly with that, it's still not easy enough to use Java stuff in there. And that will be something we'll be focusing after the initial six release. Okay, cool.
Michaela Light 20:51
What other things you cooking up for version six.
Zac Spitzer 20:56
So what else version six
Michaela Light 21:02
about sub components,
Zac Spitzer 21:04
sub components, there you go. So one things which I love, but see if it if not communities, try CF, because it's just wonderful to be able to go off there and sit the web browser typing the code and try it and then try different engines and see what works. But because cold fusion is class based, but purely on files, you can't go off and create a demo for anything using CFCs. On try CF, because all has to be in single file. So this is the idea is you'll be able to go and create a component within a file and then reference it within that file. How far we'll get with the initial six release, we'll have to see. But we've been working on that. Because I want to be able to demonstrate some of the more advanced functionality of ColdFusion like that.
Michaela Light 21:50
Cool. And for folks who haven't been there, try cf.com is a website where you can just paste in code and see what it does. So handy thing to have in your toolbox. You mentioned query of query improvements. Can you tell that you've worked on with Brad words from Autodesk? Can you tell us a bit more about what you've done there?
Zac Spitzer 22:10
Well, the main one was we did with 538, which was we've increased the performance of the native query query engine in Lucy dramatically. It's like a, I think, almost a 10 fold improvement. This is what we call the native engine with queries of queries, it's only when you're working with a single table, we haven't got the joint support. So what happens in lucee, if you're doing a join between multiple tables, we'll actually load it up into HS QL dB, and then execute the query in there, which is much slower. But when you're doing working with a single table, you want to do an aggregate function or some group bys on some data, it is blindingly fast. And then we're basically following the semantics of real databases. Because the existing the old style crew of crew support was very quirky. And we've basically just gone through there and found all of these situations where it wasn't performing the way we expected. What we're planning on doing and be talking about is actually exposing coefficient functions as database functions, SQL functions, inside query have queries. So if you want to use a list function on a column inside a query, that's what something we're talking about doing. So you might be able to go CF dot list to array on a column name, and actually then return in the query set this column as an array or automatically.
Michaela Light 23:39
Wow, that would be really cool. Now, my understanding of query queries, I mean, in ColdFusion, a query is really just an array. And query of queries is just an alternative way to language, doing manipulations on arrays. That's one way to think of it. I mean, I know we think of it as we're doing, we've got a query, you know, that came back from a database, and now we're doing other things to the query. But, you know, in reality, it's just manipulating that array of data. So using a language that programmers are used to from SQL, so very cool, you speed it up, and you've made it work more like it's supposed to work.
Zac Spitzer 24:19
Yeah. Brad's over in America, I'm here in Germany, and quite often, I'll be sitting at home and Brad will jump on CFML, Slack and hit me up quite late at night, and you might have had a glass of red wine. And he's like, actually, which brings me to an anecdote. We had one where Fred was doing some work with test box. And he discovered that it was actually quite slow spending a lot of time trying to convert numbers to doubles in Java, which is very expensive. And it was probably 11 o'clock at night. I'm like, Oh, wait, okay, yeah. And we started looking into this and then we broke up, you know, I said, load up Blue Sea. And I was like, hooked in with the step debugger and looking how it was working and stuff like that. And eventually, we found out what Lucia was doing was because with the I can scope, you can reference by name or positional index. So you can go user ID, you know, see a function. You use a comma, ID, okay? And you can reference that as arguments, one arguments to or arguments, user ID, arguments, ID. And then what Lucy was doing was, it was actually going off and seeing when there's variable name, it was trying to convert it when it was doing the scope cascading when it starts in local scope. And then it goes into the argument scope and goes up and up, it will say, can I convert this name into a number to see if it's a positional argument for the argument scope?
Michaela Light 25:49
Right. Okay.
Zac Spitzer 25:51
Which is really complex to actually explain to everyone goes like, hey, what took me I came up with the idea that Brad's like what I don't understand. And then we sat there for a while. And eventually Brad's like, Dean, I totally understand. We don't need to try to convert because in test box, he had the expect syntax. And Lucy was saying, Oh, it's got E, it could be exponential number two, it was trying to convert, expect it exponential number, to see if it was an argument scope. But a number isn't a valid variable name, and CFML. So it was redundant, but it was doing this every single time. And one change, which I hadn't explained to five people, and took about half an hour each time until they went like, Oh, that makes sense. We sped up the Lucy test cycle by 12% with one chain. Oh, cool.
Michaela Light 26:43
That's excellent. Speaking of speeding things up, how is the startup time on Lucy these days because I know that was a goal that was set for Lucy six to speed it up when you're running in the cloud.
Zac Spitzer 26:54
So having a single context instead of two contexts means that we're actually got half the time for startup and less memory involved. We've also got a lot of historical garbage. So flash, like things in Lucy. And so when you deploy Lucy for the first time, it goes into place what's called the context, which is the weapon folder, which people might know that anyone who's with Lucy six, we're going to move the weapon folder out of the Webroot. Okay, by default, Lucy with deploys the web folder inside the web root. And there's a lot of information there. And there's nothing which needs to be under the web root. And there's a I'll post, I'll post a link up later about how to do this. But you can configure Lucy to put all of your web in folders outside the web root, which makes your server more secure by default. But we lose the startup especially the first time it has to deploy all this sort of stuff. So there was all these old this there was a swift file, there's a JavaScript file to actually display the Swift flash applet and stuff like that. And stuff to do CF applet. We've got rid of all that sort of stuff, which Pete find out when he does the What's his lender stuff or AWS that fuse lists?
Michaela Light 28:09
Yeah, fuse lists, he uses interiors fixed inator product.
Zac Spitzer 28:13
Yeah. And he wants to but he basically like, why are we deploying all this old stuff because it just takes time it needs to stop and uses less memory as possible. So we've cut out a lot of his old craft, which will make it actually deploy quicker. Lucy does have a built in functionality here for doing a warmup. So if you do creating a Docker image, which you can then deploy to production multiple times, you can actually run Lucy with environment where environment variable Lucy, warm, warm enable, I think equals one, and Lucy will fire up to boil as extensions create directory structure, and then exit. So the next time it's like it's already been installed, you can actually save a couple of seconds. So if you're deploying on demand, suddenly, Elon Musk has tweeted out your ColdFusion website and you've been a lot of traffic, bang, suddenly, you can deploy a lot quicker with that. So we've been working on streamlining this sort of thing. We've also been trying to improve the way extensions get deployed with Lucy six. So that firstly, the login is much more detailed. I'm a big fan of login. Because things should fail fast, fail early and explain why. And a lot of the time, it can be a little bit of a mystery. Big tip for everyone at home. Lucy by default sets all the error logs to error, all the log levels by default to error. The deploy log has got great information. When you update Lucy you installed. You install a you store an extension or you're using the Maven integration where you create the Java objects that downloads from Maven Java object from the update provider from Lucy that gets logged to the deploy log But only when you set the log level to info. With the log level error, it only records errors. So anyone struggling with installing extensions, that's a good tip.
Michaela Light 30:14
That is a great tip. So tell us a bit more about serverless deployment because that's what's happening with lambda that Pete's doing with his few Sluss.
Zac Spitzer 30:27
Fixed, that's a big space up there. I know that Cloudflare are big fans of that as well. And AWS. My goal was basically to actually strip down Lucy as much as possible this to actually make that better, because it's all about starting up as fast as possible and using as least middle e as possible. So it's something we're striving for for six. And I'm looking forward to sort of payments chatted with Pete in a while I'm looking forward to seeing his feedback once we actually get that out there. There's also there's also Project Loon coming up, which is, we don't support Java seven routine yet with Lucy. But project loom is switching from us because Lucy enables threads out of the box has a very powerful threading support. So if you're doing a query during a query age, for example, you can pass in arguments saying parallel and Max threads equals four. And it'll do process your through your query using four threads. The problem is up to Java. So this is Java 19. I think project loom, the operating system threads, so there's overhead for being a multi threaded project loom then uses lightweight threads within the JVM. So that all with using parallel stuff and Lucy, if you're doing parallel on very small operations, there's more time spent creating the thread than actually doing the work and diminishing returns. With project loom, you can spin up a million threads if you want to. And it won't actually kill your server and actually do this sort of processing. So there's some nice stuff in Java coming through to which will benefit Lucy out of the box okay, I can't hear you.
Michaela Light 32:22
My fault. So what what happened with Hibernate? Have you guys upgraded on the latest version of hibernate or
Zac Spitzer 32:33
so the team team it was who are big fans of RM came to us because most of the C team doesn't do much hibernate sort of stuff with sort of more bare bones kind of we like to do their bones we like to do direct SQL. Anyway, they sponsored us to do an upgrade of the the hybrid engine. So we firstly fix the existing 3.55 which is bundled with Lucy 5.3. And then we also then went off and did an upgrade to hibernate 5.4 which will be the default engine with Lucy six. And there's support for hibernate events. We've been also you can now I think there's one outstanding bug but you can actually mix hibernate and traditional CF query within this transaction. So for a long time, it was a bit rough in Lucy with Hibernate, but the fact the latest release is actually much more stable. And the guys at audits are quite happy. Well, that's good.
Michaela Light 33:41
Yeah, we use our RM in some of our projects. So good to hear you speed that up. Any other things in Lucy six we should be aware of.
Zac Spitzer 33:56
It's quite a, there's quite a few, quite a few little performance improvements in there. There's some more additional functionality which don't match in some of the Adobe stuff in there. What else I'm just trying to think there's there's actually a lot in there with 180 releases in snapshot so far. Yeah, we're moving to the JSON based configuration. We also added in with Lucy 539. The ability to actually import the JSON configuration file a bit like you can do with the auto save config tool. But you can do that natively. In Lucy. There's also we have a that everyone knows about the server dot CFC, which runs when you start up your confusion server. We've added a web dot CFC. So when you start up a website or web context, you can actually load configuration that point as well. There's some more listeners being added in Lucy six. So some of these already in the 5.3 But we have query listeners, male listeners, one of the things we're looking at doing is adding in for CFHC. HTTP, we're adding in a progress system. So if you're going and downloading a big file from a remote server, you can actually then give a bit of feedback to your users to say something has been downloaded.
Michaela Light 35:22
It's cool. Seeing sometimes these remote calls kind of die.
Zac Spitzer 35:28
What's going on? I mean, one things we added in with Lucy 5390538, we added in some logging for safe location. Because we are having problems with district kid that we have a lot of safe locations, and we didn't know when they were happening. So there's a trace log in Lucy. And if you said that level to info for that, you'll actually log with a stack trace, or CFML, stack trace, where all your safe location courts. And then for 539, we did the same for CF HTTP. So if your server you don't know what it's doing, it's downloading stuff in the background, how long it's taking that will now actually log all that information out to the trace log. I also love debugging, debugging and logging are two of my favorite things. Because what the hell's going on, I want to find out. And I've done a lot of work with Misha to actually improve the debugging experience. So the debug logs. I've got two admin extensions for Lucy, which I wrote once called a log viewer, which gives you a aggregated log view because Lucy has I think 1015 log files by default. And I wrote a log viewer, which reads all those log files and puts it presents them color coded with a view with a color coded in line with the stack traces. Abbreviated, so you can see what's going on there. And the second one is the performance analyzer. And what the performance analyzer lets you do is you can go and run you're gonna enable Debug Log debugging on your lucee server, let it run for a while, then you can open up my performance analyzer. And it'll give you normally when you see the debug logs from ColdFusion, which is one of the things I love about ColdFusion is you go for an open page, look at debug logs, you can see what queries being run, or too long, what was slow, all this sort of stuff. But with my performance analyzer, we then go and say, Okay, give me give take these 1000 debug logs, rather than looking at them horizontally, let's put them in vertically. So out of the out of this load, I've run on my server, where what's my slowest function? What's my slowest query? And literally look at that there's a summary across the server.
Michaela Light 37:34
Wow, cool.
Zac Spitzer 37:36
And then for Lucy six, obviously is good. I'm actually remember, I've done so much stuff in Lucy six, I've forgotten to be honest. One of the things in the Lucy 60s, you can actually enable thread debugging. So if you go off and start doing stuff with C, a thread or you do array h or any of the parallel functionality, anything which happens inside those threads doesn't show up and debugging. And Lucy six, you can turn that on. And you can see the performance of what happens inside each thread. Ron
Michaela Light 38:03
is excellent. Where if we want to try out the admin log viewer, where would we find that?
Zac Spitzer 38:10
If you go to my GitHub profile, you can see links for all of that. Oh, github.com/spitzer and the Python forge box. All right, excellent. So we use that recently, I was working with Mark Drew, and we wanted to improve the overall speed of distributed DICOM. And because over the years, people have been adding a lot of different stuff in there. And it got a little bit slower on the initial response time. And I said, oh, let's go off and do this. So we went off and ran some load testing with 5000 requests. With debug enabled, we then went off and find out my performance analyzer, we sat down and said, Oh, here's on the low, here's all a low lying fruit. And we managed to get I think we improved reduced the time by a factor of five or seven in it because you get this view on what's going on there. And it will also show you all the active threads, what's running on the server you can see summary of the exceptions all that sort of stuff in there. So it's like I say it's a poor man's fusion reactor but actually gives you a lot of very valuable information in
Michaela Light 39:23
there. I was just thinking how does this compare to fusion reactor it probably has much fewer features, but gives you some basics for free.
Zac Spitzer 39:30
I think getting up to speed with mine lot quicker fusion reactor, you do need to go off and watch a few videos or have someone like Brad or Charlie come in and teach you how to use it. Yeah, mine, you can actually go in there and drill down. I did a lot of work with the guys from pixelate with their CMS. I was working on that for a client project. And I was like, this seems to be a bit slow in a few places. So with I ended up doing a lot of work on my performance analyzer to actually expose some of the underlying problems we had in there. then, you know, like anything in programming 90% of the problem is actually finding the problem. Once you know the problem solving, it's quite easy. So
Michaela Light 40:08
cool. And then I, you know, I remember a few years back at CF cam, I think it was good to who announced what was coming in Lucy six, but not everything will be in this initial 6.0 release. So I just want to mention, some of the things that are, you know, will be possibly coming in future releases, futures and promises in the code, you know, that might be coming locked down settings for the administrator, feel free to interrupt and yap about doing well. Disguising that Lucy is the application server. For security purposes, individual CF tokens will see fit names.
Zac Spitzer 40:58
Somehow the same? Yeah, getting rid of the CF ID as a default hardwired token name is something which is quite dear to my heart. One of the part of the difficulty with my role is that on one hand, I have to be there to help all the other developers in the team do stuff. But then for me to go off and say I'm going to spend next three weeks of my Lucy time doing this pull request. I don't have time to do that. But I'd love to actually get rid of the CF ID tokens. And again,
Michaela Light 41:30
they go also there was talk of a password vault quarantine mode. We run a bit about that in one article on Lucy six.
Zac Spitzer 41:44
One of the things which is a little bit of a hidden function in the Redis. Extension for Lucy, there's a what we have a tag called CF distributed lock, which is like CF lock. But rather than working on your local server, it works across a cluster via Redis server. So if you're doing processing on multiple servers, and you want to lock certain records and database are certain files, you can use to see if distributed locks to the next you do cluster where locking.
Michaela Light 42:16
Wow, I didn't know about that. So that but that's already existing Lucy five, right?
Zac Spitzer 42:22
Yeah, that's part of the registry extension, and we use it quite distracted.
Michaela Light 42:27
Ah, okay. And then also, you're looking at a default log Appender, which will be full back.
Zac Spitzer 42:38
Yeah, my, my holy grail is actually to change the way that login is configured and Lucy's. So we have this lovely example of data source logging, we also have a data dog Appender. And I would like to be able to configure, we have 10, or 15 different basic log log types in Lucy, I would like to be able to say, I want to send all my logs to a text file or data dog or to data source. And then all I do per log file to say this log file level error is one level info, no other information. Because at the moment, there's a lot of the configuration is paying the bank. And it should be much more high level. So you have a global global log configuration and all the logs to individual log files inherit from that.
Michaela Light 43:22
Well, that'll be exciting. And then I also read, you know, there was a thought of having event driven architecture and Lucy.
Zac Spitzer 43:31
Yeah, there was something like remember the Mac to that framework. That's always funny actually talking about the names of frameworks, like nginx, for example, is something which I've read so many times, but I've been working as a solo developer for many years, and never actually read all these terms. I've never actually spoken them out. And then somebody's like, oh, how do I say that? Like people laugh at me, because I'm Australian. So we don't say we say Caching, caching. And every time it straightens, go on a podcast, I talk about caching because like, what are you use strains?
Michaela Light 44:04
Well, I can understand that totally, I've had the same problem in my life. And then also, you There was talk about adding new native support for Java streams. I don't know whether that's still going to happen or
Zac Spitzer 44:19
not. That's on the future. Louis has done a lot of work with CB streams over otters. And I think he's sort of jumped the gun a little bit on that one and already implemented stuff. So we'd like to focus on keeping it simple. And we don't want to actually add too much on Lucy core. So we'll see what happens with that. I'm more interested in making working with Java libraries a bit more easier, because I still get a bit stumped myself, because I'm not a Java developer. I know a lot about Lucy and how that all ties together. But I think that working with Java libraries is still a bit too painful in Lucy so that's probably what I'm going to be advocating and in my role as community manager, Misha will listen to me.
Michaela Light 45:05
Well, and there are a lot, you know, there are a lot of really cool Java libraries out there. But because they're kind of hard to use, I mean, it's quite possible to use from ColdFusion. And we've done it, you know, like we did one for a PowerPoint integration where we had to turn out PowerPoints out of ColdFusion. And, you know, we found a Java library did it and we got it to do it, but it was a bit of a pain in the butt. This was about 15 years ago, so maybe it's easier now. But you're gonna make it super easy for all ColdFusion developers, if they see something really nice in a Java library, they can run it and Lucy
Zac Spitzer 45:43
that's the goal because we love Lucy. And we love CFML. And, you know, this is ongoing thing is csml did. But as you guys were talking about that, you know, there's a programming index, the tob tob index of programming languages. And apparently was 1015 years ago, there was argument is this is CFML, a programming language or is it or something like that. And that's why you don't see ColdFusion on that list.
Michaela Light 46:14
Jose actually tried programming these people who think it isn't a programming language, if they actually looked at the latest Lucy or the latest, because you haven't seen all the cool stuff that's in it. They were probably looking at 1995 ColdFusion code, you know,
Zac Spitzer 46:29
I had a nice a couple of months ago, I had a guy from NASA reached out to me on LinkedIn. Because NASA resolusi user, the map, the Mars Curiosity website was all powered by Lucy, which I already knew. But then this guy from NASA reached out said, Hey, we need to know about accessibility, because we were part of a standard platform of software, which we offer to our different teams and stuff like that we need to know about accessibility. And I was you know that my inner child was like, Oh, my God less.
Michaela Light 47:01
Yes, maybe you get a free trip on one of their rockets, you never know. Or at least get to visit, visit them in whatever locate NAS location they're in.
Zac Spitzer 47:09
But I watched the first episode of ortho mankinds last week for the third season. And they had the first space hotel, which didn't end up very well. So I'm quite happy on a moment. But I love the idea, right.
Michaela Light 47:23
Let's talk a bit about Lucy release cycles. Keysight. I'm a bit confused about it. I had a talk on the podcast with Patrick Quinn when he was in charge of that. And he was doing like a monthly release cycle. But that doesn't seem to be what you guys are doing right now. Can you tell us what what you're doing and why?
Zac Spitzer 47:41
I'm? So number one rule is that we don't want to have regressions, okay, we don't want we want to be moving forward and not actually break things. Because previously we'd have Lucy releases where there'd be all this new great stuff, but then something else would be broken. Okay. And so 538, which was famously a very long release, was because misure five, three 8.80 said, Let's release it. I said, No, there's regressions. And that ended up being I think we're a five threat like two to four at the moment. So my philosophy is the developer, like I say that being involved in the future is, we shouldn't be visible. So we're, what we strive to with Lucy is to actually make stable releases. I know that the monthly release cycle makes no sense. Because you don't have time with your clients or projects to go off and basically do it every month, do a testing cycle, release cycle, all that sort of stuff. At the moment, I would like to see a shorter release cycle. But I thinking three to six monthly release cycles is probably probably more like the six month release cycle is probably the best. Because not no one's got time to go off and do all the testing. We have some amazing people who do testing with Lucy. It's really wonderful. But a lot of people don't have time. And then we go off and make a release, they go off and test it out. We released a stable version, they say it's broken, it doesn't work. I'm like, we'd been in a six plus two release site release candidates and you haven't bothered to test it. And now you're telling us a week after we've released it doesn't work.
Michaela Light 49:24
Well, maybe that's something to look at in the future. Because I know Adobe has like a big library of customer supplied code, they just run their releases through to make sure they don't have these regressions where the new release breaks old code. And so that's possibly an idea for Lucy that you you get customers to give you a copy under NDA of their code and you just run, run stuff through it and make sure it doesn't break.
Zac Spitzer 49:52
We've been talking about setting up especially with like autists and pixelate that people are doing sort of big part Like frameworks and stuff like that of actually setting up a distributed workflow so that we weren't doing every single build of Lucy, but being able to go from the Lucy repo and say golf and run distributed tests, on trigger trigger running tests with the latest build of Lucy on all these different platform platforms, and then getting the results back to say, You've broken something, or it works, and then also monitoring performance. And that's something which we want to get in place with the rest of the community. But
Michaela Light 50:29
that would be excellent. If you could do that. I mean, I remember the Adobe ColdFusion five, release, which was a total cluster F.
Zac Spitzer 50:38
What was the six?
Michaela Light 50:41
Six, maybe? Six? No, I got it wrong. You're right, six. Yeah, it's when they moved from C, they used to be coded in C, and then they moved to Java and the whole thing was broken. And I do remember talking with Damien Cooper, probably at CF summit and heat basically set up this, you know, much more, whatever the word is formal testing, and having coffees rigorous, rigorous, that's the word we're looking for. And, you know, I think it makes sense, because, you know, you want people to trust Lucy, and when they get a release, it's going to, you know, you expect it to work. So
Zac Spitzer 51:18
it's something I really want to do. And I have the domain knowledge to actually facilitate that. But there's only there's only one Zak in the world.
Michaela Light 51:25
We need to clone you.
Zac Spitzer 51:27
I want more people to get involved, because I'm doing this sort of stuff. And how
Michaela Light 51:31
can I people get involved? What would you recommend?
Zac Spitzer 51:35
Well, it's like, how do I get started with Lucy, I found a problem. And I said, I want to solve it. Right? So someone says said says, I love the idea of setting up distributed testing for Lucy. Or that's, or if something doesn't work, just jump on the mailing list, hit me up on Slack, I'm there to help. A lot of people reach out and say they want to help and doesn't go anywhere. But I'm, is there actually help, but I'm trying to actually document all this sort of stuff. You know, I did a lot of work with Lucy build, people want to do Java development. It's 10 times easier to do it today than it was when I first started. And so yeah, it picks up like, you know, you know, Ben says he doesn't have time to actually write documentation. But that, but Ben is one of the sites of the community, his blog posts are the gold standard, you know, and he's passionate for CFL is great. But yeah, if, like I said, code speaks louder than words. If you find the mistaken documentation, don't tell me, send me a pull request.
Michaela Light 52:34
Okay, well, that's a good suggestion. For folks listening. That's Ben, Adele, we're talking about not any other bands that might be in the ColdFusion world. Now, one question, I'm a little confused here, because you've got you've had a lot of point releases in version five. And when you said that you want to have a three to six month release cycle. Do you mean for point releases? Or do you mean for full release?
Zac Spitzer 53:03
Yes, it's kind of. So you could, you could pretty much argue that most 538 was actually an equivalent number 20 and Adobe 2021 annual release kind of thing at the moment. So there's a little bit of, I'm thinking with, once we go to Lucy six, we'll probably do less point releases, and then jump to the next version up there. One of the things in Lucia is we have this backwards compatibility with what's called our loader. So this is why you can still go install the latest 539141 stable release on a rally to install the five and it will run. And that's what's called the loader interface in there. But yeah, we need to revisit the way we actually do our version numbering at the moment. I quite agree with that. Because we're about to predict going to do. Before we do the beta for six, we're going to release a third and hopefully final stable release for 539. Because there's a few regressions and regressions get fixed. And then we're going to do five 310. In the meantime, because 5353 is a lot, it was what we call an LTS release, okay, we're gonna maintain that with bug fixes and security fixes for the next couple of years, like similar with a boon to where they have their stable releases in there. And then six will move, move faster. And at some point, we'll say well then pick the next next version with an LTS release. Because a long time people get stuck on older versions of Lucy because there were regressions, and they go, I can't upgrade because of this. And it's like, well, that sucks. And so now we've been trying to do that. And as one of the project managers for Chrome used to say to me exactly when you find bugs in Chrome, they usually pretty good. You have to keep on screaming. I once found a bug in Chrome that the JIRA to geolocation on Google Maps stopped working in Australia at two o'clock in the afternoon. Until 6pm, because it was 6am and capped in Mountain View California, which chrome got so successful that exceeded their own internal license with Google Maps Geolocation API. And they're all asleep. They wake up and didn't work. So they didn't know the problem was there. So yeah, it's a regression Lucy, which is bugging or stopping upgrading. Let me know, you know, my email. Second, if you're working for a company where you can't say it publicly, you can send me an email at Sackett. lucido. I want to hear people's pain problems, because in a day, I Love Lucy, and I want to make everyone's life easier. Not harder.
Michaela Light 55:48
All right, so let's finally talk about how people you know, if they need support on Lucy, what was the best approach? For that? Where should they start off?
Zac Spitzer 56:00
So the best place is probably see it from us. Firstly, Google, look up your problem, because look, there's a lot of on the Lucy mailing list, there's a lot of information safe now slack, like was discussed on last podcast is a bit of a black hole, because there's only a five limit. So you can't find stuff. That's why I always say, post your problems on the mailing list, because then they'll get answered, and we can help someone.
Michaela Light 56:23
And when you when you say the mailing list, I think you mean the forum online forum.lucy.org, which also anchors out to a mailing list.
Zac Spitzer 56:31
I've got great ideas, right. That's why I say metals. Okay.
Michaela Light 56:37
And the great thing about that is it's searchable by Google. So once people have posted an issue in there, other people can find it easily. So first, do a Google search for your issue. See if you can find someone else's done, if not post into the dev forum for Lucy,
Zac Spitzer 56:56
and then explain what you've actually looked and done it because, hey, we're developers, but some developers are their own worst enemies. Okay. So we have a template on the on the forum saying, what what database you're using, what Java version you're using, which Lucy version you're using? Which extension? Okay, you got basically going to writing a bug report is not for, okay, there are some people out there who write, it's broken, it doesn't work. And unlike what doesn't work, what are you trying to do? You know, and if you go through this process of saying, when you go and ask for support, you ask, how would I answer this? You know, if a client comes to me and says, This is my problem, you're gonna go, what? Do I have enough information to answer this problem? And then sometimes people do that. They'll write really nice reports. And then they're like, Okay, I'm just going to pick one phrase from your error message there. I'm going to search on Google and the first result explains it. It's like, look up, you know, it's an important process for people to learn in there. I mean, I love doing support for people because sometimes it's mind numbing, and silly, and you have to sort of extract you know, water from the stone. And other times people have found some really quirky bugs. Great fun to investigate. So I worked for Razia and Raza, you're heavily involved with sponsor, Lucy Association, Switzerland. So if you need commercial support, I'll put my head on and say, contact. Razia ch. IO. And we are the Lucy experts if you want to also any functionality added in there, your businesses, we really need something in there. It's something which Razia can do. But there's also great support on the mailing list. Don't hit me up on Twitter, Do not hit me up privately on safe, no slack with a DM if you want personal support, then you can contact Gertz at Razia. And he's he's. And you can engage me with that. But private support I don't do that's a rule of mine.
Michaela Light 59:03
Oh, make sense. I mean, you're doing all this stuff on the forum, it helps other people who have the same issue, they can search it and find it. So I can see how it could be easy to get overwhelmed if everyone was hitting you up privately, and it doesn't really help the community to do it privately. So,
Zac Spitzer 59:22
I mean, the other great thing to do is writing test cases. So we use test spots for Lucy. So if there's functionality you find something doesn't work. We have a great team who goes off produces test cases. But if you want to get involved with Lucy, you can go and have a look at some test cases and add them in. I'm really open to helping people get involved in Lucy project. It's part of my role. And yeah, because I mean also the Lucy docs has got a lot of very old content which goes back 510 15 years or 2015 I feel old and we probably actually get rid of a lot that all content, it's talking about, you know, a boon to 14 or you know, stuff like that, or Tomcat seven,
Michaela Light 1:00:05
it could be archived out. I mean, I guess in theory, someone might be using that. But generally, when I've done surveys in our state of the confusion, user survey, most people use Lucia on the latest release, or maybe the one prior or not, it's not like Adobe ColdFusion, where you find still people using stuff from 10 years ago. Because, you know, there's no financial reason not to upgrade. It's just, you know, hey, you've got to retest your code, when you upgrade to a new version of
Zac Spitzer 1:00:35
actually coming back to the support question. We do have people going, like, I'm using this old version of Lucy, something doesn't work. I'm like, Have you tried the latest version yet? Which is all you know. So if you've got a problem with Lucy, the first thing is like, go and try updating your Java. Updating, you're trying a latest release. Okay. If it works, I wish you could.
Michaela Light 1:00:59
Yeah, wish you can do easily using command box, right? It's not like I mean, you're gonna lose CIOs, I talked to CIOs, you know, pretty regularly, every week. And when someone tells me, I'm using a version of Lucy from three years ago, it's like, first of all, why would you cause that kind of technical debt? Why would you not just update it, when it's easy and free to do particularly now you've shared that you work really hard to make sure the new releases don't break old stuff. And secondly, if you use command box, you can just spin up the latest version of Lucy, check your code runs, okay, before you put it out onto your staging server, and then production server. So
Zac Spitzer 1:01:42
that is crazy. If you've got your developers battling an old version of Lucy, which is three years old. And since then, there's been three years of work to get to make it more streamlined and things actually work. So you know, you have developers spending three days trying to fix a bug, which we've already fixed, you know, it's a total waste of time.
Michaela Light 1:02:02
Absolutely. So everyone listening, make sure you Lucy's up to date. And, you know, I mean, go through a process, you know,
Zac Spitzer 1:02:10
don't don't just test release candidates, okay, when we give out release candidates, go and test them, because
Michaela Light 1:02:18
then you'll know your code will work on the final gold release that gets put out, yes, the sixth, you get to the front of the queue that way, because I know, during beta cycles, generally, companies are keen to fix those issues, you know, reported during the beta cycles.
Zac Spitzer 1:02:39
And it's also if you go and get involved in the beta cycles, and sometimes it's great to actually post and say, Yeah, test it out with my application all works fine. Because sometimes, you know, we go off and do all this work. And we don't hear anything back from people and just actually saying, Hey, thanks, it's all working is great. And then when you actually have another problem, and if you're getting involved in Lucy project, I'm much more likely to dive in there and really help you a lot more. If you're actually contributing yourself to the project, then you have my full attention. If you're someone who sits there and says, It doesn't work. It's like, yeah, sure, I'll help you. But if you're someone who's updating some docs, or doing testing and stuff like that, you'll get a response from Pete, there's a
Michaela Light 1:03:20
secret way to get to the front of the support queue. So
Zac Spitzer 1:03:25
it's fun. I like finding bugs to solving.
Michaela Light 1:03:27
There you go. So as we wrap up this episode, tell us Zach, why are you proud to use ColdFusion?
Zac Spitzer 1:03:37
Oh, I'm so like building things with. I mean, ironically, I love all the nuts and bolts of actually being making Lucy actually work but actually, like, being able to use Lucy like, like a singer uses a microphone. Okay, because Lucy, let's be abstract away all this low level sort of stuff, I can just focus on what I'm doing. And it's, I mean, distribute, it's great. We've got a big team of developers in there. And people just go off and do all sorts of stuff. As Gert was saying last week, we have a new new developer, distributed high Hudson, who started a month ago, and he's, he's got some been so productive within one month, because he just basically can sit there, he's picked up at all, I spent my time onboarding because onboarding developers, you have to invest time in bringing people on board. And I think a lot of companies kind of missed that, especially with remote work. But yeah, but a lot of confusion is let's be focused on what I want to do, as opposed to, you know, framework hell or you know, like, I'm glad I'm not doing front end anymore. Like, you know, there's always the framework was, you know, we have two new versions of react to throw the baby out with the bathwater and upgrade and all that To the staff, whereas, you know, Lucy code coefficient code from 20 years ago still runs, I get messages from people that say, Hey, you've done a great job with Lucy. I've upgraded a coefficient eight to Lucy 539. And it just worked.
Michaela Light 1:05:14
Wow, that is a great upgrade to I would not run any code in ColdFusion. Eight, not because there's anything wrong with the technology. It's just, it doesn't get security patches for last end of life was on cold fusion coefficient eight was
Zac Spitzer 1:05:31
a great release. Yeah, it was.
Michaela Light 1:05:36
We talked a bit earlier about how occasionally people say ColdFusion is dying, which I think is a bunch of BS. But my question to you, Zack is what would it take to make ColdFusion more alive this year?
Zac Spitzer 1:05:50
That's 22. For me, I would love to go to conferences. My last coefficient conference was MX Downunder. In Sydney 2006. MX to you. So that's 1416 years ago. We're going to do a CF camp over here on the Europe side of things quite soon. But like I was talking about with Hudson, go out there. And if your senior called coefficient developer, go and start teaching some people go and grab some young sprightly kids out there and show them how great how easy it is to go off and say how good it Priscus database, I want to pull some data out and export it to JSON, and show them how they can do that. And share the actual the joy, the simplicity of it, because ColdFusion is lovely abstraction, you know, sorry, Adobe, but what you've done with 2021, with all of your add ins and stuff. Lucy has been doing that for a long time extensions, Lucy, most of the time, just working. It's easy. With Adobe, it's still too complicated. But the joy of being able to get something up and running and then start programming and doing what you want to do as opposed to battling the platform. I think that's great. That's what I love about CFML.
Michaela Light 1:07:06
Excellent. Well, if folks want to find you online, one of the best ways to do that.
Zac Spitzer 1:07:13
So I'm obviously on the dev Lucy dev forum. They've got Lucia. org. Also on Twitter, I'm quite actively tweeting under the Lucy and CFML hashtags at sexta. Today, CK str. Or on GitHub, you can follow me on set Spitzer on there, and you'll see my name all over the Lucy reboots.
Michaela Light 1:07:35
Ah, excellent. Well, thanks so much for coming on the show today, Zack. I know it's getting rather late there in Germany where you are. So
Zac Spitzer 1:07:43
it's still it's sunny here so it's still daylight. Oh, of course.
Michaela Light 1:07:46
It's that's why it's still light. There you go. Yeah, mid summer in beautiful time to be in Berlin. It's a wonderful city. So Right. Oh, thanks so much for coming on the show.
Zac Spitzer 1:07:58
This has been great fun.
Transcribed by https://otter.ai