SlideShare a Scribd company logo
1 of 44
AD-1380: A Beard, An App, A Blender
Eric McCormick
Who?
Who is talking?
• Eric McCormick
• developer
• husband
• father
• veteran
• former EMT
• blogger
• …more than I have space for
edm00se.io
@edm00se
Who, continued
• Web Developer at
▪ a fourth-generation, family-owned professional
construction services firm, in operation since 1889
• my focus usually revolves around:
▪ document control
▪ productivity and performance metrics
▪ system integration
▪ process automation
Who's This Session For, and Why?
• Developers, who have a passion for
▪ application structure, standards, and maintenance
▪ documentation
▪ testing
▪ automation
• Non-Developers (development-adjacent roles)
▪ who want a developer's take on the above
What's the Session?
AD-1380: A Beard, An App, A Blender…
• …one developer’s take on building applications with
Domino/XPages
• should probably be …one developer’s take on expanding how
we can build applications with Domino/XPages
Session Abstract
Building applications with Domino/XPages opens a number of doors.
Choosing the right path is what becomes hard. This is a session on one
developer's take on the way we can structure our applications to get the
best of the Domino/XPages platform in addition to all the modern, front-
end tooling that the rest of the industry is using to great advantage. This
session will cover an approach to app dev via application segregation
mechanics, providing the data via HttpServlets to provide a RESTful
JSON API, and a UI-layer that automates the majority of concerns via a
JS MV* framework. Front-end tooling via Yeoman, Grunt, and Bower
(and/or others) can aid in our development and testing, back-end mocks
for making contracted work easier, and other techniques.
Ms. America Statement
1. A harmonious development environment for myself and any
development staff at my company
2. A unified theory practice of development, for consistent cross-
platform and cross-app development behavior
3. Making all application logic and data consistently accessible
across separate, but organic, systems
4. Making contracted development work more easily performed
5. Automating everything I can
Alternative Session Title
Eric McCormick
and the Quest to Develop
Amazing Applications
My Personal Goals (a.k.a.- my ‘quest’)
• Use the best tools available to aid my development workflow
• Automate all tasks I can, for consistency, ease, and speed
• Enforce coding, documentation, and testing standards at each
level of the application
• All of which feeds into my ultimate goal of developing the best
apps I can, by enabling the developer (that's me!)
I Want It All
Session Overview
Session Content
• Application Structure
• Segregated back- and front-ends
• Services layering concepts (by nature and convention)
• Back-End
• Beans, Controllers, and M-V-C advantages
• RESTful API benefits, via HTTPServlets
• Front-End
• M-V-* and JS frameworks
• Advanced tooling for better/faster/stronger development
Concerning Application
Structure
Application Structure?
Segregation of Application Into Service Layers
• a decoupling of the layers of your application into micro-
services*
• separates the primary application logic into its own classes
• keeps the UI logic all at the UI level
• keeps styling and presentation out of the logic
• keep all your code readable by not just yourself, but others
Application Structure? (pt.2)
Application Layers (as I see them)
• data store / DB (NSF)
• primary application classes (server elements for data objects,
controllers for behavior, server actions)
• expose application via servlets (RESTful or otherwise), XPages
bindings (EL to bean, or data object)
• provides interface to UI layer (where the client-side logic lives)
Application Structure? (pt.3)
• we’re already starting to talk in terms of what we will require for an
application’s
• data
• primary business logic (which wrapped with the database
creates the data service)
• creating an API, for how a user or front-end can interface with
our service
• all of this makes our choice of front-end, be it an XPages app with
managed bean or object data source (xe:objectData) or a non-
XPages front-end immaterial far less consequential
Advantages and Disadvantages
Advantages
• consistency in an app and
across apps
• normalizing of development
patterns
• easier to:
• support/maintain
• document
• test
Disadvantages
• time
• thought
• willingness to attempt
• management sign-off
High Level Overview
Service Layers
• keeps:
• data
• logic
• client interface
• all nice and tidy, this benefits in the forms of:
• organization
• maintenance
• documentation (let’s face it, a JavaDoc is better than no
doc)
Stay With Me Now
Application Structure Related References
• Jesse Gallagher
blog: https://frostillic.us
• Dec’s Dom Blog
blog: http://www.qtzar.com/
• Pipalia
blog: http://www.pipalia.co.uk/blog/
• John Daalsgard
blog: https://www.dalsgaard-data.eu/blog/
• Paul S. Withers
http://www.intec.co.uk/blog/
Amongst many others.
Concerning the App’s Back-End
SSJS and Java
SSJS
• was meant to help bring in
gun shy developers
• com.ibm.jscript isn’t SSJS
like other (more popular)
SSJS implementations
• DDE often misses complex
context assistance as JS is
not a strongly type’d
language
Java
• is a strong type’d language
• “no” (normal API induced)
runtime exceptions
• is (more) extensible
• more industry norm
• (DD)Eclipse “does Java well”
A Horrific Pitfall
Spaghetti Code™
• un-supportable applications that have logic strewn about
through design/markup (where is the code that’s breaking?)
• overly large SSJS script libraries that add runtime parse bloat
• a lack of concise organization which any larger app needs
SSJS is a crutch (at least for non-trivial / non-RAD applications)
It works, but the overarching answer is to use the Java of XPages
for better performance, structure, and sanity.
Making Sense of the Back-End pt.1
Data as a resource…
• how should the data:
• validate
• at the db / data object level
• at the ui level
• integrate
• methods of exposure (collections, records, actions)
• with other systems
Making Sense of the Back-End pt.2
Use the best tools at your disposal!
• OpenNTF Domino API
• Git (or Mercurial)
• Swiper (to eliminate extraneous output to ODP)
• Apache Commons libraries (e.g.- CollectionUtils, validators)
• Google GSON
• Barista (for bean fans)
• Jesse’s Controllers (or whole frostillicus framework)
Java Policy
*Certain Java libraries won’t run from an NSF container (versus
OSGi plug-in) without the java.pol(icy) having additional
permissions being granted.
Setting the grant block for all permission can sound “scary”, but
really only means that you’re trusting your NSF contained Java
code to not bork your server via the class loader involved.
Back-End Components Demo (#1)
Concerning the App’s Front-End
Fasten Your Seatbelt
M-V-* and JS Frameworks
• an explosion of frameworks and libraries that can help make our
development easier
• frameworks adopting MVC, MVM, MVVM, MV* approaches to
automate the data bindings and logic
• a veritable potpourri of options and many developers have quite
different takes on which framework to use and why
• this can be highly opinionated, even heated
Advanced Tooling
• dependency management for the front-end
• scaffolding repeatable parts of development
• task runners to provision:
• distributable / deployment builds
• complete with minification/uglification
• automatic reload during development
• unit / e2e testing
• publishing documentation
In other words…
If you can, automate it!
Front-End Components Demo (#2)
Opportunity Demo (#3)
Opportunity Demo (#4)
Q&A
Summary
• we’ve covered the components of application structure options and
practices to build better applications through segregated service
layers
• …practices and techniques to automate and expedite our data
modeling and delivery of our data service with business logic,
exposing it via RESTful API (or others)
• …front-end frameworks for better UI-layers in applications
• …advanced tooling which can help aid in creating those advanced
front-ends and provide a completed picture of testing,
documentation, and deployment beyond the back-end
• we did not cover how to grow a beard
Let’s Build Happy Little Apps
Thank You
Acknowledgements and Disclaimers
Availability. References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates.
The workshops, sessions and materials have been prepared by IBM or the session speakers and reflect their own views. They are provided for informational
purposes only, and are neither intended to, nor shall have the effect of being, legal or other guidance or advice to any participant. While efforts were made to
verify the completeness and accuracy of the information contained in this presentation, it is provided AS-IS without warranty of any kind, express or implied. IBM
shall not be responsible for any damages arising out of the use of, or otherwise related to, this presentation or any other materials. Nothing contained in this
presentation is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and
conditions of the applicable license agreement governing the use of IBM software.
All customer examples described are presented as illustrations of how those customers have used IBM products and the results they may have achieved. Actual
environmental costs and performance characteristics may vary by customer. Nothing contained in these materials is intended to, nor shall have the effect of,
stating or implying that any activities undertaken by you will result in any specific sales, revenue growth or other results.
Acknowledgements and Disclaimers cont.
© Copyright IBM Corporation 2015. All rights reserved.
• U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
• IBM, the IBM logo, ibm.com, IBM Bluemix, IBM Domino, and IBM XPages are trademarks or registered trademarks of International Business Machines
Corporation in the United States, other countries, or both. If these and other IBM trademarked terms are marked on their first occurrence in this information with
a trademark symbol (® or ™), these symbols indicate U.S. registered or common law trademarks owned by IBM at the time this information was published.
Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at “Copyright
and trademark information” at www.ibm.com/legal/copytrade.shtml
Monty Python and the Holy Grail and its images and likenesses are intellectual property (trademarked or otherwise) of the Monty Python comedy group (a.k.a.-
Monty Python’s Flying Circus).
LEGO Deadpool and its character’s likeness is trademarked and owned by Marvel and LEGO.
Range is property of Paramount Pictures and Nickelodeon Movies.
The IT Crowd is property of Talkback Thames and Retort, as aired on BBC.
The Joy of Painting, with artist Bob Ross, is property of Bob Ross and BRI Productions.
Other company, product, or service names may be trademarks or service marks of others.

More Related Content

What's hot

PowerShell for the Anxious ITPro
PowerShell for the Anxious ITProPowerShell for the Anxious ITPro
PowerShell for the Anxious ITPro
Jason Himmelstein
 

What's hot (20)

Optimus XPages: An Explosion of Techniques and Best Practices
Optimus XPages: An Explosion of Techniques and Best PracticesOptimus XPages: An Explosion of Techniques and Best Practices
Optimus XPages: An Explosion of Techniques and Best Practices
 
Ask the XPages Experts
Ask the XPages ExpertsAsk the XPages Experts
Ask the XPages Experts
 
XPages Application Layout Control - TLCC March, 2014 Webinar
XPages Application Layout Control - TLCC March, 2014 WebinarXPages Application Layout Control - TLCC March, 2014 Webinar
XPages Application Layout Control - TLCC March, 2014 Webinar
 
IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8
IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8
IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8
 
Anatomy of an HTML 5 mobile web app
Anatomy of an HTML 5 mobile web app Anatomy of an HTML 5 mobile web app
Anatomy of an HTML 5 mobile web app
 
IBM Connect 2017: Back from the Dead: When Bad Code Kills a Good Server
IBM Connect 2017: Back from the Dead: When Bad Code Kills a Good ServerIBM Connect 2017: Back from the Dead: When Bad Code Kills a Good Server
IBM Connect 2017: Back from the Dead: When Bad Code Kills a Good Server
 
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...
 
Tip from ConnectED 2015: Using Bootstrap and Ratchet frameworks in Domino mob...
Tip from ConnectED 2015: Using Bootstrap and Ratchet frameworks in Domino mob...Tip from ConnectED 2015: Using Bootstrap and Ratchet frameworks in Domino mob...
Tip from ConnectED 2015: Using Bootstrap and Ratchet frameworks in Domino mob...
 
SmartNSF - 100% Smart - and in Color!
SmartNSF - 100% Smart - and in Color!SmartNSF - 100% Smart - and in Color!
SmartNSF - 100% Smart - and in Color!
 
An Introduction to Web Components
An Introduction to Web ComponentsAn Introduction to Web Components
An Introduction to Web Components
 
[Delimon] Unraveling Teams vs Skype for Business
[Delimon] Unraveling Teams vs Skype for Business[Delimon] Unraveling Teams vs Skype for Business
[Delimon] Unraveling Teams vs Skype for Business
 
TYPO3 5.0 Experience Concept
TYPO3 5.0 Experience ConceptTYPO3 5.0 Experience Concept
TYPO3 5.0 Experience Concept
 
HTML5 or Android for Mobile Development?
HTML5 or Android for Mobile Development?HTML5 or Android for Mobile Development?
HTML5 or Android for Mobile Development?
 
MWLUG - Universal Java
MWLUG  -  Universal JavaMWLUG  -  Universal Java
MWLUG - Universal Java
 
DIWD 2011
DIWD 2011DIWD 2011
DIWD 2011
 
ECS19 - Michael Noel - Replacing Third-Party Solutions with Office 365 Tools
ECS19 - Michael Noel - Replacing Third-Party Solutions with Office 365 ToolsECS19 - Michael Noel - Replacing Third-Party Solutions with Office 365 Tools
ECS19 - Michael Noel - Replacing Third-Party Solutions with Office 365 Tools
 
Extreme Web Performance for Mobile Devices - Velocity NY
Extreme Web Performance for Mobile Devices - Velocity NYExtreme Web Performance for Mobile Devices - Velocity NY
Extreme Web Performance for Mobile Devices - Velocity NY
 
Creating an Effective Mobile API
Creating an Effective Mobile API Creating an Effective Mobile API
Creating an Effective Mobile API
 
Naked and afraid Offline Mobile
Naked and afraid Offline MobileNaked and afraid Offline Mobile
Naked and afraid Offline Mobile
 
PowerShell for the Anxious ITPro
PowerShell for the Anxious ITProPowerShell for the Anxious ITPro
PowerShell for the Anxious ITPro
 

Viewers also liked

Speed geeking-lotusscript
Speed geeking-lotusscriptSpeed geeking-lotusscript
Speed geeking-lotusscript
Bill Buchan
 
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpagesD8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
CERTyou Formation
 

Viewers also liked (7)

Speed geeking-lotusscript
Speed geeking-lotusscriptSpeed geeking-lotusscript
Speed geeking-lotusscript
 
What the App? : A Modernization Strategy for Your Business Applications
What the App? : A Modernization Strategy for Your Business ApplicationsWhat the App? : A Modernization Strategy for Your Business Applications
What the App? : A Modernization Strategy for Your Business Applications
 
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...
XPages and jQuery DataTables: Simplifying View Creation while Maximizing Func...
 
IBM Connect 2016 - AD1548 - Building Responsive XPages Applications
IBM Connect 2016 - AD1548 - Building Responsive XPages ApplicationsIBM Connect 2016 - AD1548 - Building Responsive XPages Applications
IBM Connect 2016 - AD1548 - Building Responsive XPages Applications
 
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpagesD8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
D8 l55g formation-introduction-a-ibm-lotus-domino-8-5-xpages
 
MWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTablesMWLUG 2016 : AD117 : Xpages & jQuery DataTables
MWLUG 2016 : AD117 : Xpages & jQuery DataTables
 
Connect 2016-Move Your XPages Applications to the Fast Lane
Connect 2016-Move Your XPages Applications to the Fast LaneConnect 2016-Move Your XPages Applications to the Fast Lane
Connect 2016-Move Your XPages Applications to the Fast Lane
 

Similar to A Beard, An App, A Blender

Property dealing , A .net project
Property dealing , A .net projectProperty dealing , A .net project
Property dealing , A .net project
Anjali Kamboj
 
Testing quick interview preparation
Testing quick interview preparationTesting quick interview preparation
Testing quick interview preparation
testing1001
 
Sateesh DCTM 5+ Years
Sateesh DCTM 5+ YearsSateesh DCTM 5+ Years
Sateesh DCTM 5+ Years
satish kumar
 

Similar to A Beard, An App, A Blender (20)

Salesforce Multitenant Architecture: How We Do the Magic We Do
Salesforce Multitenant Architecture: How We Do the Magic We DoSalesforce Multitenant Architecture: How We Do the Magic We Do
Salesforce Multitenant Architecture: How We Do the Magic We Do
 
Anupam chaturvedi resume latest
Anupam chaturvedi resume  latestAnupam chaturvedi resume  latest
Anupam chaturvedi resume latest
 
OOSE UNIT-1.pdf
OOSE UNIT-1.pdfOOSE UNIT-1.pdf
OOSE UNIT-1.pdf
 
Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...
Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...
Building Information Systems using Event Modeling (Bobby Calderwood, Evident ...
 
Introduction To Software Concepts Unit 1 & 2
Introduction To Software Concepts Unit 1 & 2Introduction To Software Concepts Unit 1 & 2
Introduction To Software Concepts Unit 1 & 2
 
Designing and Implementing Information Systems with Event Modeling, Bobby Cal...
Designing and Implementing Information Systems with Event Modeling, Bobby Cal...Designing and Implementing Information Systems with Event Modeling, Bobby Cal...
Designing and Implementing Information Systems with Event Modeling, Bobby Cal...
 
Sai_Resume
Sai_ResumeSai_Resume
Sai_Resume
 
ALM with TFS: From the Drawing Board to the Cloud
ALM with TFS: From the Drawing Board to the CloudALM with TFS: From the Drawing Board to the Cloud
ALM with TFS: From the Drawing Board to the Cloud
 
Webinar: Ten Ways to Enhance Your Salesforce.com Application in 2013
Webinar: Ten Ways to Enhance Your Salesforce.com Application in 2013Webinar: Ten Ways to Enhance Your Salesforce.com Application in 2013
Webinar: Ten Ways to Enhance Your Salesforce.com Application in 2013
 
Arnab Chakraborty CV
Arnab Chakraborty CVArnab Chakraborty CV
Arnab Chakraborty CV
 
Property dealing , A .net project
Property dealing , A .net projectProperty dealing , A .net project
Property dealing , A .net project
 
SharePoint as a Business Platform Why, What and How? – No Code
SharePoint as a Business Platform Why, What and How? – No CodeSharePoint as a Business Platform Why, What and How? – No Code
SharePoint as a Business Platform Why, What and How? – No Code
 
Continuous Performance Testing and Monitoring in Agile Development
Continuous Performance Testing and Monitoring in Agile DevelopmentContinuous Performance Testing and Monitoring in Agile Development
Continuous Performance Testing and Monitoring in Agile Development
 
Testing quick interview preparation
Testing quick interview preparationTesting quick interview preparation
Testing quick interview preparation
 
DevOps101 (version 2)
DevOps101 (version 2)DevOps101 (version 2)
DevOps101 (version 2)
 
Clean architecture with asp.net core
Clean architecture with asp.net coreClean architecture with asp.net core
Clean architecture with asp.net core
 
Critical Capabilities to Shifting Left the Right Way
Critical Capabilities to Shifting Left the Right WayCritical Capabilities to Shifting Left the Right Way
Critical Capabilities to Shifting Left the Right Way
 
Encontrando la Aguja en el Rendimiento de Aplicaciones
Encontrando la Aguja en el Rendimiento de AplicacionesEncontrando la Aguja en el Rendimiento de Aplicaciones
Encontrando la Aguja en el Rendimiento de Aplicaciones
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Sateesh DCTM 5+ Years
Sateesh DCTM 5+ YearsSateesh DCTM 5+ Years
Sateesh DCTM 5+ Years
 

Recently uploaded

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Recently uploaded (20)

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 

A Beard, An App, A Blender

  • 1. AD-1380: A Beard, An App, A Blender Eric McCormick
  • 3. Who is talking? • Eric McCormick • developer • husband • father • veteran • former EMT • blogger • …more than I have space for edm00se.io @edm00se
  • 4. Who, continued • Web Developer at ▪ a fourth-generation, family-owned professional construction services firm, in operation since 1889 • my focus usually revolves around: ▪ document control ▪ productivity and performance metrics ▪ system integration ▪ process automation
  • 5. Who's This Session For, and Why? • Developers, who have a passion for ▪ application structure, standards, and maintenance ▪ documentation ▪ testing ▪ automation • Non-Developers (development-adjacent roles) ▪ who want a developer's take on the above
  • 7. AD-1380: A Beard, An App, A Blender… • …one developer’s take on building applications with Domino/XPages • should probably be …one developer’s take on expanding how we can build applications with Domino/XPages
  • 8. Session Abstract Building applications with Domino/XPages opens a number of doors. Choosing the right path is what becomes hard. This is a session on one developer's take on the way we can structure our applications to get the best of the Domino/XPages platform in addition to all the modern, front- end tooling that the rest of the industry is using to great advantage. This session will cover an approach to app dev via application segregation mechanics, providing the data via HttpServlets to provide a RESTful JSON API, and a UI-layer that automates the majority of concerns via a JS MV* framework. Front-end tooling via Yeoman, Grunt, and Bower (and/or others) can aid in our development and testing, back-end mocks for making contracted work easier, and other techniques.
  • 9. Ms. America Statement 1. A harmonious development environment for myself and any development staff at my company 2. A unified theory practice of development, for consistent cross- platform and cross-app development behavior 3. Making all application logic and data consistently accessible across separate, but organic, systems 4. Making contracted development work more easily performed 5. Automating everything I can
  • 10. Alternative Session Title Eric McCormick and the Quest to Develop Amazing Applications
  • 11. My Personal Goals (a.k.a.- my ‘quest’) • Use the best tools available to aid my development workflow • Automate all tasks I can, for consistency, ease, and speed • Enforce coding, documentation, and testing standards at each level of the application • All of which feeds into my ultimate goal of developing the best apps I can, by enabling the developer (that's me!)
  • 12. I Want It All
  • 14. Session Content • Application Structure • Segregated back- and front-ends • Services layering concepts (by nature and convention) • Back-End • Beans, Controllers, and M-V-C advantages • RESTful API benefits, via HTTPServlets • Front-End • M-V-* and JS frameworks • Advanced tooling for better/faster/stronger development
  • 16. Application Structure? Segregation of Application Into Service Layers • a decoupling of the layers of your application into micro- services* • separates the primary application logic into its own classes • keeps the UI logic all at the UI level • keeps styling and presentation out of the logic • keep all your code readable by not just yourself, but others
  • 17. Application Structure? (pt.2) Application Layers (as I see them) • data store / DB (NSF) • primary application classes (server elements for data objects, controllers for behavior, server actions) • expose application via servlets (RESTful or otherwise), XPages bindings (EL to bean, or data object) • provides interface to UI layer (where the client-side logic lives)
  • 18. Application Structure? (pt.3) • we’re already starting to talk in terms of what we will require for an application’s • data • primary business logic (which wrapped with the database creates the data service) • creating an API, for how a user or front-end can interface with our service • all of this makes our choice of front-end, be it an XPages app with managed bean or object data source (xe:objectData) or a non- XPages front-end immaterial far less consequential
  • 19. Advantages and Disadvantages Advantages • consistency in an app and across apps • normalizing of development patterns • easier to: • support/maintain • document • test Disadvantages • time • thought • willingness to attempt • management sign-off
  • 21. Service Layers • keeps: • data • logic • client interface • all nice and tidy, this benefits in the forms of: • organization • maintenance • documentation (let’s face it, a JavaDoc is better than no doc)
  • 23. Application Structure Related References • Jesse Gallagher blog: https://frostillic.us • Dec’s Dom Blog blog: http://www.qtzar.com/ • Pipalia blog: http://www.pipalia.co.uk/blog/ • John Daalsgard blog: https://www.dalsgaard-data.eu/blog/ • Paul S. Withers http://www.intec.co.uk/blog/ Amongst many others.
  • 25. SSJS and Java SSJS • was meant to help bring in gun shy developers • com.ibm.jscript isn’t SSJS like other (more popular) SSJS implementations • DDE often misses complex context assistance as JS is not a strongly type’d language Java • is a strong type’d language • “no” (normal API induced) runtime exceptions • is (more) extensible • more industry norm • (DD)Eclipse “does Java well”
  • 26. A Horrific Pitfall Spaghetti Code™ • un-supportable applications that have logic strewn about through design/markup (where is the code that’s breaking?) • overly large SSJS script libraries that add runtime parse bloat • a lack of concise organization which any larger app needs SSJS is a crutch (at least for non-trivial / non-RAD applications) It works, but the overarching answer is to use the Java of XPages for better performance, structure, and sanity.
  • 27. Making Sense of the Back-End pt.1 Data as a resource… • how should the data: • validate • at the db / data object level • at the ui level • integrate • methods of exposure (collections, records, actions) • with other systems
  • 28. Making Sense of the Back-End pt.2 Use the best tools at your disposal! • OpenNTF Domino API • Git (or Mercurial) • Swiper (to eliminate extraneous output to ODP) • Apache Commons libraries (e.g.- CollectionUtils, validators) • Google GSON • Barista (for bean fans) • Jesse’s Controllers (or whole frostillicus framework)
  • 29. Java Policy *Certain Java libraries won’t run from an NSF container (versus OSGi plug-in) without the java.pol(icy) having additional permissions being granted. Setting the grant block for all permission can sound “scary”, but really only means that you’re trusting your NSF contained Java code to not bork your server via the class loader involved.
  • 33. M-V-* and JS Frameworks • an explosion of frameworks and libraries that can help make our development easier • frameworks adopting MVC, MVM, MVVM, MV* approaches to automate the data bindings and logic • a veritable potpourri of options and many developers have quite different takes on which framework to use and why • this can be highly opinionated, even heated
  • 34. Advanced Tooling • dependency management for the front-end • scaffolding repeatable parts of development • task runners to provision: • distributable / deployment builds • complete with minification/uglification • automatic reload during development • unit / e2e testing • publishing documentation
  • 35. In other words… If you can, automate it!
  • 39. Q&A
  • 40. Summary • we’ve covered the components of application structure options and practices to build better applications through segregated service layers • …practices and techniques to automate and expedite our data modeling and delivery of our data service with business logic, exposing it via RESTful API (or others) • …front-end frameworks for better UI-layers in applications • …advanced tooling which can help aid in creating those advanced front-ends and provide a completed picture of testing, documentation, and deployment beyond the back-end • we did not cover how to grow a beard
  • 41. Let’s Build Happy Little Apps
  • 43. Acknowledgements and Disclaimers Availability. References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates. The workshops, sessions and materials have been prepared by IBM or the session speakers and reflect their own views. They are provided for informational purposes only, and are neither intended to, nor shall have the effect of being, legal or other guidance or advice to any participant. While efforts were made to verify the completeness and accuracy of the information contained in this presentation, it is provided AS-IS without warranty of any kind, express or implied. IBM shall not be responsible for any damages arising out of the use of, or otherwise related to, this presentation or any other materials. Nothing contained in this presentation is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and conditions of the applicable license agreement governing the use of IBM software. All customer examples described are presented as illustrations of how those customers have used IBM products and the results they may have achieved. Actual environmental costs and performance characteristics may vary by customer. Nothing contained in these materials is intended to, nor shall have the effect of, stating or implying that any activities undertaken by you will result in any specific sales, revenue growth or other results.
  • 44. Acknowledgements and Disclaimers cont. © Copyright IBM Corporation 2015. All rights reserved. • U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. • IBM, the IBM logo, ibm.com, IBM Bluemix, IBM Domino, and IBM XPages are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. If these and other IBM trademarked terms are marked on their first occurrence in this information with a trademark symbol (® or ™), these symbols indicate U.S. registered or common law trademarks owned by IBM at the time this information was published. Such trademarks may also be registered or common law trademarks in other countries. A current list of IBM trademarks is available on the Web at “Copyright and trademark information” at www.ibm.com/legal/copytrade.shtml Monty Python and the Holy Grail and its images and likenesses are intellectual property (trademarked or otherwise) of the Monty Python comedy group (a.k.a.- Monty Python’s Flying Circus). LEGO Deadpool and its character’s likeness is trademarked and owned by Marvel and LEGO. Range is property of Paramount Pictures and Nickelodeon Movies. The IT Crowd is property of Talkback Thames and Retort, as aired on BBC. The Joy of Painting, with artist Bob Ross, is property of Bob Ross and BRI Productions. Other company, product, or service names may be trademarks or service marks of others.

Editor's Notes

  1. The advantages sell themselves. As for disadvantages, if anyone believes it’s more time consuming to approach a proper layout to an application when it’s being initially constructed or in its infancy, there is virtually no cost. Converting takes time, so lay your foundation well. I used to think that my management would have some difficulty accepting my thoughts and approaches on the higher level side of my application development efforts, but when it came down to it, after running into multiple issues over multiple years with our largest app (which I maintain and continue development on in a few areas), I’ve found that the more I do talk with my management about the larger issues, the more they assume I have any tedium handled. This has taken a few years but has paid dividends; especially when it comes to building trust with my management after several creative solutions following the POODLE + other HTTPS/SSL debacles over the last year or so. In other words, when your management take you seriously when you prefix a thought with “Eric’s crazy talk”, you’ve reached a level of trust; trust cultivated from time and effort spent not just on creating widget X, but also understanding the ramifications of that widget, it’s interactions, and how it will work in a deployed, at scale capacity.
  2. Focusing on application structure and the flow of data (which is how my head works). There are great other angles to look at an application before/during/after during continuing development, such as user interactions (how many clicks, ease of access), but when it comes to interfacing with data, which is usually my biggest concern, this is what makes sense to me.
  3. Rango may be in a whole heap of trouble for all his tall tales, but “stay with me now”.
  4. I’m not the only one talking about app structure. In fact, this is probably one of the most common 2nd or 3rd order themes amongst developers since applications began being developed. Here are some references which have been great additions for the cause in the Domino / XPages world.
  5. Domino/XPages SSJS is a weird beast, only supports up through ECMAScript 4, and while you can specify a variable’s type (using colon notation), it’s not the norm for most people. Also, if you’re going to specify type for each variable, what’s the big complaint about Java? “No runtime exceptions” = shouldn’t be likely, if ever. If only we could deal with a native API that doesn’t throw NotesExceptions for about everything. Eclipse “does java well” in the sense that the content assistance and overall Java editor experience is an excellent standard.
  6. Some have avoided Java in XPages because Java is “scary”. While some may seem daunted, it’s not that hard for a developer to pick up, has been around long enough to be a mature language, performs
  7. As my data service diagram depicts, there are options. Finding the needs of an application, connections and integrations with other systems and points of entry, so to speak, can help drive our direction.
  8. Note: some of these require a change in the java.pol(icy) file for security permissions. Non-obvious things: GSON lets you reflect data from JSON to a proper Java Object (by its class definition) in addition to a convenient toJson method; it sure beats the snot out of typing out the lines for creating a new object, create new property (by type), then setting the value, etc. Swiper eliminates a lot of the “bloat” of syncing with an On Disk Project (ODP) and is what allowed me to take our largest app to its first, prototype stage of build automation using headless DDE (was previously generating too many conflicting design elements, making the app non-usable OoB).
  9. What I chose and why, along with other options.
  10. My quest isn’t over, as I’m learning something new every day.