Modernize or Die® - CFML News Podcast for April 30th, 2024 - Episode 215

2024-04-30 Weekly News - Episode 215

Watch the video version on YouTube at

  • Eric Peterson - Senior Developer at Ortus Solutions
  • Daniel Garcia - Senior Developer at Ortus Solutions

Thanks to our Sponsor - Ortus Solutions

The makers of ColdBox, CommandBox, ForgeBox, TestBox and all your favorite box-es out there. 
A few ways to say thanks back to Ortus Solutions:


Patreon Support (charming)

We have 50 patreons:

News and Announcements

ICYMI — CFCamp has announced the first batch of Sessions
This year's programme was once again open for participation from the CFML and wider development communities. If you're interested in what the Call For Papers for CFCamp 2024 looked like - it's still online on (but now closed as of end of March 2024).

So far, we have confirmed and announced 20 sessions. There are still a few more to come, stay tuned.

The sessions will be assigned to slots and rooms a bit closer to the event.

New Releases and Updates

ICYMI - qb 9.8.2 – 9.10.0
  • New addIndex method for adding indexes to existing tables 
  • New BindingsCommenter for SQL Commenter
  • Performance improvement for large recordsets (Thanks, John Whish!)

ICYMI - Quick 8.0.3
Support qb's SqlCommenter.

ICYMI - Megaphone 1.0.3 – 1.0.4
Bug fixes in the Slack Provider

In Beta - cbq 3.0.0-beta.7
  • More reliable Database Provider
  • Keep completed or failed database provider jobs around for debugging
  • Wait for jobs to complete when reiniting or shutting down ColdBox (up to a timeout)

Webinars, Meetups and Workshops

ICYMI — CF Summit Online
Charlie Arehart has provided all the links for this

List of Sessions, Descriptions and Links:
Youtube Playlist of the Sessions:

CFCasts Content Updates

Recent Releases

Conferences and Training

ITB 2024

CFCamp 2024

CF Summit West in Las Vegas

At Resorts World - New venue!!!
Sep 30 - Oct 1st for the Conference
Oct 2nd for the Certification

$99 for the Session Pass right now.
Coupon code might be in your email if you are a previous attendee for even better pricing
$199 for the Professional Pass - include Certification Training on the 2nd of Oct.

Call for Speakers is Open!!!


Resorts World
3000 S Las Vegas Blvd,
Las Vegas, NV, United States, Nevada

Looking for accommodations?

We've secured exclusive, low room rates of $105 + taxes/day especially for our attendees! Easy and hassle-free booking is just a click away.

Secure your spot now to make the most of your trip with comfortable and affordable accommodations

Ortus - Workshop - TBA

More conferences

Need more conferences, this site has a huge list of conferences for almost any language/community.

Blogs, Tweets, and Videos of the Week

4/17/24 - Blog - Ben Nadel - Creating blockTrim(), inlineTrim(), and trailingTrim() Functions In ColdFusion
In terms of removing whitespace from a given string, ColdFusion has several built-in trimming functions: trim(), ltrim(), and rtrim(). On top of that, Lucee CFML has a trimWhitespace() function (which is a little confusing). And, as a code kata, I wanted to think about a few other trimming approaches: blockTrim(), inlineTrim(), and trailingTrim().

4/19/24 - Blog - Ben Nadel - Paginating The Postmark Bounces API In ColdFusion
As I discussed in January, I've been sending out millions of emails in ColdFusion. I've never done anything at this scale before; and, I've been learning a lot of fun lessons along the way. With email delivery, the bounce rate is king. And, I've been doing whatever I can to keep our bounce rate low so that Postmark doesn't shut down our pipes. One valuable step in this regard was using the Postmark Bounces API to locate problematic email addresses from previous mailings so that I can remove them from the current mailing.

The Postmark Bounces API is both paginated and governed. You can only get 500 bounces in any individual API request. And, you can only read up to 10,000 bounces in a given From/To time-period. Which means, in order to gather up all the relevant bounces (at our scale), I need to implement a nested pagination workflow. That is, I need to incrementally step over both the entire window of a mass mailing and, for each segment within that window, incrementally step over the 500-result limit.

This results in a workflow that makes a lot of Postmark API calls. Any one of these API calls can break for a number of reasons; such as a network timeout or a server error. In order to create a resilient workflow, I need to persist the intermediary results such that if the workflow does break, I can pick up where I left off instead of having start over from the beginning.

4/19/24 - Blog - Ben Nadel - Dedenting Text In ColdFusion
I've been on a real regular expression kick this week. Between my previous post on parsing Postmark Bounce details and creating custom trim functions, it seems that regular expressions make a daily appearance in my programming life. And, today is no exception. As a fun code kata, I want to try dedenting text in ColdFusion. Spoiler alert: I use regular expressions.

Dedenting text is the act of removing the leading whitespace from each line of text. However, my dedent() function differs from my inlineTrim() function in that it maintains the relative indentation across lines. That is, it will dedent the text only until any one of the lines no longer has leading whitespace.

Basically, I examine every line of text, find the one with least amount of indentation characters, and then remove that amount of indentation from all lines of text.

4/20/24 - Blog - Ben Nadel - CF_SaveFile Custom Tag In ColdFusion
A couple of years ago, on the Lucee Dev forum, I proposed a file attribute for the CFSaveContent tag in ColdFusion. This comes out of a pattern that I employ quite often in which I use the CFSaveContent tag to generate the contents of a static file; and then, use the fileWrite() function to save said content disk. So, why not combine these two steps into a single step using a ColdFusion custom tag.

4/21/24 - Blog - Ben Nadel - Using getApplicationMetadata() To Provide Global Defaults In ColdFusion
A couple of weeks ago on Twitter, James Moberg and I were discussing ColdFusion application metadata. In recent years, ColdFusion has provided a getApplicationMetadata() function for retrieving the configuration associated with the current request (remember, the Application.cfc framework component is freshly instantiated on every single request). I've never used the getApplicationMetadata() function before; but, after my previous post on the ColdFusion custom tags, it occurred to me that I could use the ColdFusion application framework as a hook into providing global defaults for my custom tag attributes.

4/24/24 - Blog - Ben Nadel - Variables Scope Persists Across Custom Tag Execution Modes In ColdFusion
ColdFusion custom tags are just ordinary CFML templates that are executed using extraordinary mechanics. These mechanics allow custom tags templates to be used for looping, provide isolated rendering contexts, and allow for privately scopes template methods. These features aren't always obvious and are worth exploring. In this post, I want to demonstrate that the variables scope is persisted across the execution modes in a given tag invocation.

4/24/24 - Blog - Ben Nadel - ColdFusion Custom Tags Can Have Privately Scoped Functions
In my previous post on the CF_SaveFile ColdFusion custom tag, my SaveFile.cfm template contained a private method named dedent(). Because ColdFusion custom tags execute in an isolated page context, all of the variables defined within the custom tag remain encapsulated within the custom tag boundary. The same is true for any functions defined within the custom tag. Which means, ColdFusion custom tags can have privately scoped helper functions.

This behavior isn't surprising once you understand how ColdFusion custom tags operate; but, it may not be obvious. And, I think it's worth calling it out specifically.

4/26/24 - Blog - Ben Nadel - Adding turbo-cfml To My ColdFusion + Hotwire Demos Project
Out of the box, Hotwire Turbo doesn't work with ColdFusion / CFML because it doesn't recognize .cfm as a valid HTML file extension. To "fix this", I forked the Turbo project and created turbo-cfml, which does nothing but add cfm|cfml|cfc to the library's regular expression pattern matching. This morning, I then added a "hello world" demo, using turbo-cfml to my ColdFusion + Basecamp Hotwire Demos project.

4/28/24 - Blog - Ben Nadel - Inline Script Tag Execution In Hotwire Turbo And ColdFusion
Right now, my Dig Deep Fitness application has no build process. And, every request to the application results in a full page refresh. I'm considering updating it to use Hotwire Turbo for faster navigation. But, I'm not confident in my understanding of how Turbo will interact with all of the inline <script> tags that currently drive the page interactions. As such, I wanted to put together a quick exploration of inline scripts operating within a multi-page ColdFusion application.

4/24/24 - Blog - Robert Zehnder - Tidying up HTML with jSoup
One of the pet peeves I have with commandbox-ssg is that the output HTML has not been very tidy. If you have been developing with ColdFusion for a while you are probably familiar with the chunks of whitespace in your pages. One of the things that has been on the back burner for me is figuring out a way to remove this from generated output. I have considered looking in to ways to post process the HTML which I am sure node has some modules that will help with this, but I really wanted something ColdFusion specific to keep things simple.


Several positions available on

Listing over 123 ColdFusion positions from 76 companies across 52 locations in 5 Countries.

0 new jobs listed in the last few weeks

Other Job Links
  • There is a jobs channel in the CFML slack team, and in the Box team slack now too

ForgeBox Module of the Week

Elasticsearch for the Coldbox Framework

By Ortus Solutions

The elasticsearch module for the Coldbox Platform provides you with a fluent search interface for Elasticsearch, in addition to a CacheBox Cache provider and a Logbox Appender. Both the cache provider and logbox appender rely on Wirebox DSL mappings to the Elasticsearch client. As such additional Wirebox configuration is necessary to use them outside of the Coldbox context.

VS Code Hint, Tip, and Trick of the Week


This extension integrates Excalidraw into VS Code. To use it, create an empty file with a .excalidraw, .excalidraw.json, .excalidraw.svg or .excalidraw.png extension and open it in Visual Studio Code.

Thank you to all of our Patreon Supporters

These individuals are personally supporting our open source initiatives to ensure the great toolings like CommandBox, ForgeBox, ColdBox, ContentBox, TestBox and all the other boxes keep getting the continuous development they need, 

Their Contributions fund the cloud infrastructure at our community relies on like 
  • ForgeBox for our 
  • Package Management with CommandBox. 

You can support us on Patreon here

Don’t forget, we have Annual Memberships, pay for the year and save 10% - great for businesses everyone.

  • Bronze Packages and up, now get a ForgeBox Pro and CFCasts subscriptions as a perk for their Patreon Subscription.
  • All Patreon supporters have a Profile badge on the Community Website
  • All Patreon supporters have their own Private Forum access on the Community Website
  • All Patreon supporters have their own Private Channel access BoxTeam Slack
  • John Wilson - Synaptrix
  • Tomorrows Guides
  • Jordan Clark
  • Gary Knight
  • Giancarlo Gomez (Jee-ahn-car-low)
  • David Belanger  (Bell-an-jer)
  • Dan Card
  • James Moberg & Jeffry McGee - Sunstar Media 
  • Dean Maunder
  • Kevin Wright
  • Doug Cain 
  • Nolan Erck 
  • Abdul Raheen

And many more Patreons - up to 50 now!!!!!

You can see an up to date list of all sponsors on Ortus Solutions' Website

Thanks everyone!!!

★ Support this podcast on Patreon ★

Switch to Modernize or Die ® Podcast - SoapBox Edition - Switch to Modernize or Die ® Podcast - Conference Edition

Powered by

Music from this podcast used under Royalty Free license from SoundDotCom and BlueTreeAudio

© 2019 Ortus Solutions