SlideShare a Scribd company logo
Cascade
Howard M. Lewis Ship
Director of Open Source Technology, Formos
howard.lewis.ship@formos.com
                                             © 2009 Formos Software Development
What is Cascade?




                   © 2009 Formos Software Development
Cascade Web Framework
• Pure Clojure

• Functional

• Share Nothing

• Action Oriented (not component based)

• Tapestry-style Templates

• Status: alpha, incomplete



                                          © 2009 Formos Software Development
Views and Fragments
 app/views/index.cml

 <html xmlns:c="cascade">
   <body>
     The current time is:
     <c:format-date c:date="(env :current-time)"/>
   </body>
 </html>




                       app/fragments.clj

                       (ns app.fragments
                         (:import (java.util Date)
                                  (java.text DateFormat)))

                       (defn format-date
                         [env params]
                         (let [#^Date date (params :date)
                               #^DateFormat fmt (DateFormat/getDateTimeInstance
                                                  DateFormat/MEDIUM DateFormat/MEDIUM)]
                               (.format fmt date)))




                                                                           © 2009 Formos Software Development
Expansions
app/views/index.cml

<html xmlns:c="cascade">
  <c:loop c:source="(range 5 0 -1)" c:value=":i">
    $(env :i) ...
  </c:loop>
</html>




 Output

<html xmlns:c="cascade">
  5 ... 4 ... 3 ... 2 ... 1 ...
</html>




• In text

• In attribute values


                                                    © 2009 Formos Software Development
Fragments can be Templates

                                            A bit awkward ...

  app/views/index.cml
                                                          1
  <c:layout xmlns:c="cascade" c:title='"Current Date"'>

    The current time is:                            4

    <c:format-date c:date="(env :current-time)"/>

  </c:layout>        6




  fragments/layout.cml

                                      2
  <html xmlns:c="cascade">
    <head>
      <title>$(params :title)</title>
    </head>
    <body>
      <h1>$(params :title)</h1>
                           3
        <c:render-body/>


  </html>      5




                                                                © 2009 Formos Software Development
Actions




          © 2009 Formos Software Development
Actions
• Coming Soon! :-)

• Functional:

  •env in (:request, :response, etc.)

  •result:

     •keyword ➠ render this view

     •URL ➠ send redirect for URL

     •false ➠ didn't handle request after all

     •true ➠ sent response directly

                                                © 2009 Formos Software Development
Actions
• Functions to generate callback URLs

  • To an action

  • To a view

• Pass query parameters

• Extra data in path

• Built-in fragments to generate URLs



                                        © 2009 Formos Software Development
URLs
• Actions

  • /action/name

• Views

  • /name

• Configurable?




                   © 2009 Formos Software Development
What's Missing?




                  © 2009 Formos Software Development
Servlet Integration
• Run Cascade as servlet

• Embedded mode: Start Jetty up with Cascade configured




                                                 © 2009 Formos Software Development
Document Generation
• DOCTYPEs not supported yet

• <![CDATA[]]> not supported yet

• Control: HTML(SGML) vs. XML output

• Filtering characters to entities (i.e., < ➠ &lt;)

• Output namespace support




                                                      © 2009 Formos Software Development
Template Features
• Server-side Comments

• Root <c:fragment> element (for templates that render
  multiple elements)

• Better way to pass literal strings as parameters

• Tapestry-style blocks:

  • Encapsulate a section of template as a closure

  • Pass as parameter to a fragment


                                                     © 2009 Formos Software Development
Unimplemented Ideas
• Parallelization

  • Render fragments in parallel across threads

  • Multiple simultaneous database queries

• Pipelines

  • Declarative command chains around views and actions

• Meta-data

  • Declare pipelines, required parameters, etc.

                                                   © 2009 Formos Software Development
(use 'tapestry)
• Libraries of fragments & views
• JAR-packaged resources
• 1st class exception reporting
• JavaScript aggregation / minimization
• Version asset URLs
• Automatic GZIP compression
• Localization
• Live "class" reloading


                                          © 2009 Formos Software Development
Wrap Up




          © 2009 Formos Software Development
http://github.com/hlship/cascade/tree/master




                                               © 2009 Formos Software Development
http://wiki.github.com/hlship/cascade/




                              © 2009 Formos Software Development
Photo Credits
   © 2008 Danny Barron
   http://www.flickr.com/photos/dbarronoss/2454432792/



   © 2006 Chris Walton
   http://www.flickr.com/photos/philocrites/245011706/




                                                        © 2009 Formos Software Development

More Related Content

PPTX
Mule esb
Khan625
 
PPTX
Take Command of WordPress With WP-CLI
Diana Thompson
 
PDF
Tech talk live alfresco web editor [compatibility mode]
Alfresco Software
 
PDF
Alfresco Tech Talk Live-Web Editor - 3.3
quyong2000
 
PPTX
Building and managing java projects with maven part-III
princeirfancivil
 
PPTX
Take Command of WordPress With WP-CLI
Diana Thompson
 
PPTX
Building and Managing Projects with Maven
Khan625
 
PDF
Cfml features modern_coding
ColdFusionConference
 
Mule esb
Khan625
 
Take Command of WordPress With WP-CLI
Diana Thompson
 
Tech talk live alfresco web editor [compatibility mode]
Alfresco Software
 
Alfresco Tech Talk Live-Web Editor - 3.3
quyong2000
 
Building and managing java projects with maven part-III
princeirfancivil
 
Take Command of WordPress With WP-CLI
Diana Thompson
 
Building and Managing Projects with Maven
Khan625
 
Cfml features modern_coding
ColdFusionConference
 

What's hot (20)

PDF
Hidden Gems in ColdFusion 2016
ColdFusionConference
 
PPT
Introduction to Alfresco Surf Platform
Alfresco Software
 
PPTX
ColdFusion Fw1 (FrameWork1) introduction
SaravanaMuthu Jayaraj
 
PDF
Stress Free Deployment - Confoo 2011
Bachkoutou Toutou
 
PPT
Restful API's with ColdFusion
ColdFusionConference
 
PDF
Merb
tohchye
 
PDF
WP-CLI - A Good Friend of Developer
Chandra Patel
 
PPTX
10 Reasons ColdFusion PDFs should rule the world
ColdFusionConference
 
PDF
CUST-2 New Client Configuration & Extension Points in Share
Alfresco Software
 
PDF
CUST-10 Customizing the Upload File(s) dialog in Alfresco Share
Alfresco Software
 
PDF
This is how we REST
ColdFusionConference
 
PDF
ITB2016 - Building ColdFusion RESTFul Services
Ortus Solutions, Corp
 
PPTX
Take Command of WordPress With WP-CLI
Diana Thompson
 
PDF
Railswaycon 2009 - Summary
daniel.mattes
 
PPTX
Unpacking .NET Core | EastBanc Technologies
EastBanc Tachnologies
 
PDF
Keeping Local, Staging & Production Sites In Sync
David Wang
 
PDF
BP-7 Share Customization Best Practices
Alfresco Software
 
PDF
Developing html5 mobile applications using cold fusion 11
ColdFusionConference
 
PPT
Integration with Mule
Ryan Hoegg
 
PDF
Bosh Links Visualization
Saman Alvi
 
Hidden Gems in ColdFusion 2016
ColdFusionConference
 
Introduction to Alfresco Surf Platform
Alfresco Software
 
ColdFusion Fw1 (FrameWork1) introduction
SaravanaMuthu Jayaraj
 
Stress Free Deployment - Confoo 2011
Bachkoutou Toutou
 
Restful API's with ColdFusion
ColdFusionConference
 
Merb
tohchye
 
WP-CLI - A Good Friend of Developer
Chandra Patel
 
10 Reasons ColdFusion PDFs should rule the world
ColdFusionConference
 
CUST-2 New Client Configuration & Extension Points in Share
Alfresco Software
 
CUST-10 Customizing the Upload File(s) dialog in Alfresco Share
Alfresco Software
 
This is how we REST
ColdFusionConference
 
ITB2016 - Building ColdFusion RESTFul Services
Ortus Solutions, Corp
 
Take Command of WordPress With WP-CLI
Diana Thompson
 
Railswaycon 2009 - Summary
daniel.mattes
 
Unpacking .NET Core | EastBanc Technologies
EastBanc Tachnologies
 
Keeping Local, Staging & Production Sites In Sync
David Wang
 
BP-7 Share Customization Best Practices
Alfresco Software
 
Developing html5 mobile applications using cold fusion 11
ColdFusionConference
 
Integration with Mule
Ryan Hoegg
 
Bosh Links Visualization
Saman Alvi
 
Ad

Similar to Cascade (20)

PDF
Introduction to Xamarin.Forms
Brad Pillow
 
PDF
Optimizing and Extending Xamarin.Forms iOS, Android, and UWP Apps
James Montemagno
 
PDF
Rock Solid Deployment of Web Applications
Pablo Godel
 
PPTX
Alfresco Development Framework Basic
Mario Romano
 
PDF
Javascript Konsole für Entwicklung und Administration
Alfresco by fme AG
 
PDF
Leveraging the Power of Custom Elements in Gutenberg
Felix Arntz
 
PDF
Web, Native iOS and Native Android with One Ember.js App
FITC
 
PPTX
Web Unleashed Toronto 2015: Hybrid Mobile Apps with Ember.js
Alex Blom
 
PDF
GDG Addis - An Introduction to Django and App Engine
Yared Ayalew
 
PDF
Phoenix for Rails Devs
Diacode
 
PDF
Stencil the time for vanilla web components has arrived
Gil Fink
 
PDF
The Mobile Web - HTML5 on mobile devices
Wesley Hales
 
PDF
The Dojo Build System
klipstein
 
PDF
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Sadaaki HIRAI
 
PDF
Workshop 16: EmberJS Parte I
Visual Engineering
 
PPT
Maven introduction in Mule
Shahid Shaik
 
PDF
IPhone Web Development With Grails from CodeMash 2009
Christopher Judd
 
PPTX
Camel as a_glue
Andriy Andrunevchyn
 
PDF
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 
Introduction to Xamarin.Forms
Brad Pillow
 
Optimizing and Extending Xamarin.Forms iOS, Android, and UWP Apps
James Montemagno
 
Rock Solid Deployment of Web Applications
Pablo Godel
 
Alfresco Development Framework Basic
Mario Romano
 
Javascript Konsole für Entwicklung und Administration
Alfresco by fme AG
 
Leveraging the Power of Custom Elements in Gutenberg
Felix Arntz
 
Web, Native iOS and Native Android with One Ember.js App
FITC
 
Web Unleashed Toronto 2015: Hybrid Mobile Apps with Ember.js
Alex Blom
 
GDG Addis - An Introduction to Django and App Engine
Yared Ayalew
 
Phoenix for Rails Devs
Diacode
 
Stencil the time for vanilla web components has arrived
Gil Fink
 
The Mobile Web - HTML5 on mobile devices
Wesley Hales
 
The Dojo Build System
klipstein
 
Familiar HTML5 - 事例とサンプルコードから学ぶ 身近で普通に使わているHTML5
Sadaaki HIRAI
 
Workshop 16: EmberJS Parte I
Visual Engineering
 
Maven introduction in Mule
Shahid Shaik
 
IPhone Web Development With Grails from CodeMash 2009
Christopher Judd
 
Camel as a_glue
Andriy Andrunevchyn
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 
Ad

More from Howard Lewis Ship (17)

PDF
Testing Web Applications with GEB
Howard Lewis Ship
 
PDF
Spock: A Highly Logical Way To Test
Howard Lewis Ship
 
PDF
Backbone.js: Run your Application Inside The Browser
Howard Lewis Ship
 
PDF
Modern Application Foundations: Underscore and Twitter Bootstrap
Howard Lewis Ship
 
KEY
Have Your Cake and Eat It Too: Meta-Programming Techniques for Java
Howard Lewis Ship
 
PDF
Clojure: Towards The Essence Of Programming (What's Next? Conference, May 2011)
Howard Lewis Ship
 
PDF
Arduino: Open Source Hardware Hacking from the Software Nerd Perspective
Howard Lewis Ship
 
PDF
Practical Clojure Programming
Howard Lewis Ship
 
PDF
Clojure: Towards The Essence of Programming
Howard Lewis Ship
 
PDF
Codemash-Clojure.pdf
Howard Lewis Ship
 
PDF
Codemash-Tapestry.pdf
Howard Lewis Ship
 
PDF
Tapestry 5: Java Power, Scripting Ease
Howard Lewis Ship
 
PDF
Brew up a Rich Web Application with Cappuccino
Howard Lewis Ship
 
PDF
Clojure Deep Dive
Howard Lewis Ship
 
PDF
Clojure: Functional Concurrency for the JVM (presented at OSCON)
Howard Lewis Ship
 
PDF
Tapestry: State of the Union
Howard Lewis Ship
 
ZIP
Clojure: Functional Concurrency for the JVM (presented at Open Source Bridge)
Howard Lewis Ship
 
Testing Web Applications with GEB
Howard Lewis Ship
 
Spock: A Highly Logical Way To Test
Howard Lewis Ship
 
Backbone.js: Run your Application Inside The Browser
Howard Lewis Ship
 
Modern Application Foundations: Underscore and Twitter Bootstrap
Howard Lewis Ship
 
Have Your Cake and Eat It Too: Meta-Programming Techniques for Java
Howard Lewis Ship
 
Clojure: Towards The Essence Of Programming (What's Next? Conference, May 2011)
Howard Lewis Ship
 
Arduino: Open Source Hardware Hacking from the Software Nerd Perspective
Howard Lewis Ship
 
Practical Clojure Programming
Howard Lewis Ship
 
Clojure: Towards The Essence of Programming
Howard Lewis Ship
 
Codemash-Clojure.pdf
Howard Lewis Ship
 
Codemash-Tapestry.pdf
Howard Lewis Ship
 
Tapestry 5: Java Power, Scripting Ease
Howard Lewis Ship
 
Brew up a Rich Web Application with Cappuccino
Howard Lewis Ship
 
Clojure Deep Dive
Howard Lewis Ship
 
Clojure: Functional Concurrency for the JVM (presented at OSCON)
Howard Lewis Ship
 
Tapestry: State of the Union
Howard Lewis Ship
 
Clojure: Functional Concurrency for the JVM (presented at Open Source Bridge)
Howard Lewis Ship
 

Recently uploaded (20)

PDF
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
PDF
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
PDF
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
PPTX
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
PDF
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
PDF
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
PPTX
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
PPTX
Agile Chennai 18-19 July 2025 Ideathon | AI Powered Microfinance Literacy Gui...
AgileNetwork
 
PPTX
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
PDF
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
PDF
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
 
PDF
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
PDF
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
PDF
GDG Cloud Munich - Intro - Luiz Carneiro - #BuildWithAI - July - Abdel.pdf
Luiz Carneiro
 
PPTX
Simple and concise overview about Quantum computing..pptx
mughal641
 
PPTX
OA presentation.pptx OA presentation.pptx
pateldhruv002338
 
PDF
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
PPTX
Introduction to Flutter by Ayush Desai.pptx
ayushdesai204
 
PDF
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
PPTX
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
Agile Chennai 18-19 July 2025 Ideathon | AI Powered Microfinance Literacy Gui...
AgileNetwork
 
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
 
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
GDG Cloud Munich - Intro - Luiz Carneiro - #BuildWithAI - July - Abdel.pdf
Luiz Carneiro
 
Simple and concise overview about Quantum computing..pptx
mughal641
 
OA presentation.pptx OA presentation.pptx
pateldhruv002338
 
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
Introduction to Flutter by Ayush Desai.pptx
ayushdesai204
 
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
cloud computing vai.pptx for the project
vaibhavdobariyal79
 

Cascade

  • 1. Cascade Howard M. Lewis Ship Director of Open Source Technology, Formos [email protected] © 2009 Formos Software Development
  • 2. What is Cascade? © 2009 Formos Software Development
  • 3. Cascade Web Framework • Pure Clojure • Functional • Share Nothing • Action Oriented (not component based) • Tapestry-style Templates • Status: alpha, incomplete © 2009 Formos Software Development
  • 4. Views and Fragments app/views/index.cml <html xmlns:c="cascade"> <body> The current time is: <c:format-date c:date="(env :current-time)"/> </body> </html> app/fragments.clj (ns app.fragments (:import (java.util Date) (java.text DateFormat))) (defn format-date [env params] (let [#^Date date (params :date) #^DateFormat fmt (DateFormat/getDateTimeInstance DateFormat/MEDIUM DateFormat/MEDIUM)] (.format fmt date))) © 2009 Formos Software Development
  • 5. Expansions app/views/index.cml <html xmlns:c="cascade"> <c:loop c:source="(range 5 0 -1)" c:value=":i"> $(env :i) ... </c:loop> </html> Output <html xmlns:c="cascade"> 5 ... 4 ... 3 ... 2 ... 1 ... </html> • In text • In attribute values © 2009 Formos Software Development
  • 6. Fragments can be Templates A bit awkward ... app/views/index.cml 1 <c:layout xmlns:c="cascade" c:title='"Current Date"'> The current time is: 4 <c:format-date c:date="(env :current-time)"/> </c:layout> 6 fragments/layout.cml 2 <html xmlns:c="cascade"> <head> <title>$(params :title)</title> </head> <body> <h1>$(params :title)</h1> 3 <c:render-body/> </html> 5 © 2009 Formos Software Development
  • 7. Actions © 2009 Formos Software Development
  • 8. Actions • Coming Soon! :-) • Functional: •env in (:request, :response, etc.) •result: •keyword ➠ render this view •URL ➠ send redirect for URL •false ➠ didn't handle request after all •true ➠ sent response directly © 2009 Formos Software Development
  • 9. Actions • Functions to generate callback URLs • To an action • To a view • Pass query parameters • Extra data in path • Built-in fragments to generate URLs © 2009 Formos Software Development
  • 10. URLs • Actions • /action/name • Views • /name • Configurable? © 2009 Formos Software Development
  • 11. What's Missing? © 2009 Formos Software Development
  • 12. Servlet Integration • Run Cascade as servlet • Embedded mode: Start Jetty up with Cascade configured © 2009 Formos Software Development
  • 13. Document Generation • DOCTYPEs not supported yet • <![CDATA[]]> not supported yet • Control: HTML(SGML) vs. XML output • Filtering characters to entities (i.e., < ➠ &lt;) • Output namespace support © 2009 Formos Software Development
  • 14. Template Features • Server-side Comments • Root <c:fragment> element (for templates that render multiple elements) • Better way to pass literal strings as parameters • Tapestry-style blocks: • Encapsulate a section of template as a closure • Pass as parameter to a fragment © 2009 Formos Software Development
  • 15. Unimplemented Ideas • Parallelization • Render fragments in parallel across threads • Multiple simultaneous database queries • Pipelines • Declarative command chains around views and actions • Meta-data • Declare pipelines, required parameters, etc. © 2009 Formos Software Development
  • 16. (use 'tapestry) • Libraries of fragments & views • JAR-packaged resources • 1st class exception reporting • JavaScript aggregation / minimization • Version asset URLs • Automatic GZIP compression • Localization • Live "class" reloading © 2009 Formos Software Development
  • 17. Wrap Up © 2009 Formos Software Development
  • 20. Photo Credits © 2008 Danny Barron http://www.flickr.com/photos/dbarronoss/2454432792/ © 2006 Chris Walton http://www.flickr.com/photos/philocrites/245011706/ © 2009 Formos Software Development