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

2020-06-23 Weekly News - Episode 58Watch the video version on YouTube at: https://youtu.be/QsPE90ZDZ3wHosts:Gavin Pickin - Software Consultant for Ortus SolutionsEric Peterson - Software Consultant for Ortus SolutionsThanks to our Sponsor - Ortus SolutionsGet 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 SupportWe 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 EventsHappy Birthday ColdBox - 14 years OldOrtus Webinar - Modern Functional a Fluent CFML REST APIsPresented by: Gavin Pickin Friday June 26th, at 9am PDT or 11am CDTDRY 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/webinarsColdFusion Meetup - "Keeping CF (and Java) updated: challenges and solutions", with Charlie ArehartThursday 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 PattersonPresented on June 18thPoor 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=m3man0qcnq4afeature=youtu.beEvent: 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 DuthieJune 11thColdFusion 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=TfZdgBoSurMafeature=youtu.beEvent: https://www.meetup.com/coldfusionmeetup/events/271110445/Reminder: State of the CF Union 2020 SurveyVOTE FOR OUR PODCASTSHelp 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-ResultsConferencesInto the Box 2020 - Workshops - Virtual Live trainingLuis leading ColdBox Hero to Superhero July 23-24 - DATE CHANGED2 x 6 hour days9am-12pm Central1 hour lunch1pm to 4pm centralTickets available: $899https://www.ortussolutions.com/eventsDiscount Codes: PODCAST10 - 10% offThere 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/10CF Summit WestOctober 28-29Mirage Hotelhttps://cfsummit.adobeevents.com/CF CampTBAMore conferences: https://confs.tech/Blogs, Tweets and Videos of the WeekBlog - Ben Nadel - Scope Traversal Behavior With Undefined Function Arguments In Lucee CFML 5.3.6.61Just 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.htmBlog - Ben Nadel - Struct Iteration With CFLoop Exposes Both Key And Value In Lucee CFML 5.3.6.61Back 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.htmBlog - Brain Klaas - Beyond the Basics of Using AWS S3 in CFML: Use Lifecycle Rules to Automatically Delete Files After a Period of TimeIn 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.htmlBlog - Ben Nadel - Proxying Amazon AWS S3 Pre-Signed-URL Uploads Using CFHTTP And Lucee CFML 5.3.6.61At 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.htmLive 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 #CFMLhttps://www.youtube.com/watch?v=sCJKFWXMXfIafeature=youtu.beBlog - Ben Nadel - Returning CFQuery / Query Results As Structs In Lucee 5.3.6.61A 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.htmBlog - Ben Nadel - Every Line Of Code That You Write Is An Explicit Decision To Make The Application Better Or WorseThe 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.htmBlog - Ben Nadel - Using UPDATE + ORDER BY + LIMIT To Drive Multi-Worker Migrations In Lucee CFML 5.3.6.61Earlier 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.htmBlog - Brian Klaas - Beyond the Basics of Using AWS S3 in CFML: Use Lifecycle Rules to Move Files Into Different Storage ClassesIn 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.htmlBlog - Fusion Reactor - Why is Technical Debt Becoming Increasingly ImportantIn 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.37Continuing 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.htmBlog - Ben Nadel - Why I Use TINYINT Columns Instead Of BIT Columns For Boolean Data In A MySQL ApplicationSince 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.htmBlog - 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-lockdownBlog - Ben Nadel - I've Had Fundamental Misunderstandings Of How CFQueryParam Works Within MySQL Queries And ColdFusion / Lucee CFMLAs 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=NIExEqcM7akafeature=youtu.beBlog - Fusion Reactor - Sending Custom Metrics to FusionReactor CloudRecently 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 #softwaredevelopmenthttps://www.codewars.com/https://twitter.com/kmbenjel/status/1273328288119783425https://twitter.com/kmbenjelTweet - Dan Fredericks - CodeGrepperlooking into this, but might be an extension people would like…#ColdFusion #ortussolutionsAngie Jones @techgirl1908I 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.comhttps://twitter.com/fmdano74/status/1272975311999766529https://twitter.com/fmdano74https://duckduckgo.com/banghttps://help.duckduckgo.com/duckduckgo-help-pages/features/instant-answers-and-other-features/CFML JobsSeveral positions available on https://www.getcfmljobs.com/Listing over 44 ColdFusion positions from 33 companies across 23 locations in 5 Countries5 new jobs this week.Full-Time - Senior Developer - Coldfusion - Hyderabad at Hyderabad, Tela.. - India Posted Jun 18https://www.getcfmljobs.com/jobs/index.cfm/india/Senior-Developer-Coldfusion-Hyderabad-at-Hyderabad-Telangana/11090Full-Time - ColdFusion Developer at Downers Grove, IL - United States Posted Jun 18https://www.getcfmljobs.com/jobs/index.cfm/united-states/ColdFusion-Developer-at-Downers-Grove-IL/11091Full-Time - ColdFusion | AngularJS Developer at Memphis, TN - United States Posted Jun 16https://www.getcfmljobs.com/jobs/index.cfm/united-states/ColdFusion-AngularJS-Developer-at-Memphis-TN/11088Full-Time - ColdFusion Developer at Austin, TX - United States Posted Jun 11https://www.getcfmljobs.com/jobs/index.cfm/united-states/ColdFusion-Developer-at-Austin-TX/11086Full-Time - ColdFusion programmer at Washington, DC - United States Posted Jun 10https://www.getcfmljobs.com/jobs/index.cfm/united-states/ColdFusion-programmer-at-Washington-DC/11087ForgeBox Module of the WeekLucee Performance Analyzer - Lucee Extension by Zac SpitzerPerformance Analyzer plugin for Lucee, to be used in the Lucee admin.InstallInstall 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.UsageYou will need to enable debugging and configure a debug template in order to capture debug logs for this plugin to work.FeaturesSummary of top variable Scoping problemsSummary of slowest sql querieshttps://github.com/zspitzer/lucee-performance-analyzerhttps://www.forgebox.io/view/A345C8CB-04CC-4D2B-93D50471D5105D83VS Code Hint Tips and Tricks of the WeekAdvanced New File Patbenatar.advanced-new-fileInspired 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.convenienceOptionshttps://marketplace.visualstudio.com/items?itemName=patbenatar.advanced-new-fileThank you to all of our Patreon SupportersThese 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/ortussolutionsBen Nadel Brett DeLineCarl Von Stetten Charlie ArehartDa LiDan Card Daniel GarciaDavid Belanger Didier Lesnicki Don Bellamy Erick HoffmanGary Knight Jan JannekJeremy Adams Jonas ErikssonJordan Clark Joseph LamoreeKai Koenig Laksma TirtohadiMatthew Clemente Mingo HagenRyan Hughes Scott SteinbeckShawn Oden Steven KlotzSynaptrix Yogesh MathurYou can see an up to date list of all sponsors on Ortus Solutions' Websitehttps://ortussolutions.com/about-us/sponsors★ Support this podcast on Patreon ★

2356 232