110 CommandBox Workflow magic (modules to speed up CF development) with Brad Wood
Find the show notes and download the episode here.
Michaela Light 0:03
Welcome back to the show. I'm here with Brad wood. And we're going to be talking about command box workflow magic and how you can speed up your ColdFusion development. And those of you don't know, Brad is I think he's the senior application architect or autists, or somesuch. fancy title. But he's an expert on command boxes. He actually wrote it
is an open source tool. We'll tell you more about that later in the show. He's from the Midwest. He's currently in Kansas City, grew up in Southern Missouri, and
as well as cold fusion programming for 20 years. He's also got three. I was gonna say three wives and one girl, but he's got three girls and one wife. Yes. Lexia. Reading.
Brad Wood 0:51
And it's really four girls total if you add them all up,
Michaela Light 0:54
but four girls complete? Yeah. My wife is yes. And he's a big contributor. The coefficient community has a very active blog, which I'll put in the show notes, and it's called coding revolution or code, coding. Coders revolute? Yes. With an S CODAs.
Brad Wood 1:16
Yes. It's our revolution. We own it.
Michaela Light 1:18
Yes, absolutely. And he's also a well known speaker at various ColdFusion conferences. Hopefully this year, there'll be some in person conferences. He can present tense but last year fully online, except for into the box. Oh, into the box was the brave conference.
Brad Wood 1:40
Yes. Crazy Ones who tried it?
Michaela Light 1:43
Yes. Really successful. I thought I attended remotely. But I I heard was a number of people went and had a good time. Suddenly, the sessions were fabulous. So yeah, we also had a
Brad Wood 1:57
lot of time. It was a we definitely had a lot of fun, even though it was
a different year for sure.
Most of our attendees roll online.
Unknown Speaker 2:07
Yes, I can understand that.
Michaela Light 2:11
So and Brad is also the co host of an amazing ColdFusion podcast. Tell us about that, Brad?
Brad Wood 2:22
Well, we have our moderniser die podcast, which is sort of the theme of our conference moderniser die. A lot of our our recent efforts to revitalize the ColdFusion community. And we have two forms of that podcast, we have a
soapbox edition, which is more of an interview style, like what you and I are doing here. And then we have our regular weekly edition, which is the the news edition. And in that one, we just cover current events, basically, anything that's happened in the last, you know, seven days, or any upcoming, you know, webinars and conferences, just so people can keep updated on what's going on in the ColdFusion. World. So that that's the the moderniser die podcast that we do.
Michaela Light 3:07
I think, well, let's start off because I think probably some folks listening are wondering why should they even use workflows in their cold fusion coding?
Brad Wood 3:18
And that's a good question that the thing is, everybody probably uses a workflow, some of some sorts, you may just you might not have a name for it, or you know, a well defined structure, but you probably have methods, you go about doing things, you know, even if you just think of them as, as habits or a group that you get into something that that you feel makes you more productive, or a slightly more efficient, or just a useful way of doing things that make sense. You know, so everyone on your team has some sort of, you know, vague cohesiveness between what you're working on. And I think there's probably everybody that that has some sort of workflow to themselves, unless there's someone out there who literally just, you know, gets up and just does something random every day, just to see how inefficient they can peek. Everyone probably has,
Michaela Light 4:06
what would some examples of that be? Brad, you think folks do?
Brad Wood 4:12
Well, I mean, workflows can be as generic as design patterns, sometimes, you know, using Source Control, using local development environments. You know, using, you know, a ticket tracker that helps you manage the tickets that you and your team are working on, using shared tools that all you know, format your code. So everybody writes code in the same manner. I mean, any of those things could be considered basic, you know, basic, sort of workflow, tools to kind of keep everybody moving along in, you know, in a similar fashion. I think, you know, the most inefficient development teams are probably those where you have a bunch of people all this kind of going off doing their own, you know, their own crazy things out of sync and so workflows can be to bring teams together. And they can also just be to improve, you know, your own life, you know, do a boring task every day, you know, going through fixing some formatting on your code or editing your host file, you know, stuff that just takes time. And, you know, there's a joke that says that we know one of the most important qualities of programmers is being lazy, you know, but there's a bit of truth to that, because, you know, a programmer, somebody does something two or three times manually, and then thinks, wait a minute, I could automate this. And so a lot of times, you know, the workflow improvements we do, we're just automating that that boring thing or that repetitive thing that, that we do every day. So the next time we need to do it, we, you know, we have a saved macro or something, and it's not a, you know, a 10 minute job. And, of course, the other benefit, in my opinion to automating something is, you know, you help remove, in theory, some of that, I might screw it up doing it manually, you know, bit if I have some, you know, some process that I can use, and my teammates use to perform something, you know, simple, like, you know, merging the development branch into master and tagging the repository and pushing it all to fourth box, you know, some sort of chunk of work that we all do, you know, an automation of that means I don't screw it up and miss a step, because I have that, you know, built up as some, you know, some package scripts and command box or something of that nature. So, those are kind of the, the main benefits that I think that, you know, adopting some sort of, you know, workflows sort of help either an individual basis or a team member, I definitely want to stress the individual individuality of it, because, um, you know, sometimes I'll see people ask, you know, on the CFML, Slack, they'll say, should I bother using Source Control? If I'm just a single developer? You know, is there really a benefit? If there's, there's not, you know, two or more developers? You know? And my answer to that is, yeah, absolutely. I use source control on projects that I'm the only person that ever touches it, because there's still, you know, all sorts of benefits there. It doesn't necessarily have to be a team benefit. So like it is broad application, if you will,
Michaela Light 7:13
oh, it makes sense to me to save time and make things consistent. It's very easy to make slip ups if you're doing stuff manually, over and over again. And it also lets you debug the task, right? Because you can, you know, for example, if you're updating data in a database, you have to do it several times, you could do it manually. But if you write a script for it, you can check it works. And then you can just run the script, you know, forever after. Yeah, so definitely sounds good to use workflows. And you're probably right, probably most people listening are doing some kind of workflow. But we're gonna talk about workflows using command box. And as much as it may amaze you, Brad after? Is it 10? How long's command box been around 10 years. So
Brad Wood 8:01
now not that long, 2015 or 2016, I believe. Here, the way to find it is to Google the phrase command box 1.0 point oh released. Because I always use the same, the same wording on my blog post with every new version command box. And if you just Google command box version release, you'll find the release note. So this blog post is released on February 4 2015. And that was a year after we'd started development on it. So really, 2014 is when we began working on it. So
Michaela Light 8:36
it's eight years old. It was conceived eight years ago, and was born so easily. That works. Yes. Yeah. There you go.
Brad Wood 8:47
I mean, you're saying,
Michaela Light 8:49
I imagine you have a workflow for naming your blog articles at this point, because I just
Brad Wood 8:53
I just said what it is, is very simple, is command box, the version and the word released, they usually have an exclamation point at the end. And
Michaela Light 9:01
tell us what it is for people who may amaze you to believe that anyone listening couldn't know what command box is, because it's a very commonly used ColdFusion tool, but I know, I've bumped into people who don't know it and don't use it.
Brad Wood 9:14
No, yeah, I mean, all the time. As to why. Um, so command box does a number of things. But primarily, it's a CLI, which is a command line interface. tool for ColdFusion developers, written in ColdFusion. And one of the it's a native binary, you can run it on on Macintosh on Linux on Windows. Works on on ARM ships just about anywhere. Since it's written in ColdFusion runs on top of Java, you can basically run command box anywhere Java runs. It can be used to start servers start ColdFusion or Adobe ColdFusion or Lucy servers which is one of the most popular uses of it. That's without needing to install anything. So if you have a brand new computer, and you'd like to test out, I know Adobe ColdFusion 2018, update, whatever you can, you know, type of very simple command, ask no bash command box, please start a ColdFusion 2018 server using this folders to Webroot. And it'll download whatever it needs, there's no installations, and you know, it'll spin up the server. And you can do that as many times as you like anywhere on your hard drive different versions that makes this local development, quick testing the bugging is very easy. And so that's, that's kind of the the biggest most popular use, but it also has repple built in for just running and testing, you know, individual snippets of ColdFusion code, it has the ability to do command line automations. So via task runners, or recipes or package scripts, so lots of little features, you can write reusable tasks that normal people I say normal, the other people may have used a bash script for or a Windows batch file, or Python or node. But you can do that in ColdFusion using command box. So you can write a script that connects to a database and, you know, zips up some files and you know, write some things to the hard drive and loops over and update some record in another database, write whatever you want, but just purely as a command line script. And then the third big thing that command box does is package management. So it can install the libraries that you need to use in your application, whether it's the coolbox framework or the framework, one framework, you can install pyside CMS through command box you can install, you know hundreds and hundreds of modules, whether they're precise CMS plugins or coolbox, MVC modules or even command boxes, own modules itself, it installs into itself by itself. But integrates with the Forge box website, which we also manage, which is a general purpose code repository for ColdFusion libraries. And anybody who wants to can stick any package they want for free up on the Forge box, whether or not it's related to any of the orders, frameworks doesn't matter. And then using the command box CLI, you can install those packages, you can update them to newer versions, you can downgrade them to older versions, you can uninstall them, you can do all the basic kind of package management tools, and that's, that's really what sort of brings, in our opinion, you know, ColdFusion development into the, you know, the modern age of what kind of everybody else in the programming world was doing no developers, Java developers, you know, Python developers, they're all you know, installing packages from other people open source or not, you know, via this package management tooling. So that's one of the big pieces of command box. And then finally, um, the other than some some fun ASCII art that I like to hide in random places.
Michaela Light 13:08
Yes, very colorful these days, we I
Brad Wood 13:11
really went crazy when I figured out how to support Twitter in 56 colors, which is an ironically ridiculously small amount of colors in today's you know, world of video cards, but you can make a lot of really pretty interesting ASCII art using 256 colors. The other thing that's a little unique to command box is in addition to all of the the tooling that I just mentioned, which you can find it in pretty much any other language. You know, people have written everything I just said in Node and Python and Java. One thing that's a little unique to command box is it also has an integrated shell built into it. So most command line tools like Git, for example, you just run them from bash or from your Windows, you know, command prompt, you know, you type get poll, right, you know, and it runs something and then the command exits, it's done. You can use command box in that manner. But command box also has the ability to just run it directly with no arguments. And it'll drop you into a little, you know, shell with the cursor in the prompt, but it's all built by command box. And so, this is a special shell that behaves a lot like bash you can do you know file commands, you can tail files, you can grep files, you can do a lot of fancy things that bash does that Windows doesn't kind of gives you a common command line platform that will run the same on any on any machine. But it integrates directly with the ability to run native binaries on your on your machine. So you can still run Docker commands or git commands, or NPM commands from inside the command box shell. And you can also natively run ColdFusion functions and code right from within the command box shell. So it's sort of a an amalgamation of a bash like Shell and anything negative on your computer you want to run and actual ColdFusion functions and code right from within that. So it's very powerful. And it's highly customizable. And since it's all written in confusion, there's a lot of modules out there, we'll talk about some today that allow you to, you know, customize what the prompt looks like, you know, or you get really good tab completion and built in help, you can just hit tab as you type, and it gives you all the possible options. So, you know, the idea is just to make you as darn productive as possible. And you know, it all kind of goes back to, you know, workflow, how long does it take you to get to what you need to do, and a lot of ColdFusion developers aren't particularly familiar with just sitting at the command line and living there all day long doing stuff. And I don't blame them, because I didn't really like myself as a ColdFusion developer in the command line kind of sucked. It was annoying, it was hard to remember what all the commands were. And so that's where command box tries to be different, and tries to be all the power that you want. But the way it should have been word, it's easy, it's intuitive, there's built in help, everywhere, there's built in tab completion everywhere. It's just easier to figure out and so that's, that's your elevator speech for a very tall building.
Michaela Light 16:25
Want to know more? I'll put the link to the command box site on the autists.
Brad Wood 16:31
Sure, yeah, but um, there's a lot of stuff that does but
Michaela Light 16:34
and there's a whole bunch of documentation there, as well as the source code and work kind of stuff. And I'll also link in the past podcast episode we did command box for deep dive that we did a few years back, I know you're on command, box five, but most of the key features were still there in version four. So for folks who are interested, definitely recommend checking it out, it'll change your ColdFusion life. Guaranteed. So let's dig into these modules and explain what they do. And you know why you might want to use them. So the first one you you've watched suggested talking about was bullet train.
Brad Wood 17:20
It is, um, Bullet Train is is my favorite module for command box. Um, I'm, I'm completely biased by it, probably. But if I did, I didn't come up with a con. I didn't come up with the concept of it. But I did write the module. It's mostly eye candy, but it's very handy and useful. Um, the name bullet train, I didn't even invent that I stole that name, along with the idea from
Michaela Light 17:53
me, maybe we should first briefly share the screen for those of us watching the podcast on video so they can understand what the heck you're talking about.
Brad Wood 18:02
Yeah, um, so
Michaela Light 18:05
probably, you know, spend five minutes describing you know, a bullet train, but he only takes a few seconds. And let's bump your font size up to the max. So people can actually see this on a tiny screen bones.
Brad Wood 18:18
So I stole the IDF from a plugin for Z shell, which is a Mac. Okay. I'm a part of iTerm this originally came from so just
Michaela Light 18:30
to be clear, what we're looking at here is the CLI. It's the command line interface.
Brad Wood 18:36
It is Yep. This is what you see you when you open up the interactive shell
Michaela Light 18:40
Yeah, man. So very, very similar to the command prompt in Windows except this is better. Right?
Brad Wood 18:47
So the ColdFusion Yeah, this idea was originally a boon to prompt customizer called Powerline. And you can you can see here the, the know the prompt every time I you know, hit enter in redraws it, it has some information in it. So it, the green checkmark tells me the last command was, you know, successful. Right? If I know, I invalid command. Now we have a red X. They know that says last man failed. So it tells you a bit about the last command. If the last thing you ran take took a long amount of time, it'll timer will pop up. So it took 245 milliseconds. To perform that if I if I fell the shell of asleep for 2000 milliseconds. It will tell me the last command took right over two seconds to run. So it's kind of some built in information. We have the the version of the shell. It is not in fact one point 2.3 that only shows up locally because I have I'm doing local development command box. So I have the the version number which has a placeholder in my source code. I have the current time which I'm in Central Time The name of the current folder I'm in also shows up, which is very handy to keep track of where you are on the hard drive. And if I jumped into a folder that has a server that I've started, we can see a bunch more information shows up. This folder is a package. So we have the name of the package, CF config services, we have the version of the package that shows up, we can see this folder has a Lucy server version 5.3. And it's currently stopped. We can even see this, this folder has a git repository to take a second for to read the repository, but it's on the master branch, I have two additions, 18 changes one deletion. So the the kind of I did Bullet Train is as you move around to different folders on your hard drive. The cars in the quote unquote train, if you will appear disappear based on the context there. And they can tell you about the servers about the packages about the folders about the Git repositories that you have living in that given folder. And it can save you a lot of time. And you know, you change in the directory, we have a project, you think to yourself, Wait a minute, is the server running, you know, and I could, you know, I could run the server info command, you know, and I could look and see if the server's running or stopped. Or I can just, you know, look at command box bullet train, and it'll tell me the server, the status, the version of it. So it's really simple. Um, and there's not much to it, you can you can customize it. There's, there's a few more cars, I didn't cover that a bit more edge cases. But it's the first thing I always install into into a new command box installation. Because it's just really darn useful and full of information about what you know your current project. But the the state of that project is the only the only little trick with this one is these cute little arrow characters that kind of make up the little you know, cars between the bullet train, you do need to install a font called a powerline patch font that has a little Unicode triangle, but it's all listed in the readme of the of the documentation for the for the module sevens that was really simple and very cool. Yeah, and still, right. command box Bullet Train is all you have to do.
Michaela Light 22:24
You're showing one of the cool package installers here,
Brad Wood 22:27
right. So if you didn't see what I did, I typed install command box hyphen, and then I hit tab because I'm lazy, right? Yeah. And when I do that, that actually goes out the Forge box via an API call. And it says, Hey, forge box, what are all the packages you have right now that start with command box hyphen, something. And that's what this list is. And I can start typing filtering as I go. And I have to spell correctly, which is why I don't trust myself. So that's one of the nice features of the interactive shell this time saving. Yeah, tab completion is just as smart as I could possibly May. What's really
Michaela Light 23:03
timesaving? You don't have to find the website, this particular package is on. Download the correct version and all command box figures all that out for you. Absolutely. Even I'm guessing if you needed to use an old version of bullet train, you probably could install that too.
Brad Wood 23:20
Yep, yep, you can dial in the versions. In fact, I can look and see it all look and see all of the the packages I have installed right now all the system modules have I think most of these will probably be talking about today.
Michaela Light 23:34
Smells very like using Unix. You know.
Brad Wood 23:38
It's all all command line. Yeah. Yeah. Very cool.
Michaela Light 23:42
Well, let's thanks on that. Let's stop the screen share for a moment to so people can see our beautiful folks faces. So what's the next one that you think would be cool for people to
Brad Wood 23:56
the next one is probably a little module and this is one that I didn't write. And that would be dot DMV. And again, sometimes there's no there's no new ideas under the sun. This is also something that we sort of just shamelessly, you know, ripped off of what a lot of other tools and technology we're doing, because it's just useful. And so what's, what's a common workflow, I suppose, is using I think it's
Michaela Light 24:29
called evolution in nature. You know, one animal see something cool and other animal does the bones to improve itself. You know, we don't call it ripping off in nature there.
Brad Wood 24:40
Okay, there we go. So what was very common nowadays, in a lot of deployment situations is to use environment variables, which, if you're doing anything with Docker, or with cloud or Kubernetes, it's everything is all environment variables. Now, a lot of confusion developers aren't used to using environment variables to put server settings. And in fact, the first time I heard that I thought it sounded really weird, like, why would I use that. And for a traditional dislike, you know, Windows Server with IIS, and ColdFusion, there really might not be a lot of like use cases where that would be useful to you. But as soon as you get into anything that's Docker or cloud based environment variables give you kind of a place to put something, you know, configuration settings that aren't baked into the source code, you don't have to worry about them being in the repository, it can be different per server can be different per environment may be different for each developer on their local machine, like passwords, mail servers, you know, data source name, server names, whatever. And it just kind of gives you a nice level of abstraction. Because you know, every every operating system, whether it's Mac, Linux, Windows, they all have a concept of environment variables, you know, in the environment, the process is running in has its own set of variables. And so what you what you typically run into then is when you're just doing local development, it can be a pain to set like actual environment variables. But you still want to have some settings that you can kind of extract out of your source code, you want to put them somewhere. So that's where we started to see a lot of tools came up with a convention, where they would have a file called know a period and an end. Now it can be a pain to create a file of that name, because Windows kind of freaks out to try to do it through Windows Explorer, like, you can't create a file with only an extension, you can do it easily to the command line, it's not a problem. But we'd call the file this dot end in the.if, you're not kind of a a Unix guy. Typically, files start with a period are considered hidden files in most Linux environments. And a lot of web servers will these like a patchy, for example, or command box, they won't serve up any file that starts with a period as well considered a hidden file, just kind of sort of secured by default, if you will. So that file name is basically a hidden file, ignore me Nothing to see here. And what you can do is it's just a properties file, and you can stick settings into this dot EMV file, as we call it. And so the body of the module for command box will automatically read in any of these, any of these environment variables, I sort of use that phrase in quotes, because they're not really true environment variables, as far as your operating system is concerned, and a little make them available to the CLI anytime you start a server or run a command. And the more we started playing with this, the more kind of useful examples that we found, you know, to use with it. And so, you know, almost every site that I work with now will have, you know, our configuration is more or less stagnant. And then we just swap out the actual, you know, name of the mail server, or the data source password, or the email address that the bug report gets sent to. And those are all, you know, pulled over into our little, you know, dot EMV file to get loaded up. So very
Michaela Light 28:19
cool. I apologize. I got distracted there, I have a skylight and I was getting toasted by the sun here. It's like, you know, do you have a safe example of this where you could briefly show
Brad Wood 28:33
us? Um, yeah, it's, it's sort of odd to demonstrate only because
Michaela Light 28:40
you don't have to demonstrate I don't think I think just seeing an example. Right? No, no, while you have and maybe seeing in ColdFusion code, what? how you'd access these variables that you've
Brad Wood 28:51
sure sure it'll in in all your lines? Oh, yeah, I was just gonna say oftentimes, I'm using DMV along with some other, you know, library or tool that are actually consuming the variables, like you just said, go ahead. i Sorry, I interrupted you.
Michaela Light 29:06
I was just gonna explain to listeners who don't use Docker. The docker is a virtual operating system container, or whatever you want to call it lightweight. And the reason you know it, it keeps the actual operating system away from you. So you can't actually get you know, your Windows or Mac or Linux stuff. Right. It's this, this gets around that. Yeah, so this is a way to inject information into the container that you can then pick up in the ColdFusion code and do like you're saying, so tell us what you've got here.
Brad Wood 29:43
Yeah, in our eyes, variables work fantastically in Docker, because every every site and Docker runs in its own container and each container has its own set of environment variables, so it is perfectly cordoned off. Okay, so while you were talking, I just ran a very simple command which was called Box create app? Um, yeah, no, I did that. Because this would give me a really simple example of seeing some environment variables kind of an action. This command just creates
Michaela Light 30:11
that like a scaffolding kind of exactly.
Brad Wood 30:14
Yeah, this is just a scaffolding command, you run it in an empty directory, and it just dumps like a sample coal box application, just kind of like ready to go. Right. So we'll ignore one more the coal box bit since there's sort of irrelevant, but here is part of our example, we have a dot EMV file. And we also have a dot EMV example file. And what's important is, you don't commit the end file to source control, it's considered a private file, you don't want it in source control. Usually, that's just something everybody has their own copy on their machine or on their, you know, server. And that's why you have the example files. So the example file, basically, for new developer is going to set up your, your site, though, they'll look in the example file, and this will be, you know, kind of the the template of all the environment variables they need to have set. And so these are just examples in this particular site, these can literally be anything, right? Doesn't doesn't have to be any of these. So you know, here I have an app name and environment, I have a bunch of information for my database, maybe some JW T secrets, some s3, access keys, you know, just give you some ideas of what of what you might put in here. And so if I, and then
Michaela Light 31:29
let's look at the ColdFusion code that can access these variables. So we can right away turn up. So I'm, while you're digging up that code just mentioned to folks, if it wasn't clear, there are two reasons you wouldn't want to commit this to source control. One is every developers version of the file is different. And secondly, it contains confident, you know, 10s, passwords, you don't want that in version control. Exactly, exactly. And yeah, so that's why you didn't want the passwords in the ColdFusion code either.
Brad Wood 32:00
So there's, there's two places of these environment variables are accessible. The first place is right here from within the CLI. So I ran a command called environment show, which just shows me all the current environment variables that the CLI knows about. And you'll notice that all of those lines that were in that dot E and V file, show up as environment variables. So the module has already seen that there's a dot E and V file in this folder, then every time I run a command in this folder, it loads as environment variables up for that command. And so here we can see the values of what they are. And you might even notice that there's some environment variables in here that I that were not in that EMB file. The module allows me to have global environment variables, and there's a special EMV file in my user home directory that has my default password for every server that I start. And you can see this as that environment variable here. And yes, I do literally use the word the password password. And the reason is, because demos like this, I didn't want to worry about some actual passwords showing up on the screen. Alright, so uh, what would this look like then to use this in our ColdFusion code? I'm just gonna fire up VS code. And this is a, this is me running a native a native binary from inside the command box, I use the exclamation point. And then code is just a reference to VS code. And the dot means open the current directory, I use that little trick all the time to pop open the current directory of code into VS code. So if we look in
Michaela Light 33:45
our podcast on VS code on ColdFusion, add ons on that not necessarily with you, Brad. I mean,
Brad Wood 33:51
alright, yeah. Yeah, a lot of it's the most
Michaela Light 33:55
popular IDE for ColdFusion. Right now and features.
Brad Wood 34:02
Just checking through here. Alright, so here's an example of us what it looks like in coolbox, to use one of those environment variables. So I'm in the coal box, CFC, which is basically the configuration file for call box. And there's a function in here called Get system setting. And we're getting the system setting called App Name. And then we provide a default value in case it's not found. And you'll recall this app name if I dump out this end file again, we have an environment variable called App Name, and it's set equal to coal box so the value coal box will get pulled in by this little get system setting call. Now, you may be thinking what if I'm not on coal box, I don't have these nice little handy, you know, helper functions. Both leucine and Adobe both support this the server scope, you can do server dot system dot environment. app name. So if you're outside of a cool box, and it's nice little helpers, Adobe ColdFusion 2018, I think at a certain point and on and Lucy like 5.1, or something and on both allow you to get to all your environment variables inside of a struct called system and your regular everyday server scope. So if you're, if you weren't in coal box, then the equivalent of this code would literally just be that. And then of course, if you want to provide a, you know, a default, you can do so with the Elvis operator. So that's basically what it is, it's a very simple concept is very simple to use. But it basically has, you know, near unlimited use cases of, you know, settings you can put into, you know, just a simple file that is on your hard drive. And then you can use those settings in your servers, you can use them in custom commands. And you can even use them in like your CF config json files. But we'll talk about that.
Michaela Light 36:05
Next thing, very cool. And some of the workflows can be the simplest things, but they make your life easier, and they save time every single day over avoid having headaches and mess,
Brad Wood 36:16
right? Well, I think I think that simpler workflows are better to be honest, because, you know, sometimes if you come up with something overly complex to improve your life, sometimes you just make it more complicated. So having a you know, having some workflows that are that are really very simple by nature, but very useful at the same time is, I think, kind of the sweet spot there.
Michaela Light 36:39
So we'll put the links to all of these workflow modules in the show notes, but you can find them all on forge box, you know, just by searching. So let's move on to see if config which very cool tool.
Brad Wood 36:56
Yeah, so CF config is probably my next favorite after after bullet train. By the way, I didn't mention this, the Dotty and V module I just talked about, that was the brainchild of of Eric Peterson, he wrote that one. So that's a really nice one, I didn't have anything to do with that one. So CF config, um, is basically a, it's an add on for command box that allows you to manage all of the configuration inside of either a Luci or an Adobe ColdFusion server. So we're talking mail servers, data sources, you know, passwords, ColdFusion, mappings, custom tag paths, debugging settings. And basically anything that you would normally log in to the little web based administrator for ColdFusion, or Lucy, and you would grab your mouse, you'd click around, you'd interact the website, and you'd you know, insert all this new information, all that falls under the domain of CF config. And the goal is to make things be automatable and scriptable. Because whenever you set up a new server, you know, you install ColdFusion on on a fresh new blank server, you would have to sit down and you know, manually re enter all those, you know, configuration items before your your app would work. And so you have you have manual steps that no human asked to perform, you have the potential for error. You know, if you mess something up, you can't really automate, you know, the use of a web interface, you know, you can't just make it be an automatic thing. So this became a real pain point with command box, because command box allowed you to just start servers anywhere, anytime any version, just like a variable server, you get a server, you get a server, right? But it was like, Well, man, I have to recreate my data source every single time I start a server, this sucks. So we created concea config, which allows you to import and export settings, wholesale from any version of ColdFusion. Any version of Lucy and also technically any version of Rylo. If there's new people out there, unfortunate enough to still be using Rylo I fan
Michaela Light 39:09
on this code stay the ColdFusion survey, maybe two out of 500 folks that they use, right oh,
Brad Wood 39:15
well, that's that's very good to hear that.
Michaela Light 39:16
And they may have been confused. Because why would you? I mean, Lucy does the same thing that both open source it was the successor.
Brad Wood 39:26
Right? Yeah. The first version of Lucy was basically a direct upgrade from Rylo. They made that as easy as possible. So CF config defines a simple generic JSON format for storing all this configuration, data sources, mappings and things. And the JSON. The json file the CF config uses is this. The real beauty of it, I think, is the same across every version of every engine. So whether it's Lucy five or Rylo four Adobe ColdFusion 2018 It doesn't matter the same JSON file describing a data source with this name with this password on this server can be imported into any of those servers. And CF config does the hard part of figuring out what that needs to look like for each of those servers. Because at the end of the day, the configuration is mostly the same across the board, even though the behind the scenes details that we don't really care about, can be different. So you can take an existing server, suck the settings out of it into a JSON file, you can take a fresh server, you can push the settings into it from a JSON file, you can transfer settings directly between servers, you can even run diffs between two servers, or between a server and a file to files, whatever you want. And it'll tell you what, you know, you're missing this data source on this server, or your password is different for your mail server over here. And all of a sudden, you know, the problems of why is you know, web four, working in web five isn't working, you know, I swear, we have the same settings, but it's gonna take me an hour to click through the interface and look at them. Um, you know, you can just use TF config, and you can say, well, this diff the settings on both servers, and you know, it'll pull them up side by side, you're like, oh, my gosh, I didn't realize that I'm missing the data source over here. You know, that's why it doesn't work. Um, and well see if config is a is a module for command box. And it has a bunch of kind of out of the box usefulness for command box servers, one of the really nice things of the CF config can be used on any server, regardless of how it was installed. So if you just have you know, the regular Adobe ColdFusion installer with a regular Lucy server installer that, you know, stand up as a normal Tomcat server, you can still take the CF config tool, you can point it at the hard drive where that server is installed to and say, import my settings or export my settings. And this is where my server lives. And it will happily do so because it's just interacting with, with files on the hard drive. And a lot of people don't realize they can use TF config, even if they're not using command box to start their servers. So you know, your production web servers that are just a standard installation of ColdFusion, you can use TF config to interact with those settings. And you can even do it across a network drive. And you probably if you have Windows servers, you probably have some network drive where you can just access the hard drive directly via you know, some, you know, network mapping, you can point CF config on your local computer to that networking mapping. And you can you can import and export settings on on a remote server. So again, it's a very simple tool, but just tons of possibilities for what you can automate. And I can show you real quickly that that coldbox sample application that I created also actually has an example JSON file. I'm
Michaela Light 42:52
sure I bring it up quick, while you're bringing it up and sharing it remembering to share your screen. I just want to mention it's great for Docker, as well. Because,
Brad Wood 43:04
Michaela Light 43:06
getting a new virtual server, you know, and if you're if you have a cluster of Docker things, you may be spinning them up and destroying them on depending on traffic. So you do exactly yeah, really configuring them.
Brad Wood 43:21
Anywhere where you've completely automated the creation of a new server, and Docker is definitely one of those places. You want to have CF config in the mix. Because there's really no other good way to do it. You find people like trying to manually copy XML files are on the hard drive, oh my gosh, don't even try that. Right. It could be the wrong version of the XML, you could be overriding too much stuff. CF config is surgical. If you say if you ask the config to set a single setting, it'll read in the XML file, parse it change just the setting you want, and write it back out. So it's it's much more nimble than, you know, people just copying and pasting XML files. Anyway, yes. So here, this little coal box sample and again, don't have to use coal box to use TF config. It's just an example. There's a file called.cf config dot JSON, right? And actually, that I close VS code I did I closed my little VS Code Window unscrupulously. Thinking that I would never ever need it again. For was I wrong. I'll just jump over and view this JSON file inside VS code because the the format it'll be will be much nicer. You don't have to have every possible setting in the JSON file. In fact, this would be a completely valid CF config json file with a single setting request timeout enabled true. So you can you can import every single setting that's ever been invented or you can import a single setting or anywhere in between. and So TF config will only touch what you ask it to. So this default file that we have enabled request timeout set some whitespace management, which is right there sets the request timeout to be what is this five minutes has some cache settings course these are going to be specific to Lucy, Adobe ColdFusion has no concept of creating named caches. Unfortunately, here we have a data source being created. And that's that's basically it for this example. So I mentioned things like mappings all that's possible. This is a very simple example. Now, you may notice that there's some placeholders in here, right, the name of our data source, is using this little kind of dollar sign curly placeholder, and DB host and DB driver and the name of the database. If you have a particularly good memory, you may remember that each of these little placeholders are all from that dot E and V file, we were just looking at a couple examples ago. So yesterday, I should have opened up the CMD file here in VS code, it looks so much nicer. So this is sort of a beautiful collision of the Dotty and V module and the CF Config Module working in tandem. So when you start up your server, for Dotty and V module reads these environment variables out of this file, puts them in the environment context for whoever wants to use them. And then when CF config fires, it says, oh, I need to create a data source. And I need to go look for environment variables called DB host and DB driver, which are already sitting there ready to be used because the dot E and B module, so our server starts up and we get a data source created with dynamic settings, combining the JSON file and environment file. So this gives us a ton of usefulness because I can commit this JSON file the source control, everybody can share this, this JSON file, but everybody may have a different password. And that's where the DMV stuff comes in. So if I, if I pretend I'm going to start a server,
I can run the start command, I added the dry run flag because I don't want to actually necessarily start the server. But this will still create the server on on disk. And it'll it'll import in my settings. And so one of our items here said loading CF config in the server. So the CF Config Module, by convention found this JSON file and said, Oh, hey, I bet you want me to import these settings, I'm just going to go ahead and do that for you, right, the Dotty and B. Module, by convention found the dot EMV file and said, Hey, I bet you want to use these environment variables. Let me load those up for you. And that's the beauty of a lot of these modules is they just kind of automatically kick in when the right files are in the right place. I don't have to do anything manually, I just start my server like I normally do. And so I can ask the config. Now show me all of the settings that exist on the server. And here we have kind of a full list. There's all sorts of junk in here. These Luci loggers consume quite a bit of stuff. And so here is my data source actualized and created Finally, on the server. And you can see there's no more placeholders here. Now we have the the actual database name, the actual, you know, host, the password was actually blank, the actual username, all in here. And so this JSON represents all the settings on the server. So there's like a million other things you have config does, but really, that's the bread and butter, which is you know, I want to be able to start up a server from scratch. And I want that server to be ready to go out of the box, I want them to be data sources, I want them to be mappings, I want them to be settings, I want to be able to just load my site up in the browser and move on with my day. And that's what CF config does for you. And it works really nicely with Dotty and V to make those no configurations be be dynamic on the fly. You can use that same JSON file between production and development if you like.
Michaela Light 49:08
It's very cool. I'll just mention one other use case, which is disaster recovery documenting your server setting. So if a server dies, you can stand up another server quickly instead of having to wrack your brain or manually enter all those settings from a Google doc you created.
Brad Wood 49:24
Absolutely, yeah, it's a fantastic way to archive settings on that in, in on that topic briefly. Um, the the a couple really nice, interesting use cases that I have clients that have kind of run with this library. One I have some clients that use it for lockdowns, so they have a CF config json file that contains all of their lockdown settings. So debugging is turned off, right? Um, you know, certain security settings that you know, you don't want to have on a production. Oh, error pages, right default error pages, secure profile, that kind of stuff. When they go to lock down their servers, they used to have to manually set all of these settings. Well, now it's just CF config import, and they import the JSON file with their lockdown settings. And they're done. Um, another interesting use case, speaking of archival, I have a client that has a JSON file, that's kind of their their gold standard of what the setting should be on the server. It is it's a government agency, and they want to make sure nobody sneaks in and changes anything during the day, right, you know, login to the administrator, maybe check a box who would know, so every night, they use the CF config, CLI, and they run a diff between their gold standard JSON file and what's actually on the server. And it generates a PDF report, which is part of what the module does. And it writes it out to a network drive. And they have a history every night of if anybody changed anything. And if so, exactly what was changed side by side. There's really interesting use cases, people they've cooked up and kind of run with the CF config stuff.
Michaela Light 51:00
Very cool. Well, let's move on to the next one. I think we have time for one or two more for remember Brad.
Brad Wood 51:06
So that's about right.
Michaela Light 51:08
So what's the next one? You you think it would be useful for folks?
Brad Wood 51:14
A indumentum, one of my show notes.
Michaela Light 51:17
Yes, so many show notes. Juanjo most.
Brad Wood 51:21
Um, so this is a very simple one. We can we can do the whole stuff bigger, we have so many modules what to talk about, um, most updater one is a very simple one. And again, I didn't even write this one. Chris Schmitz wrote this one, and we evolutionized the idea from a vagrant plugin of the same name. And so this is for local development. And what's very common is, you know, you might have three or four websites that it doesn't have to be three or four may only be one, but you have one or more websites, and you develop on them locally. And so a lot of times you want to have, you know, a hostname, and a lot of times just kind of made up hostname, like, you know, dev.my site.com right, or, you know, my site dot Dev, you know, some sort of cute little hostname, and some a lot of times people's ColdFusion code will do detection of whether it's in development or production based on the hostname. So you don't want to just be running it on localhost, or, you know, one to 7001. So what you'll do is you'll go and you'll, you know, you'll dig in and find your windows or your Mac or your Linux host file, and you'll add an entry into there that has whatever your custom domain is, and you point it back to, you know, the local host IP address. And then you can start at the server and in your browser, you can hit that sort of fake little domain name that resolves to your host file. That's a common workflow a lot of people do. And it can be a bit of a pain just to manage it, especially if you have a lot of a lot of servers. And you have to go in and you have to find that host file, which you know, Windows really buries it deep inside the, the the Windows system 32 folders, like they don't want you to find it. So the host updater module is an incredibly simple module, um, you install it, and it just kind of does its thing automatically. In, in your command box servers, and your server dot JSON, you can set what you want the host to be. And it defaults to localhost if you don't set anything. So if I create a server, and I say I want the host to be, you know, cf alive.com, right, just for my local testing purposes, when I start the server, the host updater module kicks in, and it sees my host, you know, dev.cf alive.com, and it goes in it edits my windows, or my Linux or my Mac host file for me, it adds that host entry in it points it back to local host on the fly as the server's coming up. And then when the browser opens, it automatically uses using that that custom host. And that's all it does. It's just it's super useful, though. You have to be using FTP running as an administrator, in most, you know, newer operating systems for permissions to edit the hosts file. But it just keeps that host file in sync. And when you when you stop a server and you tell command box to forget the server, which is basically like deleting the server, the module kicks in again, and it goes on at least that I'm out of your host file. So just keeps everything in sync. And you're going to have as many, you know, local sites that you're testing on, then you can have whatever, you know, made up hostnames you want to run them against, and it'll keep that Windows, Mac Linux host file, always in sync. Containing, you know, all the servers on there.
Michaela Light 54:36
It's very cool. So basically, it's overriding the DNS with a local name.
Brad Wood 54:43
Yep. So where does it is, it is this takes that common workflow and just makes it be an automatic afterthought. You know, you don't do all the manual steps are just gone. And it just works. That's the whole point.
Michaela Light 55:00
All right, well, what's the final module you're going to share with us today?
Brad Wood 55:05
All right, the final module. Um, I think, uh, gosh. The, the next most useful one, though, I think we'll finish with is probably the fusion reactor module. It's, again, a module that takes a common little workflow and just makes it automatic to the point readers don't have to think about it anymore. It's gonna be if you're using, if you're using the fusion reactor tool for monitoring your ColdFusion servers, which of course works on and works on Lucy works in Adobe. I'm a big fan of fusion reactor, it is, it is totally get ready to tour. But you can, you can get a local developer license a fusion reactor, for around 200 bucks a year, I think I haven't looked to see if they adjusted their pricing, but it's really very, very easy. And they even do cloud pricing. Now we just like pay by the by the hour, it's, it's ridiculously easy. Um, and so installing fusion reactor, you usually had to go through, you know, an installer, or you had to manually edit, you know, some JVM config files, we had to add in the, you know, the the Java agent and, you know, kind of get your hands dirty a bit with the JVM ARDS. And if you messed up any of that, you know, maybe you had the wrong path, you typed it wrong, you know, maybe your server wouldn't start. And so the fusion reactor module for command box, basically makes it a no brainer, easy to be able to use fusion reactor, on any of the servers, you start with command box, and you actually don't like you literally don't have to do anything, you just install the module, you tell it what your fusion reactor license key is. And then you just go on with your day. And every time you start a server, regardless of whether it's Toby or Lucy or anything, the module kicks in, and it it adds all the JVM marks you need. It just kind of shoves them into the list of JVM arcs as the server starting up, and all your servers, all your command box servers just start up a future actor installed and ready to go. It even adds it adds a little menu item on to the little tray icon for your server. So you click that tray icon. And there's a bunch of built in settings. In fact, I have a server running right now.
Michaela Light 57:17
So you have to quickly peek at that.
Brad Wood 57:19
Um, alright, so actually, let me I'm going to share a different screen while while you're
Michaela Light 57:26
while you're figuring out technical whatever. I'm just curious, you know, if you have a fusion reactor license, does that cover you for all the virtual command box? Yes, yes. Once you fire up on your own server?
Brad Wood 57:41
Exactly. So fusion reactors license covers as many JVM instances on a given computer. So yeah, if you if you grab a developer license for your local machine, and you start 50, command box servers, right, yeah, it covers all of them. Which is, which is incredibly handy. So it doesn't matter how many individual Java processes you have. That license covers the entire server was very
Michaela Light 58:07
generous if David Thomas soul integral fusion reactor, and then I'm assuming on Docker, that's not true. Every time you spin up a new docker instance, you have to write it's a good license, but
Brad Wood 58:19
it's better than that. It's not per instance, um, I don't want to get too far in those weeds, because it gets a little complicated what they, what they basically have is future rancor cloud. And that's the Pay As You Go model, which works fantastically for a Docker thing where you're like, you know, how many instances you're gonna have, I don't know, 515 51. Like it could change. So every license, you pay for covers, like four or five Docker instances. So you could have a single license covering it. I forget of US Forest five, it's one of those two numbers, I think, you know, X number of Docker instances, and then once you go past that number, then it'll roll over to another license. So it's not as bad as like one license per container. But what happens is, as you scale your containers up or down, whether it's Kubernetes, whether it's Docker Swarm, those all phone home to fusion reactor and they say, Hey, new container coming online, here's my ID now Oh, container going offline. See you later. And it tracks you know, the number of hours of actual how many containers you have running. And then they just bill you based on that. And so I mean, it's more complicated. You can have reserved instances which are cheaper, but they do offer just pure, you used five minutes, you pay for five minutes kind of thing. And that's how the Docker stuff works. I mean, like,
Michaela Light 59:45
genius, I should get those guys to talk to the Adobe ColdFusion dev team to explain how they could do that for ColdFusion 2021. I know lambda code and
Brad Wood 59:56
the the only real downside is Is your servers have to have an internet connection so they can phone home? You know, they gotta et phone home and say, Hey, fusion reactor new servers came online. Right sir requirement? Right? Well, right. I know Adobe has a lot of installations out there on you know, government dark webs that they're allowed to phone. Right doesn't exist. Now future manager supports that as well. But you basically just have to pay ahead of time for reserved instances and you work in a lake, you do the same thing, man. Right. So yeah, I agree. I I don't use the back
Michaela Light 1:00:32
catch phrase. Come on, man.
Brad Wood 1:00:37
Michaela Light 1:00:38
I've got anybody with with Mark, the ColdFusion. Evangelist for Adobe. I'm not suggest that's the solution today.
Brad Wood 1:00:47
Yeah, I mean, I know it's easy fusion reactor, the guys integral put a lot of work into making that work as seamlessly as it does. Oh, my gosh, is it not?
Michaela Light 1:00:56
I? I don't know, they might depends on the relationship they're having with Adobe these days. But I sort of imagine dollar bills thrown in a direction they could transfer that technology over?
Brad Wood 1:01:08
Yeah, I don't know. But yeah, I mean, it's, it's beautiful. Because it's, it's literally, here's my credit card on file, I'm going to go off and start whatever servers, I feel like it and you're just going to bill me by the hour at the end of the month. And imagine if a ColdFusion license could work like that, especially in the context of Docker. Because, you know, when you tell people, how many servers are you going to have? We need an answer right now. And you're like, I don't know if my site makes the front page of reddit AMA scale up to 50 instances. But I don't know until that happens. Anyway. Licensing licensing fun aside, yeah, we'll come back. There's really nothing to show from the from the CLI. Because literally, it just works. You just type install command box fusion reactor that installs the module into that. And then you can type the FR register command. And this is where you tell it what your license key is, right? And then
Michaela Light 1:02:02
you just start typing the real key there, as my
Brad Wood 1:02:04
real case is all x's. No, I'm just typing X. So I apologize, I can't zoom in on the screen share. But I have, okay, I have a server started here. And you can see I clicked the little Lucy tray icon here next to my clock, and there is an open a fusion reactor mini wide, and it's built into, right. And so I can just click on this, and it automatically opens up the fusion match administrator for for the server.
Michaela Light 1:02:35
Right? And it knows the correct
Brad Wood 1:02:38
right it URL. Yeah, it knows the host is going to be on it knows the port is going to be on if I have five command box servers running, I have five separate instances of future master one for each them, each other port each have their own settings. And the module does a bit more it allows me to set default passwords that allows me to, you know, configure how I want the server to work in future mantra has a lot of knobs and you know, and dials, you can you can use to configure it. But it's really just that simple. You just install the stupid module, you tell it your license key, and you just go on with your day. And you're like, oh, look, all my service fusion reactor, how convenient. So yeah, the future manager module is a super time saver. And as a person who uses fusion reactor on all my servers, and I use it for development more than I do production, a lot of people think of it as a production tool, and it certainly is that. But I absolutely just love it for for local development, I mean, I can come in, and I can see the history of all the requests, I can look at the profile, or I can see you know, What's taking them so long. You know, all the details, all the database calls that were made. So you know, having the ability to just have all of the servers that I started today just automatically have fusion reactor installed and ready to go is a is a huge time saver. And so if you're using fusion reactor, and you're using command box to start up any servers, you whatever you've done to use fusion reactor was more work than it needed to be because all you needed to do was install that module and let it do everything for you.
Michaela Light 1:04:18
And if I remember right, doesn't come on box make installing confusion reactor easier or something or all that
Brad Wood 1:04:23
that's this master, but this module does. And okay, and you really don't have to install anything. That's kind of the beauty of it. You just install the module, which you do from the command line install Space Command box, type in fusion reactor. And when you start the server, it automatically downloads the future metric jar for you it you don't have to worry about it. It just happens. And what's great is every time the integral guys release a new version of fusion reactor, they push that version out the Forge box, because the actual fusion reactor jar is just a package on forge box because why not right. And so when you start your server the next time that the next day you come in the office, you start up your server, you start a server, it asks for Xbox. Hey, what's the latest version of future manager? You got? Oh, really eight point whatever came out? I'll take that, please. Right. And so you're always on the latest version of fusion reactor, he does automatically upgrades for you. You can you can dial it into an exact number, right for production. Maybe you don't want you know, any surprises. But for local development, I'm like, yes, please give me the latest version. I will, oh, new version came out yesterday. Sure, automatically download and install that maybe. So I I've never upgraded fusion reactor and yours because the module just automatically makes sure it downloads and uses the new version of fusion reactor, the instant it comes out. Which is just super handy. Because I don't want to go around manually thinking, Oh, when's the last time I updated fusion reactors probably been three years. You know, I want to make sure I'm always getting those, those updates. So it allows you to be just all kinds of lazy, but in the best way, I promise.
Michaela Light 1:06:02
All in the best possible time. Yes, Kenny ever it used to say. So we're gonna wrap up. Now I'm just gonna mention, you know, I'll list out in the show notes, some other cool modules that you like CF format, CF, Doc's service manager, and ngrok. Viewers are welcome to go to the terror tech site and check those out. You can also search for them on the Forge box.io. site. And then just for folks, you know, to clarify here, apart from that commercial tool, fusion reaction, which you guys don't make, you just have a module that makes using it easier. What is command box and all these modules costs? If you want to use them?
Brad Wood 1:06:44
Right, it will cost a drop of blood, or a force firstborn child will take either one? No, I'm just kidding. They cost absolutely nothing. Um, all the modules that I that I demoed, are are free. They're open source and command box itself is is free. And it's open source. Though, a couple of little caveats, like you mentioned, the fusion reactor module assumes you've, you know, purchased the separate fusion reactor license, that service manager module that you've got in one of my list of favorites. That is a rare example of a commercial module we charge like 29 bucks for but everything else we talked about, it doesn't cost a dime thing. And we don't call command box open source, we call it professional open source, which basically means it comes with support, right? Comes with training. So you know, the way that that we put food on the table for our children to eat is, you know, we provide, you know, custom development, custom bug fixes, custom training, you know, support for people who want to use it. And so that's, that's one of the downsides. Sometimes that open source is, you know, great, you've used a random library that some guy in Nebraska wrote, when it breaks, you're screwed. Well, when command box breaks, you're not screwed, because, you know, if it's important to your company's workflow, you can come talk to artists, and you can say, hey, we need to get some, some, some paid support for this. And we'll say, absolutely, you know, we can work with you and get those things fixed right away. And we have a lot of clients that, that do that, you know, they, it's important enough to them that, you know, if anything, if they have any problems with them, they can, they can call me up, and I'll give them you know, live support one on one on the phone, or, you know, via email, whatever they need. And so that's that's kind of how we make it work. Because if we just literally give everything away for free, our children would go hungry. But it's professional, open source, meaning you can use it for free, you can use it as much as you want. We don't care, you can fork it, you can send pull requests. But when you need that support, you know from a company to help you get past a bug fix or help you train your team on how to use it. Or even just hey, we want to use Docker and command box we don't know how come show us how. That's where, you know, that's where the professional services award has kind of come in, and then our kids get to eat that night.
Michaela Light 1:09:10
That's great that you both make it open source so people can try it out for free, you know, solo developers, if they don't have a budget for that kind of thing, just use it for free. But if you're in an enterprise, and you need that level of support and training you can pay for that. I also want to mention that I don't you still have this at one point, you had a Patreon Patreon. Yeah, throw money in your direction. That is That is crazy.
Brad Wood 1:09:39
So it's cookies. Yeah. Um, yeah, so I was talking about like, you know, paid support where you specifically have a contract and your you pay artists to come train your team or something. But if if you know any of our open source stuff, or the podcast app is useful, and you just want to throw a bone. Yeah, we have our Patreon supporters. And we actually have a I mean, I say we added having to do that our marketing team set it up. But we have some nice little kind of perks and bonus levels where if you if you sign up for a certain level of Patreon supporter, you can actually get free stuff like an account to the CF cast video training websites and discounts on into the box tickets and things like that. Be Yeah, we do still have the Patreon, which quite a few people. In fact, if you listen to our moderniser die podcast CFML news edition, we actually read off the names of all of our Patreon supporters at the end of every episode, it is quite a long name. So we're super thankful to the the community people that have said, you know, hey, these tools are really useful and help us get work done. Here's, you know, five bucks a month, 10 bucks a month or 50, whatever, whatever it is they sign up for.
Michaela Light 1:10:54
And great model. I mean, similar to the model substack uses for journalists. Nice to see that. And then you mentioned CF casts for those who don't know, that video training site. I think there's a free level where you have some of the training in there. Yeah, we and then there's a paid level where you get all the goodies. Yeah, new new trainings released every month is my recollection
Brad Wood 1:11:21
every week. Actually. We have
Michaela Light 1:11:24
every week. Oh my god, oh, we have
Brad Wood 1:11:26
weekly videos we put up for the paid levels. Yeah, we model the site. And by we Eric Peterson,
Michaela Light 1:11:31
you have a Vulcan mind meld option where you can suck in the knowledge without having to spend hours watching it
Brad Wood 1:11:37
log it in, like the matrix. We modeled the site after Laura casts, which was a Laura Val PHP site where a guy will put out videos every you know, every week, and people would, you know, would pay to be able to watch them. But yeah, a lot of people don't know about CF cast, it's all you know, video based training. Some of them are one off videos like what's new in command, box five, right is anybody can go watch it for free. And then we have like courses like we have an entire like how to do Object Oriented Development and cold fusion and like no one kept us Do you know, that course there will be a whole series of videos you can watch. And so we have the free content, you know, you can sign up and watch all the free stuff. And then, if you're a paid member of CF cast, we have weekly videos that drop that are mostly part of series, you know, we have a series that cover all of our major tools. And it's not all even box stuff, like the object oriented series, for instance, is just generic cold fusion. And then we also have some one off things on CF cast, such as our end of the box sessions. So if you weren't able to go to into the box last year, or attended virtually, you can go and you can purchase all of the under the box sessions, and it's all through your CF cast account. So we're really you know, with that we're trying to create a hub of information. You know, we're cold fusion people can, you know, can come learn and stay current with a relevant ColdFusion training?
Michaela Light 1:13:08
Yeah, I'd recommend it. We use it for our development team. So helps people keep people up to date, do On Demand training. Do the episodes come with associated resources, like sample code, or is it just video?
Brad Wood 1:13:25
I think the answer is yes, there's oftentimes associated stuff. But I am fairly far removed from the team that actually like manages the content and gets put out I just occasionally record some stuff from it. I don't want to answer definitively and be wrong.
Michaela Light 1:13:45
Whoa, all right, we'll put the link to CF cast which is CF cast calm, pretty easy to remember. In the show notes, and folks can check it out. It's around 300 bucks a year I want to say cool. Now folks, people want to find you online Brad one of the best ways to do that.
Brad Wood 1:14:09
Um, I am on I'll use the same username for everything I'm on Twitter as my at btw 49 S, you can tag me there. I'm on the CFML Slack team. Like 24 hours a day. We also have a box Slack team that orders stones this kind of has dedicated channels for all of our libraries. I spend a lot of time on that. There's also the orders community site which is community.org solutions.com which is a discourse forum. By I spend a lot of time on I also spend a decent amount of time on the Lucy discourse forum as well which is dev.lucy.org. So even if you mentioned coolbox or sorry, ColdFusion in one of the Facebook groups for ColdFusion I think given most of those pretty much every social media channel that I know Hello, that, that talks about cold fusion. I try to keep a little bit of an eye on So yeah, if anybody has, if you have any questions or
Michaela Light 1:15:08
such as the cold fusion Facebook programmers group,
Brad Wood 1:15:12
yeah, there's like even two or three of those. But yeah, you can find me in most of those places, or just mentioned the word ColdFusion on Twitter. And I will pop up like Clippy from Microsoft Word. I, one of the one of the the Hootsuite, you know, searches that I that I run on Twitter, it's just anybody who talks about cold fusion. So I know no tweet mentions cold fusion
Michaela Light 1:15:43
without getting no tweets left behind or no cold fusion. Behind
Brad Wood 1:15:47
I know including including all the tweets that are actually talking about the the low energy nuclear reaction like the Val Kilmer movie 95 of
Michaela Light 1:15:57
you need a negative something rule to exclude those unless you're really into that kind of cold fusion.
Brad Wood 1:16:03
It's hard to exclude them because there's not always a specific keyword they used to get rid of. But yeah, there's also a YouTube channel called ColdFusion, which has nothing to do with the programming language in
Michaela Light 1:16:13
Well, I think of him all the time. Yeah, it gets used a fair amount. So what cool, really appreciate you coming on the show and explaining on how to improve your workflows using command box modules. And encourage folks who haven't tried command box or any of the modules, it's very easy to install. command box, you just download a file, stick it in a folder and you're away and running. You just run the executable. And there you are. You've got it. So on the modules, as you saw in the demos, you just install them from within the command box, command line interface. And there they are. So you could be playing with this within five minutes listeners and improving your development process. So cool. Well, thanks, Brad. See you another time.
Brad Wood 1:17:02
Find the show notes and download the episode here.