25. 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
27. YOU NEED TO ACT!
• Drive innovation internally
• Get out of legacy hell, modernize
• Build cool apps,APIs, libraries
• Collaborate with open source
• Share in forgebox.io
• Blog, present, share your knowledge
• Proud of your CFML apps again!
35. RENDERDATA MARSHALLERS
renderdata = {
defaults = {
// Any argument to renderdata can be defaulted here
type = ”json”
},
transformers = {
// Register new type transformers
"json" = "class path or WireBox ID"
// Dynamic transformers
“mustache” = function(){}
}
}
• Configure new/override rendering types
• Add global render data defaults
• Implement custom rendering engines (Markdown, mustache, etc)
36. NAMED REGIONS
setView( view=“”, name=“sidebar”, args… );
setView( view=“”, name=“col2”, args… );
setView( view=“”, name=“viewlet”, args… );
Set Rendering Regions
Render On Demand
#renderView( name=“sidebar” )#
#renderView( name=“col2” )#
#renderView( name=“viewlet” )#
Encapsulation of rendering widgets, complex views, etc
37. ROUTING BY CONVENTION
component route="/photos"{}
Handler Routing
component route=“/photos" resourceful{}
Resourceful Routing
Verb Route API Event Route Name Purpose
GET /photos TRUE photos.index photos.index Display a list of photos
GET /photos/new FALSE photos.new photos.new Return an HTML form for creating a new photo
POST /photos TRUE photos.create photos.create Create a new photo
GET /photos/:id TRUE photos.show photos.show Display a specific photo
GET /photos/:id/edit FALSE photos.edit photos.edit Return an HTML form for editing a photo
POST/PUT/PATCH /photos/:id TRUE photos.update photos.update Update a specific photo
DELETE /photos/:id TRUE photos.delete photos.delete Delete a specific photo
41. GO COMMANDO!
• 3.1.1
• multi server support
• forgebox 2.0, cli publishing
• package scripts
• 3.3
• web server aliases
• custom error pages, & tray menus
• 3.5
• live following log files with tail
• server console starts
• custom server home dirs
• 3.6
• interactive binary execution
• proper exit codes when running tests
45. • Package any server with server.json
• Updating CF engine install is a non-issue
• Use multiple CF engines/versions at the same time
• New Docker images make it easy for cloud scaling
• CFConfig one tool to rule them all
CFML Servers
$ docker pull ortussolutions/commandbox
$ docker run -v "/path/to/your/app:/app" ortussolutions/commandbox
46. • Package your code so it's reusable
• Share your code with others
• Install packages from anywhere
• Totally automate your build processes
Package Management
$ bump —minor && publish
47. • Allows for mashups of CFML, commands and
native binaries
• Create custom commands with user
interactivity and pretty output
• Easy DB access from CLI commands
• Easily create command recipes
• Automate it all
CLI Scripting
CLI
CFML
ColdFusion
48. • More CFConfig Support
• Embedded Websocket Server
• CFML Build Automations (Runners)
• Maven Support
• Lucee 5 Migration
• App packaging and cloud deployments
• and ….
ROADMAP
58. ELIXIR VS THE MODULES
Gulpfile.js
resources
includes
Traditional ColdBox MVC Workflow
What about modules?
59. mix.modules
> Uses same conventions inside you modules folders
(resources/assets, etc.)
> All mix methods available in your gulpfile.js are
available here.
> Ignores modules without a elixir-module.js file.
> Watch mode supported just like you would expect and
hope.
61. COMING NEXT
> Improvements to mix.version
> Version files in place instead of to a build folder
> Automatic versioning with --production flag
> Tighter integration with Webpack
> Working with styles (ExtractTextPlugin)
> Working with images / static assets
64. STATE OFTHE CONTENT
• ContentBox 3.0 < 1 year ago
• ContentBox 3.1 January 2017
• ContentBox 3.5.1 April 2017
• ContentBox 4.0 is underway
install contentbox-installer@be
68. New Installation Methods
install contentbox
Containers
• Installs ContentBox as a module into any ColdBox 4 app
• All dependencies encapsulated by module inception
• Updates easier: box update contentbox
install contentbox-site
• Creates a new ColdBox site and configures ORM
• Installs the contentbox module as a root app dependency
• Updates easier: box update contentbox
install contentbox-installer
• Same as the site but deploys two more modules
• DSN Creator
• Installer
Updates
69. Setting OverridesContainers
• Override Any ContentBox Setting via Coldbox.cfc
contentbox = {
// Runtime Settings Override by site
settings = {
// Default site
default = {
"cb_search_adapter" = "my.search.adapter",
"cb_media_directoryRoot" = "/docker/mount"
}
}
}
70. Containers
• Override any setting via Docker/Java Environment variables:
contentbox_{site}_{setting}=value
-Dcontentbox_default_cb_media_directoryRoot=./build/docker/contentbox/content
• Example
Setting Overrides
71. UI ADMIN BAR
• Modular Front End Admin Bar
• Permissions Based
• Admin Links
• Editing
• Stats
• Publish Status
• Draft Modes
• Publish in Future Modes
UI
72. EDITOR + LOCALIZATION
• CKEditor updates
• Editors accept new i18n markup
UI
${i18n:resource}
${i18n:resource@module}
• All caching, internals updated with user’s getFWLocale()
• ColdBox App -> Access to all i18n features
• All themes, modules, widgets have i18n functions now
• Thanks to computer know how, more features are coming…
73. SITEMAPUI
• On-demand sitemap generations
• Featured image support
• Distributed caching
• Multiple formats
• /sitemap.xml
• /sitemap.txt
• /sitemap.json
• /sitemap.html
• /sitemap - which defaults to html
74. OPEN GRAPHUI
Most content is shared to Facebook/Twitter as a URL, so it's
important that you mark up your website with Open Graph
tags to take control over how your content appears on
Facebook/Twitter
<meta property="og:url" content="http://www.nytimes.com/2015/02/19/arts/
international/when-great-minds-dont-think-alike.html" />
<meta property="og:type" content="article" />
<meta property="og:title" content="When Great Minds Don’t Think Alike" />
<meta property="og:description" content="How much does culture influence creative
thinking?" />
<meta property="og:image" content="http://static01.nyt.com/images/2015/02/19/arts/
international/19iht-btnumbers19A/19iht-btnumbers19A-facebookJumbo-v2.jpg" />
84. RELAXV4
• Relax DSL Deprecated
• Support for additional formats
(e.g. RAML)
• API live-scaffolding and in-place
editing of documentation
• Test tool enhanced and
modularized for additional
flexibility in deployment
• Additional export formats and
custom themes
92. CFML : EVOLVED
• Microservices:
• Bite size with Big power
• Make legacy code updates
less intimidating
• Fewer resources required
to maintain fault tolerance
• Versionable & maintainable
93. CBT Templating Language
• Twig Compatible
• A module: install cbt
• HTML Helper Enhancements
• Inheritance First
• More language constructs
• New x.cbt.cfm templates
94.
EXPANDABLE, INHERITABLE, POWERFUL
• Internal Framework
Interception Points
• Allows for dynamic content
replacement and extendability
• Encourages code reuse in
templating, eliminating the
pain points of CFML
rendering
• Alpha Release - Summer 2017
Templating LanguageCBT
95. • Eliminate Pain Points and Dev Opts Nightmares
• Renewed Creativity and Inspiration inYour Work
• Sense of Accomplishment and Pride of Platform ( CFML! )
NEW HORIZONS