Modernize or Die® - CFML News Podcast for August 6th, 2024 - Episode 217
2024-08-06 Weekly News — Episode 217
Watch the video version on YouTube at https://youtube.com/live/Z3m5Nd7HoJc?feature=share
Hosts:
Watch the video version on YouTube at https://youtube.com/live/Z3m5Nd7HoJc?feature=share
Hosts:
- Eric Peterson - Senior Developer at Ortus Solutions
- Dan Card - 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:
- Buy Tickets to Into the Box 2025 in Washington DC https://t.co/cFLDUJZEyM
- April 30, 2025 - May 2, 2025 - Washington, DC
- Like and subscribe to our videos on YouTube.
- Help ORTUS reach for the Stars - Star and Fork our Repos
- Star all of your Github Box Dependencies from CommandBox with https://www.forgebox.io/view/commandbox-github
- Subscribe to our Podcast on your Podcast Apps and leave us a review
- Sign up for a free or paid account on CFCasts, which is releasing new content regularly
- BOXLife store: https://www.ortussolutions.com/about-us/shop
- Buy Ortus’s Books
- 102 ColdBox HMVC Quick Tips and Tricks on GumRoad (http://gum.co/coldbox-tips)
- Now on Amazon! In hardcover too!!!
- https://www.amazon.com/dp/B0CJHB712M
- Learn Modern ColdFusion (CFML) in 100+ Minutes - Free online https://modern-cfml.ortusbooks.com/ or buy an EBook or Paper copy https://www.ortussolutions.com/learn/books/coldfusion-in-100-minutes
Patreon Support (Stupendous)
We have 57 patreons:
https://www.patreon.com/ortussolutions.
News and Announcements
BoxLang — Dynamic : Modular : Productive
https://boxlang.io/
https://boxlang.ortusbooks.com/
New Releases and Updates
CFConfig v2.0.6
Now supports BoxLang servers
Spreadsheet-CFML v4.1.0 – v4.2.0
- Add moveSheet()
- Add sheet position to sheetInfo() properties
- Upgrade POI to 5.3.0, commons-csv to 1.11.0 and excel-streaming-reader to 4.4.0
- Allow datatype to be specified with addColumn()
Sentry v2
Updated to match Sentry’s current event structure design
cbq v3.0.8 – v3.0.9
SyncProvider bug fixes
BoxLang Betas — Beta 2 through 8
Beta 2
New Features
- Encryption module — bx-password-encrypt
- New event: onRequestFlushBuffer
- Ability to coerce BoxLang functions, lambdas, and UDFs, to well-known functional interfaces for Java interop
- Add parallel streams from BoxLang arrays
- Truthy / Falsey completion for boolean caster
- New Fluent Attempt BIF and class
- Add the ability to add member methods to BoxLang classes — built-in class serialization to JSON
- New static helper on Array class: fromString( list, delimiter ) to create quick BoxLang arrays from strings
- New BIFs for registered interceptors into the request pool and the global pool: BoxRegisterRequestInterceptor, BoxRegisterInterceptor
- writeDump abort support
- writeOutput on complex BoxLang types should call the toString() on it
- Native encrypt, decrypt and generateSecretKey() BIFs
Bug Fixes
- writeDump expanded collapsed support
- writeDump top support
- listDeleteAt returns a list with multiple delimiters as a list with whole delimiters
- structNew with localeSensitive flag throws error
- structKeyTranslate returns void
- structGet does not create struct when missing
- structFindValue returning null owner
- No named applications not auto creating name
- Application listener requests interception points not registered
- Ambiguous if statements when not using curly braces
- this.javasettings not expanding to correct pathing
- this.javasettings ignores paths to actual jars and classes
- cfdirectory fails on centOS, converting datetime
- dateAdd() modifies its argument
- toString not formatting doubles correctly
- Attempt to cast instead of expecting strings inside isValid
- Regression on JSON serialization of box classes with JSON exclude annotations
- Implement query cache ability
- Coerce java SAMs (Single Abstract Method interface) from BoxLang function interfaces
- AsyncService support for Virtual Thread Executors (create/manage)
- Bifs for module info: getModuleList() and getModuleInfo( module )
- Dumping of Java Classes now includes a dump of the toString() value to visualize values better
- New dump template for BoxLang Functions
- Allow the createDynamicProxy BIF to support the request class loader so it can load classes from loaded libraries in the application.bx, runtime, and more.
- New Script Binaries for bxCFTranspiler, bxCompiler, bxFeatureAudit tools in the distribution bin folder
Improvements
- Refactor JDBC connection retrieval out of the QueryOptions class
- Dynamic method matching discovery algorithms updated to do 2 pass algorithm: exact then loose coercion matching
- Improvement of cache service and cache provider methods for easier BoxLang interactions
- Refactored the dump css to resources/dump/html/Dump.css
- Migrate dynamic proxies to native java implementation from the JDK
- Passing the session id to the onSessionStart listener
- Give better warnings if the sessionStorage is not a valid string
Bug Fixes
- attributecollection not handled properly on cfthrow
- Left in system out calls that need to be removed
- JSR ScriptEngine starting runtime without debug flag if passed
- Creating a default cache was not setting the right name and a "default" already registered exception was being thrown
- Default argument values not always checked for type
- Implements missing from Box Class metadata
- Static Scope missing from metadata
- Query caching improvements and compatibility updates
- Ensure request attributes are available to the web runtime scope
- bx-compat CFML compatibility module updates to ensure null query column values are returned as empty strings
Bug Fixes
- Fixes compilation issue with variables name cfcatch
- CFML compatibility for CGI.QUERY_STRING when not provided
- Fix null queryparam functionality
- Data Navigators
- Original Configuration
- StringBind BIF and member function
- Attempt class isNull checks
- Allow Java methods to be referenced and passed around as variables — https://www.ortussolutions.com/blog/java-method-references-and-higher-order-functions
- New Application-global defaults in boxlang.json
- onSessionCreated and onSessionDestroyed interception points
- Cache operations that returned Optionals now return Attempts
- getAsAttempt available on IStruct.
- Localized interceptor pools for Cache Providers
- application,session, and request timeouts in the boxlang.json are now string timespans (”0,0,0,0”)
Improvements
- Combine config settings into a single struct
- Allow optional attribute delimiters in ACF tag-in-script syntax
- Refactor dump loading of CSS to use caching again
- Refactor page pool to be per-mapping
- jsessionID is the internal standard for boxlang sessions, move to this instead of cfid
- getOrSet() in the cache should return the object not an optional
Bug Fixes
- BL Compat module should coerce null values to empty string
- MSSQL DROP TABLE throws 'The statement must be executed before any results can be obtained'
- Adobe Compatibility: Missing support for new java() and new component()
- cfinvoke does not support params as attribute-value pairs
- If the global runtime javaLibraryPaths is already a jar/class location, then use it, else it breaks
- allow "var" before CF catch variable in script
- ResetSession on the scripting request context was invalidating the new session instead of the old session
- Session creation if the default timeout is not a duration, it should treat it as seconds, not milliseconds
- Session object was not serializable
- Cache was evicting items without reaping
- DateTime toString() not accounting for formatter being null
- sessionRotate() not copying over old keys due to nullification of keys when invalidating the old session
- Nested transactions
- queryReverse, queryInsertAt, and queryRowSwap BIFs
- Allow servlet to expand paths so CommandBox web aliases or ModCFML web dirs can be used and new OnMissingMapping event.
- Allow static functional access to BIFs — https://www.ortussolutions.com/blog/static-functional-binding-to-bifs
- Allow Functional binding to member functions
- arrayRange() BIF to create arrays with a specific range of values
- threadTerminate and threadJoin BIFs
- runAsync powered by BoxFutures and Java CompleteableFutures
- Implement primary/foreign key columns in dbInfo
- Implement QueryMeta class for $.bx.meta or $.bx.getMeta() debugging support
Improvements
- "Fix" return types of BIFs that return "true" for no real reason
- Provide Java Functional Interface typing on all higher-order BIFs
- make name un-required in the application component
- DynamicObject equals() hashCode() to allow for dynamic checking
Bug Fixes
- Overridden getter in parent class not being used
- List and Delmiter Args are not correct in ListReduce callback
- The throwable Dump table is not styled
- threadNew BIF
- Stream type and collector member methods
- orThrow( type, message ) for attempts
- ifSuccessful() alias to ifPresent() on attempts
Improvements
- Web support error template only shows details of exceptions if in debug mode, else secure by default
Bug Fixes
- Parser detection for unparsed tokens only works if there are 2 or more tokens left
- Declaring UDFs in function context doesn't always work
- CFConfig datasources aren't importing due to lack of support for the 'dbdriver' key
- Runtime can deadlock due to syncronized methods
- NPE calling isNumeric()
- JSONSerialize() errors when useSecureJSONPrefix not a boolean
- Cannot call getWriter(), getOutputStream() already called
- Empty url vars coming through as null
- contractPath BIF
- Add loop times=n
- Implement GetBaseTagList() and getBaseTagData()
- Improve parser error messages for unpopped parser modes
- Transaction events
Improvements
- Allow for circular references in structs and arrays
- Java 21 update to URL creation as new URL is deprecated
- Add getMimeType method in FileSystemUtil to make it easier to get mime types of remote files ( e.g. PDF creation )
Bug Fixes
- <bx:loop query="query"> doesn't iterate over each item in the query, stays on the first item
- session scope can be null in onSessionEnd, causing errors
- bx-password-encrypt — https://github.com/ortus-boxlang/bx-password-encrypt
- bx-oshi — https://www.ortussolutions.com/blog/unleash-the-power-of-your-device-with-bx-oshi
- bx-jython — https://www.ortussolutions.com/blog/boxlang-introducing-bx-jython
- bx-mail — https://forgebox.io/view/bx-mail
- bx-image — https://forgebox.io/view/bx-image
- bx-wddx — https://forgebox.io/view/bx-wddx
- bx-hypersql — https://forgebox.io/view/bx-hypersql
Webinars, Meetups and Workshops
ICYMI: Modernize or Die: BoxLang Town Meeting
We are thrilled to announce the launch of our new podcast series, BoxLang Town Meetings! Crafted specifically for modern developers, this series will bring you the latest updates, news, and insights about BoxLang, the innovative JVM programming language.
https://www.youtube.com/live/GhPgsjE4IR0
CFCasts Content Updates
https://www.cfcasts.com
Recent Releases
- ITB 2024 videos are released for all attendees and are available as a premium series for purchase for all others.
- Conferences and Training
___
Online Coldfusion users Group: https://www.meetup.com/coldfusionmeetup/
Aug 8 (Thursday) at noon eastern "CF Scheduled Tasks: there’s more than you may know", with Charlie Arehart
If folks were asked to discuss CF scheduled tasks, I suspect most would feel "there's not much to say". But there really is a lot more to working with them than simply "setting a given url to run on a given schedule" (did you know it could be a CFC, for instance? Did you know about the cron time feature? Did you know about clustering scheduled tasks--even with ColdFusion Standard?). Besides there being more features than many may realize, there are also some common problems people face when running them, and there are tools and techniques to help with that.
In this talk, veteran CF troubleshooter Charlie Arehart will address all these and more, starting with several ways to create them (yes, even more than just cfschedule and the CF Admin UI) then more on those more advanced/easily missed features, as well as tools and techniques for solving common problems with them. We'll also explore configuration files and features for managing tasks. Finally we'll also cover ways CF scheduled tasks may NOT work well and discuss alternatives to them
______
New call ColdBox From Zero to Hero - Virtual Live Training
August 15 & 16, 2024 from 9 AM to 12 PM and 2 PM to 5 PM CDT
Led by Gavin Pickin
In this workshop you will be introduced to the latest version of the most popular CFML MVC framework: ColdBox 7.
What You'll Learn:
- Master the Fundamentals: Gain a solid understanding of ColdBox installation, templating, configuration, and essential ColdBox concepts.
- Dive into Advanced Features: Explore advanced topics like HMVC development with modules, RESTful APIs, interception points, integration testing, and more.
- Build a Real-World App: Throughout the workshop, apply your newfound knowledge by constructing a functional micro-blogging application called SoapBox.
- Embrace BDD Testing: Delve into behavior-driven development (BDD) testing methodologies to ensure the quality and functionality of your code.
- Leverage ForgeBox Modules: Enhance your application with functionality provided by various ForgeBox modules.
https://www.eventbrite.com/e/new-call-coldbox-from-zero-to-hero-virtual-live-training-tickets-970569488467?aff=oddtdtcreator
CF Summit West in Las Vegas
At Resorts World - New venue!!!
Sep 30 - Oct 1st for the Conference
Oct 2nd for the Certification
https://cfsummit.adobeevents.com/
Pricing
$199 for the Session Pass right now.
Coupon code might be in your email if you are a previous attendee for even better pricing
$399 for the Professional Pass - include Certification Training on the 2nd of Oct.
https://cfsummit.adobeevents.com/register/registration/select
Accommodations
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 - Building a REST API for the Modern Developer
Led by Luis Majano
Create a ColdBox REST API using Ortus tools. Secure, document, test, and manage your API with CommandBox, cbSecurity, Swagger, and more.
September 28–29, 2024
Bottega Exchange in Las Vegas, NV
https://www.eventbrite.com/e/workshop-building-a-rest-api-for-the-modern-developer-tickets-939258757227?aff=oddtdtcreator
ITB 2025
- Location: Washington, DC
- Dates: April 30, 2025 - May 2, 2025 - Washington, DC
- https://t.co/cFLDUJZEyM
- 50% off blind tickets
More conferences
Need more conferences, this site has a huge list of conferences for almost any language/community.
https://confs.tech/
Blogs, Posts, and Videos of the Week
6/14/24 - Blog - Robert Zehnder - Parsing and Formatting ISO 8601 Time Intervals with CF
Yesterday when I was working on the recipe API i needed a way to parse ISO 8601 time intervals and to display it in a human friendly format. I had started down the road of using java to handle this for me by initially using java.time.Duration to parse out the data in to days, minutes, hours, etc and that worked really well.
I thought I would be clever and write a function to format the output for me by "mathing out" the hours, minutes, and seconds and out put that as a string. It got complex and unwieldy quickly. Since I was already using java to parse the duration I thought I would see if there is a way to format it as well. In CF org.apache.commons includes DurationFormatUtils that will allow us to output durations in several different formats. I decided to use formatDurationWords.
https://kisdigital.com/posts/2024/06/parsing-iso-8601-time-intervals-with-cf
See also: Coda — https://forgebox.io/view/coda
8/5/24 - Blog - Ortus Solutions - Unlock the Power of REST APIs with ColdBox!
ColdBox provides a comprehensive framework for building robust REST APIs for more than 10 years now. It includes everything you need, from routing and headers to basic authentication and data handling. With ColdBox, you can quickly set up your API and deliver high-quality web services.
https://www.ortussolutions.com/blog/unlock-the-power-of-rest-apis-with-coldbox
BoxLang Corner
6/13/24 - X Post - Kai Koenig (quoted by Ortus Solutions)
@AgentK on "@BoxLang vs the world" at @CFCamp: "BoxLang had better tooling before its first release than any other CF platform currently has."
https://x.com/ortussolutions/status/1801237160068083914
7/9/24 - Community Post - Brad Wood - Java Method References and higher order functions
We’ve added some more goodies to our BoxLang Java interop, this time around method references and high order functions. These are things CF has never let you do, leaving Java interop a second-class citizen in the language.
CF already allows you to grab a reference to a UDF or closure as a variable, pass it around, and invoke it.
```
myInstance = new myClass();
myInstanceMethod = myInstance.myMethod;
myInstanceMethod();
```
BL also allows you to grab a reference to a static method from a Box class as well:
```
myStaticUDF = src.test.java.TestCases.phase3.StaticTest::sayHello;
myStaticUDF();
```
Now, in BoxLang, we’ve elevated Java methods, both instance and static to also be objects you can pass around, invoke, and send into a higher order function (a function that accepts functions).
When you reference a method on a Java class without the parenthesis (just like our BL examples above), you will get a special Function instance that wraps up the Java method, allowing it to be treated as a function, passed into any argument which is typed as a function, and invoked headlessly.
https://community.ortussolutions.com/t/java-method-references-and-higher-order-functions/10239
7/18/24 - Community Post - Brad Wood - Example Code: Using Java Streams in BoxLang
Here’s a couple quick code samples of how awesome Java Streams are to use now in BoxLang. In the past, CF lacked the proper Java interop to directly use streams, which is why we created CF libraries like cbstreams. Java Streams ARE crazy super powerful and you should probably check them out. They make CF’s simple data structures and limited functional abilities look pretty lame to be honest. Streams have been around since Java 8, and it’s sad to see how CF has fallen behind in comparison.
You can do a million things with streams, including super easy parallel operations, but this isn’t a primer on everything streams do. Two of the features streams provide (partitioning and grouping) came up in another thread so I cooked up a couple examples to show how easy BoxLang has made it to dip down into java, even being able to provide first-class BL functions as Java functional interfaces.
https://community.ortussolutions.com/t/example-code-using-java-streams-in-boxlang/10264/1
7/18/24 - Community Post - Brad Wood - New Feature: Functional binding to member methods
This is a follow-on from yesterday’s post 1 that showed how BoxLang now allows you to perform functional static binding to BIFs (built in functions) like so:
```
[ "luis", "brad", "jon" ].map( ::uCase ) // [ "BRAD","LUIS","JON" ]
```
Another type of method reference you may want to bind to is a member method on an object. Member methods could be
```
order.submit() // method on a class
companyName.uCase() // BoxLang string member method
companyName.getBytes() // Java String member method
```
So, historically we can declare a closure to call these methods for us like so:
```
pendingOrders.each( order => order.submit() )
```
This new feature allows us to create a first-class function that points to that method reference, but is not bound to a specific instance.
https://community.ortussolutions.com/t/new-feature-functional-binding-to-member-methods/10263
7/23/24 - Blog - Daniel Mejia - Effortless Deployment: Launching Your BoxLang Miniserver!
Deploying a BoxLang mini-server website to Render.com can be straightforward and efficient when using a Docker image built with GitHub Actions. The deployment process allows you to commit changes to your website code on GitHub. The GitHub action will automatically build the container image and push it to the GitHub Container Registry. Finally, an HTTP GET request to the Render.com redeploy webhook deploys the container image with the latest code changes. The entire process, from committing on your machine to a live deployment on Render.com, takes about 90 seconds!
https://www.ortussolutions.com/blog/launching-your-boxlang-miniserver
7/25/24 - Community Post - Brad Wood - New member methods for Java Streams
In BoxLang we already have member methods you’re used to on the common data types such as structs, arrays, strings, numbers, etc. Since we intercept method calls, we have the ability to define method methods on ANY variable type. We’ve added some nice little helpers to Java Streams to wrap up some of the cool stream Collectors we’ve built. A collector is a terminal operation on a stream which “collects” the values in the stream into a single object, kind of like a pre-built reduce operation but more powerful.
https://community.ortussolutions.com/t/new-member-methods-for-java-streams/10275/1
8/3/24 - Community Post - Brad Wood - BoxLang BIF -> Member Methods
Ok, so I’m ready to pull the trigger on one of our many departures from CF in BoxLang and I want to solicit a bit of feedback before proceeding. One of our driving goals of the 2-parser design and transpiler was being able to “fix” the warts of CF that we wish had been done differently. (I’m not throwing CF under the bus here-- BIFs long predated member methods, but if we were to write it again from scratch today, there are different decisions we would make!)
So the idea here is that any BIF (Built In Function) that operates on a data type would just be a member method if we were to design a language from scratch. This is how most other languages work and is pretty familiar outside of CF. I’ll also note, BoxLang doesn’t have any of the issues that plagued CF and Lucee for years where member methods wouldn’t always work on all data. Like how len( true ) was valid, but true.len() would error. CF/Lucee have mostly fixed those issues, and BL never had them. 🙂 If a value can be cast to the type, then it will work!
https://community.ortussolutions.com/t/boxlang-bif-member-methods/10293
Ben Nadel Corner
6/3/24 - Blog - Ben Nadel - Using Range Offsets To Power Weighted Distributions In ColdFusion
A few years ago, I looked at using arrays to power weighted distributions in ColdFusion. Using arrays is nice because they create a great visualization of the distributed values. But, creating and populating an array is a lot of overhead. As such, I wanted to revisit the idea of a weighted distribution of values; but, instead of populating an array, I'm just using calculated offsets.
https://www.bennadel.com/blog/4664-using-range-offsets-to-power-weighted-distributions-in-coldfusion.htm
6/25/24 - Blog - Ben Nadel - Core Decision Functions Will Accept Null / Undefined Values In ColdFusion
ColdFusion has always had a contentious relationship with null / undefined values. The ColdFusion runtime supports null and undefined values; but, if consumed incorrectly, such values lead to null reference errors. As such, it isn't always clear where you can and can't use undefined values. Today, I want to demonstrate that all of the core decision functions (such as isSimpleValue(), isArray(), and isStruct()) will accept null / undefined values; and, will do pretty much what you hoped they would do.
But first, we have to differentiate between referencing a null value and passing a null value. And, this is where much of the confusion (and runtime errors) come from.
https://www.bennadel.com/blog/4671-core-decision-functions-will-accept-null-undefined-values-in-coldfusion.htm
7/1/24 - Blog - Ben Nadel - Adobe ColdFusion Parses JSON Into Non-Ordered Structs
In ColdFusion, an ordered struct (aka linked struct) allows keys to be iterated in the same order in which they were defined. This is hugely valuable for workflows that involve MongoDB queries and Hashed Message Authentication Codes (HMAC). But, one quirky behavior that I came across today is that when Adobe ColdFusion parses JSON strings, it parses the object notation into an unordered struct. This means that you lose the "orderedness" through the serialization and deserialization workflow.
https://www.bennadel.com/blog/4675-adobe-coldfusion-parses-json-into-non-ordered-structs.htm
7/12/24 - Blog - Ben Nadel - Normalizing Collection Entries In ColdFusion
In Lucee CFML, looping over collections is effortless because Lucee exposes both the key and value attributes on the CFLoop tag. Furthermore, you can even use struct instead of collection for a more intuitive read on the code. Unfortunately, Adobe ColdFusion hasn't caught up with these ergonomics niceties just yet. As such, I created a user defined function (UDF) that normalizes collections (Structs and Arrays) into an array that always exposes index, key, and value.
https://www.bennadel.com/blog/4684-normalizing-collection-entries-in-coldfusion.htm
7/14/24 - Blog - Ben Nadel - OWASP Java Encoder Project Recommends Using Both URL and Attribute Encoding For HREF Attributes
In ColdFusion, whenever I'm constructing a dynamic URL, I always run the dynamic parts through the encodeForUrl() function in order to maintain URL integrity. But, if I then use that dynamic URL to populate an anchor tag's href attribute, I end up operating in nested contexts; and, I'm always left wondering if I should have used the encodeForHtmlAttribute() function instead. For more insight, I went to the OWASP Java Encoder documentation; and, according to their "Common Mistakes" section, I should actually be using both encoding methods.
https://www.bennadel.com/blog/4685-owasp-java-encoder-project-recommends-using-both-url-and-attribute-encoding-for-href-attributes.htm
7/15/24 - Blog - Ben Nadel - Getting A Struct Key In Its Native Key-Casing In ColdFusion
In ColdFusion, structs are case-insensitive. This is very much a feature of the language, not a bug. But, in some rare edge-cases, I want to validate that the struct key I'm using has the same key-casing that the struct itself is using. There's no native ColdFusion function for this endeavor; so, I created the user defined function, structGetKey().
My particular use-case is that I have a struct acting as my data store. The user can view a detail page for each struct entry using a URL-provided key. What I want is to make sure that my detail page is always rendering the struct key as it's defined on the struct, not as provided in the URL.
https://www.bennadel.com/blog/4686-getting-a-struct-key-in-its-native-key-casing-in-coldfusion.htm
7/18/24 - Blog - Ben Nadel - Using AttributeCollection To Manage Locking In ColdFusion
The other day, when I was demonstrating how to use an ordered struct as a fixed-size cache in ColdFusion, I had to synchronize access to the cache in order to limit the number of cache keys. Whenever I make a new demo, it gives me a chance to reconsider and experiment with different approaches. And, in the aforementioned demo, I used ColdFusion's attributeCollection functionality to define my CFLock tags. This felt like a rather elegant and easily consumable approach; and I wanted to showcase it more directly.
https://www.bennadel.com/blog/4689-using-attributecollection-to-manage-locking-in-coldfusion.htm
8/1/24 - Blog - Ben Nadel - Code Isn't Magical, It's Just A Series Of Commands
There is a sense at times, especially when starting a new framework, language, or codebase, before you know it, to assign magical powers to code. Ben compares it to “quantum entanglement” - a phenomenon where subatomic particles suddenly change properties if some corresponding particle’s properties change even if they are completely isolated, geographically separated and it seems to do so even faster than the speed of light would allow.
However, code doesn’t work like that - it’s a series of inputs, commands and outputs and if it feels like it’s acting like a magical blob there something that you don’t quite understand yet. This could be architecture, coding style, or ???
https://www.bennadel.com/blog/4693-code-isnt-magical-its-just-a-series-of-commands.htm
8/1/24 - Blog - Ben Nadel – JavaScript Application Size Shouldn't Affect Performance
And one sentiment that I've heard repeated a number of times across different podcasts is that as the size of a JavaScript application increases, its performance decreases. This is often touted as a reason to switch from one JavaScript framework to another—that some magical threshold has been reached. But, this sentiment makes little sense. The size of a JavaScript application should be completely disconnected from the performance of said application.
100,000 line data file will have issues regardless of library
https://www.bennadel.com/blog/4694-javascript-application-size-shouldnt-affect-performance.htm
CFML Jobs
Several positions available on https://www.getcfmljobs.com/
Listing over 15 ColdFusion positions from 15 companies across 11 locations in 5 Countries.
3 new jobs listed in the last two months.
Contract — ColdFusion Developer
VeredusCorp
Herndon, VA, United States
Posted July 18, 2024
https://www.getcfmljobs.com/jobs/index.cfm/united-states/ColdFusion-Dev-at-Herndon-VA/11643
Full-Time — Senior ColdFusion Developer
Serco
Pennsylvania, United States
Posted June 25, 2024
https://www.getcfmljobs.com/jobs/index.cfm/united-states/Senior-CFDeveloper/11642
Contract — ColdFusion Developer
Noralogic, Inc.
Richmond, VA, United States
Posted June 12, 2024
https://www.getcfmljobs.com/jobs/index.cfm/united-states/ColdFusionDev-at-Richmond-VA/11641
Other Job Links
Mike Horne on X — https://x.com/recantha/status/1820373668913987645
ForgeBox Module of the Week
ColdBox Scheduled Task Manager
By Giancarlo Gomez
Powerful and intuitive UI for displaying and managing scheduled tasks in your ColdBox application.
https://forgebox.io/view/scheduled-task-manager
VS Code Hint, Tip, and Trick of the Week
VS Code Profiles
Visual Studio Code has hundreds of settings, thousands of extensions, and innumerable ways to adjust the UI layout to customize the editor. VS Code Profiles let you create sets of customizations and quickly switch between them or share them with others. This topic explains how to create, modify, export, and import profiles.
https://code.visualstudio.com/docs/editor/profiles
In this milestone, we continued to improve the Profiles Editor by making it more user-friendly and by having a look and feel that's consistent with the Settings Editor.
The Profiles Editor is available as an experimental feature behind the workbench.experimental.enableNewProfilesUI setting. Once enabled, you can access the Profiles Editor from the Settings gear icon in the bottom left corner of the window.
https://code.visualstudio.com/updates/v1_92#_profiles-editor-preview
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 https://www.patreon.com/ortussolutions
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
- David Belanger
- Dan Card
- James Moberg & Jeffry McGee - Sunstar Media
- Dean Maunder
- Kevin Wright
- Doug Cain
- Nolan Erck
- Abdul Raheen
And many more Patreons - up to 57 now!!!!!
You can see an up to date list of all sponsors on Ortus Solutions' Website
https://ortussolutions.com/about-us/sponsors
Thanks everyone!!!
Switch to Modernize or Die ® Podcast - SoapBox Edition - Switch to Modernize or Die ® Podcast - Conference Edition
Music from this podcast used under Royalty Free license from SoundDotCom and BlueTreeAudio
© 2019 Ortus Solutions