Modernize or Die® - CFML News for June 15th, 2021 - Episode 108
2021-06-15 Weekly News - Episode 108
Watch the video version on YouTube at https://youtu.be/Rj_11izO9f8
Gavin Pickin - Software Consultant for Ortus Solutions
Brad Wood - Software Consultant for Ortus Solutions
Thanks to our Sponsor - Ortus Solutions
The makers of ColdBox, CommandBox, ForgeBox, TestBox and almost every other Box out there.
A few ways to say thanks back to Ortus Solutions:
- Like and subscribe to our videos on youtube.
- Sign up for a free or paid account on CFCasts, which is releasing new content every week
- Buy Ortus’s new Book - 102 ColdBox HMVC Quick Tips and Tricks on GumRoad (http://gum.co/coldbox-tips)
We have 36 patreons providing 83% of the funding for our Modernize or Die Podcasts via our Patreon site: https://www.patreon.com/ortussolutions. If you love our podcasts and all we do for the #coldfusion #cfml community considers chipping in, we are almost there!
News and Events
Adobe CF added support for Azul JDK
Effective July 21st 2021, ColdFusion customers can develop and operate their CF applications with distributions of the Azul Zulu builds of OpenJDK, standards compliant with Java SE. Support for the Azul Zulu JDKs will be provided by Adobe to our CF customers.
On July 21st, ColdFusion installers for ColdFusion (2018 release) and ColdFusion (2021 release) with the Azul JDKs will be available for download from https://www.adobe.com/support/coldfusion/downloads.html.
In the interim, we’ve set up a pre-release, where ColdFusion customers can try out the Azul based installers.
Into the Box 2021 will be an Live In Person Conference
After much deliberation, and lots of survey responses, we have decided to host this years Into the Box, live in person in Houston Texas in September.
Call for speakers will be sent out this week, giving you 2 weeks to get your submissions in.
There will be no workshops this year, just 2 days full of great CFML content.
Server troubles - Hibernate missing from Lucee
For one of our clients, we started to get some strange errors. We finally tracked it down to Hibernate not being installed in Lucee. The fix was to add the Extension ID to our CommandBox args to ensure it was installed.
We’re looking into it, but if you get some weird TreeWalker error, it might be the same thing.
UPDATE: Looked like the extension was installed, but the lucee-server.xml was missing the extension, so it must have not completely finished the install process and that caused the issue.
Online CF Meetup - CF Modernization Challenges - Improving Legacy Code, with David Byers
Thursday, June 17, 2021
11:00 AM to 12:00 PM CDT
Every ColdFusion developer is a builder and an artist. We want to create and craft beautiful, elegant solutions with CFML that are powerful and dynamic… but sometimes, we still need to deal with the legacy code that was built a decade ago by a developer who has long since left the organization and didn’t know what they were doing to begin with. Or, maybe the company direction has shifted (again) and what was a priority in the past is no longer relevant. Maybe the approach you originally took to a problem can be done cleaner, and more efficiently. Maybe there’s new functionality in ColdFusion that renders old approaches obsolete. At some point, modernization of your approach becomes necessary to retain your sanity!
In this group therapy session, I will discuss legacy code, why it’s difficult to manage, how to take incremental approaches to improving it and some techniques on how to modernize your development approach.
Ortus Webinar for June - Eric Peterson - Topic - Build a Blog in 30 minutes with Quick
Wednesday, June 30th at 11:00 AM CT
In this webinar, Eric will: give us an overview of ColdBox and Quick, give us reasons why we would use this library, he'll show us an example app to explore how it works and we'll have tons of live coding!
Webinars Page: https://www.ortussolutions.com/events/webinars
ICYMI - CommandBox Docker v3.4.0 Images Released
Today we are pleased to announce the release of version 3.4.0 of our CommandBox Docker images, which bumps the CommandBox binary version to v5.3.1. This release primarily contains optimizations and updates to leverage the new environmental support options available in CommandBox 5.3.0 and above.
Reminder - State of the CF Union Survey
Help us find out the state of the CF Union – what versions of CFML Engine do people use, what frameworks, tools etc. We will share the summary results with everyone who completes the survey so that you can see how you compare with other CF developers.
Spread the news so we can get as many responses as possible.
CFCasts Content Updates
- Object-Oriented Programming with Nolan Erck (https://cfcasts.com/series/oop-series)
- Why Composition over Inheritance
- Diamond-design Problem
- Interfaces with Ducks
- Don't forget - the first 4 videos in this series are FREE
Coming this week
- Object-Oriented Programming with Nolan Erck (https://cfcasts.com/series/oop-series)
- Combining Inheritance Composition Interfaces
- Intro to Design Patterns
- Creational Patterns : Intro + Showcase Singleton / Transient, Factory
- Up and Running with Quick - Quick Workshop Series
Coming up soon
- More What’s new with ColdBox 6
- More What’s new in qb 8
- More Using DocBox
- LogBox 101
Send your suggestions at https://cfcasts.com/support
Conferences and Training
Adobe ColdFusion Developers Week
June 22-24, 2021 - Online
Agenda now on the website - 2 tracks - Some sessions now have descriptions
4 times 7am 9am 12pm 2pm - more sessions might be coming
No podcast on the 22nd due to the Developer Week
Coders, mark your calendars for Adobe ColdFusion Developer Week 2021!
Coders, Adobe ColdFusion Developer Week 2021 is edging closer! This year, we’ve lined up a series of sessions and webinars that will give you a 360-degree view of ColdFusion 2021’s brand new features and updates. Right from developing cloud-native applications to reducing downtime, these webinars will let you in on the best tips to deploy applications rapidly and seamlessly.
This is your chance to meet coders from across the globe and exchange ideas with some of the best minds in the industry. And that’s not all! Your presence at the conference will earn you points that can help you win exciting prizes and vouchers. Our scoreboard will keep track of active participation!
Whether you’re a new developer, someone with little or no experience with Adobe ColdFusion, or even if you have been using it all your life, Adobe ColdFusion Developers Week 2021 is where you need to be. Don’t miss out!
ICYMI - Apple WWDC21 - Glow and behold - last week
The Apple Worldwide Developers Conference is coming to a screen near you, June 7 to 11. Join the worldwide developer community for an all-online program with exciting announcements, sessions, and labs at no cost. You’ll get a first look at the latest Apple platforms, tools, and technologies — so you can create your most innovative apps and games yet.
Learn about this year’s Swift Student Challenge, and stay tuned for additional details.
Ortus’s Conferences for 2021
Into the Box 2021 - live in Person in Texas.
September 23rd and 24th.
No workshops this year.
Call for speakers coming this week now we know we’re in person.
Deadline for Call for Speakers June 30 - so submit ASAP.
ITB Latam 2021 - live in person
December 2nd or 3rd 2021 (confirming dates asap)
Need more conferences, this site has a huge list of conferences for almost any language/community.
Blogs, Tweets and Videos of the Week
Blog - Wil De Bruin - Dynamic datasources part 1: QB
Recently I was working on a project where we wanted to reuse our code for multiple customers. The only difference: they all have their own database where their data was stored.
Blog - Wil De Bruin - Dynamic datasources part 2: quick
Using dynamic datasources in a cfml ORM system can be hard. I am working on some project full of cform, and as mentioned in my post on dynamic datasources in qb I have a project with a lot of legacy code, full of cfquery, queryExecute, some qb queries and… tons of cform entities. And for all this code I should be able to change my datasource on the fly, based on URL or the authenticated user. I already had all solutions in place for qb and queryExecute, but cform is a showstopper.
Blog - Ben Nadel - Adobe ColdFusion 2018 Compatible Version Of My ColdFusion Custom Tag DSL For HTML Emails
Over the past couple of months, I've been working on a ColdFusion custom tag DSL (Domain Specific Language) for HTML emails. It's been a thrilling adventure; and, it's been tremendously satisfying to see this approach being applied for great good at InVision. That said, InVision runs on Lucee CFML and my personal blog (this blog) runs on Adobe ColdFusion 2018. And, unfortunately, there's enough incompatibility between the two runtimes such that I can't easily use the same code. As such, I've created a new repository for an Adobe ColdFusion compatible version.
Blog - Ben Nadel - Using The LaunchDarkly REST API To Update Rule Configuration In Lucee CFML 18.104.22.168
I am not bashful about the fact that I love using LaunchDarkly for our feature flags at InVision. But, the vast majority of my experience revolves around their Java SDK which implements the rules engine consumer and the server-sent event streaming. I actually have very little experience with the LaunchDarkly REST API, which allows you to programmatically update the rules engine without using the LaunchDarkly dashboard. At work, I need to build a simple toggle for our Customer Facing Team (CFT) that will allow them to add or remove an enterprise subdomain from a targeting rule within a given feature flag. As such, I needed to figure out how to update rule configurations using the LaunchDarkly REST API in Lucee CFML 22.214.171.124.
Blog - Adam Cameron - Using TDD when adding new code to existing untestable code
Just a note before I start. This article is based on a real-world situation for a company I used to work at. Because I'm basing this on proprietary information, I am not prepared (or permitted!) to share that. As such I have obfuscated some elements of the narrative, and have changed sample code around to be less specific to the industry concerned. The code is still line-for-line equivalent to the original code though with just names being changed. Nothing has been enhanced or simplified to make it artificially easier to solve the problem we really did face.
Blog - Adam Cameron - CFML: messing around with mixins (part 2)
In the previous article - CFML: messing around with mixins (part 1) - I had a look at some code to implement both compile-time and runtime mixins into target objects. Basically one takes a library object (a CFC just full of functions, no statefulness or anything), and stick references to them into a target object so that object can call those methods as if they were its own native method. It was all very proof-of-concept, and I would never recommend anyone actually using the code I wrote, and indeed would never recommend using mixins at all. They just seem like a hack to me: an anti-pattern and poor design.
Blog - Adam Cameron - CFML: messing around with mixins (part 3)
In the preceding two articles in this series (1 and 2) I looked at how to implement mixins in CFML, both at compile time and at runtime, with an increasing amount of functionality / complexity. My closing conclusion was that the runtime approach I was taking was a wee bit too magic and opaque to be something one should do; but at least it's interesting to look at the issues & techniques involved. Today I'm going to try to come up with a less opaque solution.
Blog - Mark Bockenstedt - Setting a Column to Null With queryNew in ColdFusion
I've been on a bit of a refactoring & testing kick lately thanks to a few recent episodes of the Working Code podcast (specifically episodes 22 & 23). I recently set out to refactor a common function in the CMS platform we have built at work and realized that I need to mock a query that I can use in my test suites. We're using TestBox, so I have MockBox available, but querySim doesn't handle making a column null. So, what's a guy to do? Go to Slack and ask, naturally!
Blog - Charlie Arehart - Properly handled quoted yes/no with serializeJSON in CF2021 and CF2018, solvable in CF2016
Did you know that CF2021 and CF2018 now “properly” handle serializing to json strings with the quoted values of “yes” and “no”, leaving them as strings rather than converting them to booleans true and false?
And did you know that if you are on CF2016 (which does convert them), you can solve that with just a couple of lines of code? And that same solution can be used if you are on CF2018 or above and do WANT a string like “yes” to be converted to a boolean (in a serializejson). Perhaps more important, that same code (and even an application-level variant) can help with other matters with JSON serialization datatypes.
Several positions available on https://www.getcfmljobs.com/
Listing over 140 ColdFusion positions from 64 companies across 98 locations in 5 Countries since Dec 1st.
6 new jobs listed this week
Full-Time - Ortus Solutions - Senior Software Developer at Remote - United States
Posted Jun 14
Full-Time - Senior ColdFusion Developer 1513 at Toronto, ON - Canada
Posted Jun 12
Full-Time - Senior ColdFusion Web Developer at East Norriton, PA - United States
Posted Jun 11
Full-Time - Coldfusion Developer at Toronto, ON - Canada
Posted Jun 10
Full-Time - ColdFusion Developer at Fort Washington, PA - United States
Posted Jun 09
Full-Time - ColdFusion Developer at Creve Coeur, MO - United States
Posted Jun 09
Ortus Jobs - https://www.ortussolutions.com/about-us/careers
- Senior ColdFusion CFML Developer (USA TEAM)
- Desarollador Web (EL SALVADOR TEAM)
ForgeBox Module of the Week
Mementifier : The State Maker!
This module will transform your business objects into native ColdFusion (CFML) data structures with 🚀 speed. It will inject itself into ORM objects and/or business objects alike and give them a nice getMemento() function to transform their properties and relationships (state) into a consumable structure or array of structures. It can even detect ORM entities and you don't even have to write the default includes manually, it will auto-detect all properties. No more building transformations by hand! No more inconsistencies! No more repeating yourself!
Memento pattern is used to restore state of an object to a previous state or to produce the state of the object.
Works great with Quick ORM too.
VS Code Hint Tips and Tricks of the Week
Remote Repositories by Github (preview)
The Remote Repositories extension lets you quickly browse, search, edit, and commit to any remote GitHub repository directly from within Visual Studio Code, with support for Azure repos coming soon.
Why do you need Remote Repositories?
As developers, we often clone Git repos locally just to browse them or make small edits. We may want to look at the source code of a library we use, experiment with new tools, or just feel the desire to learn something new.
However, cloning repos takes time and maintenance, as your local copy can quickly become out of date if you don't pull changes regularly. Plus, if you don't know the codebase you're cloning, there may be security risks involved too!
The Remote Repositories extension in VS Code gives you a fast, convenient, and safe way to open, browse, and edit repos quickly.
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, and funds the cloud infrastructure at our community relies on like ForgeBox for our Package Management with CommandBox.
You can support us on Patreon here https://www.patreon.com/ortussolutions
- 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
Jeffry McGee - Sunstar Media
John Wilson - Synaptrix
Carl Von Stetten
You can see an up to date list of all sponsors on Ortus Solutions' Website