Into The Box 2018 Ortus Keynote
Into The Box 2018 Ortus Keynote
Welcome To
BOX GUY
SPONSORS
SPEAKERS
Dan Card
The Social 30
Lunch With
Today @ Ortus Room => 12:30pm
Please Join us at the Ortus Room at 12:30pm for a 30 min presentation on
FusionReactor and learn how to transform your development process with
one of the most intuitive and advanced CFML/JAVA application monitoring
software.
Cross Cutting Concerns Live Podcast
Tonight @ Sponsor Room => 6:30pm
Hosted by Matt Groves, featuring Luis Majano, Brad Wood, Mark Drew,
Rakshith Naresh. The panel will discuss the 'state of the union' and will take
audience questions. You may even get a chance to win some prizes!
HAPPY BOX! After Podcast
Tomorrow @ Ortus Room => 12:30pm
Come join us for Day 2 Lunch with Pete Freitag! 

The security guru!
FRIDAY RAFFLES
✴ Tweet using #intothebox
✴ You earn one entry per tweet up to 10 entries per day
✴ The contest ends at 5 pm CDT on April 27, 2018
✴ Raffles 6:30 in Sponsor Lounge
✴ The winner will be chosen randomly by RaffleBox.
Professional Open Source Consulting Services
Luis Majano Brad Wood
Jon Clausen Bill Garoutte
Jorge Reyes
Esme AcevedoEric Peterson
Gavin Pickin
Javier Quintero
Carlos Castillo
✴ Denny Valliant
✴ No CFML CommandBox without him
✴ Runwar Boss!
✴ Powers CommandBox Server
Support
Chillin’ like a villain!
Story Time
You are still coding in that!WOW!That’s ColdFusion?
ORTUS @ 2013
CFML SHAMING
• Lack of tooling
• Package Management
• CLI
• OS Integrations
• Applications
• Legacy Hell
• Way behind the cool kids
CFMLTOOLING
LEGACY PROBLEM
• Gives CFML a bad name
• Security Issues
• Performance Issues
• Employee Issues
• Development Issues
• Finding Developer Issues
• >35% No MVC
• >60% No DI
• >55% NoTesting
ORTUS MODERNIZATION PLAN
Tooling Community Education
A Year In Review
✴ IntoThe Box
✴ Container RoadShow
✴ RESTFul Roadshow
✴ Ortus Developer Week
✴ Legacy Migrations
✴ Containerizations
✴ API Development
✴ Support
Events Services
✴Intro to ColdBox
✴Core ColdBox
✴Modular Development
✴BDD & Automation
✴Dependency Injection & AOP
✴Building RESTFul Services
✴Intro to ColdFusion ORM
✴CBORM
✴ContentBox Developer
✴ContentBox Administrator
✴CFML for PHP Developers
✴CFML for Java Developers
modern-cfml.ortusbooks.com
✴ CFConfig
✴ Migrations
✴ qb
✴ Hyper
✴ CBT
✴ CFFractal
✴ CommandBox Docker Image
✴ ContentBox Docker Image
A Year In Review
New Products
Over 65+ New Modules
by Team Ortus
A Year In Review
161 new packages
>1200 new versions
A Year In Review
0
350
700
1050
1400
2013 2014 2015 2016 2017
Packages Versions
GROWTH INDICATOR
box install cbemoji
box install commandbox-emoji
CFML TOOLING NOW
YOU NEED TO ACT!
• Drive innovation internally
• Get out of legacy hell, modernize
• Build cool apps,APIs, libraries
• Collaborate
• Share in forgebox.io
• Blog, present, share your knowledge
• Proud of your CFML apps again!
The End!
Into The Box 2018 Ortus Keynote
Into The Box 2018 Ortus Keynote
5 VISION
✓ Increase Modularity
✓ Containerization
✓ Renderings
✓ Routing + APIs
✓ Ecosystem
CONTAINERIZATION
✴ Environment Settings
✴ Coldbox.cfc (Application Wide)
✴ ModuleConfig.cfc (Modules)
✴ WireBox Binder
✴ IntegrationTests
getSystemSetting( key defaultValue )
getSystemProperty( key, defaultValue )
getEnv( key, defaultValue )
RENDERINGS
function index( event, rc, prc ){
return complexData;
}
function index( event, rc, prc ) renderdata=xml{
return complexData;
}
function index( event, rc, prc ) renderdata=pdf{
return complexData;
}
Native JSON + Auto Marshalling
component renderdata="json"
Handler Defaults
NAMED REGIONS
setView( view="", name="sidebar", args={} );
setView( view="", name="col2", args={} );
setView( view="", name="viewlet", args={} );
Set Rendering Regions
Render On Demand
<cfoutput>
    #renderView( name="sidebar" )#
    #renderView( name="col2" )#
    #renderView( name="viewlet" )#
    </cfoutput>
Encapsulation of rendering widgets, complex views, etc
FLUENT ROUTING DSL
✴ Complete Rewrite
✴ No more SES Interceptor
✴ Welcome Router.cfc
✴ Multi-Domain
✴ Automatic BaseURLs
✴ Domain Routing
✴ HMVC - Modularization
App

Router
Module

Router
Module

Router
Module

Router
Module

Router
Module

Router
Module

Router
Module

Router
Module

Router
Module

Router
// Redirects
route( "/oldRoute" )
.toRedirect( "/main/redirectTest" );
// regex
    route( "post/:postID-regex:([a-zA-Z]+?)/:userID-alpha/regex:(xml|json)" )
.to( "ehGeneral.dumpRC" );
// subdomain routing
route( "/" )
.withDomain( ":username.forgebox.dev" )
.to( "subdomain.show" );
// Views No Events
    route( pattern="contactus2", name="contactus2" )
.toView( view="simpleView", noLayout=true );
// HTTP Actions
route( pattern="invalid-restful" )
.withAction( { post = "index" } )
.toHandler( "restful" );
// Verb Restrictions
route( "invalid-main-verbs" )
.withVerbs( "post" )
.to( "main.index" );
// Default Application Routing
    route( ":handler/:action?/:id-numeric?" )
.prcAppend( { isFound=true, testDate=now() } )
.end();
FLUENT ROUTING DSL
✴ Initiatiors
✴ route( pattern, target, name )
✴ get(), post(), put(), delete(), patch()
✴ Modifiers
✴ header(), headers()
✴ as( name )
✴ rc(), rcAppend(), prc(), prcAppend()
✴ constraints()
✴ withHandler(), withAction(), withModule()
✴ withSSL(), withCondition(), withVerbs()
✴ withDomain()
✴ Terminators
✴ toView()
✴ toRedirect()
✴ to( event )
✴ toHandler()
✴ toResponse()
✴ toModuleRouting()
✴ toNamespaceRouting()
✴ end()
LOOK NO HANDLERS MA!
route( "/luis2/:lname" )
  .toResponse( ( event, rc, prc ) => {
        return "<h1>Hello from lambda land: #arguments.rc.lname#</h1>";
   } );
route( "/contacts", ( event, rc, prc ) => {
event.paramValue( "search", "" )
var contacts = getInstance( "ContactsService" ).list( rc.search );
return contacts;
} );
RESOURCEFUL ROUTES
Verb Route Event Purpose
GET /photos photos.index Display a list of photos
GET /photos/new photos.new Return an HTML form for creating a new photo
POST /photos photos.create Create a new photo
GET /photos/:id photos.show Display a specific photo
GET /photos/:id/edit photos.edit Return an HTML form for editing a photo
POST/PUT/PATCH /photos/:id photos.update Update a specific photo
DELETE /photos/:id photos.delete Delete a specific photo
✴ Automatic Resource Routing
✴ resources( “photos” )
ROUTEVISUALIZER MODULE
PERFORMANCE
LoadTests
Test Machine Test Configuration
Windows 10 1000 threads
CommandBox 4.0 server 30 second rampup
Lucee 5.2 Uniform Random Timer with max variance of 1000 ms
2GB heap 3 HTTP samplers
12 Core i7 Repeat 30 times (90,000 HTTP hits in roughly 1 minute)
Using 4load sample app in ColdBox repo
Jmeter 3.3
Trusted Cache enabled
ColdBox production settings enabled
PERFORMANCE
PERFORMANCE
ColdBox 5
Test duration 1:20
Page hits 90,000
average request time ms 3
Avg throughput req/sec 1105
Max throughput req/sec 1954
Blank CFM Page
Test duration 1:20
Page hits 90,000
average request time ms 1
Avg throughput req/sec 1095
Max throughput req/sec 2000
LTS SUPPORT
✴ ColdBox 4 and beyond
✴ Security patches
✴ 12 Months
✴ Support Plan
✴ Custom Patches 24 Months
https://coldbox.ortusbooks.com/intro/introduction/whats-new-with-5.0.0
✴ Over 105 Issues Addressed
✴ Over 42 new features
✴ Over 32 improvements
✴ Full Null Support
✴ APITesting DSL
✴ Tag -> Modern Script
✴ Code Optimizations
✴ New core utilities
✴ Caching Enhancements
✴ Fully Documented
✴ etc…
WHAT’S NEW
COLDBOX BE
ColdBox BE => Get Funky
√ Streams
Futures
Concurrency
RxBox
√ CBT
• Templating Engine based on Twig
• Seamless integration for HMVC apps
• SecureView Layer
• Getting into language design, parsers and
compilers
• 1:00PM @Box Room
What is CBT
install cbt
CFML Streams
✴ Based on Java Streams
✴ Processing Pipeline
✴ Parellel Processing
✴ Reactive Programming
✴ Streams Of
✴ Strings, Lists,Arrays, Structs
✴ Infinite Streams
✴ Files
✴ Custom
✴ Core of ColdBox BE
// Counting
startsWithB =
streamBuilder
.new( myArray )
.filter( function( item ){
return item.startsWith( "b" );
} )
.count();
// Reduce
optional =
streamBuilder
.new( myArray )
.sorted()
.reduce( function( s1, s2 ){
return s1 & "#" & s2;
} );
// Parallel Sorted Count
count =
streamBuilder
.new( myArray )
.parallel()
.sorted()
.count();install cbstreams
BUT WAIT…
✴ TestBox 2.7 Available Now
✴ BE
✴ Modules
✴ ParallelTesting
✴ Test Coverage
✴ ForgeBox Reporting & Analytics
BOX EVANGELIST
Into The Box 2018 Ortus Keynote
AYEAR IN REVIEW
✴ 3.7
✴ Task Runners
✴ System package management
✴ File Globbing
✴ Command Aliases/default parameters
✴ System Settings
✴ TestBox Watchers
✴ Jar endpoint
✴ 3.8
✴ Server Improvements
✴ Code quality commands 

(line endings, whitespace, indents)
✴ 3.9
✴ Server AJP listener
✴ Package link/unlinking
✴ Windows UNC file paths
✴ Bug Fixes
3
COMMANDBOX 4!
NOW AVAILABLE
4 MAJOR FEATURES
✴ Major rewrite of CLI engine loader
✴ Lucee 5 now powers the CLI
✴ Using JSR-223 to dynamically load Lucee 5
✴ All 3rd Party libs updated
✴ Improved Task Runner support
✴ Task scaffolding with “task create”
✴ Task DSL to call other tasks
✴ Ortus Builds are now being converted to
Task Runners.  No Ant! No XML!
✴ Support for Private package
✴ Revamped Server Logs (access, rewrite, console)
✴ ColdBox 5 Scaffolding
4
CLI Improvements
CLI Improvements
✴ REPLTab Completion of CF BIFs, member functions & variable names
✴ REPL syntax highlighting of CFML functions and parenthesis matching
✴ Command Syntax Highlighting
CLI Improvements
✴ Brand new interactive tab completion interface
CLI Improvements
✴ Proper Ctrl-C and Ctrl-D signal handlers to cancel running tasks
✴ Smarter shell history (i-search, filtered “up” searches)
✴ Multi-select input control
CLI Improvements
✴ Color Coded Server Logs
Modules
✴ Based on oh-my-zsh plugin
✴ Context aware
✴ Packages
✴ Servers
✴ Git Repos
✴ Exit Codes
✴ Current working directory
✴ Command timer
✴ Makes you more productive
✴ Can be customized with all 256 colors
✴ You’ll be showing your terminal off to non CF devs to impress them!
✴ Install commandbox-bullet-train
CommandBox BulletTrain Module
Modules
✴ Get daily notifications of new updates
✴ Checks all system modules (like CFConfig)
✴ Checks CLI version
✴ Configurable
✴ install commandbox-update-check
CommandBoxVersion Checker
Modules
✴ Incorporate the CFLint project into your workflow
✴ Task Runners
✴ Package Scripts
✴ Pre-commit hooks
✴ install commandbox-cflint
CommandBox CFLint
COMMANDBOX BE
• Write native distributable CFML binaries via
CommandBox
• Task Runner improvements
• Package Manager improvements (Maven, etc)
• Better installer experience on Windows
• Better server orchestration, IIS connectors,
Windows Services
• ForgeBox Enterprise Integration
• Native Websockets
• and….

FUTURE EPICS
COMMANDBOX IMAGES
Source
Code
CFConfig Settings
Lucee Extensions
CFML Engine
server.json
D

o

c

k

e

r
environment
$ server start image=slug@version
LOAD BALANCING DREAMS
$ server start serverConfigFile=x.json replicas=2
$ server start balancer servers=xx,xx,xx,xx port=80
$ server start balancer add
$ server start balancer list
$ server start balancer remove
$ server start balancer status
$ server start balancer start
$ server start balancer restart
$ server start balancer stop
✴ server.json can dictate any stack
✴ Service Module
✴ Load Balancer
✴ Orchestrator
✴ Electron Management App
✴ High performance tuning
✴ High Priority Custom Fixes
✴ High Priority Feature Requests
✴ Support Included (SLA)
2018-2019
MODULE MAESTRO
Into The Box 2018 Ortus Keynote
From 2.x to 3.x
✴ Feedback driven journey
✴ Lots of customer feedback
✴ Last 12 months
✴ 11 ForgeBoxVersion Releases
✴ 161 New Packages
✴ 69 New Users
✴ 1,121 NewVersions
3
STATE OF FORGEBOX
• Private Packages
• Code Storage
• Organization/Teams
• Collaborators
• PackageTransfers
• Digests + Notifications
• Web Hooks
• Lucee Extension Provider
ROADMAP LOG
• Private Packages
• Code Storage
• Organization/Teams
• Collaborators
• PackageTransfers
• Digests + Notifications
• Web Hooks
• Lucee Extension Provider
PRIVATE PACKAGES
✴ Available Now (Free for limited time)
✴ Storage Included (LimitedTime)
✴ Easy to create
package init
package set private=true
package set slug=my-slug@forgeBoxUser
etc...
publish
install slug@forgeboxUser
install slug@forgeboxUser@be
install slug@forgeboxUser@1.0.0
✴ Easy to use
PACKAGE STORAGE
✴ “location” = “forgeboxStorage”
✴ForgeBox stores your software
✴Versioning Included
✴Private and Secure Storage
✴US and EU Mirrors
✴Download Geo-Location (Coming Soon)
COLLABORATORS
COLLABORATORS
LUCEE EXTENSION PROVIDER
https://www.forgebox.io
publish
CommandBox> package set type=lucee-extensions
CommandBox> publish
FORGEBOX BE
• ForgeBox for Enterprise + Government
• Encapsulated Dependencies
• Unique URI entrypoint
• Unique CommandBox Registrations
• install forgebox-appliance@ortus
forgebox register ortus http://fb.ortus.com
install ortus:cfbox
install ortus:pricing
ON-PREMISE (BETA)
• REST API Swagger Docs
• PackageTransfers
• Web hooks
• TestBox Package Stats & Analytics 

(Code Coverage, Metrics, etc)
• Digests + Notifications
• Organizations/Teams
• Security Scanners
Future Epics
STATE OF THE MODULES
✴ CBStreams (ortus)
✴ CBT (ortus)
✴ CFFractal (ortus)
✴ Singleton Leak Detector (ortus)
✴ qb (ortus)
✴ CommandBox Migrations (ortus)
✴ CFSlack (coldfumonkeh)
✴ Hyper (elpete)
✴ Mailguncfc (mjclemente)
✴ squrll (coryasilva)
✴ presideCMS (preside)
PACKAGE HIGHLIGHTS
✴ Fluent Query Builder
✴ Support for four major database vendors 

(MySQL, Postgres, Microsoft SQL Server, Oracle)
✴ Integrated Schema Builder
✴ Automatic database detection
✴ Lazy Evaluated Queries
qb = Query Builder
Fluent Queries
q = query.from('posts')
    .whereNotNull('published_at')
    .whereIn('author_id', [5, 10, 27])
    .get();
q = query.from('posts')
    .orderBy('published_at')
    .select('post_id', 'author_id', 'title', 'body')
    .whereLike('author', 'Ja%')
    .join('authors', 'authors.id', '=', 'posts.author_id')
    .get();
✴ DB Migrations for any Box!
✴ No running server needed
✴ Command Driven
✴ Leverages qb Schema Builder
✴ Or your own SQL
CommandBox Migrations
✴ Easily make http requests compared to using cfhttp
✴ Create custom http clients with pre-populated headers, params, etc
✴ Perfect for interacting with 3rd party services and SDKs
Hyper
hyper.get( "https//api.github.com/users" );
hyper.setMethod( "PUT" )
    .withHeaders( { "Authorization" = "Bearer #token#" } )
    .setUrl( "https://jsonplaceholder.typicode.com/posts/1" )
    .setBody( {
        title: "New Title"
    } )
    .send();
Hyper WireBox
map( "SWAPIClient" )
    .to( "hyper.models.HyperBuilder" )
    .asSingleton()
    .initWith(
        baseUrl = "https://swapi.co/api"
    );
map( "GitHubClient" )
    .to( "hyper.models.HyperBuilder" )
    .asSingleton()
    .initWith(
        baseUrl = "https://api.github.com",
        headers = {
            "Authorization" = getSetting( "SWAPI_TOKEN" )
        }
    );
Into The Box 2018 Ortus Keynote
quickColdBox RM
quick
✴ Built out of lessons learned from Hibernate ORM in CFML
✴ CFML Based
✴ Alternative to Hibernate
✴ Built on top of qb
✴ Take advantage of dynamic, meta and fluent programming
✴ Still early, but we have lots of ideas
beta
www.forgebox.io/view/quick
quick.ortusbooks.com
box install quick
SEÑOR GAVIN PICKIN
Into The Box 2018 Ortus Keynote
From 3.x to 4.x
✴ Customer driven journey
✴ Lots of customer feedback
✴ Lots of container based deploys
✴ Security Focused
✴ Culmination
✴ 4 point releases in the last 12 months
✴ Biggest re-work of the core since 2.0
✴ 4.x Release
4
STATE OFTHE CONTENT
SEO
Static Site
Media Manager
Automation
Site Maintenance
Native JSON/
XML Content
Admin Bar
EnvVariables
Image Editor
i18n Editor
Sitemap
OpenGraph
Native Markdown
Hierarchy Ordering
Global Search
Dashboard Reports
New Installers
Container Packages
i18n Caching
Site i18n
CKEditor CSS
Tons of Fixes
3.1 3.5 3.6
2Factor Auth
Password Reset
Password Rules
Container Updates
Portable DSN
Sessions Cache
Content Distribution
Permission Groups
Author Invite Wizard
Content History
Easier Updates
Upgrade Pre-Flights
3.7
12 MONTH JOURNEY
4
ColdBox 5 Core
Custom Code Module
Container Improvements
Environment Setting Overrides
CommandBox Driven Upgrades
Core AdminThemes
Core Admin Modules
Core Admin Widgets
MFA Enrollment
Module Inception
Module Routing
Improved Reset Password Flow
4.0
12 MONTH JOURNEY
4
CUSTOM MODULE
✴ Biggest Re-Architecture Since 2.0
✴ Container Focused
✴ Portability Focused
✴ Easier CommandBox Upgrades
✴ We still get CommandBox Controlled:
✴ Admin Modules
✴ AdminThemes
✴ Admin Widgets
4
contentbox-custom
SCALABILITY
✴ No more CF Sessions Ma!!!
✴ CacheBox Leverages
✴ Session Management
✴ Flash Data
✴ Content
✴ Easily Customized
✴ Scale With Ease
4
ContentBox
Sessions Flash Content
Couchbase/Redis/Amazon/
ElasticSearch
PERMISSION GROUPS
✴ Expands the ContentBox Security Model
✴ Can be assigned to:
✴ Users
✴ Roles
✴ From simple to complex security models
4
PASSWORD ENHANCEMENTS
4
Password Length Options
Password Meters
PASSWORD ENHANCEMENTS
4
New Password Resets
MULTI-FACTOR AUTH
✴ ContentBox MFA Framework
✴ Device Retention
✴ Email Provider Core
✴ User Enrollment
✴ Admin Management
✴ Admin Policies
✴ Enforcement
✴ Workflows
✴ Event-Driven Customizations
4
Custom Installers
Auto session + cache distribution
EnvironmentVariables -> Settings
Redis/Couchbase Compose
Image Health-checks, etc
CONTENTBOX CONTAINER
4
docker pull 

ortussolutions/contentbox
Embedded DB or RDBMS
$docker run -p 8080:8080 
-e express=true 
-e install=true 
ortussolutions/contentbox
CONTENTBOX BE
LTS SUPPORT
✴ Starting with ContentBox 4
✴ Security patches
✴ 12 Months
✴ Support Plan
✴ Custom Patches 24 Months
ContentBox BE => Get Funky
CBT
• All content objects will be powered by CBT
• Expressive and secure view language for the CMS
• Layout Inheritance
• Macros
• Complete Customizations for Editors
CBT Core
CBT Will Be Core
<div class="jumbotron">
<h1>{{ rc.complex.hero | upper }}</h1>
<p>{{ rc.complex.body }}</p>
<p>
<a class="btn btn-primary btn-lg" href="{{ prc.xehLearnMore }}">Learn more</a>
</p>
</div>
{% block body %}
    <h1> Books Display </h1>
{% if books is empty %}
    There are no books.
{% elseif books.length == 1 %}
    There is only one book.
{% else %}
    There are many books.
{% endif %}
{% endblock body %}
• cbStreams integration
• Custom ContentType Builder
• New UI Concepts
• Layout Builder
• In-line Editor
• Global Search Revamp
• REST Client Manager
• REST Module
• Changesets
• Cluster Manager
Future Epics
CAPTAIN CONTAINER
CONTAINERIZATION
STRATEGY
CONTAINERIZATION
STRATEGY
✴ Facilitate the deployment of
CFML apps - any engine,
anywhere
✴ Provide parallel mechanisms
for runtime configuration
✴ Build once, deploy on any
tier
CONTAINERIZATION
STRATEGY
✴ Provide tooling and
instruction to encourage
easy adoption
✴ Provide support and
assistance for dev teams in
transition
✴ Lighter, faster, better....
EMERGING EXPECTATIONS
EMERGING EXPECTATIONS
✴ Leverage advantages of
microservice architecture
✴ Ship early and often
✴ Robust analytics
✴ Intuitive and relevant search
✴ Sub-second response for UI
updates
MICROSERVICE ARCHITECTURE
MICROSERVICE ARCHITECTURE
JUST SHIP
IT!
CHANGING
SEARCH PARADIGMS
+ StacheBox (Coming in Summer 2018)
EMERGING DATA PATTERNS
✴ Revisiting RDBMS strengths
✴ Leveraging NoSQL search to drive front end data
✴ JSON columnar storage for flexibility
✴ Serialization and data marshaling frameworks
✴ Hierarchical storage and serialization
SHIP
Your preconceptions off into the sunset
THE CLOSER
LIFE IS > SOFTWARE
“We are made wise not by the recollection of our past, 

but by the responsibility for our future.”

- George Bernard Shaw
YOUR TICKET MATTERS
• Your ticket feeds one child for 4+ months!
• harvesting.org
SHALOM ORPHANAGE
✴ Founded 1977 during the civil war
✴ Help Displaced War Children
✴ Not only an orphanage
✴ Medical Center
✴ Christian School
✴ Bookstores
✴ Food Ministry
WWW.HARVESTING.ORG
Into The Box 2018 Ortus Keynote
THANKS & ENJOY!

More Related Content

PDF
HyperLight Websites
PDF
Profiling JavaScript Performance
PDF
4 JVM Web Frameworks
PDF
Os Harkins
PDF
Taming AEM deployments
PDF
Os Bunce
KEY
How Flipkart scales PHP
PDF
Cfml features modern_coding
HyperLight Websites
Profiling JavaScript Performance
4 JVM Web Frameworks
Os Harkins
Taming AEM deployments
Os Bunce
How Flipkart scales PHP
Cfml features modern_coding

What's hot (20)

PDF
CommandBox & ForgeBox Package Management
PDF
Cache hcm-topdev
PDF
Can you contain the future - Docker, Container Technologies, The Future, and You
PDF
Altitude SF 2017: Debugging Fastly VCL 101
PDF
CouchDB for Web Applications - Erlang Factory London 2009
PPTX
Solving anything in VCL
PDF
Moxi - Memcached Proxy
PDF
Automate Thyself
ODP
Choosing a Web Architecture for Perl
PDF
Nuts and Bolts of WebSocket Devoxx 2014
PDF
Care and feeding notes
PDF
Ansible v2 and Beyond (Ansible Hawai'i Meetup)
PDF
WebPagetest - Good, Bad & Ugly
PPTX
WordPress + NGINX Best Practices with EasyEngine
PDF
Converting Your Dev Environment to a Docker Stack - php[world]
PDF
Caching with Varnish
PDF
3 WAYS TO TEST YOUR COLDFUSION API
PDF
Tips for going fast in a slow world: Michael May at OSCON 2015
PDF
Intro To CommandBox CLI,Package Manager, Server at the Japan CFUG
PPTX
Node.js Web Apps @ ebay scale
CommandBox & ForgeBox Package Management
Cache hcm-topdev
Can you contain the future - Docker, Container Technologies, The Future, and You
Altitude SF 2017: Debugging Fastly VCL 101
CouchDB for Web Applications - Erlang Factory London 2009
Solving anything in VCL
Moxi - Memcached Proxy
Automate Thyself
Choosing a Web Architecture for Perl
Nuts and Bolts of WebSocket Devoxx 2014
Care and feeding notes
Ansible v2 and Beyond (Ansible Hawai'i Meetup)
WebPagetest - Good, Bad & Ugly
WordPress + NGINX Best Practices with EasyEngine
Converting Your Dev Environment to a Docker Stack - php[world]
Caching with Varnish
3 WAYS TO TEST YOUR COLDFUSION API
Tips for going fast in a slow world: Michael May at OSCON 2015
Intro To CommandBox CLI,Package Manager, Server at the Japan CFUG
Node.js Web Apps @ ebay scale
Ad

Similar to Into The Box 2018 Ortus Keynote (20)

PDF
ITB2017 - Keynote
PDF
Command Box ColdFusion Package Manager, Automation
PDF
ITB 2023 Real World ColdBox App Architecture - Nolan Erck.pdf
PDF
ITB2019 Keynotes Day 1 - Ortus Team
PDF
Into The Box 2019 - Keynote Day1
PDF
ITB2019 Scaling with CommandBox in Production! - Brad Wood
PDF
CBDW2014 - This is ColdBox 4
PDF
Itb2018 cf apps to dev to production with command box cf-config docker
PDF
Itb2018 thinking modularly
PDF
CommandBox : Free CFML
PDF
CommandBox at CFCamp 2014
PDF
Into the Box 2024 - Keynote Day 2 Slides.pdf
PDF
Into The Box 2016 Keynote
PDF
Brad wood - 5 CommandBox Modules You Should Be Using [Into The Box 2020]
PDF
Brad Wood 5 command box modules you should be using
PDF
Into The Box 2023 Keynote Day 1
PDF
PDF
Command box
PPTX
ITB2015 - Go Commando with CommandBox CLI
PDF
Cold box hierarchical mvc
ITB2017 - Keynote
Command Box ColdFusion Package Manager, Automation
ITB 2023 Real World ColdBox App Architecture - Nolan Erck.pdf
ITB2019 Keynotes Day 1 - Ortus Team
Into The Box 2019 - Keynote Day1
ITB2019 Scaling with CommandBox in Production! - Brad Wood
CBDW2014 - This is ColdBox 4
Itb2018 cf apps to dev to production with command box cf-config docker
Itb2018 thinking modularly
CommandBox : Free CFML
CommandBox at CFCamp 2014
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into The Box 2016 Keynote
Brad wood - 5 CommandBox Modules You Should Be Using [Into The Box 2020]
Brad Wood 5 command box modules you should be using
Into The Box 2023 Keynote Day 1
Command box
ITB2015 - Go Commando with CommandBox CLI
Cold box hierarchical mvc
Ad

More from Ortus Solutions, Corp (20)

PDF
BoxLang in Japan - The Future is Dynamic.pdf
PDF
BoxLang Dynamic AWS Lambda - Japan Edition
PDF
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
PDF
June Webinar: BoxLang-Dynamic-AWS-Lambda
PDF
BoxLang-Dynamic-AWS-Lambda by Luis Majano.pdf
PDF
What's-New-with-BoxLang-Brad Wood.pptx.pdf
PDF
Getting Started with BoxLang - CFCamp 2025.pdf
PDF
CFCamp2025 - Keynote Day 1 led by Luis Majano.pdf
PDF
What's New with BoxLang Led by Brad Wood.pdf
PDF
Vector Databases and the BoxLangCFML Developer.pdf
PDF
Using cbSSO in a ColdBox App Led by Jacob Beers.pdf
PDF
Use JSON to Slash Your Database Performance.pdf
PDF
Portable CI wGitLab and Github led by Gavin Pickin.pdf
PDF
Tame the Mesh An intro to cross-platform tracing and troubleshooting.pdf
PDF
Supercharging CommandBox with Let's Encrypt.pdf
PDF
Spice up your site with cool animations using GSAP..pdf
PDF
Passkeys and cbSecurity Led by Eric Peterson.pdf
PDF
Legacy Code Nightmares , Hellscapes, and Lessons Learned.pdf
PDF
Integrating the OpenAI API in Your Coldfusion Apps.pdf
PDF
Hidden Gems in FusionReactor for BoxLang, ACF, and Lucee Users.pdf
BoxLang in Japan - The Future is Dynamic.pdf
BoxLang Dynamic AWS Lambda - Japan Edition
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
June Webinar: BoxLang-Dynamic-AWS-Lambda
BoxLang-Dynamic-AWS-Lambda by Luis Majano.pdf
What's-New-with-BoxLang-Brad Wood.pptx.pdf
Getting Started with BoxLang - CFCamp 2025.pdf
CFCamp2025 - Keynote Day 1 led by Luis Majano.pdf
What's New with BoxLang Led by Brad Wood.pdf
Vector Databases and the BoxLangCFML Developer.pdf
Using cbSSO in a ColdBox App Led by Jacob Beers.pdf
Use JSON to Slash Your Database Performance.pdf
Portable CI wGitLab and Github led by Gavin Pickin.pdf
Tame the Mesh An intro to cross-platform tracing and troubleshooting.pdf
Supercharging CommandBox with Let's Encrypt.pdf
Spice up your site with cool animations using GSAP..pdf
Passkeys and cbSecurity Led by Eric Peterson.pdf
Legacy Code Nightmares , Hellscapes, and Lessons Learned.pdf
Integrating the OpenAI API in Your Coldfusion Apps.pdf
Hidden Gems in FusionReactor for BoxLang, ACF, and Lucee Users.pdf

Recently uploaded (20)

PPTX
MuleSoft-Compete-Deck for midddleware integrations
PDF
Advancing precision in air quality forecasting through machine learning integ...
PPTX
Microsoft User Copilot Training Slide Deck
PDF
Dell Pro Micro: Speed customer interactions, patient processing, and learning...
PDF
Introduction to MCP and A2A Protocols: Enabling Agent Communication
PPTX
Training Program for knowledge in solar cell and solar industry
PDF
Data Virtualization in Action: Scaling APIs and Apps with FME
PDF
IT-ITes Industry bjjbnkmkhkhknbmhkhmjhjkhj
PDF
AI.gov: A Trojan Horse in the Age of Artificial Intelligence
PDF
Enhancing plagiarism detection using data pre-processing and machine learning...
PDF
NewMind AI Weekly Chronicles – August ’25 Week IV
PDF
Co-training pseudo-labeling for text classification with support vector machi...
PDF
Transform-Your-Supply-Chain-with-AI-Driven-Quality-Engineering.pdf
PDF
The-2025-Engineering-Revolution-AI-Quality-and-DevOps-Convergence.pdf
PDF
Auditboard EB SOX Playbook 2023 edition.
PDF
CXOs-Are-you-still-doing-manual-DevOps-in-the-age-of-AI.pdf
PDF
SaaS reusability assessment using machine learning techniques
PDF
Transform-Quality-Engineering-with-AI-A-60-Day-Blueprint-for-Digital-Success.pdf
PDF
Lung cancer patients survival prediction using outlier detection and optimize...
PPTX
AI-driven Assurance Across Your End-to-end Network With ThousandEyes
MuleSoft-Compete-Deck for midddleware integrations
Advancing precision in air quality forecasting through machine learning integ...
Microsoft User Copilot Training Slide Deck
Dell Pro Micro: Speed customer interactions, patient processing, and learning...
Introduction to MCP and A2A Protocols: Enabling Agent Communication
Training Program for knowledge in solar cell and solar industry
Data Virtualization in Action: Scaling APIs and Apps with FME
IT-ITes Industry bjjbnkmkhkhknbmhkhmjhjkhj
AI.gov: A Trojan Horse in the Age of Artificial Intelligence
Enhancing plagiarism detection using data pre-processing and machine learning...
NewMind AI Weekly Chronicles – August ’25 Week IV
Co-training pseudo-labeling for text classification with support vector machi...
Transform-Your-Supply-Chain-with-AI-Driven-Quality-Engineering.pdf
The-2025-Engineering-Revolution-AI-Quality-and-DevOps-Convergence.pdf
Auditboard EB SOX Playbook 2023 edition.
CXOs-Are-you-still-doing-manual-DevOps-in-the-age-of-AI.pdf
SaaS reusability assessment using machine learning techniques
Transform-Quality-Engineering-with-AI-A-60-Day-Blueprint-for-Digital-Success.pdf
Lung cancer patients survival prediction using outlier detection and optimize...
AI-driven Assurance Across Your End-to-end Network With ThousandEyes

Into The Box 2018 Ortus Keynote

  • 9. Lunch With Today @ Ortus Room => 12:30pm Please Join us at the Ortus Room at 12:30pm for a 30 min presentation on FusionReactor and learn how to transform your development process with one of the most intuitive and advanced CFML/JAVA application monitoring software.
  • 10. Cross Cutting Concerns Live Podcast Tonight @ Sponsor Room => 6:30pm Hosted by Matt Groves, featuring Luis Majano, Brad Wood, Mark Drew, Rakshith Naresh. The panel will discuss the 'state of the union' and will take audience questions. You may even get a chance to win some prizes!
  • 11. HAPPY BOX! After Podcast
  • 12. Tomorrow @ Ortus Room => 12:30pm Come join us for Day 2 Lunch with Pete Freitag! 
 The security guru!
  • 13. FRIDAY RAFFLES ✴ Tweet using #intothebox ✴ You earn one entry per tweet up to 10 entries per day ✴ The contest ends at 5 pm CDT on April 27, 2018 ✴ Raffles 6:30 in Sponsor Lounge ✴ The winner will be chosen randomly by RaffleBox.
  • 14. Professional Open Source Consulting Services
  • 15. Luis Majano Brad Wood Jon Clausen Bill Garoutte Jorge Reyes Esme AcevedoEric Peterson Gavin Pickin Javier Quintero Carlos Castillo
  • 16. ✴ Denny Valliant ✴ No CFML CommandBox without him ✴ Runwar Boss! ✴ Powers CommandBox Server Support Chillin’ like a villain!
  • 17. Story Time You are still coding in that!WOW!That’s ColdFusion?
  • 19. CFML SHAMING • Lack of tooling • Package Management • CLI • OS Integrations • Applications • Legacy Hell • Way behind the cool kids
  • 21. LEGACY PROBLEM • Gives CFML a bad name • Security Issues • Performance Issues • Employee Issues • Development Issues • Finding Developer Issues • >35% No MVC • >60% No DI • >55% NoTesting
  • 22. ORTUS MODERNIZATION PLAN Tooling Community Education
  • 23. A Year In Review ✴ IntoThe Box ✴ Container RoadShow ✴ RESTFul Roadshow ✴ Ortus Developer Week ✴ Legacy Migrations ✴ Containerizations ✴ API Development ✴ Support Events Services
  • 24. ✴Intro to ColdBox ✴Core ColdBox ✴Modular Development ✴BDD & Automation ✴Dependency Injection & AOP ✴Building RESTFul Services ✴Intro to ColdFusion ORM ✴CBORM ✴ContentBox Developer ✴ContentBox Administrator ✴CFML for PHP Developers ✴CFML for Java Developers modern-cfml.ortusbooks.com
  • 25. ✴ CFConfig ✴ Migrations ✴ qb ✴ Hyper ✴ CBT ✴ CFFractal ✴ CommandBox Docker Image ✴ ContentBox Docker Image A Year In Review New Products Over 65+ New Modules by Team Ortus
  • 26. A Year In Review 161 new packages >1200 new versions
  • 27. A Year In Review 0 350 700 1050 1400 2013 2014 2015 2016 2017 Packages Versions
  • 28. GROWTH INDICATOR box install cbemoji box install commandbox-emoji
  • 30. YOU NEED TO ACT! • Drive innovation internally • Get out of legacy hell, modernize • Build cool apps,APIs, libraries • Collaborate • Share in forgebox.io • Blog, present, share your knowledge • Proud of your CFML apps again!
  • 34. 5 VISION ✓ Increase Modularity ✓ Containerization ✓ Renderings ✓ Routing + APIs ✓ Ecosystem
  • 35. CONTAINERIZATION ✴ Environment Settings ✴ Coldbox.cfc (Application Wide) ✴ ModuleConfig.cfc (Modules) ✴ WireBox Binder ✴ IntegrationTests getSystemSetting( key defaultValue ) getSystemProperty( key, defaultValue ) getEnv( key, defaultValue )
  • 36. RENDERINGS function index( event, rc, prc ){ return complexData; } function index( event, rc, prc ) renderdata=xml{ return complexData; } function index( event, rc, prc ) renderdata=pdf{ return complexData; } Native JSON + Auto Marshalling component renderdata="json" Handler Defaults
  • 37. NAMED REGIONS setView( view="", name="sidebar", args={} ); setView( view="", name="col2", args={} ); setView( view="", name="viewlet", args={} ); Set Rendering Regions Render On Demand <cfoutput>     #renderView( name="sidebar" )#     #renderView( name="col2" )#     #renderView( name="viewlet" )#     </cfoutput> Encapsulation of rendering widgets, complex views, etc
  • 38. FLUENT ROUTING DSL ✴ Complete Rewrite ✴ No more SES Interceptor ✴ Welcome Router.cfc ✴ Multi-Domain ✴ Automatic BaseURLs ✴ Domain Routing ✴ HMVC - Modularization App
 Router Module
 Router Module
 Router Module
 Router Module
 Router Module
 Router Module
 Router Module
 Router Module
 Router Module
 Router
  • 39. // Redirects route( "/oldRoute" ) .toRedirect( "/main/redirectTest" ); // regex     route( "post/:postID-regex:([a-zA-Z]+?)/:userID-alpha/regex:(xml|json)" ) .to( "ehGeneral.dumpRC" ); // subdomain routing route( "/" ) .withDomain( ":username.forgebox.dev" ) .to( "subdomain.show" ); // Views No Events     route( pattern="contactus2", name="contactus2" ) .toView( view="simpleView", noLayout=true ); // HTTP Actions route( pattern="invalid-restful" ) .withAction( { post = "index" } ) .toHandler( "restful" ); // Verb Restrictions route( "invalid-main-verbs" ) .withVerbs( "post" ) .to( "main.index" ); // Default Application Routing     route( ":handler/:action?/:id-numeric?" ) .prcAppend( { isFound=true, testDate=now() } ) .end();
  • 40. FLUENT ROUTING DSL ✴ Initiatiors ✴ route( pattern, target, name ) ✴ get(), post(), put(), delete(), patch() ✴ Modifiers ✴ header(), headers() ✴ as( name ) ✴ rc(), rcAppend(), prc(), prcAppend() ✴ constraints() ✴ withHandler(), withAction(), withModule() ✴ withSSL(), withCondition(), withVerbs() ✴ withDomain() ✴ Terminators ✴ toView() ✴ toRedirect() ✴ to( event ) ✴ toHandler() ✴ toResponse() ✴ toModuleRouting() ✴ toNamespaceRouting() ✴ end()
  • 41. LOOK NO HANDLERS MA! route( "/luis2/:lname" )   .toResponse( ( event, rc, prc ) => {         return "<h1>Hello from lambda land: #arguments.rc.lname#</h1>";    } ); route( "/contacts", ( event, rc, prc ) => { event.paramValue( "search", "" ) var contacts = getInstance( "ContactsService" ).list( rc.search ); return contacts; } );
  • 42. RESOURCEFUL ROUTES Verb Route Event Purpose GET /photos photos.index Display a list of photos GET /photos/new photos.new Return an HTML form for creating a new photo POST /photos photos.create Create a new photo GET /photos/:id photos.show Display a specific photo GET /photos/:id/edit photos.edit Return an HTML form for editing a photo POST/PUT/PATCH /photos/:id photos.update Update a specific photo DELETE /photos/:id photos.delete Delete a specific photo ✴ Automatic Resource Routing ✴ resources( “photos” )
  • 44. PERFORMANCE LoadTests Test Machine Test Configuration Windows 10 1000 threads CommandBox 4.0 server 30 second rampup Lucee 5.2 Uniform Random Timer with max variance of 1000 ms 2GB heap 3 HTTP samplers 12 Core i7 Repeat 30 times (90,000 HTTP hits in roughly 1 minute) Using 4load sample app in ColdBox repo Jmeter 3.3 Trusted Cache enabled ColdBox production settings enabled
  • 46. PERFORMANCE ColdBox 5 Test duration 1:20 Page hits 90,000 average request time ms 3 Avg throughput req/sec 1105 Max throughput req/sec 1954 Blank CFM Page Test duration 1:20 Page hits 90,000 average request time ms 1 Avg throughput req/sec 1095 Max throughput req/sec 2000
  • 47. LTS SUPPORT ✴ ColdBox 4 and beyond ✴ Security patches ✴ 12 Months ✴ Support Plan ✴ Custom Patches 24 Months
  • 48. https://coldbox.ortusbooks.com/intro/introduction/whats-new-with-5.0.0 ✴ Over 105 Issues Addressed ✴ Over 42 new features ✴ Over 32 improvements ✴ Full Null Support ✴ APITesting DSL ✴ Tag -> Modern Script ✴ Code Optimizations ✴ New core utilities ✴ Caching Enhancements ✴ Fully Documented ✴ etc… WHAT’S NEW
  • 50. ColdBox BE => Get Funky √ Streams Futures Concurrency RxBox √ CBT
  • 51. • Templating Engine based on Twig • Seamless integration for HMVC apps • SecureView Layer • Getting into language design, parsers and compilers • 1:00PM @Box Room What is CBT install cbt
  • 52. CFML Streams ✴ Based on Java Streams ✴ Processing Pipeline ✴ Parellel Processing ✴ Reactive Programming ✴ Streams Of ✴ Strings, Lists,Arrays, Structs ✴ Infinite Streams ✴ Files ✴ Custom ✴ Core of ColdBox BE // Counting startsWithB = streamBuilder .new( myArray ) .filter( function( item ){ return item.startsWith( "b" ); } ) .count(); // Reduce optional = streamBuilder .new( myArray ) .sorted() .reduce( function( s1, s2 ){ return s1 & "#" & s2; } ); // Parallel Sorted Count count = streamBuilder .new( myArray ) .parallel() .sorted() .count();install cbstreams
  • 53. BUT WAIT… ✴ TestBox 2.7 Available Now ✴ BE ✴ Modules ✴ ParallelTesting ✴ Test Coverage ✴ ForgeBox Reporting & Analytics
  • 56. AYEAR IN REVIEW ✴ 3.7 ✴ Task Runners ✴ System package management ✴ File Globbing ✴ Command Aliases/default parameters ✴ System Settings ✴ TestBox Watchers ✴ Jar endpoint ✴ 3.8 ✴ Server Improvements ✴ Code quality commands 
 (line endings, whitespace, indents) ✴ 3.9 ✴ Server AJP listener ✴ Package link/unlinking ✴ Windows UNC file paths ✴ Bug Fixes 3
  • 58. 4 MAJOR FEATURES ✴ Major rewrite of CLI engine loader ✴ Lucee 5 now powers the CLI ✴ Using JSR-223 to dynamically load Lucee 5 ✴ All 3rd Party libs updated ✴ Improved Task Runner support ✴ Task scaffolding with “task create” ✴ Task DSL to call other tasks ✴ Ortus Builds are now being converted to Task Runners.  No Ant! No XML! ✴ Support for Private package ✴ Revamped Server Logs (access, rewrite, console) ✴ ColdBox 5 Scaffolding 4
  • 60. CLI Improvements ✴ REPLTab Completion of CF BIFs, member functions & variable names ✴ REPL syntax highlighting of CFML functions and parenthesis matching ✴ Command Syntax Highlighting
  • 61. CLI Improvements ✴ Brand new interactive tab completion interface
  • 62. CLI Improvements ✴ Proper Ctrl-C and Ctrl-D signal handlers to cancel running tasks ✴ Smarter shell history (i-search, filtered “up” searches) ✴ Multi-select input control
  • 63. CLI Improvements ✴ Color Coded Server Logs
  • 64. Modules ✴ Based on oh-my-zsh plugin ✴ Context aware ✴ Packages ✴ Servers ✴ Git Repos ✴ Exit Codes ✴ Current working directory ✴ Command timer ✴ Makes you more productive ✴ Can be customized with all 256 colors ✴ You’ll be showing your terminal off to non CF devs to impress them! ✴ Install commandbox-bullet-train CommandBox BulletTrain Module
  • 65. Modules ✴ Get daily notifications of new updates ✴ Checks all system modules (like CFConfig) ✴ Checks CLI version ✴ Configurable ✴ install commandbox-update-check CommandBoxVersion Checker
  • 66. Modules ✴ Incorporate the CFLint project into your workflow ✴ Task Runners ✴ Package Scripts ✴ Pre-commit hooks ✴ install commandbox-cflint CommandBox CFLint
  • 68. • Write native distributable CFML binaries via CommandBox • Task Runner improvements • Package Manager improvements (Maven, etc) • Better installer experience on Windows • Better server orchestration, IIS connectors, Windows Services • ForgeBox Enterprise Integration • Native Websockets • and….
 FUTURE EPICS
  • 69. COMMANDBOX IMAGES Source Code CFConfig Settings Lucee Extensions CFML Engine server.json D
 o
 c
 k
 e
 r environment $ server start image=slug@version
  • 70. LOAD BALANCING DREAMS $ server start serverConfigFile=x.json replicas=2 $ server start balancer servers=xx,xx,xx,xx port=80 $ server start balancer add $ server start balancer list $ server start balancer remove $ server start balancer status $ server start balancer start $ server start balancer restart $ server start balancer stop ✴ server.json can dictate any stack
  • 71. ✴ Service Module ✴ Load Balancer ✴ Orchestrator ✴ Electron Management App ✴ High performance tuning ✴ High Priority Custom Fixes ✴ High Priority Feature Requests ✴ Support Included (SLA) 2018-2019
  • 74. From 2.x to 3.x ✴ Feedback driven journey ✴ Lots of customer feedback ✴ Last 12 months ✴ 11 ForgeBoxVersion Releases ✴ 161 New Packages ✴ 69 New Users ✴ 1,121 NewVersions 3 STATE OF FORGEBOX
  • 75. • Private Packages • Code Storage • Organization/Teams • Collaborators • PackageTransfers • Digests + Notifications • Web Hooks • Lucee Extension Provider ROADMAP LOG • Private Packages • Code Storage • Organization/Teams • Collaborators • PackageTransfers • Digests + Notifications • Web Hooks • Lucee Extension Provider
  • 76. PRIVATE PACKAGES ✴ Available Now (Free for limited time) ✴ Storage Included (LimitedTime) ✴ Easy to create package init package set private=true package set slug=my-slug@forgeBoxUser etc... publish install slug@forgeboxUser install slug@forgeboxUser@be install slug@[email protected] ✴ Easy to use
  • 77. PACKAGE STORAGE ✴ “location” = “forgeboxStorage” ✴ForgeBox stores your software ✴Versioning Included ✴Private and Secure Storage ✴US and EU Mirrors ✴Download Geo-Location (Coming Soon)
  • 82. • ForgeBox for Enterprise + Government • Encapsulated Dependencies • Unique URI entrypoint • Unique CommandBox Registrations • install forgebox-appliance@ortus forgebox register ortus http://fb.ortus.com install ortus:cfbox install ortus:pricing ON-PREMISE (BETA)
  • 83. • REST API Swagger Docs • PackageTransfers • Web hooks • TestBox Package Stats & Analytics 
 (Code Coverage, Metrics, etc) • Digests + Notifications • Organizations/Teams • Security Scanners Future Epics
  • 84. STATE OF THE MODULES
  • 85. ✴ CBStreams (ortus) ✴ CBT (ortus) ✴ CFFractal (ortus) ✴ Singleton Leak Detector (ortus) ✴ qb (ortus) ✴ CommandBox Migrations (ortus) ✴ CFSlack (coldfumonkeh) ✴ Hyper (elpete) ✴ Mailguncfc (mjclemente) ✴ squrll (coryasilva) ✴ presideCMS (preside) PACKAGE HIGHLIGHTS
  • 86. ✴ Fluent Query Builder ✴ Support for four major database vendors 
 (MySQL, Postgres, Microsoft SQL Server, Oracle) ✴ Integrated Schema Builder ✴ Automatic database detection ✴ Lazy Evaluated Queries qb = Query Builder
  • 87. Fluent Queries q = query.from('posts')     .whereNotNull('published_at')     .whereIn('author_id', [5, 10, 27])     .get(); q = query.from('posts')     .orderBy('published_at')     .select('post_id', 'author_id', 'title', 'body')     .whereLike('author', 'Ja%')     .join('authors', 'authors.id', '=', 'posts.author_id')     .get();
  • 88. ✴ DB Migrations for any Box! ✴ No running server needed ✴ Command Driven ✴ Leverages qb Schema Builder ✴ Or your own SQL CommandBox Migrations
  • 89. ✴ Easily make http requests compared to using cfhttp ✴ Create custom http clients with pre-populated headers, params, etc ✴ Perfect for interacting with 3rd party services and SDKs Hyper hyper.get( "https//api.github.com/users" ); hyper.setMethod( "PUT" )     .withHeaders( { "Authorization" = "Bearer #token#" } )     .setUrl( "https://jsonplaceholder.typicode.com/posts/1" )     .setBody( {         title: "New Title"     } )     .send();
  • 90. Hyper WireBox map( "SWAPIClient" )     .to( "hyper.models.HyperBuilder" )     .asSingleton()     .initWith(         baseUrl = "https://swapi.co/api"     ); map( "GitHubClient" )     .to( "hyper.models.HyperBuilder" )     .asSingleton()     .initWith(         baseUrl = "https://api.github.com",         headers = {             "Authorization" = getSetting( "SWAPI_TOKEN" )         }     );
  • 93. quick ✴ Built out of lessons learned from Hibernate ORM in CFML ✴ CFML Based ✴ Alternative to Hibernate ✴ Built on top of qb ✴ Take advantage of dynamic, meta and fluent programming ✴ Still early, but we have lots of ideas beta www.forgebox.io/view/quick quick.ortusbooks.com box install quick
  • 96. From 3.x to 4.x ✴ Customer driven journey ✴ Lots of customer feedback ✴ Lots of container based deploys ✴ Security Focused ✴ Culmination ✴ 4 point releases in the last 12 months ✴ Biggest re-work of the core since 2.0 ✴ 4.x Release 4 STATE OFTHE CONTENT
  • 97. SEO Static Site Media Manager Automation Site Maintenance Native JSON/ XML Content Admin Bar EnvVariables Image Editor i18n Editor Sitemap OpenGraph Native Markdown Hierarchy Ordering Global Search Dashboard Reports New Installers Container Packages i18n Caching Site i18n CKEditor CSS Tons of Fixes 3.1 3.5 3.6 2Factor Auth Password Reset Password Rules Container Updates Portable DSN Sessions Cache Content Distribution Permission Groups Author Invite Wizard Content History Easier Updates Upgrade Pre-Flights 3.7 12 MONTH JOURNEY 4
  • 98. ColdBox 5 Core Custom Code Module Container Improvements Environment Setting Overrides CommandBox Driven Upgrades Core AdminThemes Core Admin Modules Core Admin Widgets MFA Enrollment Module Inception Module Routing Improved Reset Password Flow 4.0 12 MONTH JOURNEY 4
  • 99. CUSTOM MODULE ✴ Biggest Re-Architecture Since 2.0 ✴ Container Focused ✴ Portability Focused ✴ Easier CommandBox Upgrades ✴ We still get CommandBox Controlled: ✴ Admin Modules ✴ AdminThemes ✴ Admin Widgets 4 contentbox-custom
  • 100. SCALABILITY ✴ No more CF Sessions Ma!!! ✴ CacheBox Leverages ✴ Session Management ✴ Flash Data ✴ Content ✴ Easily Customized ✴ Scale With Ease 4 ContentBox Sessions Flash Content Couchbase/Redis/Amazon/ ElasticSearch
  • 101. PERMISSION GROUPS ✴ Expands the ContentBox Security Model ✴ Can be assigned to: ✴ Users ✴ Roles ✴ From simple to complex security models 4
  • 102. PASSWORD ENHANCEMENTS 4 Password Length Options Password Meters
  • 104. MULTI-FACTOR AUTH ✴ ContentBox MFA Framework ✴ Device Retention ✴ Email Provider Core ✴ User Enrollment ✴ Admin Management ✴ Admin Policies ✴ Enforcement ✴ Workflows ✴ Event-Driven Customizations 4
  • 105. Custom Installers Auto session + cache distribution EnvironmentVariables -> Settings Redis/Couchbase Compose Image Health-checks, etc CONTENTBOX CONTAINER 4 docker pull 
 ortussolutions/contentbox Embedded DB or RDBMS $docker run -p 8080:8080 -e express=true -e install=true ortussolutions/contentbox
  • 107. LTS SUPPORT ✴ Starting with ContentBox 4 ✴ Security patches ✴ 12 Months ✴ Support Plan ✴ Custom Patches 24 Months
  • 108. ContentBox BE => Get Funky CBT
  • 109. • All content objects will be powered by CBT • Expressive and secure view language for the CMS • Layout Inheritance • Macros • Complete Customizations for Editors CBT Core
  • 110. CBT Will Be Core <div class="jumbotron"> <h1>{{ rc.complex.hero | upper }}</h1> <p>{{ rc.complex.body }}</p> <p> <a class="btn btn-primary btn-lg" href="{{ prc.xehLearnMore }}">Learn more</a> </p> </div> {% block body %}     <h1> Books Display </h1> {% if books is empty %}     There are no books. {% elseif books.length == 1 %}     There is only one book. {% else %}     There are many books. {% endif %} {% endblock body %}
  • 111. • cbStreams integration • Custom ContentType Builder • New UI Concepts • Layout Builder • In-line Editor • Global Search Revamp • REST Client Manager • REST Module • Changesets • Cluster Manager Future Epics
  • 114. CONTAINERIZATION STRATEGY ✴ Facilitate the deployment of CFML apps - any engine, anywhere ✴ Provide parallel mechanisms for runtime configuration ✴ Build once, deploy on any tier
  • 115. CONTAINERIZATION STRATEGY ✴ Provide tooling and instruction to encourage easy adoption ✴ Provide support and assistance for dev teams in transition ✴ Lighter, faster, better....
  • 117. EMERGING EXPECTATIONS ✴ Leverage advantages of microservice architecture ✴ Ship early and often ✴ Robust analytics ✴ Intuitive and relevant search ✴ Sub-second response for UI updates
  • 121. CHANGING SEARCH PARADIGMS + StacheBox (Coming in Summer 2018)
  • 122. EMERGING DATA PATTERNS ✴ Revisiting RDBMS strengths ✴ Leveraging NoSQL search to drive front end data ✴ JSON columnar storage for flexibility ✴ Serialization and data marshaling frameworks ✴ Hierarchical storage and serialization
  • 123. SHIP Your preconceptions off into the sunset
  • 125. LIFE IS > SOFTWARE
  • 126. “We are made wise not by the recollection of our past, 
 but by the responsibility for our future.”
 - George Bernard Shaw
  • 127. YOUR TICKET MATTERS • Your ticket feeds one child for 4+ months! • harvesting.org
  • 128. SHALOM ORPHANAGE ✴ Founded 1977 during the civil war ✴ Help Displaced War Children ✴ Not only an orphanage ✴ Medical Center ✴ Christian School ✴ Bookstores ✴ Food Ministry WWW.HARVESTING.ORG