Modernize or Die® - CFML News for June 23rd, 2020

Gavin and Eric host this weeks episode. They discuss ColdBox's 14th Birthday. They discuss an Ortus Webinar being hosted by Gavin on Friday called Modern Functional & Fluent CFML REST APIs. They discuss The ColdFusion Meetup Online, with an upcoming session by Charlie Arehart and provide links to the last 2 presentations... and remind you to take the State of the CF Union survey from TeraTech.com. They discuss a change in the date in one of the Into the Box workshops, ColdBox Hero to SuperHero lead by Luis Majano, and announce the next workshop will be a repeat of the ColdBox Zero to Hero in early July, dates to be confirmed. They spotlight a lot of great blog posts, tweets, videos and podcasts, too many to list, so listen to the show. They announce some jobs from twitter and getCfmlJobs.com and from the web. They show off the ForgeBox module of the Week, Lucee Performance Analyzer - Lucee Extension by Zac Spitzer, a Performance Analyzer plugin for Lucee, to be used in the Lucee admin. This week's VS Code Tip of the week is Advanced New File, Inspired by Sublime's AdvancedNewFile plugin, this adds the ability to create files anywhere in your workspace. For the show notes - visit the website https://cfmlnews.modernizeordie.io/episodes/modernize-or-die-cfml-news-for-june-23rd-2020 Music from this podcast used under Royalty Free license from SoundDotCom https://www.soundotcom.com/ and BlueTreeAudio https://bluetreeaudio.com
2020-06-23 Weekly News - Episode 58

Watch the video version on YouTube at: https://youtu.be/QsPE90ZDZ3w



Hosts:

Gavin Pickin - Software Consultant for Ortus Solutions
Eric Peterson - Software Consultant for Ortus Solutions


Thanks to our Sponsor - Ortus Solutions

Get live training from the makers of your favorite Box Product.
Live Virtual Workshops available for signup in June and more to be announced soon.
CFCasts.com is up and running with all of the Into the Box 2020 Videos.

Patreon Support

We are at the 48% mark for fully funding all of 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!
https://www.ortussolutions.com/blog/we-need-your-help



News and Events


Happy Birthday ColdBox - 14 years Old



Ortus Webinar - Modern Functional & Fluent CFML REST APIs

Presented by: Gavin Pickin
Friday June 26th, at 9am PDT or 11am CDT
DRY Programming can be more fun than you think, in this session we'll show you how a few helper methods can give you a functional, fluent, stylish and clean way to write code for your REST API. Not writing an API, this can help traditional Applications too.
Registration Link: https://us02web.zoom.us/meeting/register/tZ0qceuoqjMiGtVP0Bj9Uvya5hCV6yX1pzm-
Webinars page: https://www.ortussolutions.com/events/webinars


ColdFusion Meetup - "Keeping CF (and Java) updated: challenges and solutions", with Charlie Arehart

Thursday June 25 at 12pm US Eastern Time, UTC-4.
Are you keeping up on whatever updates are available for the CF version you're running (2018, 2016, or so on)? And how about updating the Java/JVM that CF uses? You should be, for security as well as bug fix reasons. And what about the web server connector (wsconfig)?
Meeting URL: https://experts.adobeconnect.com/cfmeetup/


ICYMI: ColdFusion Meetup - "How to transform DB tuning into a rewarding effort", with Josh Patterson

Presented on June 18th
Poor database performance can cost you customers, and when it’s happening that’s not the best time to be making decisions about how to monitor and tune things. Better to consider options in advance, and even proactively tune things if possible. Tuning might also allow you to reduce overly-scaled out instances, reducing DB licensing and/or server costs.
Recording: https://www.youtube.com/watch?v=m3man0qcnq4&feature=youtu.be
Event: https://www.meetup.com/coldfusionmeetup/events/271254532/


ICYMI: ColdFusion Meetup - "Low-Code for the ColdFusion Developer – What is it, and Why you should care" with G. Andrew Duthie

June 11th
ColdFusion developers know what it means to be productive. Delivering data-driven websites and solutions is familiar territory. But whether you’re an employee in the enterprise, or a contractor seeking out your next gig, you may start hearing about Low-Code, if you haven’t already. Maybe your company has decided to try it out, or maybe it’s just something a customer asked about, but if you listen to the analysts, Low-Code is a growing segment of the IT market, and a market shaping up to be in the tens of billions of dollars.
Recording: https://www.youtube.com/watch?v=TfZdgBoSurM&feature=youtu.be
Event: https://www.meetup.com/coldfusionmeetup/events/271110445/


Reminder: State of the CF Union 2020 Survey

VOTE FOR OUR PODCASTS
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.
Most questions are multiple choice checkboxes that are fast to answer. Thanks for your time completing this survey!
Survey: https://teratech.com/state-of-the-cf-union-2020/
Partial Results: https://teratech.com/state-of-the-CF-Union-2020-partial-Results



Conferences

Into the Box 2020 - Workshops - Virtual Live training

Luis leading ColdBox Hero to Superhero July 23-24 - DATE CHANGED

2 x 6 hour days
9am-12pm Central
1 hour lunch
1pm to 4pm central

Tickets available: $899
https://www.ortussolutions.com/events

Discount Codes:

PODCAST10 - 10% off
There is a code for ITB attendees to save 15% - If you didn’t get the email contact us.

ColdBox Zero to Hero - Coming in July - date to be confirmed shortly - Possibly July 9/10



CF Summit West
October 28-29
Mirage Hotel
https://cfsummit.adobeevents.com/


CF Camp
TBA


More conferences: https://confs.tech/



Blogs, Tweets and Videos of the Week


Blog - Ben Nadel - Scope Traversal Behavior With Undefined Function Arguments In Lucee CFML 5.3.6.61
Just now, as I was looking at iterating over Structs using CFLoop in Lucee CFML, I ran into a fun little behavior of the ColdFusion language: Scope traversal will skip-over undefined function arguments and access like-named values in higher-up scopes. At first, this feels like a bug. But, I think it ends-up being consistent with how ColdFusion has always handled scope traversal. That said, as a mental refresher, I thought it would be worth exploring this use-case in Lucee CFML 5.3.6.61.
https://www.bennadel.com/blog/3852-scope-traversal-behavior-with-undefined-function-arguments-in-lucee-cfml-5-3-6-61.htm


Blog - Ben Nadel - Struct Iteration With CFLoop Exposes Both Key And Value In Lucee CFML 5.3.6.61
Back in February, when I was having lunch with Gert Franz, co-creator of Lucee CFML, we were commiserating on how amazing ColdFusion is. At that lunch, Gert told me about some of the great things that Lucee CFML offers, like its seamless support for ColdFusion Tags in CFScript. Another minor feature that he mentioned was that the CFLoop tag exposes both Key and Value attribute that remove the need to look-up the value within the CFLoop body. Now, months later, I finally used this feature for the first time in yesterday's post on proxying Amazon S3 uploads using CFHTTP and Lucee CFML. Given the fact that Adobe ColdFusion doesn't support this feature, I thought it might be worth exploring in Lucee CFML 5.3.6.61 in case new Lucee-converts didn't realize it was there (just as I didn't).
https://www.bennadel.com/blog/3851-struct-iteration-with-cfloop-exposes-both-key-and-value-in-lucee-cfml-5-3-6-61.htm


Blog - Brain Klaas - Beyond the Basics of Using AWS S3 in CFML: Use Lifecycle Rules to Automatically Delete Files After a Period of Time
In the last post in this series, we looked at Lifecycle Rules in S3, how they worked, and how you can use them to save money by automatically moving less-frequently used files to different (and cheaper) storage classes. There’s another powerful aspect to Lifecycle Rules that can save you money: automatically deleting files after a specified period of time.
Many of the files that are added to S3 buckets are never used after a brief, initial period of time. Many companies put all of their log files in S3. Are those log files valuable after data analysis is complete? Are the storage costs worth the price after 180 days? After 365? Are there regulatory or compliance reasons to not store user-generated data for a long period of time?
https://brianklaas.net/aws/coldfusion/2020/06/22/Beyond-Basics-S3-Lifecycle-Rules-Deletion.html


Blog - Ben Nadel - Proxying Amazon AWS S3 Pre-Signed-URL Uploads Using CFHTTP And Lucee CFML 5.3.6.61
At InVision, when a user goes to upload a screen for an interactive prototype, we have the browser upload the file directly to S3 using a pre-signed URL. We've been using this technique for years and it's worked perfectly well. However, we now have an Enterprise client whose network is blocking all calls to Amazon AWS. As such, they are unable to use pre-signed URLs for their file uploads. To try and get around this issue, I wanted to see what it would take to proxy uploads to Amazon AWS S3 through our application using the CFHTTP tag and Lucee CFML 5.3.6.61.
https://www.bennadel.com/blog/3850-proxying-amazon-aws-s3-pre-signed-url-uploads-using-cfhttp-and-lucee-cfml-5-3-6-61.htm


Live Stream - Matthew Clemente - Building a Node.js CLI Utility: Command Line Arguments (Learning by Trial and Error)
After getting started building a Node.js CLI utility last week, I decided I wanted to take a closer look presenting/parsing command line arguments. This is the core point of interaction with the user, so it needs to be done well. There are a number of libraries for this, so I'll take a look at what they have to offer.
I'll be honest, I've been spoiled by CommandBox's batteries-included approach #CFML
https://www.youtube.com/watch?v=sCJKFWXMXfI&feature=youtu.be


Blog - Ben Nadel - Returning CFQuery / Query Results As Structs In Lucee 5.3.6.61
A few months ago, I looked at returning CFQuery results as an Array in Lucee CFML; and, in the comments of that post, Gert Franz pointed out that Lucee could also return CFQuery results as a Struct in which a given column would be used as the look-up key in said Struct. Mapping a query onto a Struct is actually a technique that I use a lot in my ColdFusion code, typically with some sort of .indexBy() or .groupBy() User-Defined Function (UDF). As such, I wanted to take a moment and look at how I might replace my custom functions with this built-in query feature in Lucee CFML 5.3.6.61.
https://www.bennadel.com/blog/3849-returning-cfquery-query-results-as-structs-in-lucee-5-3-6-61.htm


Blog - Ben Nadel - Every Line Of Code That You Write Is An Explicit Decision To Make The Application Better Or Worse
The other day, I was watching the new Hannah Gadsby comedy special (which is great, by the way), when something she said about Art got me thinking about Programming. She was pointing out that every aspect of a painting reflected an explicit decision made by the painter. Nothing in a painting happens by accident - every color, every arrangement, every stroke of the brush is a calculated part of the final portrait. For me, programming in JavaScript or ColdFusion or SQL is exactly the same thing. Every comment I put in the code, every character I write, every expression that I wrap in parenthesis is a calculated decision intended to make the application better.
https://www.bennadel.com/blog/3848-every-line-of-code-that-you-write-is-an-explicit-decision-to-make-the-application-better-or-worse.htm


Blog - Ben Nadel - Using UPDATE + ORDER BY + LIMIT To Drive Multi-Worker Migrations In Lucee CFML 5.3.6.61
Earlier this week, I took a look at using ORDER BY and LIMIT clauses within an UPDATE statement in MySQL 5.6.37 in order to limit the scope of the data-mutation. In that post, I said that such a technique can be used to drive a multi-worker / multi-threaded migration in which each worker "claims" and then "processes" a subset of records within a "task table". Since I find this technique to be relatively simple but also wickedly useful, I thought it would be fun to put together a migration demo in Lucee CFML 5.3.6.61.
https://www.bennadel.com/blog/3847-using-update-order-by-limit-to-drive-multi-worker-migrations-in-lucee-cfml-5-3-6-61.htm


Blog - Brian Klaas - Beyond the Basics of Using AWS S3 in CFML: Use Lifecycle Rules to Move Files Into Different Storage Classes
In my last post in this series, we looked at using different storage classes in S3 via CFML to save money on long-term storage costs. The use case for that blog post assumed you knew the utilization pattern for the files you uploaded. They would either be very busy files, files that were accessed occasionally, or files that were accessed rarely. What happens, though, when file acess moves over time from frequently access to only occasional access? Wouldn’t it be nice if S3 would automatically move those files from a more expensive storage class with the fastest response time to a storage class where response times were a few miliseconds longer, but cost half the price?
S3 provides lifecycle rules to do exactly that.
https://brianklaas.net/aws/coldfusion/2020/06/16/Beyond-Basics-S3-Lifecycle-Rules.html


Blog - Fusion Reactor - Why is Technical Debt Becoming Increasingly Important
In simple terms, technical debt is what occurs when bugs or issues aren’t resolved in the earlier stages of development.
Let’s assume you intend to start a new development project, and everything is going as planned; code is coming in, art is crafted, and the content design is moving accordingly. However, just as soon as you think you have everything figured out, all hell breaks loose in the form of technical debt.
http://www.fusion-reactor.com/blog/why-is-technical-debt-becoming-increasingly-important/


Blog - Ben Nadel - You Can Use ORDER BY And LIMIT Within UPDATE And DELETE Statements In MySQL 5.6.37
Continuing with the database-theme of the week, I wanted to share one piece of wisdom that I learned from our former director of Data, Brad Brewer. He taught me that you can use the ORDER BY and LIMIT clauses inside both UPDATE and DELETE SQL statements within MySQL 5.6. While I wouldn't use this technique in my day-to-day CRUD (Create, Read, Update, Delete) code, I do use these options religiously when I am writing data clean-up and migration scripts (ie, those SQL scripts that you run outside of the main application).
https://www.bennadel.com/blog/3846-you-can-use-order-by-and-limit-within-update-and-delete-statements-in-mysql-5-6-37.htm


Blog - Ben Nadel - Why I Use TINYINT Columns Instead Of BIT Columns For Boolean Data In A MySQL Application
Since the theme of my week appears to be database interactions (having looked at index structure query-performance on "membership" tables and prepared statements in the JDBC driver), I figured I would end the week on more database-related "hot take": I no longer use BIT columns to store "Boolean" data in MySQL. Instead, I use a TINYINT column.
CAUTION: There is no "right" answer on this topic - this is just my opinion based on my experience and the choices that have come back to haunt me / make my database interactions more challenging.
https://www.bennadel.com/blog/3845-why-i-use-tinyint-columns-instead-of-bit-columns-for-boolean-data-in-a-mysql-application.htm


Blog - TeraTech - Adobe ColdFusion Security Best Practices (Server Auto-Lockdown)
Most security features and protocols focus on prevention. Firewalls, security analyzers, and proper coding all keep hackers away. And sometimes, unfortunately, security breaches still occur.
https://teratech.com/adobe-coldfusion-security-best-practices-server-auto-lockdown


Blog - Ben Nadel - I've Had Fundamental Misunderstandings Of How CFQueryParam Works Within MySQL Queries And ColdFusion / Lucee CFML
As much as I love databases and writing SQL, the reality is, I'm not a "database admin". And, I don't have the best grasp of how databases work their magic under the hood. This leaves me open to many misunderstandings; one of which appears to be the way that the CFQuery and CFQueryParam tags work with the MySQL JDBC Driver (MySQL Connector/J 5.1) when used in ColdFusion / CFML. I believe that my understanding of the caching and performance benefits have been way off-base.
https://www.bennadel.com/blog/3844-ive-had-fundamental-misunderstandings-of-how-cfqueryparam-works-within-mysql-queries-and-coldfusion-lucee-cfml.htm


Live stream - Matthew Clemente - Getting Started Building a CLI Tool with Node.js (Learning by Trial and Error)
I've built some CLI tools with CFML, but never with Node.js. So, I"ll be working my way through some tutorials, trying to put together my first Node.js command line utility. Not sure how far I'll get, but I've got to start somewhere.
https://www.youtube.com/watch?v=NIExEqcM7ak&feature=youtu.be


Blog - Fusion Reactor - Sending Custom Metrics to FusionReactor Cloud
Recently we were asked if we had specific integration for openmetrics to send information to FusionReactor Cloud. While we don’t have support for openmetrics specifically we do have an API where any metrics can be posted from the FusionReactor instance.
There 2 stages to getting this working. Firstly you need to use FRAPI to post a metric every second / minute for your custom series and the second part is configuring the cloud graph profile to show this data.
http://www.fusion-reactor.com/blog/technical-blogs/sending-custom-metrics-to-fusionreactor-cloud/


Tweet - Codewars now supports 7 new languages - Including CFML
@codewars now supports 7 new niche languages and communities including @coldfusion, @racketlang, #Coq, #VisualBasic, #Forth, factorcode.org, and @SWI_Prolog. Train your skills in these languages at codewars.com! #ColdFusion #code #softwaredevelopment
https://www.codewars.com/
https://twitter.com/kmbenjel/status/1273328288119783425
https://twitter.com/kmbenjel


Tweet - Dan Fredericks - CodeGrepper
looking into this, but might be an extension people would like…
#ColdFusion #ortussolutions
Angie Jones @techgirl1908
I added the @CodeGrepper chrome extension a few days ago and am loving it!
When you search for something coding-related, it shows a code snippet for what you want right at the top of the search results. It's been such a time saver for me.
http://www.codegrepper.com
https://twitter.com/fmdano74/status/1272975311999766529
https://twitter.com/fmdano74
https://duckduckgo.com/bang
https://help.duckduckgo.com/duckduckgo-help-pages/features/instant-answers-and-other-features/



CFML Jobs

Several positions available on https://www.getcfmljobs.com/
Listing over 44 ColdFusion positions from 33 companies across 23 locations in 5 Countries

5 new jobs this week.

Full-Time - Senior Developer - Coldfusion - Hyderabad at Hyderabad, Tela.. - India
Posted Jun 18
https://www.getcfmljobs.com/jobs/index.cfm/india/Senior-Developer-Coldfusion-Hyderabad-at-Hyderabad-Telangana/11090

Full-Time - ColdFusion Developer at Downers Grove, IL - United States
Posted Jun 18
https://www.getcfmljobs.com/jobs/index.cfm/united-states/ColdFusion-Developer-at-Downers-Grove-IL/11091

Full-Time - ColdFusion | AngularJS Developer at Memphis, TN - United States
Posted Jun 16
https://www.getcfmljobs.com/jobs/index.cfm/united-states/ColdFusion-AngularJS-Developer-at-Memphis-TN/11088

Full-Time - ColdFusion Developer at Austin, TX - United States
Posted Jun 11
https://www.getcfmljobs.com/jobs/index.cfm/united-states/ColdFusion-Developer-at-Austin-TX/11086

Full-Time - ColdFusion programmer at Washington, DC - United States
Posted Jun 10
https://www.getcfmljobs.com/jobs/index.cfm/united-states/ColdFusion-programmer-at-Washington-DC/11087



ForgeBox Module of the Week

Lucee Performance Analyzer - Lucee Extension by Zac Spitzer

Performance Analyzer plugin for Lucee, to be used in the Lucee admin.

Install
Install via Applications page in your Lucee Administrator. It's best to install under the Web Administrator, once this bug/patch against Lucee is merged, you will be able to install the plugin once at the Server level and then access the plugin from all web contexts.

Usage
You will need to enable debugging and configure a debug template in order to capture debug logs for this plugin to work.

Features
Summary of top variable Scoping problems
Summary of slowest sql queries

https://github.com/zspitzer/lucee-performance-analyzer
https://www.forgebox.io/view/A345C8CB-04CC-4D2B-93D50471D5105D83



VS Code Hint Tips and Tricks of the Week

Advanced New File

Patbenatar.advanced-new-file

Inspired by Sublime's AdvancedNewFile plugin, this adds the ability to create files anywhere in your workspace.

Features
- Fuzzy-matching autocomplete to create new file relative to existing path (thanks to JoeNg93 for making it faster)
- Create new directories while creating a new file
- Create a directory instead of a file by suffixing the file path with / as in somedirectory/ to create the directory (thanks to maximilianschmitt)
- Ignores gitignored and workspace files.exclude settings.
- Additional option of adding advancedNewFile.exclude settings to workspace settings just like native files.exlude except it explicitly effects - - - AdvancedNewFile plugin only. (thanks to Kaffiend)
- Control the order of top convenient options ("last selection", "current file", etc) via config setting advancedNewFile.convenienceOptions
https://marketplace.visualstudio.com/items?itemName=patbenatar.advanced-new-file



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

Ben Nadel
Brett DeLine
Carl Von Stetten
Charlie Arehart
Da Li
Dan Card
Daniel Garcia
David Belanger
Didier Lesnicki
Don Bellamy
Erick Hoffman
Gary Knight
Jan Jannek
Jeremy Adams
Jonas Eriksson
Jordan Clark
Joseph Lamoree
Kai Koenig
Laksma Tirtohadi
Matthew Clemente
Mingo Hagen
Ryan Hughes
Scott Steinbeck
Shawn Oden
Steven Klotz
Synaptrix
Yogesh Mathur

You can see an up to date list of all sponsors on Ortus Solutions' Website
https://ortussolutions.com/about-us/sponsors

★ 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