Into The Box Notes: Keynote

April 27, 2017

Luis Majano —

Ortus has grown. From ColdBox to “Many Boxes”.

“You’re still coding in that?!” story

2013 - frustration
no tools, no CLI’s
we are behind
legacy hell
very frustrating
CFML shaming
way behind the other techs

How do we modernize CFML?

Tooling + Community —
3 years ago, released 1st version of CommandBox
proof of concept

CommandBox
Matured over 3 years
full CLI
REPL
package manager
integrated server

ForgeBox offerings - for open source package management in the cloud

Anybody can write commands for CommandBox, they’re done in CFML

Embedded servers -
can run -any- cfml engine and -any- java WAR file.

CFConfig
- configure any CFML engine from inside CommandBox

Community —
what are we going to do to start this up?

Newbie initiatives
so new people can collaborate and submit pull requests

Forgebox.io
released for everyone in CFML community

Ortus Developer Week
will happen again in November

Ortus attends all CFML conferences as well as Java and other conferences

Swagger integration has happened.

Over 1000 pull requests in less than a year.

Ortus University —
live on-demand training
intro to ColdBox
Core ColdBox
Modular development
BDD
Automation
lots of other areas too.

But still have to tackle the “legacy” problem.
Everybody ELSE needs to solve this

if you have legacy apps, it gives CFML a bad name
prone to various issues - security, performance, employee, etc.

35% of CF Devs use no MVC framework
Over 55% are not testing their apps

lots of old engines still in use.

so much “junk” still in use, people don’t want to get motivated.

this is the reality as to why nobody can find good dev’s.

no source control, continuous delivery, automated tests, agile/scrum, etc.

YOU need to drive the innovation
Insanity of “legacy hell” needs to stop.
new Ortus tools - motivate people to do more new, cool, innovative, things.

Brad Wood’s section —

ColdBox has had 50+ releases
11 years
established but still growing
released 4.0 in Jan 2015
5.0 beta available now.

CF 5 Vision -
Increase modularity + ecosystem
Containerization
- seeing trend w/ cloud stuff, containerization and docker
- want to make sure we’re at the forefront of that
Renderings
RESTful APIs
- make easier w/ Relax, and improve scaffolding so apps can be built faster

Containerization
- new env/ system methods
ColdBox.cfc (app wide)
ModuleConfic.fc (modules)

Handle auto-return marshaling
function index( event, rc, prc ) renderdata=json or xml or pdf
{
    return data
}

new rendering types
custom rendering engines (markdown, mustache, etc)
looking for first class support in CF 5 for those

“named regions”
(available now in latest CB5 beta)
set rendering regions
setView( view=“, name=“sidebar” args… )

Routing by Convention
if you create a rest api like “photos”
w/ a single line of convention in your routing you can scaffold out all the http Verbs for that route

Fluent Routing DSL
route(patter).
.toView()
.toRedirect()…

Lots more to come w/ WireBox, CacheBox and more

CommandBox —
since last year, we’ve had multiple commandBox releases
3.1.1 - added ACF support
multi sever support
Forgebox 2.0. CLI publishing
package scripts
3.3
web server alias
custom err pages
3.5
live following log files w/ tail server console starts
custom server home directories
3.6
interactive binary execution - have interactive binarys w/ OS
proper exit codes when running tests
so you can use TestBox Run inside a Jenkins test and it will “fail properly”

3 major areas of improvement
embedded server container
package mgmt
CLI scripting
— we want CF dev’s to stop using Node to write things that can be done in CFML

CommandBox Docker
working on CommandBox based Docker images
can run any CF engine
any WAR file inside CommandBox

all server settings are portable - heap size, jvm args, as well as CF engine settings (data sources, request timeouts, anything from the CFAdmin screen can now be automated).

package any server rw/ server.json
- gets picked up by docker container

update CF engine install is a non-issue

use multiple cf engines/versions at the same tie

new Docker image make it easy for cloud scaling

CFconfig - manage any CF settings for ACF or Lucee — generic json format that can hold any settings
can use CFConfig to import/export it to any CF engine you want

To play with it “docker pull ortussolusions/commmandbox”
it’s that easy.

W/ ForgeBox and CommandBox, way easy to publish things for others to use
even simple functions can easily be published for the world to see

CLI scripting —
allows for mashups of CML commands and native binaries
create custom commands w/ user interactivity
and more

Roadmap for CommandBox
more support in CFConfig
make sure all the CF settings are supported (if you find one that doesn’t work, make a ticket)
web sockets suport
more build automations, build runners (to stop people from needing Ant, want them to be able to use CF for it all)
lucee 5 migration
and more

ForgeBox.io
new UI and new packages this year
335+ contributions this year so far
growing API
4 minor release
can pub ANY cf project up there, not just *Box stuff
can make “private packages” so only you can see them (in beta now, will be a paid service later)
Code Storage (in progress) to store code on S3
organizations/teams
collaborators
package transfers
digests
Lucee extention provider
Pro accounts
and more

Enterprise img of ForgeBox
if you work for a large org that’s not allowed to host outside a firewall, can host ForgeBox inside on your own sever and do automated builds that way

Enterprise Managed
- private instance, monthly subs subscription service

(Eric Peterson’s part) —

ColdBox Elixir
solution for simplifying front-end builds

make it easier to integrate typescript, sass, etc. into your applications. more automated process for including typescript, WebPack, and lots of JavaScript things as they come out.

(Gavin Pickin’s part) —

ContentBox
3.5.1 was released in April 2017
- lots of new changes in the 3.5x series
4.0 is underway

3 maj areas of improvement
containers updates maint.
UI SEO Admin
Admin Tooling

ContentBox Container
H2 DB or any RDMB
using the image, you can use ANY RDMS righto ut of it
auto session distro
auto cache distro
redis/couchbase compose
just add it to your “compose” and boom, done

up and running w/ just a couple lines of code
docker pull ortossolutions/contentbox
docker run -p 8080:8080

commandbox: intall contentbox
installs ContentBox as a module into any CFB 4 app

install contnetbox-site
creates new CF site and configs ORM
installs the contentbox module
updates are just as easy

Docker is changing the way we do everything

override any contentBox setting via Coldbox.cfc
contentbox = {
    settings = …
}

override any setting via docker/java env vars
contentbox_{site}_{settings} = value

-Dcontentbox_default_cb_media_directoryRoot=./build/docker/contentbox…;

UIAdmin Bar - new feature in ContentBox
(ala Mura?)
front-end admin bar
permissions based
admin links
editing stats
and more

Localizations
Lots of i18n integrations

Sitemap
on-demand sitemap generations
distributed caching
multiple formates
.xml
.txt
.json.html
sitemap - which defaults to HTML

Open Graph support
most content is shared to facebook/twitter as a url so it’s important that you mark up your website w/ open graph tags.

Global Search
if you have a huge site, search an be crazy
search is beefed up to make it easier
user friendly results
clear result contexts
extensible

scoped searches
page
contentstore
entry
custom

Huge Roadmap for content box-
ui upgrades (vue.js)
multi-tenancy
cluster modes
custom content types with auto magic crud ui
more image mgmt
content scheduling
-weekly /monthly planning
- social media triggers
theme/module overrides

(Jon Clausen’s part) —

Relax 3.0
OpenAPI/Swagger as default format
legacy API (relax dsl) exportable to Swagger json
revamped up w/ in-doc linking and path drill down

Because we migrated to using Swagger
we have machine-consumable documentation
broke docs into 3 modules - 1 of which is an SDK
so you can use it to build docs about your docs and send them to consumers via APIs
automate the process of providing schema examples for both input and output of your API

updated Relaxer api test tool
replacement for PostMan, kinda
can test from within app
can save your history
lots of flexibility while your dev/documenting your APIs before you release

Roadmap for 4
dsl will be deprecated
will be adding more formats - RAML, etc.
test tool will be enhanced
additional export formats
custom theming - provide docs to your consumers and wrap it in your own theme

What’s next at Ortus?
common theme : portability, make CFML more portable/flexible which makes it more appealing
portable cfml - you can run it anyWHERE, independent of hardware and the underlying OS

end goal: hardware/engine independence
migrate away from this big monoliths that are resource draining over to “service oriented architecture”
why use this when you’re comfortable installing form a binary, and setting up a server?
what do cfml containers do?
- eliminate dv ops headaches
- automates your deployments. change aversion number and boom, done.
- simplifies scaling servers.
- security - b/c the networking models in containerized platform are inherently secure, so many of the security problems out there are eliminated.
- 0 down time deployments
- b/c you can deploy w/ health checks already in place, they won’t go up until the health check passes
- more portable, stable, decreases headaches

other idea for the future-

commandBox minions
orchestrate your containers, multiple servers within those containers
ala Russian nesting dolls
CommandBox load balancer w/ Minion A thru Minion Z containers inside it

project G.R.R.->C
Grande Remote Unit for CommandBox
central controller, able to register it’s own minions, issue command to those minions, (start, stop, run scheduled tasks, etc)
w/ centralized dashboard
w/ centralization and orchestration

Evolve - Modern CFML + Microservices

helping to do all this thru modern CFML techniques

understanding how mircrososervices can be applied in the CFML world

microservices
bit sized applications /w big power
make legacy code updates less intimidating
fewer resources req’d to maintain fula tolerance
version-able & maintainable

CBT Templating Language -
based on Twig
override templates up stream
can reuse items from a previous template and chain them together
used as a module
CB module: install cbt
HTML Helper Enhancements
Inheritance first
more lang constructs
new x.cbt.cfm templates

CBT
alpha release summer 2017
internal f/w inception points are already in place
dynamically release content
encourage code reuse
other benefits

new horizons
eliminate pain points
provide renewed creativity and inspiration, focus on creating great apps
sessions of accomplishment and pride in the platform you chose to develop in

ENTER JORGE REYES —

Life is > Software
there are things beyond software
higher things that give us purpose in life
designed to rely on each other for everything - work, sports, family, etc.

Shalom Orphanage
10% of everything Ortus makes goes to this orphanage in El Salvador
your ticket to Into The Box feeds 1 child for 4 months
harvesting.org