You can listen to the podcast and read the show notes here.
Welcome back to the show. I'm here with Brad wood. And we're going to talk about the new release of command box for cold fusion. And he's giving a deep dive on that are into the box and all day workshop all about it. And today we'll have a look at what Come on box is and how you use it. And why you use it while cold fusion users using it, how you can write scripts using command box to like create batch files, I guess in effect
will look how you can use it for server management. some really cool things it does. They're automatically downloading different versions of Adobe or Lucy cold fusion.
Also, we'll look at package management and how you can use it for creating things there, and how you can extend command box with your own commands. So welcome, Brad.
Brad Wood 0:54
Glad to be here. And yeah, I haven't seen you for at least a few months. So
for people who don't know Brad is the artist evangelist to
he's the everything box evangelist. And he also helped create command box and some of the other box products. Yep. Um, so I'm the developer, advocate, evangelist, whatever you want to call it for, for command box and cold box, and maybe possibly to a lesser extent for each box. But I'll generally talk about any any box that you asked me about regard this be up, I've, uh, I've helped helped with all the, the box products in some way or another, but I am the lead developer of command box. So it's sort of my baby is Louise says
fabulous. Well, a great baby it is. But for those listeners who haven't come across, c'mon, box. What exactly is it?
Yeah, so command box is sort of a, all I say is, it was kind of a missing link in the tooling chain, that the cold fusion developers, you know, never really had. And it's the command line utility
that you, you know, run from the, from the shell, your, from your terminal, and it runs on Mac, run Linux or Windows, and it lets you do a bunch of kind of automation and, you know, scaffolding and dealing with servers, and just helping manage your cold fusion applications from the command line, which is a tool that, like I said, didn't really exist, you know, before three or four years ago in the cold fusion space. But these are, you know, common tools that PHP developers or no developers, even Java developers have at their disposal, you know, kind of the biggest sort of pieces is the ability to run cold fusion code from the command line without the need to start a server, you know, to be able to just point to a CFL file and say, just run, this is like a cron job or, you know, just running single lines of code, the rebel just to test things out, you know, if you think to yourself, you know, how does a certain function in cold fusion work, instead of having to, you know, start a web server, put an index CF them open in your ID, put in some code, save, it opened up a web browser hit that, you know, you can pull up and command box and you can just run that line of code completely outside of a server environment. So, it's really kind of in the realm of productivity and automation
and there's a lot more of it, it does, you know, it can start servers for you, you know, and things things of that nature. So,
so basically, it's a scripting language that uses cold fusion for the scripting and in addition has surpassed control cold fusion servers
superpowers Yeah, and that's that's a good point that you brought that up so it's a tool aimed at cold fusion developers doing cold fusion the things with cold fusion code and coefficient servers but yeah, command box itself internally is actually written in cold fusion
would have felt a little cheaper if we use you know, note or Java to right are you know, the official CFL see allies. So, uh, you know, it uses a bit of a bit of Java here and there to bootstrap some things in and some libraries out. In an epithet, the bulk of command box itself is actually written in CFL. And what's nice about that is that means that if you're a CF developer, and you're using command box, and you find a bug, or you think of a feature, you know, you can, you can dig in, and you can edit the code and you can help contribute back it's not, you know, written an entire different language, which is one of the big problems, you know, you run into people that want to contribute to say, Lucy server might have the desire, but they have to, like know, some hardcore Java to really be able to do anything now with command box, you know, the entire products written and cold fusion. So it's very familiar on the on the inside to people,
I kind of wonder why they didn't write loose tea in cold fusion and just had the time sensitive bits kind of written in Java confusion compile to Java. So
there's been no 990 9% of that,
that it compiler interpreter or whatever it is, probably isn't exactly, you know, time critical.
I don't know, that's an interesting thought
that then people could contribute just a tool for the future for Adobe, or or Yeah,
well, one, one thing that Lucy does let you do, for instance, if you're adding core functions or tags, it does give you the ability to write those and CFL and they behave just like any other, you know, built in function or tag. And typically those see a lot higher, you know, pick pick up an uptake from people than the features that allow you to write new, you know, CFL tags, and Java people don't usually, you know, use that feature as much because, yeah, it kind of boils down to familiarity, you know, CFL developers aren't going to, you know, be as likely to contribute to something that's written in a language is foreign to them.
Yeah, so, why why should CFO every CFO be using command box?
Why should ever CFR be using command box? Well, the, the State of the Union survey, maybe you've heard of it,
the state of the CF doing and serve that came out actually had some pretty good numbers of the subset of, you know, the community who responded to the survey, I think, 70 to 80% of people tick that they had us command box in some fashion, which is fantastic news. Um, the reason why everyone should be using it in my incredibly biased opinion, if for nothing else, is simply productivity, you know, it, it takes some of the more complicated tasks specially around managing servers, you know, for years, I had to deal with having multiple versions of Adobe cold fusion and Lucy server or Rialto server installed all on my local hard drive
at the same time, I had to have all these installations, and I had to have them all running on different ports, and I had to keep, you know, all their files separated, and I had to have a patch here is, you know, set up. And this is just from my regular everyday local development. And if I wanted to do some quick testing, I had to commandeer one of those other servers, you know, and swap out what was in the Webroot and I mean, that's that's not a problem that was unique. To me, that's something that, you know, most cold fusion developers deal with doing and kind of local development and command box lets you kind of throw all that in the waste bin, you know, and having nothing installed on your on your machine, you know, no cold fusion servers, no Lucy servers, no, is there a patchy you can just kind of point command box to a folder and say, start me a web server right here. This is my new web root and make it be there'll be 11 update 13, right. And, you know, it does some magic, download some stuff. And the next thing you know, you have a running cold fusion 11 server. And when you're done with it, you just stop it, and you can delete it, it's like it never happened. That kind of productivity can, you know, save you hours of headaches and poking around and manually updating your installations and trying to keep them in sync, and then take all of that. And now distribute that across your entire team of developers, you know, 510, maybe 15 developers, all with the same mess of installations, on their local hard drives with varying configurations and, you know, varying directory setups, and all of a sudden, you can hand them all copy of command box and say, just clone our code, run the server start command and, you know, these JSON files will kick in, and everything will be taken care of. And that's a great time saver for for, you know, an individual or for a team. And I think that's where we've seen the most usage in command boxes, people just wanting to manage their servers with it, you know, ignoring all the cool scaffolding and rebel nonsense that it does, you know, the the biggest used features to servers, in fact, I was looking at some of our downloads statistics, and I think the, the adult the slug on forge box, which is what you get to install an Adobe server
had like 13,000 downloads last year. And so it's a little tricky to turn that into, like, actual numbers, like, that probably wasn't 13,000 humans, you know, I'm 13,000 computers. But at some point in time, you know, at least 13,000 servers restarted, that required a version of Adobe cold fusion to be downloaded. And that, to me, I mean, tells me at least a decent number of people are out there using it, you know, and that's only a one time download the first time you start the server. So, you know, obviously, it was quite a few server starts going on out there. And so that's kind of, to me, the, the trademark feature that really makes, you know, command box indispensable now, in my, you know, in my personal workflow, all of my local development is done with command box servers. At this point,
I don't have to deal with all those other installations playing nicely together.
And then if fuel spinning up and use of, or how many seconds does it typically take using Chromebooks
if the version of Adobe or Lucy that you're asking to be started, has been downloaded in the past, so nothing new needs to be downloaded? Um, depending on your computer, and how slow it is, usually, you'll see the browser window pop up within five to 10 seconds. Um, so that
compares to the gas you might spend manually installing a version of cold fusion to do Yes, yes,
I mean, Lucy five is about a 70 megabyte download and Adobe cold fusion 2016 is about a 300 megabyte download. So based on your internet connection speeds, I have Google Fiber here in Kansas City. So I get gigabit speeds, you know, I can download a new Lucy server version, which is 70 megs in like five seconds. So you know, overall, it's not that big of a deal. If you're on a dial up modem, you know, you to account for those first download times. But I mean, generally speaking, once everything's downloaded in the servers ready to start, you're really just looking at, you know, a matter of seconds before the servers up and running in the browser. windows open.
Yeah, the other thing I like is you don't have to dig up where those older versions are. You know, sometimes it's hard to find an installer for an old version. Well, that's
a really good, that's a really good point. Yeah, I mean, a lot of people, um, you know, we're using like, cold fusion 10 going back to the state of the CF union survey, there was a really good showing, still, I say, Good in a bad way, you know, it's the 10 users, which is no longer supported version, you know, of Adobe cold fusion is not receiving security updates, but there's just a lot of people using it. And you're right, if you know, what if you need a specific update version of cF 10 from you know, six years ago or however long ago that would be that can be difficult to find on the internet. And you're not going to find that in Adobe's official site you have to go into the backwaters of you know Google Drive or something, but you know, with command box, who cares. No, you just tell the nice Seelye what version you'd like it to start for you and it'll take care of the rest I know it downloads what it needs
and it just does it
so come on books version fool is going to be outta into the box is that an official announcement or
God Willing yeah yeah that's that's that's the plan is to is to have a final release a command box for and it's been in snapshot builds since about December I kind of kicked it into high gear over my Christmas break when I had nothing better to do but drink eggnog and and work on command box so it's been an active development and there's quite a few people who've been testing on the snapshot into the bleeding edge which is very nice you know if I if I break something and and commit it you know if someone email me like that day like hey what do you do I just updated the latest snapshot is broken which is great to get that you know that feedback cycle because otherwise what happens is you make a final release and you have all this fanfare and the you realize this full of bugs so I love I love the early adopters who helped me keep an eye but yeah it's it's a super exciting release it's one of the well I don't want to say it's one of the biggest release because every time we have a major release I think to myself this is one of the biggest releases but it comes with a lot of changes that affect the underpinnings of command box
command box well look man box to one point O ran on Rialto right and then you know the Lucy server for cap and and so around command box to point our so you know we converted over to Lucy you know this Lucy you know for at the time and Lucy fives been out for quite some time but command box the three series of command box which is currently a 3.9 point two is still been on Lucy for and largely that was due to some of the startup performance you know when you're starting a server up if it takes nine and 10 seconds to start the server you know who cares not a big deal when you're starting a command line utility you want that to really be snappy as possible I mean you're sitting there like literally waiting for to start and run this thing and exit so there was several rounds of kind of improvements I when I went over with Misha to kind of really tightened down all the little you know bits of the startup times to get Lucy five a snappy is Lucy for was Lucy five was always very quick once it was started but those initial startup times for a bit long in by a bit long I mean maybe 10 to 15 seconds but that's a long time to wait for st light open up so once Lucy five startup times finally came down to where Lucy for was um. That's when I finally started targeting to switch over to it so the underlying CF engine and command box and command box for will be Lucy five which comes with you know, a lot of new features it comes with a lot of improvements just that are inherent to Lucy five which is really nice. And also this week actually I'm working on switching how we load up Lucy to use the new GSR standard that's basically a Java standard for being able to run scripting languages and Lucy conforms to that standard. Which is important because that means that any random Java developer out there who wants to run some HTML code inside of their job application can do that very easily using this well documented public standard called they can load up Lucy inside of that you know framework and they can hand it code and we'll run it so since that's kind of a next logical progression of you know running CFL outside of a web server you know, we're we're breed we were working command box to also use that same standard internally. Which is, which is great.
So a lot of new things you can now doing it what what are the what's the top one or two things that come to mind. Like, wow, now you can do this,
you want to know what the top thing is. It's 256 color support.
I just completed that this week. And I'd wanted to do it forever. I'm half joking. But I'm half serious. Because it's so cool. You know, the before you know, if you're writing custom commands, or, you know, ASCII art or task runners, you're stuck with eight boring colors, you know that the basic hands the colors just kind of 16 because there's a high intensity version of each color, but still 16 color, you know, so like 1980s. So now we've made it up to like the 1990s and you can add 256 separate colors which I joke but it actually is pretty sweet. Some of the, you know, the ASCII art and stuff that we do can look a lot prettier. Now. Um, I had people giving me a hard time about you know, the ugly colors in the shell. Um, some of the some of the bigger features that are just really nice usability things are actually um, things that have been implemented externally as modules. And example is the command box bullet train module which is a dead rip off from the I term bullet train plugin to the Mac shell I term which is a rip off from the original Ubuntu powerline shells. And basically what it means is know when you're working to the console, usually you have just a little boring, you know, cursor, the prompts that has the folder, your renter, you know, something's for the boring, maybe the username you're logged in is a power line based prompt has or you know, it's called bullet train. Because it it looks like little kind of arrow cars, and like, you know, an L train or something. And it has a big wide kind of pretty colorful prompt that gives you all sorts of kind of directory aware information. So the current folder is a server running Lucy, five minutes currently started in the current folders, a package called my package is version 1.5.
And the here's the current time and here's how long the last command took the execute and, you know, peers other information about it. And I really liked a lot of the people I worked with you max. And they use this, you know, bullet train prompt in their in their core Mac shell. And we submit we didn't make a version of that for the command box show. Because it's a really nice productivity thing and just looks cool, it makes your shell what kind of and sweet. And with a 256 colors, it doesn't look nearly as ugly anymore. And that's not even part of core command box. But there were changes in command box for to be able to make that, you know, to make that that module possible.
One of the actual real biggest improvements in my opinion, inside of command box for is I upgraded the library, the Java library we use to handle the prompt and the tab completion that you know, pops up all the possibilities, you can type that that libraries called j line. And we upgraded a major version of j line which comes with a whole bunch of really nice features. So now as you type commands and command box, it highlights the commands as long as they're spelled correctly. So you can kind of video see that your commanders correct, the tab completion is really, really nice. Now, you know, if you start typing a command and you hit tab, and there's like 40 options, you know, all 40 of them dropped below and used to be, if you kept hitting tab, it would just keep redrawing over and over again, and scrolling all this nonsense up. Now, it does this really smart thing, we're just keeps redrawing the options. And as you type it, live filters them and you can actually like used arrow and tab keys to tab between the options. It's just a waste smoother interaction. The rebel in command box now has syntax highlighting built into it, which is made possible with this new version of Jay line. So as you type cold fusion code, you can get tab completion on individual cold fusion function names, as well as variable names. And when you type a cold fusion function that highlights It even has some features where as you type opening and closing, closing parentheses, highlights the matching ones you can, you can have a lot better experience issue, issue code, even how it tracks the history has improved. And this is really just kind of in the category just making the COI a more polished experience. And it's a lot nicer to use,
I think isn't the other real major
you mentioned rep let or not everyone may know what a rebel is. Yeah,
um, so I'm just reviewing my JIRA tickets to see if it's anything huge task runners have gotten a bunch of stuff
that's right. Better to control see support, I forgot about that a rebel stands for read evaluate print loop, which is a really fancy way of saying you can run cold fusion code one line at a time, every other major, you know, language has had a rebel for a long time. And it allows you to do just quick and dirty experimentation with cold fusion from the command line. So you can write a line of cold fusion code script, you know, you hit enter and it is immediately executes it and shows you the output of it. And with a rebel, you can create your variables and then interact with them in the same session, they remembered I was actually using the rebel just about two days ago, I had a large JSON file and I wanted to massage it and rearrange it a bit. And so I just opened up the rebel you know, did a file read the read it into a variable and then with the rebel was just writing some, you know, member functions and some MapReduce stuff to massage it and write it back out, I didn't even need to start a server or create, you know, an actual file on my hard drive to do it. I just, you know, use the rebels a little kind of scratch pad to, you know, to create some variables and play around with them. Yeah, so that's, that's the rebel I forgot. Yes, so better control C support. Um, it used to be that when you would hit control see inside of command box, it would exit out of the entire command box process, which isn't what a shell normally does. Now, a lot of commands that weren't interoperable before. You know, if you had a long running command, you would just kind of get stuck until it was done, you had to wait for it. Now, you can take control C, and it actually does what you expect. it'll, it'll cancel whatever's currently running as soon as it can, and drop you back at the command box shell and then control D will actually exit you completely out the shell. So that's a nice little enhancement that just makes the usability improved.
Let's see here. Is there anything else
really nice, I've added some muscle class loading features.
Yeah, a lot of those are kind of the the big ones like got some improved support for Connie am you which is a terminal app for Windows users because the built in Terminal and Windows kind of sucks just the CMT. It's not really very nice. And that's what a lot of people use. So it only supports 16 colors, right. So Connie him, you, which is a Windows app that supports all 256 glorious colors, along with a lot of other options. And so I worked a lot with the, the main developer in the J line project to get really good support for use. So windows, people would have a shell that didn't suck quite as bad as, as the default, you know, Windows terminal does. So
I'm, uh, I'm over over them. And how, how much was the price increased on C'mon, books with this 500% of
So it's still free.
Yeah, so completely free. Um, yeah. So we have, you know, said to ourselves, we should know, at some point actually try to make money to pay for all this development put into this, um, we're, we're actually tossing around some ideas of some, you know, enterprise E, commercial, you know, modules, uh, you know, that might provide some really nice, you know,
tools or features that would would, you know, interest large companies wanted to use it. Um, but we didn't really know what that would look like, in the meantime, if you use Command box day in day out in it, you know, saves you a heck a lot of time, you can go to our Patreon page, and you can just sign up to give us money every month. And our Patreon supporters the money that comes in from that literally goes directly to our open source development, that's what we use it for.
But yeah, it's, it's, it's all still completely free. I mean, it would be, it would be very difficult to charge for basic, you know, command line and rebel in a cold fusion world, when every other language has a totally free, you know, command line, and rebels. So, um, you know, as always, we offer support, you know, paid support, bug fixes, improvements training around it, but, you know, the core product is, as always, still been free. But I'm definitely very excited about the new command box release. There's just a lot of little, you know, features and nice things that we've, we've packed in there, that should make it a real treat to us. Oh, I almost forgot, one of the big things is finalized support for private packages, which is really more of a forge boxer feature. But it requires, you know, command box to be aware of how that works. And the idea behind private packages is, um, you know, you can write cold fusion libraries. Yay, you can publish them to forge box gay, everyone in the world can, you know, download, install them, yay. But what if you and your team of developers want to have some private packages that are only for you guys know, proprietary internal code, and you still want to use all the bells and whistles, package management, you don't want to publish them for the world to see, you just want to publish them for you guys to see. That's what private packages are. Um, and right now private packages are free and forage box at some point, we'll probably try to figure out a pricing model for that. But the idea is that you can publish a package that you can install, just like any other package, but it's a special package only you can see and only your co workers can see and so command box for will have finalized support for that, which is something we've gone through two or three iterations of development on and we'll kind of find some issues, refine it down. So that'll be another one of our big announcements to into the box is, is, you know, finalized the private packages. And one of the really cool features that Eric Peterson has been working on is not only the ability to have private packages, but the ability to forge box the ability for, for each box to upload answer those for you automatically and private s3 bucket for you. So, you know,
one of the problems of private packages Is it still has to have, you know, a download URL, it can hit, you know, and that needs to be private as well. So, with a the newest version of command box and forge box, you'll be able to publish a package and forge box will take care of storing that zip file for you and a private location. And then when you and your co workers go to install it, you'll get a special, you know, private URL you can download that from and that's kind of all part of the, the, the private, you know, package feature, which is also pretty exciting.
What So, sounds like some neat stuff coming up in the version for release. And now you're teaching a whole day workshop deep dive on the first day of into the box. I guess it's a Wednesday and yeah, so if people coming to that they have to be command box jockeys or ready or can they come totally new and
Miss for someone who's next. But our mom
Well, first of all, it's probably hard to imagine that I could talk for an entire day, I'm just command box. No, just kidding. Um, so the, the classes a deep dive. So the idea is to kind of start at the top and really just work Oh, Ray in to a bunch of different feature areas. Um, the expectation is that people probably have poked at command box and abused it, you know, a lot of the people who came last year were people who were using command box and some very small ways, and they thought to themselves, there's a lot here, I really want to dig in, and just, you know, learn all these other features, so I can become more proficient. Um, so if you haven't touched command box, you'll probably be able to pick it up fairly quickly. Um, the expectations, you probably vaguely are aware of what it does, and you've played with a couple of features that you just really want to, you know, learn a lot of the details, there's, you know, so much surface area in command box that has a lot of major feature areas that it does, you know, and each one of them has tons of little tips and tricks and, you know, widgets and features. So it's, you know, there's a lot of content to cover, and what what the way I usually conduct the class is all kind of pull people on, you know, what they're most interested in, and we can kind of tailor the content as we go. So if everybody's telling me, I don't really care so much about this feature, but I really, really want to make sure we touch this feature, then, you know, we can kind of adjust the schedule as we go to make sure we, you know, we touched on the really popular topics that people want to learn about. And so,
yeah, that is that's the first day and will people be able to get in industry?
Will people get some individual help from you, or other teaching assistance there? Oh, yeah.
Yeah, that's a great question. Um, so we like to keep our workshops, I'm purposefully fairly small, we'll usually have a cap of about 10 people in a given workshop. And a lot of that is specifically so we can get a lot of one on one time. Um, you know, cuz we spent a lot of part of the day just doing exercises, you know, we talked about some cool features and show it must be, okay, you guys give it a try. Now, you know, everybody does the same thing on their laptop. And so you'll the ideas that I'm walking around, I'm, you know, standing over your shoulder, you know, giving you advice helping you write the code. So, it's definitely not just kind of, you know, a conference setting where you're in a giant room full of people just listening. It's very interactive, and hands on. And our goal is to always have a lot of one on one conversation to help people over those things. Because a lot of times, you know, people just need, you know, some questions, answer they need pointed, you know, at what they need to be typing, and they can get us to click for themselves. And that that happens, you know, my opinion best, and you kind of have someone who can just stand there, take a look at what you're doing, and say, Okay, this is what you need to do. And then they can, they can, you know, go from there. So,
that's great. And so, when, once someone's, you know, someone's trying this at home with mom books is the Help system is there a health system for C'mon, books, I mean, there
there is actually, um, command box has a really good health system, in my opinion. Um, and we had it since the very first version that was important to us, a lot of people and myself included in that group, um, tend to stay or tended to stay away from command lines, because they're difficult to figure out, you know, if I'm managing is, for instance, and I don't know where a setting is, I can probably, like find it, if I just click around the GUI enough, and just read all the screens, right, we're gonna use in the command line tool, um, and you don't know what the options are, um, you're kind of like, I don't know what to do next. And, you know, a lot of command line tools have varying syntax is that used to get help, some of them have really help, but doesn't include examples. And so then you're kind of stuck just like googling, trying to find examples. And that can be a major turnoff for people who, you know, they don't see the command line as a productivity tool, when all they do is waste all day long, trying to figure out what the heck the parameters are, they need to type in so command box has a really comprehensive health system already built in that right there from the steel, I fully documents every single command every single parameter that it needs to run along with a description of them. And every single command in the entire stimuli has one or more actual, like examples of how to run it, like copy and paste examples in the help documentation. And on top of that, it has tab completion for almost everything in the world. So if you're in the middle of night been a command you hit tab will tell you what all the options are in the middle of typing parameters. New hit tab will tell you all the options are in the middle of typing the parameter value, and it's a directory path or something to hit tab will tell you what all the possible options are. So we try to make it as full proof as possible. And that's usually one of the things I cover in the, you know,
in the in the workshop, as well as just making sure people know about the help that's built in and how to use it. Um, because it's really kind of there to, you know, get you out of any tight spot you are. In fact, the way that help is built in command box if you're in the middle of typing a command no matter where you are in. And if you're just typing the name of the command you're in the middle of the parameters and maybe you only have half the parameters in you can stop and just add the word help to the end of the line and hit enter and that will flag down the Command box help train and a little run over and take a look at what you've typed so far, figure out to the best of us abilities what it was you were trying to do and give you the most specific help it can based on what you've typed. And you know, that's kind of important to me a lot of help from Seelye commands can only be run in very specific ways. But the command box just add the word help onto the end of the line. And the hell you know, the help train comes over and and and helps you out. So those are all things that are built in those kind of things that I I cover in the workshop as well. Just to make sure people know what's out there. Um, you know,
because once you know that you can get yourself out of out of most of the, you know, dark corners, you find yourself in scratching your head trying to figure out what you need to be typing. So, so if someone listening who hasn't used C'mon, books, and they were like, Well, let me I'm curious. Now let me try this out. How, how long before they could like, you know, install it and actually do something in it? Yeah, sure. Yeah,
so the answer to that slightly varies based on the operating system only because some operating systems have built in package management or just really common package managers. If you're on a Mac, for instance, a lot of people use homebrew which is a package manager, you know, that you use to install things. So if you're a Mac user, and you and you're using homebrew it's actually incredibly simple, you just type brew install command box, and that's it, you can start running box server start to start servers, you know, box rebel, to start the rebel, there really is no installation of command box, it's just a binary that you just download and stick and like your user bin folder, or on Windows and some sort of system path. So you don't really need to install it, there's no installer, you just need the binary if you're on Windows, which about 70% of cold fusion developers are according to the State of the Union survey, you just need to download the xe file and unzip it. So I mean, it's pretty straightforward, just click the link, unzip it on your desktop, and double click it. And as long as you have Java installed, or you download the version that comes with Java bundled, there's usually nothing you need to do to get it up and running. It's just a matter of, you know, double clicking on the execution are, you know, running box from the command line. And it was just, you know, dropping the command box. And that was kind of our goal is to have it be as you know, is quick and easy as possible. Because I found and does it come with does it come with
Brad Wood 35:14
does it come with sample scripts fragile, so you can kind of look and learn how to use it better. Yeah, so, the, you know,
the built in helping I've talked about has examples for every single command, if you're looking for a guide can allow a hand holding guide, then that's where our get book based docs come in, get book as a really cool website that lets you write documentation. Um, it's actually free. I don't know how they pay their bills, I guess it's like GitHub, they have, you know, people who pay
but we have a full book written, it's a command box orders books calm and that has a getting started guide that kind of, you know, walks you through the installation process, and just using it. And it also has a every area of command box documented with, you know, examples and kind of, you know, copy and paste things you can use to run. So,
that's, that's definitely out there. And it's pretty, pretty easy to get ahold of
great. So you really, you could be within five minutes, you could download it, have it running, and actually try out some examples and start to learn how to use
Yeah, absolutely. Yeah, I mean, I think there's, if the barrier to entry to a brand new tool is very high at all, in my opinion, people, unless they're really, really interested, won't put in, you know, a lot of effort, they're not going to spend, you know, two hours trying to figure out all the pieces that need to happen, you know, so that's why it's important for me, that command box is something you can just say download this, this. txt and double click on it. And you're off kind of thing, because that's the kind of barrier to entry that's going to be low and people can just get right into it and start messing around because like I said, a signal is not a productivity tool. If you spend more time trying to figure out how to use then you do
yes, that that could be some CL eyes. We won't name
Yes. So you mentioned earlier that it has some scaffolding in there. What exactly do you mean by scaffolding? Come on. In. Yeah, exactly. You know,
it's kind of funny. Um, Luis loves to remind me of this when the least first talk to me about command box, just this identity had, which was like, four or five years ago, and he wanted me to take over I kind of, I didn't necessarily think it made a great deal of sense, but I didn't really understand all the use cases at the time. Um, and when the first things he showed me was, like, you know, the scaffolding stuff. And he always likes to remind me know, Brad, you thought this was a dumb idea Originally, I don't know if I ever used the word dumb. But, you know, at first I was like, I would use this. Um, but so the whole idea of scaffolding is as a developer, you know, your creating new sites, if you're developing a cold box, or create a new handlers create a new views, create a new tests for test box, create a new models,
you depend on your workflow, you might just, you know, right click, and say new file, or you may copy and old file or an old site and just kind of copy it over, maybe your ID has some, you know, built in things, but it's something people do quite a bit. And, you know, it's kind of time consuming sometimes to be able to, you know, get a, you know, a cold box handler and the right folder with all the right settings in place. And so the scaffolding stuff allows you to quickly ask the COI to create an echo box application for you from scratch, or to create a new handler to create a new model or to create a new test box test. So if I have an empty folder with, you know, no code in it. And I say to myself, I want to play with a cold box feature. But I don't want to fiddle with an existing website, I just want to start, you know, a new code box site, I can poke it and then just delete it. When I'm done. I type the command called box create app. And I hit enter and command box will dump all the files needed into that folder to have a fully working ready to go call box app right from scratch. And then I type server start, and it starts to server for me. So in two commands, I can go from an empty folder to a working running cool box application that I can play around with, fiddle with the settings, try some stuff. And then when I'm done, I type server stop server goes away. And I can just delete the folder, right. And the scaffolding makes it easy to do that it used to be I would, you know, I would go to the coal box website, I would find the link to our sample apps, I downloaded zip unzip it, I'd copy and paste it manually. And that's just a time consuming, you know, effort. So if I want to add service into my co box app, I type called box create model my service and it automatically creates the CFC in the right folder within a net method and proper, you know, comments and stuff just ready to go. It creates the tests for me automatically. So test boxes happy. And that's really what the scaffolding is about is just the ability to quickly generate files and folders based on templates just to save you time, save you typing save you, you know, copying and pasting from other places.
That's great. So you mentioned earlier, you can use this as a scripting to light your writing batch files in effect, so can they do anything, you know, just like it was a Windows batch file, or pearl or whatever. Yeah, right. That, you know,
so that's one of the coolest features in my opinion of command box. And I didn't really see that take off as much until this last year, when we created task runners. Um, you've had, you've had the ability to create custom command box commands since like, first two or something. Um, but there was enough boilerplate around it, you had to create a module and then it had to have a commands folder and you put a CFC and then the distributed you had to, like, put the module and forge box, it wasn't anything insurmountable. Um, but it was a little bit too much work for just a random quick and dirty script, you know, like, I just want to create a file system CF code, and just run it and play around with it. And I, who knows, I may delete it when I'm done. And so, um, task runners, in my opinion, are kind of the pinnacle of where command line cold fusion execution is moved to its, um, a simple CFC. Usually called task, CFC. Um, and there's almost no boilerplate involved the doll it just needs to be a component. So you know, the word component open, close, curly, no big deal. And then by default, it looks for a function called run. So function run open, close curly. That's the only boilerplate you need. And of course, there's a task create command that sky apples add an empty task for you. So you don't even have to worry about reading that. So as far as what it can run, your tasks are, are executed from the command line. So there's no server that needs to be started. There's no web browser involved, there's no is or Apache web server, it's just pure command line execution of your cold fusion code. And
you can do literally anything that cold fusion can do. There's, there's no limit to the tags are the functions that you can run. Um, so just the other day, I had some CSV files, comma separated value files that were, you know, about 100 megs worth, and I needed to go do some manipulations on him, I wanted to filter out some of the lines. Um, and so, you know, I'm mostly a steel mill developer, I know exactly how I would do that, and CFL. So I scaffold out a quick empty task that had like 15 lines of code, read the files in, turn them into an array looped over them did some nice little filtering, wrote the file back at the bottom, and I just created that as a task. And from the command line, I get this type task run into just execute my tasks. And that was just, I mean, it was faster than writing a bash script, or I don't even know if I could do that in a Windows batch file, you know, or some other language, just nice little, you know, ad hoc chunks of functionality. And you can you can tie these up, as cron jobs are scheduled tasks, you know, they can interact with the file system, they can interact with the database, if you want to use them to create backups or, you know, run database calls, you can generate PDFs, you can send emails, you can do whatever you want, from the command line that, you know, that just cold fusion will allow you to do in general, which is really powerful. And, you know, it's generally in my experience, more productive than trying to do the equivalent in, you know, bash or some sort of slightly, you know, more arcane programming language. And it's, it's natural to you, as a CFL developer, it's just, you know, CFL code in a CSV file, a CSV file units executed from the command line. And so it's,
of course, here, you know, when you're running code remotely on a server, that code can't touch your development machine. But in this case, the development team is the server so you can get to any files you need to. Yeah, exactly.
It's all running right there locally on your machine. So, I mean, if there's something that you want to automate, and scripts that you do on your local computer on a regular basis, yeah. I mean, you have access to all of your normal drives and things like that. So it's very handy for
automating just anything you can think of. Okay, can I even automate other programs? Can you could you control another program using CF HTTP? Oh,
exactly. So what you can do, actually, really easily. And this has been a big feature in command box since like, version three is you can run other native, you know, binaries really easily from inside a command box, or from inside of, you know, runners. So if you want to interact with the get COI, or with Aunt or Maven, or, you know, just Windows system commands, or Linux system commands, anything imaginable that you might do normally from your shell, you can match that together with your cold fusion code, and you can run some cold fusion code, fire off some command line task, you know, and run some more cold fusion code all from inside of a task runner, which makes for the great, um, you know, kind of intermediate glue layer that you can stick into pull all you know these pieces together and wrap them all up in cold fusion, which is something that I think CFL has always been good at, you know, quick and easy access to databases to file systems.
So does this this kind of let you replace or extend something like Jenkins that does continuous integration by writing scripts that far off all kinds of useful events. Or
I wouldn't say replace but absolutely extend I'm almost all of our continuous integration jobs, whether it's our Bitbucket pipelines, or our Jenkins server or a Travis CI builds us command box in some manner, sometimes multiple different manners as part of our builds. So we use Command box to start and stop the servers, we run our tests on, we use Command box to run the test box test themselves, we use Command box to install the dependencies. And we even use Command box just to run arbitrary tasks that might update file permissions, or create some zip files as part of a build. So it doesn't replace those continuous integration tools. But it's a perfect piece to build in as one of the core building blocks that your continuous integration server uses to do this stuff you want it to do. So
you could have the continuous integration server cool, one of these command box scripts to, you know, final fluidly database updates or emailing or whatever you wanted to do. Yep.
Yeah, I mean, what, what this gives you the ability to do is to just tap into cold fusion anywhere you want, you know, because otherwise, if you wanted to, you know, update a database at the end of a job, or send an email, you know, you know exactly how to do that. In Cold Fusion. It's really easy. Um, but, you know, you never had cold fusion available at your fingertips, do those sort of things you had to go figure out how to do it, and bash are some of the utility. So yeah, if you want to, you know, run a query as part of a Jenkins build, you can just create a little, you know, task, the telco fusion to run it, and you just stick that inside, you know, to be called from Jenkins. And there's, there's a lot of endless possibilities there.
You'll be telling me next that you can use it to write robots using your Raspberry Pi version of cold fusion.
I'm like this robot here.
I need those who are listening on audio. It's like a little car. And in in the middle of it. There's a small Raspberry Pi processor
with eyes that peer into your soul. It's actually an ultrasonic depth sensor,
sadly, till death, say like a death rate.
No, it measures distance it. Uh oh. I had this guy currently program to find his way through mazes. But sadly, he does not use cold fusion. They uses Python, which I didn't particularly enjoy what came
while on by default, but I need to. But you you'll get used to precedent a tab key with Python.
Oh, my gosh, your code doesn't run us because it's not indented correctly. Well, so I mean, I've already done hardware automation with command box and cold fusion using Raspberry Pi's. Now I have the hat that I wore a few years back to all the CF conferences one year that had, you know, blinking LED with scrolling texts. And that was all cold fusion powered using command box.
So the that kind of stuff is all possible right now. Just needs needs maker people out there to play with it.
It's amazing. There's no limit to this. I mean, I've seen people but I saw this in this Raspberry Pi books and one build a whole Dalek powered by a Raspberry Pi. They took a dustbin and put things on it. And I exactly it could because you can have voice off. Can you do voice stuff from cold fusion? I guess you play a mp3 or something?
I don't know. Actually, I'll be honest, I've never tried that. I don't know what you do. Just in general,
I don't know what that would look like, would probably have to involve a Java library. I've honestly never tried to interact with the local sound card before.
And the Raspberry Pi has, you know, headphone output. But that's one thing I've never played with. Yeah,
so let's just talk a little bit about the server management, which he talked you mentioned earlier. But, you know, if you're, if you're spinning up a server, do you get to control the configuration of the server? Or is that you know, no, okay, now, you get no choice in
the matter, okay, I'm just,
I was gonna say, we've been silly. If you couldn't tweak with that, yeah,
you can, you can control every single last aspect you could possibly hope or dream for imagine. And in my opinion, it's easier. And it's faster and more tidy than any other possible server solution out there, including, you know, the typical Adobe installer Tomcat or anything,
there's a there's a lot of missing pieces, in my opinion, and server management, specifically, if you want to be able to reproduce a server, you know, service and cold fusion are always typically, as they say, servers as pets, as opposed to servers as cattle, you know, very lovingly created individual unique snowflake servers that might take you weeks to build out and manually modify all the settings,
which I mean is it is ok to extent. But now you need all 15 developers, your organization to have the exact same server or you need, you know, all five year productions servers to have the exact same configuration. Oh, wait, can we add a sixth one now? And when you get to the Docker realm, were the entire ideas servers every as little know wisps in the breeze that pop up and disappear at any point in time, you know, how do you script entirely the creation of a server that says, here's my code, here's the version of cold fusion, I want to run, here's all the data sources and the mappings and the settings, here's the JVM marks the memory How do you wrap that up in a nice little tidy bundle, you know, with a little bow on top of it, that you can reproduce every time on any computer. And in my opinion, the only good answer to that at this point in history is command box, there's there's literally no other solution that lets you wrap it up as tidy as command box does. So you can control the the JVM arguments that heap size, you can create, you know, virtual directory is as a basic web server built in, you can, you know, modify the ports that runs on HTTP, HTTPS SSL porch, there's an age gap listener, if you want to put it behind is
and all this isn't one nice little tidy JSON file, right? So there's no shell scripts. There's no XML files.
And then there's another project which integrates very tightly with all this, which was, was very new last year into the box. And we're going to be covering it a lot of it this year, which is called CF config, for lack of a better name. And that allows you to completely automate via JSON all the cold fusion settings that you normally have to set inside of the cold fusion administrator. So things like your cold fusion mappings, your data sources, your request timeouts all, if you're a government employee, all those lockdowns, a stigma that are mandated, you have to apply, right, you can automate the out of those, we don't have to manually log in and click 5000 buttons to lock down your server, you can create, you know, a JSON file that represents the settings you want. And you can load that in and command box has, you know, first class support for that be the CF config module. Um, so, between those two thing, and, you know, all the functionality of command box that allows it to automatically download whatever it needs, you know, you just tell it, I wanted to be 2016 or Lucy 5.3,
and it just goes and gets it for you. Um, you know, you can, you can literally control every aspect of how the server starts, even the version of Java, you want it to us. And you can wrap it up in a very portable and very reproducible manner where anybody else in the world could take that same code and a couple JSON files, and they can start the exact same server on their machine that you have in your machine. And I think that's kind of where the allure of using command box, you know, has come from is, you know, you mean to tell me, everybody on my team gets the exact same server, and synchronizing our differences is as easy as committed to JSON file. Yeah, and so you no artists, we have our Docker images, which you've had for a while. Now, as far as I know, the only real professionally supportive Docker images capable of running Adobe, by the way, as well as Lucy, and what are they based on based on command box, because it only makes sense, the entire idea of Docker is you take an entire server, and you wrap it up with a bow on top, and you can reproduce that anywhere you want. And it's like, well, perfect. That's what command box does. So our orders, Docker images are all based around all the functionality that command box provides for you. And as far as a holistic workflow, and we're actually getting into one of my talks now is, you know, you can have the same configuration that you use for your local development that you're using your staging server that you use in your production Docker deployments, because it's all command box through and through through the entire process. And that really takes a load off the the trouble that people typically run into where your production servers configured way different than new development server, but you're not really sure what the differences are. And all you know, is your code doesn't work. And that can be a real headache, the CF config utility will actually even diff configuration between two cold fusion installations. And it'll tell you exactly what settings are different between the two of them or missing.
And that kind of knew that kind of functionality. And productivity just doesn't really exist in we're outside of the command box universe.
And I think that's why the server
I think, I think that's genius, Brad, because, yeah,
it's genius. Because not only can you script how its configured and you can share that script with other team members. But you could also stick it in version control. So that if you're kind of because sometimes bugs happen because the server config change. So absolutely, yeah, I mean, we have support for Docker secrets and environment variables, you know, so things like passwords or, you know, s3 access tokens can all be externalize in a secure manner
and different per server. But absolutely, yeah, I mean, the ability to the ability to store your configuration in version control can really be huge in keeping track of just what's changed in a server, you know, and what it in what it takes to fully configure your application. And, you know,
there's really no way to do that outside of command box, if you wanted to backup all the configuration and just a typical Adobe installation, you'd have to go like digging through the bowels of the Server installation, and like ripping out XML files, and I don't know zipping them up or something horrible, you know, there's just no good way to really deal with that kind of stuff, Emma, command box, all that stuff sort of gets extracted for you. Um, you know, it's even interesting, the JSON format that CF config uses is completely generic, it's not specific to any cold fusion engine. So that actually means that you can define cold fusion data sources that you want created, you know, this my sequel server on this host in this port with this username and password, and whether or not you start an Adobe cold fusion server or a Lucy server doesn't even matter command box, CF config will translate that generic JSON definition of your settings correctly, into whatever the target server is you wish to start. And it just works, you don't have to worry about it. So, you know, converting an application from one version of Lucy to another, or from Adobe, Lucy, or vice versa, all of a sudden, just got a whole lot easier when you're using command box.
That is great. So let's look at one of the other issues or features with command box, which is if you want to use a package from forge box, does it help you with that? Or do you have to do it manually, or?
Yeah, so package management is kind of one of the big tiers that we haven't touched. Um, but a command box has a kind of, you know, first class integration with the forge box dot IO website, which is essentially a giant, you know, code repo on the internet for cold fusion developers to share, share all of their, you know, libraries with the world, and specifically, all of the, you know, artists, libraries, and, you know, tools that we write all go out and fortune box. So when you're writing an application, and you want to be able to pull in all these different libraries, you know, from people all over the world that have published them, command boxes, package management features, do that for you. So instead of, you know, I want to use the coal box framework, instead of going to the coal box, you know, dot org website, clicking the download page, downloaded a zip file, you know, unzipping it, copying and pasting it. That's, that's all a thing of the past, you know, you pull up on your trusty co lie, and you type install space called box, and you hit Enter, and you're done called boxes now installed on that director, you don't have to worry or think about all those implementation details. And when we're done installing it, we cash the zip file locally in a local artifacts, cash, and the next time you install Cole box, wouldn't even have to download it again, like, oh, look right here, we'll just reuse it. And so that's where the package management stuff comes in. Now, you don't have to be using coal box to use the package management stuff and command box, you know, some people in the beginning thought, well, it ends in the word box. So it must be a cold box specific thing. But that's not the case at all command boxes was completely standalone. In fact, there's integrations into Miura into framework one into CF wheels. Even I think Far Cry, there's all kinds of, you know, non box people that are using command box. And it's scaffolding and this package management because it really was meant to be a generic CFL, um, you know, tool. So, you know, there are lots of libraries on forge box that have nothing to do with cold box, just, you know, generic libraries on all off or security, utilities and things of that nature. And you can still use Command box to pull those in his third party dependencies and to any application regardless of whether you're using the framework or not.
Well, that makes it really easy to try out different packages, you know,
and also, it makes it great for people who are writing packages, which I encourage everyone listening to write at least one package, because if you've got some cool code in your app, you know, why not share it with other people. And, you know, you're more likely to have bugs found if you share it out anyway, or get new features added. So
yeah, I mean, we've boiled down the process of publishing a package to about as simple as it can get, you can literally create a forge Box account, if you don't already have one from the command line, you can use the scaffolding commands, like package and knit to turn an empty folder into a package, you add your code into it, and then, you know, you can use the Publish command to automatically publish it to forge box. And it's, it's really pretty seamless.
And the advantage of for someone who's creating packages, you can then test it against, you know, seven different versions of cold fusion, or how you want to test against,
yeah, literally, you could automate that. Yeah, most of the Travis builds on my open source projects that I care enough about to have a Travis build on will automatically run my integration tests and write unit tests against all the major versions of Adobe cold fusion and Lucy, because what will happen is, I'll be testing locally, I'm Lucy, and I'll leave off a semi colon at the end of a line, right? Lucy lets me do that. And so I'll think, hey, my code works great. I committed I push it, you know, and a week later, somebody tries to run an Adobe cold fusion, we're like, Hey, what's wrong with you idiot, your code doesn't even compile. And I'm like, Oh, I didn't test on Adobe. Um, so, you know, with the magic and power of things like Travis CI, in conjunction with command box and its ability to start servers, I can get immediate feedback on my open source projects, you know, when I commit some code and push it, Travis will test that code against Lucy for Lucy five, Adobe 1011, 2016, you know,
whatever you want. In fact, we're actually testing our internal cold fusion libraries against the pre release of Adobe ether right now, um, because, you know, it's important for us to have immediate, you know, feedback to know if something's not working. And the ability to do that is a is a real improvement. And you mentioned, you know, installing libraries. One of the biggest, what's almost more useful to me than the ability to install a library command box is the fact that I can ask command box, Hey, can you remind me all the libraries I've installed because it keeps track of them for you? And specifically, I can say, hey, command box? Is there a new version of any of these libraries? Like, is there anything I should be updating? Has I have I gotten out of date, because that's kind of like the bane of developers existence is, it's easy to install, like jQuery, right? But, you know, a year later, you're thinking, isn't there? A new version has come out? I don't know, I'll have to check with command box, you can just ask it be like, you run the outdated command, say, hey, do I have any modules, you know, or packages that outdated and command box will it knows what you've installed, it'll go and hit forge box and check. And I'll come back and be like, actually, you know, what, three of these packages are old, there's new versions, here they are, do you want to install them, and you go, Oh, yeah, go ahead, install those forming command boxes, okay, I just updated them. Everything's up to date now. And so that ongoing maintenance of your applications is really where the benefit in my opinion comes into play. I mean, it's great that you can install them. But as you go, keeping stuff in sync and updated is, is so much easier when doing this asked command box to just update everything for you. And it just does it
now come on box sounds really like it does a lot of things. But suppose the something it didn't do that you wanted it to do? Can you extend it or you stuck with how it works,
you can absolutely extend it. And that's been kind of one of the core, you know, building blocks in the beginning is I wanted people to be able to extend it, I mentioned that there's framework one and CF wheels integrations and command box that's actually you know, precisely how those came to be. And I didn't write those, you know, the maintainer of of, you know, framework, one, CF wheels wrote those as custom command box modules. And so they were able to write a module that contributes extra commands into the COI that users can run. And they can also contribute extra behaviors. So, for instance, when you install, oh, precise, CMS is another example of this, you know, when you install a precise plugin or a CF wheels plugin, they kind of have their own conventions that they use the folder names, they expect, those, you know, those plugins to go into. And so command box is extensible to the point where they can write a module that automatically, you know, overrides installation directory is based in the package type. So anybody can kind of build a custom module on the fourth box that adds behaviors that adds commands and adds, you know, modifies how installations work. And since, you know, it's all written in cold fusion, you know, it's, it's already your native tongue, you don't have to go too far out of your way, you know,
to extend it. So, yeah, it's very extensible. And of course, in a very meta style, the, you know, command box modules that you're right you host on forge box, just like all your other packages. So when your friends and family want to install a cool module, like maybe the command box host update or module that Christmas wrote, helps keep your host file and sink, right, you can just install that right off a fourth box, and it gets installed in the command box to reload the shell and you're off to the races. So I think that's kind of a big a big feature is that, you know, you can add in adding functionality that you'd like to see. And that kind of also relieves me is the, you know, the main command box maintainer of having to make everything a core feature, um, because I know every cool idea somebody has doesn't necessarily need to be in the core command box. And with the accessibility that command box modules provide, it doesn't need to be in the core command box. People can spin it off as a separate project and only people who care about it can install it.
That's great. And I noticed in the module stuff, there's something called interceptors. What exactly does that do for you,
yeah, interceptors are a very common design pattern. The,
it's basically Imagine if you've ever use jQuery, right? And you're making like an AJAX call and you have like an on success method and you say, you know, if and when this AJAX call comes back, successful run this method or you have an on error method, you know, if and when this Ajax query errors, go ahead and run this method. That's the basic concept here is you have certain events, if you will, that may or may not happen over the life of your see ally over the life of a running command, a server being started and the the command box application will automatically announced these events when they happen. It'll say, hey, the COI is starting, hey, I'm about to run a command. Hey, I'm about to start a server. You know, hey, the Seelye is about to be closed. And then in a in a totally decoupled manner you can register these listeners are interceptors, as we call them that say you know what, anytime the COI starts up, go ahead and ping me I have some code I want to run. And that's the basic interceptor pattern is this publish subscribe concept you have, you know the course to lie announcing or publishing these events. And then you have zero or more, you know, interceptors or listeners that have kind of subscribe to those. And they say, you know, let me know I want to run something. So a really good example of that is a very simple module I wrote earlier this year called the command box update checker. And it's a very simple module. Every time you open up the COI,
it only does it once a day. So it's not annoying. But every time you open up a steel I once a day, I guess it checks to see if there's either a new version of command box that you need to update to, or if any of your core command box modules are out of date. Just a nice little reminder, you know, this, oh, hey, this new version. Now, you should probably update that. And so that module taps into the on COI start interception point. So every time the COI starts, it says, Hey, the COI starting. And if you have that module installed, it goes, ooh, here, just a second, I need to do some stuff, make some HTTP calls, output some text of the screen, you know if it needs to, and then you know, you're on your way again. So that's what the interceptors are. And they're, they're very powerful when it comes to being able to use Command box modules to kind of inject functionality into, you know, existing parts of st ally without needing to go in a muck around with the core code and change anything, you know, your interceptors can just sit off to the side with their, you know, ear to the ground listening for these events to be announced. And they can jump in. And they can run additional logic or even change the course of what's happening on the fly. And fact that command box bullet train module that I talked about, that listens to an event called pre prompt, I believe that might be on prompt, but anytime the, the prompt is drawn, there's an interception that gets announced. And then the module is actually able to change on the fly what the prompt text looks like by you know, modifying some, you know, some values and memory and passing them back and saying, Oh, hey, you're about to draw the Prophet Tell you what, use this prompt instead. So there's a lot of power in the interceptor module. And those are very core to the the sensibility of command box.
Wow, it sounds really super extensible.
That's the goal. Yeah,
so it sounds like an amazing hold a workshop you're going to be doing there, Brad, on the first day of the, into the box. But you're also teaching some other workshops. Just briefly, what are the other workshops or talks that you're involved in? Yeah,
so I'm going to be sharing a bit during the, the keynote on the first day, our keynote is kind of a, you know, a day, we take the chance to just give an overview of everything we've done that year, you know, all the new libraries, we've started on all the major releases, we've had, you know, any kind of conceptual game changing, you know, shifts that we're trying to introduce last year, you know, Docker was kind of our big, um, you know, push is us getting behind that. So, I'll be, I'll be talking about some of the new things in command box and forge box. As part of our as part of our keynote, I'm also giving some just regular sessions, I have one called thinking modular Lee. And that's really just kind of covering a lot of the, the basic basis on what it means to use package management, you know, how does that actually work in your application? You know, how does that affect how you use get source control? How does that affect your build server? How does that affect your production deployments. Um, in fact, a lot of my sessions this year are kind of focusing on just some of the real basic core concepts,
I think, sometimes we get, and by, we, I include myself get carried away with some of the bang features. And a lot of times, there's people out there who just are looking for the onboard ramp, you're like, Well, here, just get me started first, right. So a lot of my sessions are kind of in that Getting Started category like this, what's some real basic, you know, meat and potatoes, of how these features so thinking modular League, it's just kind of covering, you know, what package management looks like, you know, how it should affect your development, to really use it effectively. And so, that should be that should be a fun class. And,
of course, that wasn't really even be specific to cold box, you know, that'll be package management just for anybody also have one integrate an MVC in I'm sorry, integrating NBC into legacy apps. That's been a really popular topic this year, we've had a lot of clients coming to us who have legacy apps that have been around for, you know, 1015, maybe 20 years and is saying, Hey, we really want to start bringing these into the, you know, the 21st century and a lot of people just don't know where to get started. You know, they it's a big task and cold box looks like a big thing. And they're like this, how, what's the first step I do just to get, you know, cold box running alongside my existing application? And what am i next steps to go from there. And that's something we've done with a lot of clients. And it's something that I want to cover just the basic stuff. So it's not a hardcore, you know, NBC course, that's not even really an intro to NBC is just saying, you know, if you have a legacy gap, what does it look like to start integrating NBC into that and converting things over
another one of my talks is wire box basics. This is also another one of those talks, I didn't want to get too far off in the weeds of some of the really, you know, cool,
but advanced wire box use cases, I see a lot of people asking questions who were coming from maybe framework one and DIY or maybe they're just coming from Cold Spring or from no dependency injection at all. They're just saying like this, how do I just use the basics of wire box? How do I get that installed? You know, how do I tell it where my CFC is our um, you know, and it's very easy to use. But I think that easy Enos, if that's a word can get lost in with all the advanced features, then it starts to look complicated from, you know, 20,000 feet. But so I just want to kind of show like this, what's the basic bare bones, let's install wire box as pointed at a folder CSC. Let's start, you know, injecting CFC. And then that'll give people a solid base. And they can, you know, investigate those advanced features on their own time, but want to make sure people have a solid footing and wire box. And then
the last session I'm giving is take your CF apps from local dev to production with command box since TF config, and Docker. And that's kind of everything we were just talking about in a minute ago, with the, the whole, you know, command box server thing, you know, this has been an ongoing journey inside of artists, as we develop these tools ourselves, as we kind of, you know, figured out how to use them ourselves. And we kind of work through all the pain points. And we thought to ourselves, man, this, this really sucks, how can we make this easier. And so this is just kind of, you know, covering all the basic pieces, if you want to consolidate, you know, your server workflow, from your local development, you're staging, your production, you know, Docker, CF config man box, how to all these crazy pieces work together, that's kind of what that session is just introducing you to everything you should at least be aware of. And even if you're thinking, Well, I'm not going to use Docker, that's fine. I mean, the other 90% of a session will probably still be applicable in some manner, because it's all the same basic JSON files is the same basic, you know, command box commands, and whether or not you use them in Docker, or whether or not you wrap up command boxes, a Windows service, you know, when you're running on a Windows VM, you know, you still have the same functionality is available to you. So,
right, so, so lots of amazing sessions, you're either teachers, or helping with that, what else you looking forward to this year's into the box, the mariachi band, you know,
seriously, I really, really love to just talk with people who are using, you know, our tools to build cool stuff and just hearing what they're doing with it, you know, every year I kind of come away with a bit of a better appreciation for, you know, where people are at, and the pain points that it's helping them with, but also more specifically, the pain points that we aren't addressing, you know, because people will you know, in person, you're just having a conversation and people will say, you know, yeah, this library is working good for me but I was kind of wondering is there any way that I could do XYZ you know, and that'll plant the seed for a new feature you know, or maybe a kind of a gap that we're not covering and I really love those part of you know conferences is just talking with people and hearing you know kind of the stories of success stories that they have as well as you know the missing pieces that they're kind of wishing we would you know fill a gap here or build a tool for this so those those are always kind of the best takeaways from me from the conference
so for folks interested in going to into the box where can they find out about it
into the box dot o RG so into the box dot org that's our our conference site
let's see our early bird still on sale or is that over Let me double check real quick Of course I don't know when this podcast will air so I probably shouldn't make any statements about whether or not
early bird is still going but yeah you can you can review the
okay April 27 sales end
okay so it looks like early bird is already over but not to worry into the box is overall and incredibly cheap conference by come by comparison. So the
the sessions are on the website. The speakers are on the website an overview of all the topics and the tools are on the website. We also have some great sponsors that are all listed there on the website.
In fact, there's there's one in here called Terra tech. Those seem like some pretty useful guys, there are a media sponsor course we have. I know, Adobe is our platinum sponsor, which is really nice fix you up catch bass sponsoring this year. So we're going to have a representative from catch fish showing up. I told him he used to do all those demos and CFL, so we'll see if that happens.
But yeah, so but there's lots of information there on the end of the box website. So and it's happening April 25, 27th
in Houston, Texas. Exactly. Yeah,
there's two basic tickets. There's the conference only ticket which is just the two days of sessions. And then there's the all access pass which includes the workshops your choice of one workshop. So if you if you're not interested in the
the the command box deep dive workshop that I've been talking about, we have container eyes and CFL apps, which is aimed at people that are looking to this Docker thing. They're like, hey, how does this stuff work? Right, get me going on that there's BDD with test box this also call box from zero to hero but I think that guy is going to be sold out by now we've had a huge interest in coal box zero to hero we actually added an additional training assistant to that so we get to accept more people so I think we ended up with like 15 people in that workshop so some of these workshops can fill up fast so you know check it out quickly so that is the basic conference and then there's the kind of the all access pass it gets the workshop the day before
fabulous well i i really enjoyed it last year I you know, if anyone listening is in down you know, this is a great conference to go to great location, beautiful hotel, and amazing speakers and attendees last year, and the mariachi band was pretty amazing.
But I My favorite part is hearing Jorge sing along with the songs
apparently, when you're from El Salvador you actually know the songs they sing.
I imagine you would Yes.
Well, I'm glad to hear that you had a good time last year um, I mean, I'd like to to just add you know, our focus within the box is ironically, you know, despite his name is not only box products, you know, we have a lot of topics that are actually we have, we have some brand new speakers this year, I'm really excited about some people like a Brian class I don't know, no fed Mark drew before
Dan Frederick's was coming, john for are a lot of people who aren't even really doing, you know, called box development at all, but just, they have just generic, you know, hard hitting, you know, cold fusion centric topics. So, we do aim to be, you know, a conference that would appeal to any cold fusion developer just kind of looking to up their game and learn about, you know, tools and best practices. But our main rule of thumb, at least mine is that, you know, the topics should all either be directly a cold fusion topic or some tool that directly applies to you as a cold fusion developer. So, you won't really see us having topics on you know, what's new, and Node. js? So, you know, mastering WordPress, right, I mean, number one, I don't think people come to cold fusion conferences to learn about notre WordPress, they come here because a cold fusion developers So, you know, we talk about tools, we talk about NO SEQUEL, things like couch base that, you know, have immediate plug ability into your cold fusion apps, or we talk directly about cold fusion. And it's not always or it's not even oftentimes related to the box, you know, ecosystem at all. So, you know, I say that, you know, for two reasons, people thinking, Well, I'm not a cool box user, well, don't worry about it, you know, there's still tons of content for you. And, you know, people saying, well, this is, you know, just really, you know, dedicated cold fusion content. And it really is, I mean, everything we talked about is directly applicable in some manner to you as a cool fusion developer, not you, as a possibly Python developer or any of that, you know, stuff we're, we're focusing on staff ml, that's, that's a, that's what we're what we're at.
So we, in the words of Henry Ford, you could say, this is not your father's box.
Yeah, I never knew that. I never knew that quote was from Henry Ford,
I think it was, um, but in particular, folks who may not have checked out this conference, it's no longer a one day event. It's a whole three days of great stuff. So and it's expanded beyond when I think when it started, it was just focus some bulk stuff, but now it's got a whole bunch of cold fusion stuff as well.
Yeah, the first year we did this, it was a two track one day event that we did one day before the CF objective conference. And so the content was very limited, you know, in in those early days, but we've really been able to expand it, you know, with with three days of workshops, the sessions were able to fit in quite a bit of of content, which is really nice,
right? Well, congratulations on that. And I understand you've sold more tickets already. But then people came last year. So yeah, absolutely.
Our registrations have already surpassed last year and was still a month out. And this is quite a few people who kind of wait till the last, you know, month to buy. So we're very excited to see, you know, how many people will have this year for sure. And it's also easy to get to because you just go to George Bush international
or hobby in Houston. Either way, yep. This
right, right there in Houston. It's always warm. It's always nice. We always have a great time. Pretty a pretty fun place to stay. And if you're going to be in for a while, actually, I had someone asked me today, you know, what kind of activities that were in Houston to do because they were going to fly over from Europe, you know, and they're like, it's going to take a 10 hour flight, you know, so, but there's a lot to do, you know, there in Houston as well, if you want to, you know, stay a couple extra days before you leave. So, yeah,
I would say that April's probably the best month to go to Houston, because it can get really hot and steamy in the summer. But April is not that time. So
yeah, it's it's usually pretty nice. I'm in April, which I think works really well. Right.
So I'm just two more questions, then we'll wrap this up, which is the one I'm asking everyone, which is, why are you proud to use cold fusion? And let's just answer that for today. Because I know if I asked you that question before,
you have to see if I can give you an answer that I'm giving you don't remember what I probably said last time,
I'm proud to use cold fusion personally, because it's a product that I feel like I've been able to have input in, even though was probably in very small ways, you know, between Adobe, you know, the ticket tracker and being on the pre releases, you know, and Lucy being a member and, you know, having the occasional pull request merged, um, you know, it kind of creates ownership, you know, to a degree that cold fusion isn't just something that other people created that I use. But cold fusion is something that, you know, I've been helping create, like I said, even in very small ways, you know, over the last, you know, 15 years or so. So it's more than just a cool tool that somebody else made. But it's something that is a journey that a lot of us have been on for years. And I think that's part of what makes cold fusion special to me, and makes me proud to use it.
All right. Excellent. And then final question is, what would it take to make cold fusion even more alive this year
for every single CF developer to come to end of the box?
Our right, I,
I'm sure you've got room for a few hundred thousand people in Houston, Texas, it's a big state,
well, we might need to, you know, move to an arena, we can actually fit like, 200 people in the hotel room now. So we have plenty of room but I don't know about, you know, 200,000,
um, you know, there's, there's really a lot of, of answers to that question that are all probably equally as valid. Um,
but seriously, answer is probably the same, as I've said before, which is really just about people in the cold fusion community engaging, like they haven't engaged before, um, you know, using frameworks, learning new tools, publishing packages, I'm forage box contributing to open source, I mean, as a maintainer of a number of open source libraries, there's nothing that makes my day brighter than getting a pull request, even if it's just a typo, that of mine, that somebody fixed, I love getting pull requests, and I love merging them in, you know, and in the same way that, you know, I feel a small amount of ownership of cold fusion, you know, over the years, helping little bits here and there. Um, you know, I like the fact that was looking at command box yesterday, actually, there's 39 contributors, I think, and GitHub, that means, you know, 39 people, including me, that have been some way contributed code documentation, little bits, and I love that because all of those people all have a small amount of ownership now, and command boxes, you know, it's kind of this partially, there's as well, they've all kind of, you know, poured into it a bit, which I really like, and I think that that can't happen enough. And the more that happens, I think the more alive cold fusion becomes,
well, you heard it here first. I mean, I just want to paraphrase that is sort of like that Uncle Sam recruiting poster where Uncle Sam's pointing his finger out of the poster saying, but he's going to say your language needs you to engage so everyone listening what could you do today to do is just a small piece of engagement get started.
makes a difference. So if folks want to find Brad would online what are the best places to find you, Brad?
Uh, the easiest way to find me to say something bad about cold fusion on Twitter? I'll use to reply with a matter to prove you're wrong. Only half joking. A know what if they say something good. Or tell them how you are they engaged with all my favorite it and I'll retweet it and a matter of minutes. Now, if somebody wants to ask me a question about command box or cold box or fourth box or any box or any of the box. Um, I am on Slack, the CFL slack Team 27 hours a day, even on my sleep, you can come in there and tag me in the box products channel and you can ask any question you want. I never miss a message on slack even if I'm not you know, they're in fact actually someone was messaging me while we're doing this podcast and I'm going to reply to them as soon as we hang up. So that's probably the easiest way to get ahold of me Of course if you if you don't want to talk to me You just want to you know stalk me or something you can follow me on Twitter
or you know btw 49 S is my Twitter handle and you can also check out my blog coders revolution. com You know, I don't blog a great deal there.
Most of what I blog is actually probably in the order solutions. com blog as well and blog occasionally. In fact, I've made several screen casts recently and I'll usually throw a blog upon them. So
that's that's cyber. stalk me if you need excellent Well, we'll put all those links together with all the things that we mentioned in the episode in the show notes on the Terra tech side for this podcast episode and thanks so much for coming on the show brand.
Yeah, thanks a lot.