1
00:00:05,773 --> 00:00:09,936
Hello everybody and welcome to the Modernize or Die podcast.

2
00:00:09,936 --> 00:00:11,867
Today is April 15th.

3
00:00:11,867 --> 00:00:13,908
This is episode 231.

4
00:00:13,908 --> 00:00:17,640
My name is Eric Peterson, happy to be with you and I'm joined by Mr.

5
00:00:17,640 --> 00:00:18,911
Daniel Garcia.

6
00:00:19,253 --> 00:00:20,420
Eric, how are you doing today?

7
00:00:20,420 --> 00:00:21,493
I'm doing pretty great.

8
00:00:21,493 --> 00:00:26,504
Weather's turning up here in Utah and I can send my kids outside and it makes me very
happy.

9
00:00:26,504 --> 00:00:28,603
Do they stay outside or do want to come back in?

10
00:00:28,603 --> 00:00:29,814
They do, they do.

11
00:00:29,814 --> 00:00:33,136
And we enjoy going on family walks together in the evening.

12
00:00:33,136 --> 00:00:35,053
So we like the nicer weather.

13
00:00:35,053 --> 00:00:42,234
Of course, in Utah, it's gonna like get super cold again this week and then jump into the
90s.

14
00:00:42,234 --> 00:00:44,485
So only a little bit of nice weather.

15
00:00:45,013 --> 00:00:48,906
So it's also a tax day and I'm going to throw this out there.

16
00:00:48,906 --> 00:00:54,310
So I've been doing at Ortus have a fun house and I've been putting dad jokes and I got a
dad joke calendar.

17
00:00:54,310 --> 00:00:56,811
And today was a dad joke about taxes.

18
00:00:56,891 --> 00:00:58,832
It says, I don't do my own taxes.

19
00:00:58,832 --> 00:01:00,644
I'm just not into it.

20
00:01:00,644 --> 00:01:02,345
Get it into it.

21
00:01:02,631 --> 00:01:06,049
unfortunately unfortunately

22
00:01:06,049 --> 00:01:06,980
that as a regular feature.

23
00:01:06,980 --> 00:01:08,672
was just, it's tax day.

24
00:01:08,894 --> 00:01:13,133
And if you haven't gotten your taxes yet, finish this episode then go do them.

25
00:01:13,133 --> 00:01:15,455
Dad Joke Corner brought to you by Daniel.

26
00:01:15,455 --> 00:01:16,816
Thank you, Daniel.

27
00:01:17,897 --> 00:01:19,960
Well, let's jump into some Ortus news.

28
00:01:19,960 --> 00:01:22,083
Into the box, just around the corner.

29
00:01:22,083 --> 00:01:23,745
The end of the month, really.

30
00:01:23,745 --> 00:01:28,065
I guess it's technically April, May, but consider it April.

31
00:01:28,065 --> 00:01:29,838
No workshops are April 30th.

32
00:01:29,838 --> 00:01:33,172
I like I should know this since I'm given a workshop.

33
00:01:33,814 --> 00:01:35,734
April 30th is the workshop day.

34
00:01:35,734 --> 00:01:38,435
Okay, it is end of the month.

35
00:01:38,815 --> 00:01:41,286
So we only have 20 on-site tickets left.

36
00:01:41,286 --> 00:01:50,501
So if you've been kicking the can down the road procrastinating, like stop what you're
doing, go to intothebox.org and order your tickets.

37
00:01:50,501 --> 00:01:53,032
Workshops only available for our on-site attendees.

38
00:01:53,032 --> 00:01:57,123
It looks like we have three spots left for our getting started with BoxLang.

39
00:01:57,484 --> 00:02:00,285
And we have some other great options to consider as well.

40
00:02:01,127 --> 00:02:04,728
Team packs are available, that's the only way to get early bird pricing right now.

41
00:02:04,728 --> 00:02:07,378
Buy one, get one half off, or buy two, get one free.

42
00:02:07,378 --> 00:02:08,752
me post these links.

43
00:02:08,752 --> 00:02:12,424
you are not gonna be able to make it in person, we're really sad.

44
00:02:12,424 --> 00:02:16,918
This is gonna be epic into the box, but you can get our virtual ticket.

45
00:02:17,039 --> 00:02:21,302
Today is the last day to get Early Bird online ticket pricing.

46
00:02:21,302 --> 00:02:23,683
We'll throw that link in our show notes.

47
00:02:24,123 --> 00:02:30,678
If you don't buy today, you're up to the normal virtual price, but you can still pick
those up all the way up to the start of the conference.

48
00:02:31,417 --> 00:02:34,071
fair, our normal virtual price is pretty reasonable.

49
00:02:34,071 --> 00:02:37,896
Considering all the content you get, it's just if you want to be even more reasonable.

50
00:02:38,247 --> 00:02:42,412
All of these prices are very reasonable for a conference, head over to those links.

51
00:02:42,412 --> 00:02:44,295
Again, we hope to see you there in person.

52
00:02:44,295 --> 00:02:49,119
And we'll tell you there's a big special reason why we'll get to later in this podcast.

53
00:02:49,420 --> 00:02:50,094
Can't wait.

54
00:02:50,094 --> 00:02:51,651
We have some product updates.

55
00:02:51,651 --> 00:02:55,104
Daniel, do want to tell us about Command Box 6.2?

56
00:02:55,230 --> 00:02:58,891
They do CommandBox 6.2.0.

57
00:02:58,891 --> 00:03:00,711
That point zero is very important.

58
00:03:00,711 --> 00:03:02,011
It was released.

59
00:03:02,091 --> 00:03:13,011
We've got nine tickets with several bug fixes and some new features including the Jakarta
server support, which is important for BoxLang and ACF 2025 and Lucee seven.

60
00:03:13,011 --> 00:03:17,311
Some new changes with those that we need to make sure that CommandBox box supports.

61
00:03:17,602 --> 00:03:20,614
one of my new favorite features is a server warmup URLs.

62
00:03:20,614 --> 00:03:27,886
So that way when you start the site, you can automatically kick off some URLs to hit till
I want the site so that when you start the site, I'll warm up the site.

63
00:03:27,886 --> 00:03:37,310
So if you start your site and you need to run some initialization routines or do whatever,
it'll kick off these server warmup URLs and you'll be back in business.

64
00:03:37,310 --> 00:03:42,011
a lot of times when you have to start your site manually, then you have to manually
remember to go back and click those links.

65
00:03:42,011 --> 00:03:44,962
Well, here you just automate it all for you.

66
00:03:45,332 --> 00:03:48,608
If you want more information, we'll go ahead and put that into the chat.

67
00:03:48,608 --> 00:03:58,704
The server warmup URLs, all I can think of with that is hibernate ORM, how when you hit
your site, it has to crawl all the different entities and metadata and load everything,

68
00:03:58,704 --> 00:04:02,059
and you just want that to be done before anybody actually has to hit it.

69
00:04:02,501 --> 00:04:09,219
or if you've got like a lot of cache queries where you want to make sure they get
initialized in cache before anyone does anything.

70
00:04:09,863 --> 00:04:11,415
Yep, that's another good idea.

71
00:04:11,415 --> 00:04:13,977
So that's CommandBox 6.2 out right now.

72
00:04:13,977 --> 00:04:16,458
Next, let's talk about the ColdBox Vite plugin.

73
00:04:16,458 --> 00:04:20,081
So Vite is, we're talking JavaScript land.

74
00:04:20,081 --> 00:04:21,962
It's a module bundler.

75
00:04:21,962 --> 00:04:22,452
You know what?

76
00:04:22,452 --> 00:04:25,663
I haven't done enough JavaScript to know the terms I use now.

77
00:04:25,683 --> 00:04:32,760
What I do know is if I want modern JavaScript frameworks like Vue and React to run, Vite's
the way I choose to do it.

78
00:04:32,760 --> 00:04:34,281
because it's super fast.

79
00:04:34,281 --> 00:04:42,138
In fact, the other day I was doing some development on the site that used Coldbox Elixir,
the old webpack bundler.

80
00:04:42,599 --> 00:04:47,913
And I'd save a change and it would take maybe a second to reload and compile.

81
00:04:47,913 --> 00:04:49,665
And I was like, this is garbage.

82
00:04:49,665 --> 00:04:51,266
Vite does this in 10 milliseconds.

83
00:04:51,266 --> 00:04:52,146
What's going on?

84
00:04:52,146 --> 00:04:55,360
So I almost ripped it out and put Vite in.

85
00:04:55,360 --> 00:04:57,201
And then I realized that wasn't my job at the moment.

86
00:04:57,201 --> 00:04:58,562
So next time.

87
00:04:58,684 --> 00:05:08,832
But the ColdBox Vite plugin is the easiest way to hook into your ColdBox site so you can
add in modern JavaScript with your existing ColdBox server rendered site.

88
00:05:08,832 --> 00:05:11,353
It has support for the latest Vite and all the goodies there.

89
00:05:11,353 --> 00:05:16,697
You can also get started quickly with our template using the CommandBox box.

90
00:05:16,697 --> 00:05:20,901
You can do a ColdBox create app and pass in cbtemplate-vite.

91
00:05:20,981 --> 00:05:22,534
Get everything you need to get started.

92
00:05:22,534 --> 00:05:28,094
I got to do some work with Quick version 11.2.

93
00:05:28,094 --> 00:05:36,785
I got to meet with a client and as usual, performance issues in Quick come down to not
eager loading relationships.

94
00:05:36,785 --> 00:05:43,447
So eager loading's the idea that if you have a blog post and you wanna get the author to
get the author's name, you

95
00:05:43,447 --> 00:05:58,547
could mistakenly load 20, 40, 50 blog posts in one database request and then proceed to do
50 single database requests to load the author for each post as you're looping through it.

96
00:05:58,747 --> 00:06:02,267
Eager loading instead will go grab all those at once and stitch them together for you.

97
00:06:02,267 --> 00:06:06,507
So it's huge on performance but also can be easy to miss.

98
00:06:06,507 --> 00:06:12,855
Well, I finally jumped in and added a way to disable all lazy loading.

99
00:06:12,855 --> 00:06:23,299
in development, you can do it per environment so that you're in development and it will
throw an exception at you and tell you like, hey, you tried to lazy load this, go you load

100
00:06:23,299 --> 00:06:28,001
this and help you avoid those performance problems before they even get to production.

101
00:06:28,001 --> 00:06:30,875
So that's out in quick 11.2.

102
00:06:30,875 --> 00:06:32,239
It is.

103
00:06:33,027 --> 00:06:33,988
Nice.

104
00:06:34,950 --> 00:06:36,331
Nice, nice, nice.

105
00:06:37,114 --> 00:06:37,464
Okay.

106
00:06:37,464 --> 00:06:41,796
So this week's episode is sponsored by Ortus solutions.

107
00:06:41,796 --> 00:06:52,101
Imagine that we want to feature CommandBox Pro if you haven't heard CommandBox Pro it's
CommandBox with a bunch of other really cool things that are definitely worth paying for.

108
00:06:52,362 --> 00:06:56,364
obviously the most important one is support SLAs and trust from Ortus.

109
00:06:56,364 --> 00:07:02,728
You get the service manager modules so that if you've got a server set up and you want it
to start automatically, will do that.

110
00:07:02,808 --> 00:07:04,689
if you're just like any other service.

111
00:07:05,089 --> 00:07:10,032
You do get a ForgeBox Pro account included with every CommandBox Pro license you purchase.

112
00:07:10,032 --> 00:07:15,437
So if you want to do your own private packages and share that within your team, you can do
all sorts of cool things like that.

113
00:07:15,437 --> 00:07:23,682
Multi-server features, you can do CommandBox multi-site, which allows you to pay us, it's
like doing virtual hosting, where if you want to have one CommandBox instance and host,

114
00:07:23,682 --> 00:07:28,714
you know, multiple sites, dozens of sites for whatever, you can do that.

115
00:07:28,818 --> 00:07:35,778
We also have the automatic JDK management and manager versions on each specific
application deploy as well as SNI support.

116
00:07:35,778 --> 00:07:38,992
We're in multiple certs, SL certs on the same IP address.

117
00:07:38,992 --> 00:07:43,619
So if you want to go check that out, go to the website for CommandBox Pro and we'll put
that in the link.

118
00:07:43,619 --> 00:07:47,619
Let's go over to our BoxLang corner.

119
00:07:47,919 --> 00:07:52,579
BoxLang 1.0 RC3 has been launched.

120
00:07:52,699 --> 00:07:56,919
Let's tell you about some of the headline features here.

121
00:07:56,919 --> 00:08:04,379
We kind of teased them last podcast, but performance, we've tested the runtime against all
our major libraries.

122
00:08:04,379 --> 00:08:09,419
It's faster than Adobe 2021, 23, 25.

123
00:08:09,559 --> 00:08:12,439
It's give or take with Lucee depending on the test.

124
00:08:12,599 --> 00:08:13,014
So,

125
00:08:13,014 --> 00:08:18,540
great work to the entire BoxLang team for just iterating and iterating on that
performance.

126
00:08:18,540 --> 00:08:24,865
The BXORM module is out so you can integrate with Hibernate for all you poor people that
still have to do that.

127
00:08:24,865 --> 00:08:26,206
That's obviously my opinion.

128
00:08:26,206 --> 00:08:27,728
I should have prefaced that.

129
00:08:27,728 --> 00:08:29,309
Virtual thread support.

130
00:08:29,309 --> 00:08:36,484
This is a fun feature that I had to look up for Java 21, I believe, but just a lighter
weight thread that can be

131
00:08:36,484 --> 00:08:46,563
Backgrounded similar to virtual memory so that when you do IO tasks in the thread, it
doesn't lock up the entire like CPU thread Scheduler so the if you've ever used the cold

132
00:08:46,563 --> 00:08:53,100
box scheduler, which is incredibly powerful and intuitive You can do all that in box
laying.

133
00:08:53,100 --> 00:09:02,118
In fact, that's replaces kind of the crazy scheduler UI that you can find in Adobe and
Lucee and My favorite little feature from here

134
00:09:02,229 --> 00:09:10,753
You can run it from the CLI so you can without starting up your application go to BoxLang
schedule and then pass in a scheduler.

135
00:09:10,753 --> 00:09:13,223
You don't have to run cron You have to do anything like that.

136
00:09:13,223 --> 00:09:16,374
It will just run forever and run your tasks for you.

137
00:09:16,374 --> 00:09:24,258
So then you can use all the nice BoxLang scheduling methods like saying run every day or
Every workday at 8 a.m.

138
00:09:24,258 --> 00:09:28,749
Instead of having to figure out the random cron incantation for that

139
00:09:29,594 --> 00:09:31,706
So that's BoxLang RC3 out now.

140
00:09:31,706 --> 00:09:38,422
You can go please test your site because this is the last RC before the stable release.

141
00:09:38,422 --> 00:09:40,064
When's the stable release gonna happen?

142
00:09:40,064 --> 00:09:47,132
As hinted earlier, Into the Box 2025 we will be launching the stable release of BoxLang
1.0.

143
00:09:47,132 --> 00:09:56,892
So you want to be there, Into the Box 2025, whether you're joining online or in person,
this is gonna be the conference that gets you up and running on BoxLang to start

144
00:09:56,892 --> 00:10:00,792
supercharging your development fast and easy.

145
00:10:01,172 --> 00:10:05,012
And now's the time to grab a BoxLang plan.

146
00:10:05,192 --> 00:10:11,012
This is in your future, you want to save some money on it, they're 25 % off until Into the
Box.

147
00:10:11,332 --> 00:10:15,823
So grab that, we'll see you there May 1st for the BoxLang stable release.

148
00:10:15,823 --> 00:10:23,227
And then one more last important bit of box news BoxLang news are the virtual machines are
now on AWS.

149
00:10:23,588 --> 00:10:31,713
So if you've been wanting to play with BoxLang and you've been waiting to for it to appear
at AWS as a VM, it's there, you can do it.

150
00:10:31,713 --> 00:10:34,785
We're going to go ahead and post the link and go play with it.

151
00:10:35,620 --> 00:10:43,283
Yeah, we announced last week or last podcast rather that we had them up on Azure and now
they're up on AWS.

152
00:10:43,283 --> 00:10:44,999
How about some CFML updates, Daniel?

153
00:10:44,999 --> 00:10:49,082
Do you want to tell us about the security updates that came out this last couple weeks?

154
00:10:49,226 --> 00:10:52,086
So they're a big one for both Adobe and Lucee.

155
00:10:52,086 --> 00:10:55,586
I think it's pretty much the similar, similar exploit.

156
00:10:56,126 --> 00:10:58,946
There are security updates available for Adobe CF.

157
00:10:58,946 --> 00:11:00,606
We'll get the links there in the chat.

158
00:11:00,606 --> 00:11:02,266
Similar for Lucee.

159
00:11:02,306 --> 00:11:10,546
It's where if you've got a certain condition on the server, somebody can take advantage of
an exploit where they can execute code remotely.

160
00:11:11,186 --> 00:11:18,566
Now, if Lucee did say that if you're on a shared hosting environment, this is a little bit
more of an issue than if you're hosting privately.

161
00:11:18,580 --> 00:11:22,053
But if you go through and kind of read through the docs, you can kind of see what it
handles.

162
00:11:22,053 --> 00:11:25,335
You have to kind of decide if that's something you want to account for.

163
00:11:25,356 --> 00:11:29,419
Now with Lucee, if you just want to update to latest Lucee, I don't think there's any
issues with that.

164
00:11:29,419 --> 00:11:30,560
Just do it.

165
00:11:30,560 --> 00:11:31,621
Why not?

166
00:11:31,701 --> 00:11:32,593
Don't worry about it.

167
00:11:32,593 --> 00:11:41,913
Yeah, was something about being able to write bytecode directly to the server and then
Lucee would run it, which I feel like if somebody can write files directly to your server,

168
00:11:41,913 --> 00:11:43,706
you might have a bigger problem, but.

169
00:11:43,706 --> 00:11:49,539
I was talking to Brad about it too when it came out and it's like if you can do this first
step, then you can do the second step.

170
00:11:49,539 --> 00:11:51,370
But most people don't allow you to do the first step.

171
00:11:51,370 --> 00:11:53,591
So you're probably okay anyway.

172
00:11:54,332 --> 00:11:58,594
But definitely worth reviewing your code base and updating or just update anyway.

173
00:11:58,594 --> 00:12:05,269
And for Lucee, you can also add an environment file to lock it down even further,
especially if you're using CommandBox or Lucee environment variables.

174
00:12:05,269 --> 00:12:16,426
another big news is there a 6.2.1.112 RC final release candidate is out for you to play
with and test with and check out and make sure it all works the way you're hoping it

175
00:12:16,426 --> 00:12:16,887
works.

176
00:12:16,887 --> 00:12:19,682
Yeah, I'm looking at their server change log for that.

177
00:12:19,682 --> 00:12:23,542
It looks like a lot of bug fixes, not really any new enhancements.

178
00:12:23,542 --> 00:12:25,992
It's just kind of what you expect at this point in an RC.

179
00:12:25,992 --> 00:12:30,421
give that a run on your Lucee servers and let them know if anything's still missing.

180
00:12:30,421 --> 00:12:32,321
Let me post the link for that.

181
00:12:32,461 --> 00:12:36,381
And I think there's some more blog posts or new blog posts we want to talk about this
week.

182
00:12:36,381 --> 00:12:38,161
don't you take us to those, Eric?

183
00:12:38,431 --> 00:12:39,953
Sure, let's highlight a few of them.

184
00:12:39,953 --> 00:12:44,125
The first one, let's talk about PDF generation, bloat and optimization.

185
00:12:44,125 --> 00:12:52,721
This is a blog post by James Moberg comparing and contrasting a few different ways to
generate PDFs using CFML servers.

186
00:12:52,721 --> 00:13:04,630
Good old CF document, CF HTML to PDF and WK HTML to PDF, which if you haven't heard of
that one is actually a separate utility ran via the command line that can also generate

187
00:13:04,980 --> 00:13:07,534
web pages based on WebKit technologies.

188
00:13:07,534 --> 00:13:11,156
So you can go and check out all of his code and how he runs it.

189
00:13:11,156 --> 00:13:19,719
I mean, the answer is WebKit HTML to PDF is faster and smaller file size and seems like
the clear winner to me.

190
00:13:20,307 --> 00:13:21,827
Doesn't have a tag for it.

191
00:13:21,827 --> 00:13:24,187
You can't just say CF blah, blah.

192
00:13:24,248 --> 00:13:38,719
You know you say that, except there is a WK HTML to PDF module on Forgebox that you can
install a wrapper to use that service written by the in-league team, Sam Knowlton and

193
00:13:38,719 --> 00:13:39,660
friends.

194
00:13:40,281 --> 00:13:45,197
So if you're missing the I want one tag to do this, go check out that module.

195
00:13:45,197 --> 00:13:46,577
I got you, Daniel.

196
00:13:46,778 --> 00:13:48,221
I was setting you up.

197
00:13:49,139 --> 00:13:57,488
I remember our team, man, over a decade ago, quickly found that CF document was not gonna
cut it and use that WKHTML to PDF.

198
00:13:57,489 --> 00:14:08,196
And I feel like this falls right in James's wheelhouse as one of his last blog posts we
talked about was about using native CommandBox line tools instead of ColdFusion tags, if

199
00:14:08,196 --> 00:14:09,457
you remember that.

200
00:14:09,998 --> 00:14:13,740
So this just falls right into his wheelhouse, yep.

201
00:14:13,823 --> 00:14:14,598
Thank you for that.

202
00:14:14,598 --> 00:14:17,905
And yeah, use WKHTML2PDF probably.

203
00:14:17,905 --> 00:14:26,036
We have another one from Ben Nadal about HTTP GET and HTTP POST are sufficient for me in
ColdFusion.

204
00:14:26,346 --> 00:14:33,499
so, HTTP in browsers has two verbs, get or post your forms can get or post.

205
00:14:33,499 --> 00:14:39,752
but there are more verbs defined by the HTTP specification, put patch, delete options,
some other ones as well.

206
00:14:39,752 --> 00:14:44,524
the APIs tend to use and that applications can use as well, kind of spoofing it.

207
00:14:44,524 --> 00:14:50,245
A cold box makes this really easy so that you can use all these different verbs and have

208
00:14:50,727 --> 00:15:02,887
In my opinion, all this comes down to opinion, a really nicely tuned API, something that
looks really nice as far as the URL structure goes, organized.

209
00:15:03,247 --> 00:15:07,418
Ben here argues that you know what, the browser can't handle it basically.

210
00:15:07,418 --> 00:15:10,718
It's extra mental weight that you can't use.

211
00:15:10,718 --> 00:15:17,354
It's kind of a leaky abstraction because your GET might mutate a last access date or
your...

212
00:15:17,354 --> 00:15:23,074
delete might just be modifying the flag instead of actually deleting, so why are we
pretending this?

213
00:15:23,954 --> 00:15:28,254
So you get a lot of, can get read for his opinions.

214
00:15:28,254 --> 00:15:38,014
He makes a lot of good points, and I think the biggest point is, know, browsers can't
actually do put, patch, or delete or anything besides get and post, so everything after

215
00:15:38,014 --> 00:15:40,694
that's kind of faking it.

216
00:15:40,694 --> 00:15:46,594
But we also live in a world where APIs are king, and those can support all those verbs.

217
00:15:47,276 --> 00:15:50,720
if you haven't caught on from the way I've been describing it.

218
00:15:50,720 --> 00:15:52,862
I love all the HTTP verbs.

219
00:15:52,862 --> 00:16:03,873
In fact, I have a video I want to throw in there that's one of my favorite talks that I've
ever seen, which is called Cruddy by Design by Adam Wavin.

220
00:16:03,873 --> 00:16:05,415
So we'll throw that in there.

221
00:16:05,415 --> 00:16:09,038
Obviously, this comes down to your organization.

222
00:16:09,632 --> 00:16:12,044
and how you want to structure your application, right?

223
00:16:12,044 --> 00:16:16,830
These HTTP verbs there to help you describe how you want to be organized, right?

224
00:16:16,830 --> 00:16:22,134
One of Ben's posts was, if you need a router, I think you've overcomplicated things.

225
00:16:22,134 --> 00:16:26,126
And for me, like the router is where I live in Coldbox apps.

226
00:16:26,126 --> 00:16:29,879
Like I love that can go to one file and see everything that happens in the app.

227
00:16:30,019 --> 00:16:33,312
So it's a bit of a difference of how you want to structure your apps.

228
00:16:33,312 --> 00:16:36,067
And as he said, the one's not right and the other wrong.

229
00:16:36,067 --> 00:16:40,291
but you can definitely look at both and think, how do I want to structure my app?

230
00:16:40,913 --> 00:16:43,265
So we'll give you a little bit of both sides here.

231
00:16:43,802 --> 00:16:44,063
fair.

232
00:16:44,063 --> 00:16:48,971
I don't think Ben uses a ColdBox And so he might

233
00:16:48,971 --> 00:16:52,016
his own self-built framework, if any.

234
00:16:52,629 --> 00:17:00,243
And I will say early on when I started with Ortus, I've been an Ortus almost four years
now and early on I was working on a project and worth you Eric and you showed me this

235
00:17:00,243 --> 00:17:03,009
cruddy by design video and it blew my mind.

236
00:17:03,009 --> 00:17:04,631
As in of course we should do it this way.

237
00:17:04,631 --> 00:17:05,974
Of course this makes sense.

238
00:17:05,974 --> 00:17:12,978
Yeah, you know the fun thing is, like, I love that talk and I try to build things that way
and then sometimes I don't because it doesn't make sense.

239
00:17:13,039 --> 00:17:22,666
So like, I think Ben had one about that where if you're doing a bulk operation of bulk
delete, you can't pass a body in the delete statement so you do a post.

240
00:17:23,387 --> 00:17:24,868
That's not ideal.

241
00:17:24,868 --> 00:17:25,629
That's what you do.

242
00:17:25,629 --> 00:17:27,930
Sometimes you just, make your code work.

243
00:17:27,990 --> 00:17:29,051
It's fine.

244
00:17:29,271 --> 00:17:32,673
All of our code's held together with duct tape and string anyways.

245
00:17:32,983 --> 00:17:35,636
Best practices are best, except when they're not.

246
00:17:35,938 --> 00:17:36,605
There you go.

247
00:17:36,605 --> 00:17:41,968
Okay, now we do have another blog article, getting the client's IP address using Lucee and
Confusion.

248
00:17:41,968 --> 00:17:43,321
This is by Gregory Alexander.

249
00:17:43,321 --> 00:17:53,998
Basically going through the poll showing different ways of extracting that IP address and
whether it's, know, using the getHttpRequest data, use the CGI variable, but it kind of

250
00:17:53,998 --> 00:17:58,540
goes a little bit further because sometimes your server is behind a load balancer or a
proxy.

251
00:17:58,561 --> 00:18:03,332
And so you can't just grab the IP address because you're grabbing the IP address of that
middle server.

252
00:18:03,332 --> 00:18:08,055
And so you may need look for things like X forward for, because a lot of them will pass
that along.

253
00:18:08,055 --> 00:18:10,276
And so he shows an example of how to grab that.

254
00:18:10,276 --> 00:18:18,222
And then there's a couple others that he talks about, including if you're using X real IP,
some load balancers engine X use that instead.

255
00:18:18,222 --> 00:18:22,784
Or if you have a CF connecting IP key, someone use that for cloud flare.

256
00:18:22,784 --> 00:18:31,769
And so really some nice examples of all the different scenarios you might run into or for
grabbing that real IP address and not the proxied IP address.

257
00:18:31,962 --> 00:18:41,475
I know a while back Gavin created something on Forgebox to kind of say get real IP that
kind of did this, but Gregory went way beyond what Gavin did and I kind of like it.

258
00:18:42,236 --> 00:18:47,741
Basically if you use this, it'll catch every IP and all these different scenarios we
talked about.

259
00:18:47,963 --> 00:18:51,478
And so it's a nice little utility there he's got, or example he's got.

260
00:18:51,478 --> 00:18:56,340
Yeah, as described, it really depends on your technology stack, right?

261
00:18:56,340 --> 00:19:02,624
If you got Cloudflare in there, Fastly in there, know, NGINX, what do you have and what
key it's using?

262
00:19:02,624 --> 00:19:07,347
We have a utility that, you know, I've used because I felt like it was good enough.

263
00:19:07,347 --> 00:19:14,860
Right inside CB Security, on the CB Security model, you can call get real IP and it will
go and grab

264
00:19:14,860 --> 00:19:20,075
like the cluster client IP or the X forwarded for, and then finally the CGI variable.

265
00:19:20,075 --> 00:19:23,717
But it doesn't have those, you know, Cloudflare ones, the Fastly ones.

266
00:19:23,717 --> 00:19:29,662
So you might need to implement your own kind of function based on what is in your
technology stack.

267
00:19:29,973 --> 00:19:31,365
Yep, that's the one I was talking about.

268
00:19:31,365 --> 00:19:32,317
That's on Fordbox.

269
00:19:32,317 --> 00:19:33,728
Gavin put that together.

270
00:19:33,728 --> 00:19:35,712
And get real IP.

271
00:19:35,712 --> 00:19:40,405
now it's, it might still be a Forgebox module, but it is now part of CB Security as well.

272
00:19:40,407 --> 00:19:42,876
So you might not even need to install anything else.

273
00:19:42,876 --> 00:19:47,652
I kind of feel like we should look at the other examples from Gregory and maybe add some
of those.

274
00:19:47,991 --> 00:19:51,809
Yeah, I think the trickiest part will be deciding the order.

275
00:19:51,809 --> 00:19:56,120
But then again, you're probably not using Fastly and Cloudflare, right?

276
00:19:56,120 --> 00:19:57,263
So.

277
00:19:57,263 --> 00:19:57,584
Yep.

278
00:19:57,584 --> 00:20:00,689
And so if you're testing for it to exist and doesn't exist, you ignore it.

279
00:20:00,689 --> 00:20:02,162
So yeah, you're probably not using multiple.

280
00:20:02,162 --> 00:20:05,890
And if you are, then you got issues, I guess.

281
00:20:06,057 --> 00:20:06,498
All right.

282
00:20:06,498 --> 00:20:07,759
Well, thank you everybody.

283
00:20:07,759 --> 00:20:12,563
This is not all of the CFML posts that were through this week, but we only have time to
highlight a few.

284
00:20:12,563 --> 00:20:13,493
So let's move on.

285
00:20:13,493 --> 00:20:16,365
We still have some events that we want to cover.

286
00:20:16,365 --> 00:20:22,970
As mentioned, Into the Box Workshops, April 30th, Conference May 1st and 2nd.

287
00:20:22,970 --> 00:20:25,652
BoxLang 1.0 stable is launching.

288
00:20:25,652 --> 00:20:28,095
You want to be there in Washington, DC.

289
00:20:28,095 --> 00:20:29,595
20 tickets left.

290
00:20:30,287 --> 00:20:33,212
Go buy them, come visit us, we're excited for it.

291
00:20:33,334 --> 00:20:39,711
And for all those that have already bought their tickets, who are speaking, we're very
excited to see you there, it's gonna be a blast.

292
00:20:39,711 --> 00:20:43,454
CF camp a little bit after that May 22nd and 23rd.

293
00:20:43,454 --> 00:20:50,795
This is in Munich Germany a new hotel, but still in Munich You can check it out CF camp
org I Know Luis is going to be there.

294
00:20:50,795 --> 00:21:02,327
I believe Brad is going to be there as well So we have some Ortus representation and some
great talks on BoxLang We hope to see at CF camp if you are on that side of the world It's

295
00:21:02,327 --> 00:21:04,739
a little easier to get to Munich than it is to DC

296
00:21:04,739 --> 00:21:06,502
And finally, coming up in step two.

297
00:21:06,502 --> 00:21:19,822
Cold Fusion Summit 2025, September 22nd, 23rd in Las Vegas with, I believe the 21st and or
the 24th being certification class days where you can go in and get certified.

298
00:21:20,805 --> 00:21:24,525
And do we know if Ortus is doing a workshop around there?

299
00:21:24,525 --> 00:21:25,786
We usually do.

300
00:21:25,946 --> 00:21:26,826
I haven't heard yet.

301
00:21:26,826 --> 00:21:28,649
It still might be a little bit way out.

302
00:21:28,649 --> 00:21:35,859
think, I imagine we're probably waiting to get through ITB and just keep all our focus
there first before we, look beyond ITB.

303
00:21:35,859 --> 00:21:39,373
And then of course CF Camp, Luis and Brad will be there a few weeks later.

304
00:21:39,373 --> 00:21:40,089
So.

305
00:21:40,328 --> 00:21:44,814
And there is a CF Camp Pre-Conference Workshop with Ortus that you can join.

306
00:21:45,097 --> 00:21:48,236
I'll absolutely there be talking about BoxLang.

307
00:21:48,236 --> 00:21:55,806
Yep, it's getting started with the BoxLang runtimes with Brad or Zero the Hero with
Coldbox and BoxLang with Luis.

308
00:21:55,806 --> 00:21:56,886
Excellent.

309
00:21:57,427 --> 00:22:00,149
Okay, that's probably it for our episode today.

310
00:22:00,149 --> 00:22:03,001
thank you to all of our Patreon supporters.

311
00:22:03,001 --> 00:22:12,843
We are grateful to all of those individuals and companies supporting our open source
initiatives like Command Box, Forgebox, and Coldbox, all the other great boxes out there.

312
00:22:12,923 --> 00:22:17,425
Funding the cloud infrastructure that Forgebox runs on in our community site.

313
00:22:17,425 --> 00:22:21,365
You can support us at patreon.com slash Orda Solutions.

314
00:22:22,006 --> 00:22:26,514
You can see all of the sponsors that we have now at ordasolutions.com.

315
00:22:26,514 --> 00:22:29,521
slash about dash us slash sponsors.

316
00:22:29,739 --> 00:22:37,059
So don't forget we do have annual memberships available and pay for the year and save 10%,
which is great for everybody, not just businesses.

317
00:22:37,619 --> 00:22:41,999
Bronze packages, you get a ForgeBox Pro account and the CFCast subscription as a perk.

318
00:22:42,159 --> 00:22:48,870
You get your profile badge community website, private access on the community website and
a private channel on Box Team Slack.

319
00:22:48,870 --> 00:22:50,530
Thanks everyone for joining.

320
00:22:50,810 --> 00:22:53,250
We will see you, let's see, in a couple weeks.

321
00:22:53,250 --> 00:22:55,890
It's going to be BoxLang into the box time.

322
00:22:55,890 --> 00:22:58,950
Are we going to be podcasting from into the box, Daniel?

323
00:22:59,141 --> 00:23:00,462
You know, we're figuring that out.

324
00:23:00,462 --> 00:23:02,525
If we do, it's going be a special podcast.

325
00:23:02,525 --> 00:23:11,702
Normally our next normal scheduled podcast would be May 6th, because we are going to do
the first and third Tuesdays of the month, not in every other week thing, first and third

326
00:23:11,702 --> 00:23:12,112
Tuesday.

327
00:23:12,112 --> 00:23:17,737
So we haven't finalized the box or the into the box schedule, we're hoping to do
something.

328
00:23:18,058 --> 00:23:19,470
You know, maybe a one-off, but

329
00:23:19,470 --> 00:23:23,882
But you don't have to worry about missing hearing us because you're gonna be at Into the
Box.

330
00:23:23,882 --> 00:23:26,023
You're gonna be coming to our sessions.

331
00:23:26,023 --> 00:23:28,446
You're gonna be hanging out at Happy Box.

332
00:23:28,446 --> 00:23:33,348
You're gonna be full of all the time that you would want with Daniel and myself.

333
00:23:33,828 --> 00:23:34,833
And probably more.

334
00:23:34,833 --> 00:23:35,547
Yeah.

335
00:23:35,547 --> 00:23:37,673
smell us, it'll all be good.

336
00:23:37,823 --> 00:23:39,354
Hopefully not smell us.

337
00:23:41,357 --> 00:23:42,619
All right, everybody.

338
00:23:42,619 --> 00:23:44,871
Thanks and have a great rest of your day.

339
00:23:45,014 --> 00:23:45,876
Thanks everybody.