1
00:00:05,242 --> 00:00:08,464
Hello and welcome to the Modernize or Die podcast.

2
00:00:08,464 --> 00:00:10,171
It is July 1st, 2025.

3
00:00:10,171 --> 00:00:13,424
This is episode 236.

4
00:00:13,424 --> 00:00:14,875
We're glad to have you with us today.

5
00:00:14,875 --> 00:00:16,417
My name is Eric Peterson.

6
00:00:16,417 --> 00:00:20,650
I'm a senior developer at Ortus Solutions and I'm joined today by Mr.

7
00:00:20,650 --> 00:00:21,350
Grant Copley.

8
00:00:21,350 --> 00:00:22,292
How you doing, Grant?

9
00:00:22,292 --> 00:00:23,786
Doing good, how's it going?

10
00:00:23,786 --> 00:00:24,658
It's going well.

11
00:00:24,658 --> 00:00:25,859
I'm very excited.

12
00:00:25,859 --> 00:00:28,512
We're getting ready for a family vacation here.

13
00:00:28,512 --> 00:00:33,588
Take some time off around around Independence Day here in the States and very excited.

14
00:00:33,588 --> 00:00:34,560
How about yourself?

15
00:00:34,560 --> 00:00:36,485
yeah, gonna be basic stuff.

16
00:00:36,485 --> 00:00:38,881
Just gonna be grilling out and things like that.

17
00:00:38,881 --> 00:00:42,220
Spending the day with family, but looking forward to it.

18
00:00:42,220 --> 00:00:51,930
Awesome, we hope you wherever you are also have some fun plans But for now, let's jump
into some Ortus news starting with some product releases not much for the last couple

19
00:00:51,930 --> 00:01:01,722
weeks, but quick 12 and QB 13 have been released these were mostly bug fixes It is a
breaking change bug fix Just as

20
00:01:01,722 --> 00:01:04,333
I tend to be overly cautious about that.

21
00:01:04,333 --> 00:01:07,564
So lots of important bug fixes you should be able to upgrade with no problems.

22
00:01:07,564 --> 00:01:09,844
And also some new testing helpers.

23
00:01:09,844 --> 00:01:18,567
As I was writing out some tests, I found myself wanting to say, like, I expect this query
to exist or to have a count of two.

24
00:01:18,567 --> 00:01:21,398
And it just saved some test box work.

25
00:01:21,398 --> 00:01:25,029
So you can use that now in QB13.

26
00:01:25,029 --> 00:01:32,622
Is that for just curious Eric, is that for like integration testing where you actually hit
the database and then you assert against it?

27
00:01:32,622 --> 00:01:43,996
yeah, I that's my like first level of tests always Just to make sure that everything
actually works together So I'll have a test, know, that's like expect there to be zero

28
00:01:43,996 --> 00:01:49,208
records And then I hit this endpoint with this data and there should be one record, you
know kind of thing so

29
00:01:49,208 --> 00:01:49,940
cool.

30
00:01:51,125 --> 00:01:55,792
Well, today we want to thank our sponsor, Ortus Solutions, specifically Ortus Training.

31
00:01:55,792 --> 00:02:04,321
You can get trained by the actual makers of BoxLang the Coldbox platform, Command Box,
Test Box, as well as all the other products you know and love.

32
00:02:04,321 --> 00:02:08,455
We offer on-site training, regional training seminars, virtual live trainings.

33
00:02:08,455 --> 00:02:16,383
We have several professional training courses, and we also cater to à la carte trainings
as well if you want to put together exactly what you would like to be trained on.

34
00:02:16,383 --> 00:02:26,139
The benefits of this training, you can save time on attendee travel and expenses, have
more time for questions for your specific content, focus on topics that matter to you and

35
00:02:26,139 --> 00:02:34,555
to your company, define the pace of the course according to your needs, you can get
discounts on attendee fees according to your attendance, and of course you get to choose

36
00:02:34,555 --> 00:02:35,516
the location.

37
00:02:35,516 --> 00:02:42,100
So head over to ortussolutions.com/services/training and you can start a quote today.

38
00:02:42,100 --> 00:02:43,042
We'd love to come.

39
00:02:43,042 --> 00:02:46,587
do a personal custom training for you and your company.

40
00:02:46,587 --> 00:02:47,791
So looks like.

41
00:02:47,791 --> 00:02:48,643
BoxLang corner.

42
00:02:48,643 --> 00:02:55,330
Yeah, so if you missed it, Boxlang 1.3.0 dropped and there's some pretty cool stuff in
this.

43
00:02:55,330 --> 00:02:58,415
One of them being enhanced zip compression control.

44
00:02:58,415 --> 00:03:06,431
And I was looking into this, you can actually adjust like the level of compression and
it's just a setting that you can set.

45
00:03:06,431 --> 00:03:14,181
They've got pretty JSON serialization now, which we've always needed, but you can
essentially just pass a

46
00:03:14,181 --> 00:03:19,487
a boolean flag of true to, I think it's, is it jsonSerialize?

47
00:03:19,487 --> 00:03:20,299
I think that's.

48
00:03:20,299 --> 00:03:25,595
yeah, both can work if you're using the CFML compat, but yeah, jsonSerialize

49
00:03:25,919 --> 00:03:30,082
But yeah, if you can pass the true flag and it will just, it will prettify your JSON.

50
00:03:30,082 --> 00:03:33,555
They've added some, they say here XNone functions.

51
00:03:33,555 --> 00:03:45,102
And when I was looking at this, looks like all of the collection objects in BoxLang, like
your arrays, lists, and things like that, queries, you can now do a .None call on those.

52
00:03:45,102 --> 00:03:47,954
And it will essentially check to make sure that there's

53
00:03:47,954 --> 00:03:51,921
There's nothing in that collection based off of what you're passing there.

54
00:03:52,223 --> 00:03:53,067
That's pretty cool.

55
00:03:53,067 --> 00:03:57,747
the opposite of array sum or array every right

56
00:03:58,220 --> 00:04:11,933
Some updates to query concurrency and they've added some intelligent caching upgrades,
HTTP response compression, binary verification, and some enhancements to the command line

57
00:04:11,933 --> 00:04:13,084
tools as well.

58
00:04:13,084 --> 00:04:14,264
So lot of stuff in there.

59
00:04:14,264 --> 00:04:18,395
I they also did some bug fixes and some CFML compatibility enhancements.

60
00:04:18,395 --> 00:04:20,676
Huge update, so definitely go check that out.

61
00:04:20,676 --> 00:04:21,671
We'll post the link.

62
00:04:21,671 --> 00:04:28,716
It's one of those things where the minor update number does not quite reflect how much
work just went into that.

63
00:04:28,840 --> 00:04:30,133
Yeah.

64
00:04:30,133 --> 00:04:34,388
Last week we got to talk about the BoxLang Version Manager.

65
00:04:34,388 --> 00:04:40,867
This is, if you've ever used other programming languages, you've probably seen some of
these.

66
00:04:40,867 --> 00:04:43,121
There's a, let's see, what is the Java one that...

67
00:04:43,121 --> 00:04:43,722
using.

68
00:04:43,722 --> 00:04:47,287
I used Jabba for a while and then that's not the one I use now.

69
00:04:47,287 --> 00:04:48,899
Ruby has Ruby version manager.

70
00:04:48,899 --> 00:04:50,791
Node there's a node version manager.

71
00:04:50,791 --> 00:04:58,242
The idea is you want to be able to switch your versions easily rather than having to like
manage your Java home yourself.

72
00:04:58,242 --> 00:05:00,113
jenv that's the Java one.

73
00:05:00,113 --> 00:05:01,056
J-e-n-v.

74
00:05:01,056 --> 00:05:08,424
So we have the Boxing Version Manager, BVM, and this was released and talked about in the
last podcast, but there's already been a release since then.

75
00:05:08,424 --> 00:05:14,578
And specifically, this focuses on project-specific version management with a BVMRC file.

76
00:05:14,578 --> 00:05:24,356
So this is copying from, again, those other languages like Ruby and Node, where you can
put this BVMRC file into your repo and set a version for your project.

77
00:05:24,356 --> 00:05:27,289
And then when switching the directory into there, you can use

78
00:05:27,289 --> 00:05:36,436
BVM use and it will switch to whatever version of BoxLang that project is currently using
Super important for you know, you're working on an app that hasn't quite gotten up to the

79
00:05:36,436 --> 00:05:41,410
latest and greatest features Or maybe you're working on the app that's on the latest
snapshot version, right?

80
00:05:41,410 --> 00:05:51,228
You want to test these features and quickly be able to do that So that's the BoxLang
version manager very powerful tool and already getting great updates So check that one out

81
00:05:51,228 --> 00:05:51,890
as well

82
00:05:51,890 --> 00:05:53,552
Yeah, very handy on that one.

83
00:05:53,552 --> 00:05:59,072
Also, there was some updates to BoxLang AI so version 1.2.

84
00:05:59,072 --> 00:06:07,367
In this version, we added Claude support, new tooling APIs, some better message handling
and easier debugging.

85
00:06:07,367 --> 00:06:11,171
There's some new event, lifecycle events in there that you can hook into.

86
00:06:11,171 --> 00:06:14,984
And we've also kind of put out there sort of looking ahead

87
00:06:14,984 --> 00:06:24,595
you know, things that are going to be coming down the road, more tooling support, even
more providers and chat streaming, which is really nice.

88
00:06:24,595 --> 00:06:29,052
That's the one piece that I'm always kind of trying to figure out how do I implement this.

89
00:06:29,052 --> 00:06:35,342
But if you're looking to get, bring AI into your BoxLang application, definitely check out
BoxLang AI

90
00:06:35,342 --> 00:06:36,033
Awesome.

91
00:06:36,033 --> 00:06:40,996
Let's run out our BoxLang section by going to our BoxLang FAQ corner this week.

92
00:06:40,996 --> 00:06:47,341
This week I chose to highlight some of the Java integration that you can see inside of
BoxLang.

93
00:06:47,341 --> 00:06:49,243
specifically importing.

94
00:06:49,243 --> 00:06:54,707
So you can import Java classes directly into your BoxLang file and then be able to use
them.

95
00:06:54,707 --> 00:06:57,599
Static methods, create new instances of classes.

96
00:06:57,599 --> 00:06:59,762
You can also do star imports.

97
00:06:59,762 --> 00:07:06,494
So you can, for instance, import all of Java util and then you'll get the ArrayList, the
HashMap, all of those in there.

98
00:07:06,494 --> 00:07:09,566
as well as being able to alias, which is something that I've wanted forever.

99
00:07:09,566 --> 00:07:11,659
That's not just a Java import feature.

100
00:07:11,659 --> 00:07:14,552
That's any BoxLang import can be aliased.

101
00:07:14,552 --> 00:07:23,229
So now when you have, you know, two different collection classes, you can name them as
you'd like and have them in your file without having to have that full path everywhere.

102
00:07:23,229 --> 00:07:28,575
So lots of great things with imports inside of BoxLang for you to use.

103
00:07:28,575 --> 00:07:30,327
Okay, that rounds out our BoxLang corner.

104
00:07:30,327 --> 00:07:32,709
We can jump into a few CFML updates.

105
00:07:32,709 --> 00:07:33,952
There's just a couple this week.

106
00:07:33,952 --> 00:07:43,539
The first one I found was one from Ben Nadel about struct keys that contain dots, just
work in Adobe ColdFusion and that just work is in quotes.

107
00:07:43,539 --> 00:07:45,833
And I appreciate that he put it in quotes.

108
00:07:45,833 --> 00:07:59,261
The idea here was in using a .properties file or sorry a .ini file I believe for Adobe
ColdFusion Ben found that you could put you know nested keys right like foo.bar equals

109
00:07:59,261 --> 00:08:00,671
some value and

110
00:08:00,671 --> 00:08:08,169
As you might expect, if you use bracket notation on the struct and put foo.bar in there,
it works exactly how you'd like in every engine.

111
00:08:08,169 --> 00:08:16,386
Lucee, BoxLang, ColdFusion But in ColdFusion you could even just chain it together without
the quotes.

112
00:08:16,386 --> 00:08:20,302
variables.foo.bar would find that quote.

113
00:08:20,302 --> 00:08:22,564
And so, yeah, interesting.

114
00:08:22,564 --> 00:08:25,025
It works both ways for ColdFusion.

115
00:08:25,025 --> 00:08:26,605
It's not how it works for Lucee.

116
00:08:26,605 --> 00:08:28,286
That's not how it works for BoxLang.

117
00:08:28,286 --> 00:08:29,878
It's not how it works for Java.

118
00:08:29,878 --> 00:08:31,739
So maybe that's useful to you.

119
00:08:31,739 --> 00:08:36,762
It made me kind of sad, which is why I thought it was good to put that in quotes.

120
00:08:36,762 --> 00:08:42,296
If you've said the key is foo.bar, then that should be the key, not a weird amalgam.

121
00:08:42,296 --> 00:08:42,787
But.

122
00:08:42,787 --> 00:08:46,408
Now you know, it will work in Adobe ColdFusion and won't work anywhere else.

123
00:08:46,408 --> 00:08:48,912
So there you go.

124
00:08:48,912 --> 00:08:54,101
The other one we wanted to talk about, there's a new CFML wrapper for the Zint barcode
generator.

125
00:08:54,101 --> 00:08:55,566
Now I've never heard of Zint.

126
00:08:55,566 --> 00:08:59,454
It is a command line tool, so you can guess who made this wrapper.

127
00:08:59,454 --> 00:09:03,993
That's right, it's James Moberg, the king of command line wrappers for ColdFusion

128
00:09:03,993 --> 00:09:08,789
So we'll include the link to that It does make some cool looking QR codes.

129
00:09:08,789 --> 00:09:17,676
So definitely check out his blog post it like Has an embedded earth with like a ring
around it of a QR code and that's kind of crazy so

130
00:09:17,676 --> 00:09:18,666
Very interesting.

131
00:09:18,666 --> 00:09:25,281
On a separate note, I found out with QR codes that have images embedded I always wondered
how do they do that?

132
00:09:25,281 --> 00:09:26,501
You know, how do they build around it?

133
00:09:26,501 --> 00:09:27,732
How does it still scan it?

134
00:09:27,732 --> 00:09:40,652
uh There actually isn't any trick QR codes have built in like Redundancy so in case part
of it gets obscured or part of it gets, you know smudged or ripped off like it can

135
00:09:40,652 --> 00:09:45,238
recreate the entire QR code from just a portion and so when you embed an image

136
00:09:45,238 --> 00:09:55,537
the middle you're not actually changing the QR code you're just relying on the fact that
all the information can be made up somewhere else so just kind of a funny thing so I

137
00:09:55,537 --> 00:10:04,305
looked into that wanting to I thought about building my own because I don't know about you
but whenever I have to go create a QR code you get sent to all the websites that are like

138
00:10:04,305 --> 00:10:12,562
sign up for a $20 a month plan and we'll give you all these features and I'm like I just
want a QR code that points to a web page I don't need anything like

139
00:10:12,562 --> 00:10:21,539
this but they're the ones that give you all the cool things like put your logo in the
middle of this or so anyway I have not made that site yet so one day maybe but I did find

140
00:10:21,539 --> 00:10:25,659
out how to do images hey there was your bonus CFML update all right

141
00:10:25,659 --> 00:10:26,883
we move on to events.

142
00:10:26,883 --> 00:10:28,945
Alright, well we have a...

143
00:10:28,945 --> 00:10:34,259
If you missed into the box, we have the video series is now live on CFCasts.

144
00:10:34,259 --> 00:10:35,870
So this is a premium series.

145
00:10:35,870 --> 00:10:37,421
We're going to post the link here.

146
00:10:37,421 --> 00:10:43,697
However, if you attended online or you were on site, you should have free access to these
videos.

147
00:10:43,697 --> 00:10:49,443
So if you log in, you don't have access, definitely reach out to us and we will get that
taken care of for you.

148
00:10:49,443 --> 00:10:52,996
Our Patreons also get free access to the series.

149
00:10:52,996 --> 00:10:59,656
Just as a special thank you for continuing to support all that we do and we'll send you a
token.

150
00:10:59,656 --> 00:11:02,227
So again, if you haven't received that, please reach out.

151
00:11:02,227 --> 00:11:13,258
If you want to just purchase the series, if you weren't able to attend, you can do that
for $250 and that will give you on-demand lifetime access to the whole series.

152
00:11:13,258 --> 00:11:19,050
And CFCasts subscribers, we will be posting this on November 1st.

153
00:11:19,050 --> 00:11:24,677
So we will be doing that where it will just become available if you are a CFCasts
subscriber.

154
00:11:24,677 --> 00:11:29,877
Also, in case you missed it, we had a webinar this week or so ago on June 18th.

155
00:11:29,877 --> 00:11:38,843
It was building AWS Lambda apps with BoxLang led by Luis Majano We have a link up to that
video up on our YouTube page that we'll include for you.

156
00:11:38,843 --> 00:11:49,145
And coming up in July, July 23rd, we've got a webinar, which is by Ray Camden, and it's
covering Let's Build an App with Boxlang.

157
00:11:49,145 --> 00:11:52,705
So free tickets are available to this, and we'll be posting the link.

158
00:11:52,705 --> 00:11:55,625
It looks like it's July 23rd, 11 a.m.

159
00:11:55,625 --> 00:11:56,216
Central.

160
00:11:56,216 --> 00:12:00,562
So if you can make that, that's probably gonna be a good one to check out.

161
00:12:00,562 --> 00:12:03,054
Alright, CF Camp slides and recordings are up.

162
00:12:03,054 --> 00:12:10,173
We have the slides up on the Ortus site and on our YouTube channel we have links to the
three different recordings that we have.

163
00:12:10,173 --> 00:12:14,788
Go ahead and check those out in case you missed it, including the BoxLang Keynote that we
did up there.

164
00:12:14,788 --> 00:12:20,799
And then we got one more event that we have on our radar, which would be ColdFusion Summit
2025.

165
00:12:20,799 --> 00:12:31,099
Yeah, so I'm personally very excited because this is going to be my first CF Summit to not
only attend but also to be presenting a session on.

166
00:12:31,099 --> 00:12:34,601
So this is September 22nd and 23rd.

167
00:12:34,601 --> 00:12:38,375
Certifications are available on the 21st or 24th.

168
00:12:38,375 --> 00:12:44,583
And if you're interested, Luis and I both will be hosting a CBWire workshop.

169
00:12:44,583 --> 00:12:55,988
So that's a two-day training after CF Summit where we're going to be digging into
everything CBWire, how it works, how to use it in your apps, and also just spending time

170
00:12:55,988 --> 00:12:59,203
answering questions and working through maybe any sort of...

171
00:12:59,203 --> 00:13:03,649
things that you might want to particularly work on, we'll be there to help you with.

172
00:13:03,649 --> 00:13:10,039
So, would love to see you guys, if you're gonna be attending CF Summit at the CBWire
Workshop, so, very excited.

173
00:13:10,039 --> 00:13:12,717
All right, we told you it be a quick one today.

174
00:13:12,717 --> 00:13:14,170
We are at the end of it.

175
00:13:14,170 --> 00:13:16,884
We also want to thank all of our Patreon supporters.

176
00:13:16,884 --> 00:13:25,315
These are individuals and companies that are supporting our open source initiatives to
ensure we can continue delivering great products, deliver this podcast, funding

177
00:13:25,315 --> 00:13:27,137
infrastructure for Forgebox.

178
00:13:27,137 --> 00:13:31,081
We are very grateful to them for supporting this community.

179
00:13:31,081 --> 00:13:34,595
You can find out more at patreon.com/ortussolutions

180
00:13:34,595 --> 00:13:41,562
And don't forget that if you subscribe at the Bronze Package or up, ForgeBox Pro and
CFCasts subscriptions are yours as a perk.

181
00:13:41,562 --> 00:13:52,053
Again, you can go to patreon.com/ortussolutions or view a list of all of our current
sponsors at ortussolutions.com/about-us/sponsors

182
00:13:52,053 --> 00:13:58,284
So thank you again to all our Patreon supporters and thank you to you for listening to the
podcast this week.

183
00:13:58,284 --> 00:14:02,415
We hope for those of you in the States that you have a wonderful holiday weekend.

184
00:14:02,415 --> 00:14:05,706
And for those of you not in the States, we hope you have a wonderful weekend as well.

185
00:14:05,706 --> 00:14:06,418
Definitely.

186
00:14:06,418 --> 00:14:07,374
All right.

187
00:14:07,374 --> 00:14:09,164
I think that wraps this one up.

188
00:14:09,247 --> 00:14:09,956
Bye, everybody.

189
00:14:09,956 --> 00:14:10,297
now.