SlideShare a Scribd company logo
APEREO OAE
Bootcamp, Miami 2014
WHAT WOULDYOU LIKETO LEARN?
OAE @ MIAMI
• Sunday: Development Bootcamp
• Monday @ 10am: State of the Project	

• Monday @ 11am: Project talks	

• Monday @ 1pm: Architectural Overview
• Tuesday @ 1pm: The FOLD	

• Tuesday @ 2pm: Stories from the Frontlines of innovation	

• Wednesday @ 11.45am: Apereo & ESUP: Brothers in arms
TOPICS	

	

1. OAE Project	

2. Hilary System Architecture	

3. Node.js Exercise	

4. Back-end Exercise	

5. UI Architecture	

6. Front-end Exercise
Support for academic collaboration

and networking
https://oae.oae-qa0.oaeproject.org
PROJECT GOALS
• User-led	

• Multi-tenant platform	

• Cloud-ready	

• SaaS	

• Cross-institutional	

• Used at large scale
INTEGRATION
• Integrate OAE with other systems	

• Integrate other systems with OAE
MULTI-TENANCY
• Support multiple institutions on same installation	

• Easily created, maintained and configured	

• Each institution has its own URL, branding, skinning and
users	

• Share infrastructure	

• Institutions can share and collaborate with other
institutions
TOPICS	

	

1. Project Goals	

2. Hilary System Architecture	

3. Node.js Exercise	

4. Back-end Exercise	

5. UI Architecture	

6. Front-end Exercise
OAE ARCHITECTURE
The Apereo OAE project is made up of 2 distinct source code
platforms:	

• “Hilary”	

• Server-side RESTful web platform that exposes the OAE
services	

• Written entirely using server-side JavaScript in Node.js	

• “3akai-ux”	

• A client-side / browser platform that provides the HTML,
JavaScript and CSS that make up the UI of the application
OAE ARCHITECTURE
APPLICATION SERVERS
• Written in server-side JavaScript, run in Node.js	

• Light-Weight	

• Single-Threaded	

• Event-Driven	

• Non-Blocking	

• Uses callbacks/promises and an event queue to stash work to be done after I/O or other heavy processes
complete	

• App servers can be configured into functional specialization:	

• User Request Processor	

• Activity Processor	

• Search Indexer	

• Preview Processor
APACHE CASSANDRA
• Authoritative data source	

• Provides high-availability and fault-tolerance without trading away
performance	

• Regarding CAP theorem, Cassandra favours Availability and
PartitionTolerance over Consistency, however consistency is
tunable on the connection-level (we always use “quorum”)	

• Uses a ring topology to shard data across nodes, with
configurable replication levels	

• Used by: Netflix, eBay,Twitter
ELASTICSEARCH
• Lucene-backed search platform	

• Built for incremental scaling and high-availability	

• Exposes HTTP RESTful APIs for indexing and querying
documents	

• RESTful query interface uses JSON-based Query DSL	

• Powers all of Hilary search functions (Library Search,
Members / Memberships Search)	

• Used by: GitHub, FourSquare, StackOverflow,WordPress
RABBITMQ
• Light-weight message queue platform written in
Erlang	

• Used for distributing tasks to specialized
application server instances	

• Supports active-active queue mirroring for high
availability	

• Used by: Joyent
REDIS
• REmote DIctionary Server	

• Fills a variety of functionality in OAE:	

• Broadcast messaging (could move to RabbitMQ)	

• Locking	

• Caching of basic user profiles	

• Holds volatile activity aggregation data	

• Comes with no managed clustering solution (yet), but has slave replication for active fail-
over	

• Some clients manage master-slave switching, and distributed reads for you	

• Used by:Twitter, Instagram, StackOverflow, Flickr
ETHERPAD
• Open Source collaborative editing application written
in Node.js	

• Originally developed by Google and Mozilla	

• Licensed under Apache License v2	

• Powers collaborative document editing in OAE	

• Collaborative documents sharded by ID to dedicated
Etherpad instances
NGINX
• HTTP and reverse-proxy server	

• Used to distribute load to application servers,
etherpad servers and stream file downloads	

• Useful rate-limiting features based on source IP	

• Proxy web socket connections to Hilary and Etherpad	

• Used by: Netflix,WordPress.com
TOPICS	

	

1. Project Goals	

2. Hilary System Architecture	

3. Node.js Exercise	

4. Back-end Exercise	

5. UI Architecture	

6. Front-end Exercise
IDE
• OAETeam uses mostly SublimeText 2 and Aptana Studio 3	

• http://www.sublimetext.com/2	

• http://www.aptana.com/products/studio3/download	

• Useful things in an IDE:	

• Syntax highlighting	

• Automatic “linting”	

• Variable assistance (don’t expect much from dynamic
scripting language)	

• File-system navigation
GITHUB
• OAETeam uses it for:	

• Version control	

• IssueTracking	

• Code Integration Workflow (Pull Requests)	

• TravisCI Integration for:	

• Running unit tests on all commits and pull requests	

• Packaging up and uploading all commits to Amazon S3 so they can be easily pulled
down and deployed	

• Packaging up and uploading all tagged releases to Amazon S3 for production releases	

• Coveralls Integration for:	

• Reporting on trends in unit tests code coverage (e.g., indicates if test coverage drops
from 90.2% to 90.15%)
TOPICS	

	

1. Project Goals	

2. Hilary System Architecture	

3. Node.js Exercise	

4. Back-end Exercise	

5. UI Architecture	

6. Front-end Exercise
GOAL
NPM
• Used to download packages and manage versions	

• Packages can be installed from:	

• Central NPM repo: npm install oae-tasklist	

• Git: npm install git+https://github.com/oaeproject/oae-tasklist	

• File-system directory: npm install ../oae-tasklist	

• package.json file describes metadata about a module and its
dependencies	

• When a package is installed, they are placed either locally in a 

./node_modules directory or globally (npm install -g) in a shared location
such as /usr/local/share/npm/lib/node_modules
EXTENDING OAE WITH NPM
• NPM module represents a logical set of functionality (e.g., a
back-end REST API, or a set of related widgets)	

• NPM modules in 3akai-ux are searched for custom widgets	

• NPM modules in Hilary (that start with oae-) are searched
for init.js and rest.js to integrate to the application
container	

• New dependencies can be added to package.json file and
then fetched / installed running “npm install”
PACKAGE.JSON
• Describes metadata about a package:	

• Version	

• Author	

• Unique package id	

• Required for installing a package as a module
TOPICS	

	

1. Project Goals	

2. Hilary System Architecture	

3. Node.js Exercise	

4. Back-end Exercise	

5. UI Architecture	

6. Front-end Exercise
UI ARCHITECTURE
UI ARCHITECTURE
UI ARCHITECTURE
• In essence	

• HTML	

• CSS	

• JavaScript	

• Talks to Hilary via REST APIs
WIDGETS
• Modular UI components	

• HTML Fragment	

• JavaScript	

• CSS	

• I18n bundles	

• Manifest file	

• Loaded into DOM	

• Re-usable
WIDGETS
TOOLBOX
JS frameworks
CSS frameworks
3rd party plugins
OAE UI API
OAE CSS components
TOOLBOX
JS frameworks
CSS frameworks
3rd party plugins
OAE UI API
OAE CSS components
JS FRAMEWORKS
• jQuery 	

• RequireJS	

• underscore.js
• DOM manipulation	

• Cross-browser abstraction	

• Events	

• Pretty much everything
• Utility toolbelt	

• Manipulate objects, arrays, etc.
• File and module loader	

• Load files on the fly	

• Necessity to keep things modular	

• Optimisation built-in
TOOLBOX
JS frameworks
CSS frameworks
3rd party plugins
OAE UI API
OAE CSS components
CSS FRAMEWORKS
• Twitter Bootstrap	

• Font Awesome
TWITTER BOOTSTRAP
TWITTER BOOTSTRAP
• Most popular CSS framework	

• Responsive (!)	

• Documentation	

• Basic components, styles, etc.	

• Override where necessary
BOOTSTRAP GRID
• Predefined classes make up rows and columns	

• 12 available columns to span	

• e.g., 3 x `.col-xs-4` columns	

• 4 media-queries
Device Class Width
Phones .col-xs- < 768px
tablets .col-sm- ≥ 768px
Desktops .col-md- ≥ 992px
Desktops .col-lg- ≥ 1200px
BOOTSTRAP GRID
FONT AWESOME
FONT AWESOME
• Icon font	

• No more images	

• Style with CSS	

• Skinning	

• Easy
TOOLBOX
JS frameworks
CSS frameworks
3rd party plugins
OAE UI API
OAE CSS components
3RD PARTY PLUG-INS
• jQuery plug-ins	

• Bootstrap plug-ins
3RD PARTY PLUG-INS
• Autosuggest	

• History.js	

• Fileupload	

• Validation	

• Markdown	

• etc.
INCLUDEYOUR OWN
TOOLBOX
JS frameworks
CSS frameworks
3rd party plugins
OAE UI API
OAE CSS components
OAE UI API
• Wrapper for REST requests	

• Authentication	

• Content	

• Comments	

• Discussions	

• Following	

• Groups	

• Users	

• Admin
OAE UI API
• Utilities	

• i18n	

• l10n	

• Template rendering	

• Widget loading	

• Notifications	

• XSS escaping	

• etc.
OAE UI API
TOOLBOX
JS frameworks
CSS frameworks
3rd party plugins
OAE UI API
OAE CSS components
OAE CSS COMPONENTS
• Re-usable HTML fragments	

• Consistency	

• Design guide
OAE CSS COMPONENTS
• Clips	

• Visibility icon	

• Large options	

• Thumbnails	

• Clip
• Left hand navigation	

• Tiles	

• List items	

• List header	

• Skinnable Panel
WIDGET BEST PRACTICES
• Namespacing	

• i18n	

• UITemplating
NAMESPACING
• Widgets share same container	

• Avoid clashes	

• Namespace:	

• HTML IDs	

• CSS classes	

• jQuery selectors
I18N
• UI available in multiple languages	

• Standard .properties files	

• 2 types of bundles	

• Core bundles	

• Widget bundles
I18N
Translation priority	

1. Widget user language file	

2. Widget default language file	

3. Container user language file	

4. Container user language file
I18N
__MSG__TRANSLATION_KEY__
I18N
Complete
Partial
I18N
L10N
• API methods for localizing:	

• Number formatting	

• Date formatting
UITEMPLATING
• TrimPath	

• Avoids lots of DOM manipulation	

• Pass in JSON data	

• Supports if statements, for loops, etc.
UITEMPLATING
• Templates are defined in between <!-- -->	

• oae.api.util.template().render(...)
UITEMPLATING
• Template



<div id="example_template"><!--	
<h4>Welcome {firstName}.</h4>	
You are ${profile.age} years old	
--></div>

• Input	



oae.api.util.template().render($("#example_template"), {	
“firstName”: “John”,	
“profile”: {	
“placeofbirth”: “Los Angeles”,	
“age”: 45	
}	
});

• Result



<h4>Welcome John.</h4>

You are 45 years old.
UITEMPLATING
• Template



<div id="example_template"><!--	
{if score >= 5}	
<h1>Congratulations, you have succeeded</h1>	
{elseif score >= 0}	
<h1>Sorry, you have failed}	
{else}	
<h1>You have cheated</h1>	
{/if}	
--></div>

• Input	



oae.api.util.template().render($("#example_template"), {	
“score”: 6	
});

• Result



<h1>Congratulations, you have succeeded!</h1>
UITEMPLATING
• Template


<div id="example_template"><!--	
{for conference in conferences}	
<div>${conference.name} (${conference.year})</div>	
{forelse}	
<div>No conferences have been organized</div>	
{/for}	
--></div>

• Input	



oae.api.util.template().renderTemplate($("#example_template"), {	
“conferences”: [

	 {“name”: “Apereo Miami”, “year”: 2014},

	 {“name”: “Apereo San Diego”, “year”: 2013},

	 {“name”: “Sakai Atlanta”, “year”: 2012}	
]	
});

• Result


<div>Apereo Miami (2014)</div> 

<div>Apereo San Diego (2013)</div>

<div>Sakai Atlanta (2012)</div>
UI RELEASE PROCESSES
• Grunt	

• Task-based build system implemented in JavaScript	

• Similar in theory of operation to Make, Rake	

• Rich ecosystem of plug-ins to do most tasks	

• Easy to implement new task when a plugin doesn’t exist yet	

• Used for running test suites, production builds, linting tools
UI RELEASE PROCESSES
• Production Build	

• Optimizes the static assets to reduce throughput, request frequency, and optimize caching
across versions	

• Require.js Optimization:	

• Concatenate JavaScript dependencies (reduces number of web requests significantly)	

• Minify / Uglify JavaScript files (reduces payload sizes significantly, even when gzip enabled
on web server)	

• Hash optimization:	

• Hash the contents of static assets and append result to the filename, then cache them
indefinitely on the browsers	

• When the files change, the hash in the filename changes to force reloading of the
updated asset	

• If files never change across version, client never reloads file until their cache is cleared
TOPICS	

	

1. Project Goals	

2. Hilary System Architecture	

3. Node.js Exercise	

4. Back-end Exercise	

5. UI Architecture	

6. Front-end Exercise

More Related Content

What's hot

ActiveMQ 5.9.x new features
ActiveMQ 5.9.x new featuresActiveMQ 5.9.x new features
ActiveMQ 5.9.x new features
Christian Posta
 
2015 spice world_london_breakout
2015 spice world_london_breakout2015 spice world_london_breakout
2015 spice world_london_breakout
Thomas Lee
 
Camel oneactivemq posta-final
Camel oneactivemq posta-finalCamel oneactivemq posta-final
Camel oneactivemq posta-finalChristian Posta
 
Node and Azure
Node and AzureNode and Azure
Node and Azure
Jason Gerard
 
RESTful Services
RESTful ServicesRESTful Services
RESTful Services
Jason Gerard
 
2016 spice world_london_breakout
2016 spice world_london_breakout2016 spice world_london_breakout
2016 spice world_london_breakout
Thomas Lee
 
Alfresco DevCon 2019 Performance Tools of the Trade
Alfresco DevCon 2019   Performance Tools of the TradeAlfresco DevCon 2019   Performance Tools of the Trade
Alfresco DevCon 2019 Performance Tools of the Trade
Luis Colorado
 
Evolving IGN’s New APIs with Scala
 Evolving IGN’s New APIs with Scala Evolving IGN’s New APIs with Scala
Evolving IGN’s New APIs with Scala
Manish Pandit
 
Java1
Java1Java1
Java1
Java1Java1
Why real integration developers ride Camels
Why real integration developers ride CamelsWhy real integration developers ride Camels
Why real integration developers ride Camels
Christian Posta
 
Monitor Micro-service with MicroProfile metrics
Monitor Micro-service with MicroProfile metricsMonitor Micro-service with MicroProfile metrics
Monitor Micro-service with MicroProfile metrics
Rudy De Busscher
 
Simplify integrations-final-pdf
Simplify integrations-final-pdfSimplify integrations-final-pdf
Simplify integrations-final-pdf
Christian Posta
 
Lessons Learned from Real-World Deployments of Java EE 7 at JavaOne 2014
Lessons Learned from Real-World Deployments of Java EE 7 at JavaOne 2014Lessons Learned from Real-World Deployments of Java EE 7 at JavaOne 2014
Lessons Learned from Real-World Deployments of Java EE 7 at JavaOne 2014
Arun Gupta
 
Microservices, DevOps, and Containers with OpenShift and Fabric8
Microservices, DevOps, and Containers with OpenShift and Fabric8Microservices, DevOps, and Containers with OpenShift and Fabric8
Microservices, DevOps, and Containers with OpenShift and Fabric8
Christian Posta
 
Alibaba Cloud Conference 2016 - Docker Open Source
Alibaba Cloud Conference   2016 - Docker Open Source Alibaba Cloud Conference   2016 - Docker Open Source
Alibaba Cloud Conference 2016 - Docker Open Source
John Willis
 
How Class Data Sharing Can Speed up Your Jakarta EE Application Startup
How Class Data Sharing Can Speed up Your Jakarta EE Application StartupHow Class Data Sharing Can Speed up Your Jakarta EE Application Startup
How Class Data Sharing Can Speed up Your Jakarta EE Application Startup
Rudy De Busscher
 
What's New and Next in OpenNTF Domino API (ICON UK 2014)
What's New and Next in OpenNTF Domino API (ICON UK 2014)What's New and Next in OpenNTF Domino API (ICON UK 2014)
What's New and Next in OpenNTF Domino API (ICON UK 2014)
Paul Withers
 
Rest overview briefing
Rest  overview briefingRest  overview briefing
Rest overview briefing
◄ vaquar khan ► ★✔
 
Microservices with WildFly Swarm - JavaSI 2016
Microservices with WildFly Swarm - JavaSI 2016Microservices with WildFly Swarm - JavaSI 2016
Microservices with WildFly Swarm - JavaSI 2016
Charles Moulliard
 

What's hot (20)

ActiveMQ 5.9.x new features
ActiveMQ 5.9.x new featuresActiveMQ 5.9.x new features
ActiveMQ 5.9.x new features
 
2015 spice world_london_breakout
2015 spice world_london_breakout2015 spice world_london_breakout
2015 spice world_london_breakout
 
Camel oneactivemq posta-final
Camel oneactivemq posta-finalCamel oneactivemq posta-final
Camel oneactivemq posta-final
 
Node and Azure
Node and AzureNode and Azure
Node and Azure
 
RESTful Services
RESTful ServicesRESTful Services
RESTful Services
 
2016 spice world_london_breakout
2016 spice world_london_breakout2016 spice world_london_breakout
2016 spice world_london_breakout
 
Alfresco DevCon 2019 Performance Tools of the Trade
Alfresco DevCon 2019   Performance Tools of the TradeAlfresco DevCon 2019   Performance Tools of the Trade
Alfresco DevCon 2019 Performance Tools of the Trade
 
Evolving IGN’s New APIs with Scala
 Evolving IGN’s New APIs with Scala Evolving IGN’s New APIs with Scala
Evolving IGN’s New APIs with Scala
 
Java1
Java1Java1
Java1
 
Java1
Java1Java1
Java1
 
Why real integration developers ride Camels
Why real integration developers ride CamelsWhy real integration developers ride Camels
Why real integration developers ride Camels
 
Monitor Micro-service with MicroProfile metrics
Monitor Micro-service with MicroProfile metricsMonitor Micro-service with MicroProfile metrics
Monitor Micro-service with MicroProfile metrics
 
Simplify integrations-final-pdf
Simplify integrations-final-pdfSimplify integrations-final-pdf
Simplify integrations-final-pdf
 
Lessons Learned from Real-World Deployments of Java EE 7 at JavaOne 2014
Lessons Learned from Real-World Deployments of Java EE 7 at JavaOne 2014Lessons Learned from Real-World Deployments of Java EE 7 at JavaOne 2014
Lessons Learned from Real-World Deployments of Java EE 7 at JavaOne 2014
 
Microservices, DevOps, and Containers with OpenShift and Fabric8
Microservices, DevOps, and Containers with OpenShift and Fabric8Microservices, DevOps, and Containers with OpenShift and Fabric8
Microservices, DevOps, and Containers with OpenShift and Fabric8
 
Alibaba Cloud Conference 2016 - Docker Open Source
Alibaba Cloud Conference   2016 - Docker Open Source Alibaba Cloud Conference   2016 - Docker Open Source
Alibaba Cloud Conference 2016 - Docker Open Source
 
How Class Data Sharing Can Speed up Your Jakarta EE Application Startup
How Class Data Sharing Can Speed up Your Jakarta EE Application StartupHow Class Data Sharing Can Speed up Your Jakarta EE Application Startup
How Class Data Sharing Can Speed up Your Jakarta EE Application Startup
 
What's New and Next in OpenNTF Domino API (ICON UK 2014)
What's New and Next in OpenNTF Domino API (ICON UK 2014)What's New and Next in OpenNTF Domino API (ICON UK 2014)
What's New and Next in OpenNTF Domino API (ICON UK 2014)
 
Rest overview briefing
Rest  overview briefingRest  overview briefing
Rest overview briefing
 
Microservices with WildFly Swarm - JavaSI 2016
Microservices with WildFly Swarm - JavaSI 2016Microservices with WildFly Swarm - JavaSI 2016
Microservices with WildFly Swarm - JavaSI 2016
 

Similar to Apereo OAE - Bootcamp

A Platform Approach to Enterprise Content Management with Eclipse Apricot, CM...
A Platform Approach to Enterprise Content Management with Eclipse Apricot, CM...A Platform Approach to Enterprise Content Management with Eclipse Apricot, CM...
A Platform Approach to Enterprise Content Management with Eclipse Apricot, CM...
Nuxeo
 
01/2009 - Portral development with liferay
01/2009 - Portral development with liferay01/2009 - Portral development with liferay
01/2009 - Portral development with liferaydaveayan
 
Rootconf 2017 - State of the Open Source monitoring landscape
Rootconf 2017 - State of the Open Source monitoring landscape Rootconf 2017 - State of the Open Source monitoring landscape
Rootconf 2017 - State of the Open Source monitoring landscape
NETWAYS
 
Wikipedia Cloud Search Webinar
Wikipedia Cloud Search WebinarWikipedia Cloud Search Webinar
Wikipedia Cloud Search Webinar
Search Technologies
 
T3 - Deploy, manage, and scale your apps
T3 - Deploy, manage, and scale your appsT3 - Deploy, manage, and scale your apps
T3 - Deploy, manage, and scale your apps
Amazon Web Services
 
Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)
Florent Guillaume
 
First Look at Azure Logic Apps (BAUG)
First Look at Azure Logic Apps (BAUG)First Look at Azure Logic Apps (BAUG)
First Look at Azure Logic Apps (BAUG)
Daniel Toomey
 
Bitnami Bootcamp. OpenStack
Bitnami Bootcamp. OpenStackBitnami Bootcamp. OpenStack
Bitnami Bootcamp. OpenStack
Alberto Molina Coballes
 
OSGi on Google Android using Apache Felix
OSGi on Google Android using Apache FelixOSGi on Google Android using Apache Felix
OSGi on Google Android using Apache Felix
Marcel Offermans
 
Showcasing drupal
Showcasing drupalShowcasing drupal
Showcasing drupalOpevel
 
Cloudsolutionday 2016: DevOps workflow with Docker on AWS
Cloudsolutionday 2016: DevOps workflow with Docker on AWSCloudsolutionday 2016: DevOps workflow with Docker on AWS
Cloudsolutionday 2016: DevOps workflow with Docker on AWS
AWS Vietnam Community
 
End to-end W3C - JS.everywhere(2012) Europe
End to-end W3C - JS.everywhere(2012) EuropeEnd to-end W3C - JS.everywhere(2012) Europe
End to-end W3C - JS.everywhere(2012) EuropeAlexandre Morgaut
 
Building APIs in an easy way using API Platform
Building APIs in an easy way using API PlatformBuilding APIs in an easy way using API Platform
Building APIs in an easy way using API Platform
Antonio Peric-Mazar
 
Oracle Fusion Middleware on Exalogic Best Practises
Oracle Fusion Middleware on Exalogic Best PractisesOracle Fusion Middleware on Exalogic Best Practises
Oracle Fusion Middleware on Exalogic Best Practises
Michel Schildmeijer
 
Containers, Habitat and Orchestration - Infracoders Meetup Graz
Containers, Habitat and Orchestration - Infracoders Meetup GrazContainers, Habitat and Orchestration - Infracoders Meetup Graz
Containers, Habitat and Orchestration - Infracoders Meetup Graz
Infralovers
 
Service-Oriented Design and Implement with Rails3
Service-Oriented Design and Implement with Rails3Service-Oriented Design and Implement with Rails3
Service-Oriented Design and Implement with Rails3Wen-Tien Chang
 
Introducing Apricot, The Eclipse Content Management Platform
Introducing Apricot, The Eclipse Content Management PlatformIntroducing Apricot, The Eclipse Content Management Platform
Introducing Apricot, The Eclipse Content Management Platform
Nuxeo
 
Play Architecture, Implementation, Shiny Objects, and a Proposal
Play Architecture, Implementation, Shiny Objects, and a ProposalPlay Architecture, Implementation, Shiny Objects, and a Proposal
Play Architecture, Implementation, Shiny Objects, and a Proposal
Mike Slinn
 
Mini-Training: NancyFX
Mini-Training: NancyFXMini-Training: NancyFX
Mini-Training: NancyFX
Betclic Everest Group Tech Team
 

Similar to Apereo OAE - Bootcamp (20)

A Platform Approach to Enterprise Content Management with Eclipse Apricot, CM...
A Platform Approach to Enterprise Content Management with Eclipse Apricot, CM...A Platform Approach to Enterprise Content Management with Eclipse Apricot, CM...
A Platform Approach to Enterprise Content Management with Eclipse Apricot, CM...
 
01/2009 - Portral development with liferay
01/2009 - Portral development with liferay01/2009 - Portral development with liferay
01/2009 - Portral development with liferay
 
Rootconf 2017 - State of the Open Source monitoring landscape
Rootconf 2017 - State of the Open Source monitoring landscape Rootconf 2017 - State of the Open Source monitoring landscape
Rootconf 2017 - State of the Open Source monitoring landscape
 
Wikipedia Cloud Search Webinar
Wikipedia Cloud Search WebinarWikipedia Cloud Search Webinar
Wikipedia Cloud Search Webinar
 
T3 - Deploy, manage, and scale your apps
T3 - Deploy, manage, and scale your appsT3 - Deploy, manage, and scale your apps
T3 - Deploy, manage, and scale your apps
 
Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)
 
First Look at Azure Logic Apps (BAUG)
First Look at Azure Logic Apps (BAUG)First Look at Azure Logic Apps (BAUG)
First Look at Azure Logic Apps (BAUG)
 
Bitnami Bootcamp. OpenStack
Bitnami Bootcamp. OpenStackBitnami Bootcamp. OpenStack
Bitnami Bootcamp. OpenStack
 
OSGi on Google Android using Apache Felix
OSGi on Google Android using Apache FelixOSGi on Google Android using Apache Felix
OSGi on Google Android using Apache Felix
 
Showcasing drupal
Showcasing drupalShowcasing drupal
Showcasing drupal
 
Cloudsolutionday 2016: DevOps workflow with Docker on AWS
Cloudsolutionday 2016: DevOps workflow with Docker on AWSCloudsolutionday 2016: DevOps workflow with Docker on AWS
Cloudsolutionday 2016: DevOps workflow with Docker on AWS
 
End to-end W3C - JS.everywhere(2012) Europe
End to-end W3C - JS.everywhere(2012) EuropeEnd to-end W3C - JS.everywhere(2012) Europe
End to-end W3C - JS.everywhere(2012) Europe
 
Building APIs in an easy way using API Platform
Building APIs in an easy way using API PlatformBuilding APIs in an easy way using API Platform
Building APIs in an easy way using API Platform
 
Oracle Fusion Middleware on Exalogic Best Practises
Oracle Fusion Middleware on Exalogic Best PractisesOracle Fusion Middleware on Exalogic Best Practises
Oracle Fusion Middleware on Exalogic Best Practises
 
Containers, Habitat and Orchestration - Infracoders Meetup Graz
Containers, Habitat and Orchestration - Infracoders Meetup GrazContainers, Habitat and Orchestration - Infracoders Meetup Graz
Containers, Habitat and Orchestration - Infracoders Meetup Graz
 
Service-Oriented Design and Implement with Rails3
Service-Oriented Design and Implement with Rails3Service-Oriented Design and Implement with Rails3
Service-Oriented Design and Implement with Rails3
 
Node.js
Node.jsNode.js
Node.js
 
Introducing Apricot, The Eclipse Content Management Platform
Introducing Apricot, The Eclipse Content Management PlatformIntroducing Apricot, The Eclipse Content Management Platform
Introducing Apricot, The Eclipse Content Management Platform
 
Play Architecture, Implementation, Shiny Objects, and a Proposal
Play Architecture, Implementation, Shiny Objects, and a ProposalPlay Architecture, Implementation, Shiny Objects, and a Proposal
Play Architecture, Implementation, Shiny Objects, and a Proposal
 
Mini-Training: NancyFX
Mini-Training: NancyFXMini-Training: NancyFX
Mini-Training: NancyFX
 

More from Nicolaas Matthijs

Apereo OAE - State of the project - Open Apereo 2015
Apereo OAE - State of the project - Open Apereo 2015Apereo OAE - State of the project - Open Apereo 2015
Apereo OAE - State of the project - Open Apereo 2015Nicolaas Matthijs
 
Apereo OAE - State of the project
Apereo OAE - State of the projectApereo OAE - State of the project
Apereo OAE - State of the projectNicolaas Matthijs
 
Apereo Mexico 2014 - Apereo OAE - State of the project
Apereo Mexico 2014 - Apereo OAE - State of the projectApereo Mexico 2014 - Apereo OAE - State of the project
Apereo Mexico 2014 - Apereo OAE - State of the project
Nicolaas Matthijs
 
Apereo Europe - Apereo OAE
Apereo Europe - Apereo OAEApereo Europe - Apereo OAE
Apereo Europe - Apereo OAE
Nicolaas Matthijs
 
ESUP Days - Apereo OAE
ESUP Days - Apereo OAEESUP Days - Apereo OAE
ESUP Days - Apereo OAE
Nicolaas Matthijs
 
Apereo OAE - Architectural overview
Apereo OAE - Architectural overviewApereo OAE - Architectural overview
Apereo OAE - Architectural overview
Nicolaas Matthijs
 
Apereo OAE - Bootcamp
Apereo OAE - BootcampApereo OAE - Bootcamp
Apereo OAE - Bootcamp
Nicolaas Matthijs
 
WSDM 2011 - Nicolaas Matthijs and Filip Radlinski
WSDM 2011 - Nicolaas Matthijs and Filip RadlinskiWSDM 2011 - Nicolaas Matthijs and Filip Radlinski
WSDM 2011 - Nicolaas Matthijs and Filip Radlinski
Nicolaas Matthijs
 
Sakai 3 R&D
Sakai 3 R&DSakai 3 R&D
Sakai 3 R&D
Nicolaas Matthijs
 

More from Nicolaas Matthijs (9)

Apereo OAE - State of the project - Open Apereo 2015
Apereo OAE - State of the project - Open Apereo 2015Apereo OAE - State of the project - Open Apereo 2015
Apereo OAE - State of the project - Open Apereo 2015
 
Apereo OAE - State of the project
Apereo OAE - State of the projectApereo OAE - State of the project
Apereo OAE - State of the project
 
Apereo Mexico 2014 - Apereo OAE - State of the project
Apereo Mexico 2014 - Apereo OAE - State of the projectApereo Mexico 2014 - Apereo OAE - State of the project
Apereo Mexico 2014 - Apereo OAE - State of the project
 
Apereo Europe - Apereo OAE
Apereo Europe - Apereo OAEApereo Europe - Apereo OAE
Apereo Europe - Apereo OAE
 
ESUP Days - Apereo OAE
ESUP Days - Apereo OAEESUP Days - Apereo OAE
ESUP Days - Apereo OAE
 
Apereo OAE - Architectural overview
Apereo OAE - Architectural overviewApereo OAE - Architectural overview
Apereo OAE - Architectural overview
 
Apereo OAE - Bootcamp
Apereo OAE - BootcampApereo OAE - Bootcamp
Apereo OAE - Bootcamp
 
WSDM 2011 - Nicolaas Matthijs and Filip Radlinski
WSDM 2011 - Nicolaas Matthijs and Filip RadlinskiWSDM 2011 - Nicolaas Matthijs and Filip Radlinski
WSDM 2011 - Nicolaas Matthijs and Filip Radlinski
 
Sakai 3 R&D
Sakai 3 R&DSakai 3 R&D
Sakai 3 R&D
 

Recently uploaded

Embracing GenAI - A Strategic Imperative
Embracing GenAI - A Strategic ImperativeEmbracing GenAI - A Strategic Imperative
Embracing GenAI - A Strategic Imperative
Peter Windle
 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
siemaillard
 
A Strategic Approach: GenAI in Education
A Strategic Approach: GenAI in EducationA Strategic Approach: GenAI in Education
A Strategic Approach: GenAI in Education
Peter Windle
 
Biological Screening of Herbal Drugs in detailed.
Biological Screening of Herbal Drugs in detailed.Biological Screening of Herbal Drugs in detailed.
Biological Screening of Herbal Drugs in detailed.
Ashokrao Mane college of Pharmacy Peth-Vadgaon
 
CACJapan - GROUP Presentation 1- Wk 4.pdf
CACJapan - GROUP Presentation 1- Wk 4.pdfCACJapan - GROUP Presentation 1- Wk 4.pdf
CACJapan - GROUP Presentation 1- Wk 4.pdf
camakaiclarkmusic
 
Overview on Edible Vaccine: Pros & Cons with Mechanism
Overview on Edible Vaccine: Pros & Cons with MechanismOverview on Edible Vaccine: Pros & Cons with Mechanism
Overview on Edible Vaccine: Pros & Cons with Mechanism
DeeptiGupta154
 
Language Across the Curriculm LAC B.Ed.
Language Across the  Curriculm LAC B.Ed.Language Across the  Curriculm LAC B.Ed.
Language Across the Curriculm LAC B.Ed.
Atul Kumar Singh
 
Francesca Gottschalk - How can education support child empowerment.pptx
Francesca Gottschalk - How can education support child empowerment.pptxFrancesca Gottschalk - How can education support child empowerment.pptx
Francesca Gottschalk - How can education support child empowerment.pptx
EduSkills OECD
 
Marketing internship report file for MBA
Marketing internship report file for MBAMarketing internship report file for MBA
Marketing internship report file for MBA
gb193092
 
The French Revolution Class 9 Study Material pdf free download
The French Revolution Class 9 Study Material pdf free downloadThe French Revolution Class 9 Study Material pdf free download
The French Revolution Class 9 Study Material pdf free download
Vivekanand Anglo Vedic Academy
 
How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...
Jisc
 
Lapbook sobre os Regimes Totalitários.pdf
Lapbook sobre os Regimes Totalitários.pdfLapbook sobre os Regimes Totalitários.pdf
Lapbook sobre os Regimes Totalitários.pdf
Jean Carlos Nunes Paixão
 
special B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdfspecial B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdf
Special education needs
 
Unit 2- Research Aptitude (UGC NET Paper I).pdf
Unit 2- Research Aptitude (UGC NET Paper I).pdfUnit 2- Research Aptitude (UGC NET Paper I).pdf
Unit 2- Research Aptitude (UGC NET Paper I).pdf
Thiyagu K
 
Multithreading_in_C++ - std::thread, race condition
Multithreading_in_C++ - std::thread, race conditionMultithreading_in_C++ - std::thread, race condition
Multithreading_in_C++ - std::thread, race condition
Mohammed Sikander
 
"Protectable subject matters, Protection in biotechnology, Protection of othe...
"Protectable subject matters, Protection in biotechnology, Protection of othe..."Protectable subject matters, Protection in biotechnology, Protection of othe...
"Protectable subject matters, Protection in biotechnology, Protection of othe...
SACHIN R KONDAGURI
 
The approach at University of Liverpool.pptx
The approach at University of Liverpool.pptxThe approach at University of Liverpool.pptx
The approach at University of Liverpool.pptx
Jisc
 
2024.06.01 Introducing a competency framework for languag learning materials ...
2024.06.01 Introducing a competency framework for languag learning materials ...2024.06.01 Introducing a competency framework for languag learning materials ...
2024.06.01 Introducing a competency framework for languag learning materials ...
Sandy Millin
 
Synthetic Fiber Construction in lab .pptx
Synthetic Fiber Construction in lab .pptxSynthetic Fiber Construction in lab .pptx
Synthetic Fiber Construction in lab .pptx
Pavel ( NSTU)
 
Best Digital Marketing Institute In NOIDA
Best Digital Marketing Institute In NOIDABest Digital Marketing Institute In NOIDA
Best Digital Marketing Institute In NOIDA
deeptiverma2406
 

Recently uploaded (20)

Embracing GenAI - A Strategic Imperative
Embracing GenAI - A Strategic ImperativeEmbracing GenAI - A Strategic Imperative
Embracing GenAI - A Strategic Imperative
 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 
A Strategic Approach: GenAI in Education
A Strategic Approach: GenAI in EducationA Strategic Approach: GenAI in Education
A Strategic Approach: GenAI in Education
 
Biological Screening of Herbal Drugs in detailed.
Biological Screening of Herbal Drugs in detailed.Biological Screening of Herbal Drugs in detailed.
Biological Screening of Herbal Drugs in detailed.
 
CACJapan - GROUP Presentation 1- Wk 4.pdf
CACJapan - GROUP Presentation 1- Wk 4.pdfCACJapan - GROUP Presentation 1- Wk 4.pdf
CACJapan - GROUP Presentation 1- Wk 4.pdf
 
Overview on Edible Vaccine: Pros & Cons with Mechanism
Overview on Edible Vaccine: Pros & Cons with MechanismOverview on Edible Vaccine: Pros & Cons with Mechanism
Overview on Edible Vaccine: Pros & Cons with Mechanism
 
Language Across the Curriculm LAC B.Ed.
Language Across the  Curriculm LAC B.Ed.Language Across the  Curriculm LAC B.Ed.
Language Across the Curriculm LAC B.Ed.
 
Francesca Gottschalk - How can education support child empowerment.pptx
Francesca Gottschalk - How can education support child empowerment.pptxFrancesca Gottschalk - How can education support child empowerment.pptx
Francesca Gottschalk - How can education support child empowerment.pptx
 
Marketing internship report file for MBA
Marketing internship report file for MBAMarketing internship report file for MBA
Marketing internship report file for MBA
 
The French Revolution Class 9 Study Material pdf free download
The French Revolution Class 9 Study Material pdf free downloadThe French Revolution Class 9 Study Material pdf free download
The French Revolution Class 9 Study Material pdf free download
 
How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...
 
Lapbook sobre os Regimes Totalitários.pdf
Lapbook sobre os Regimes Totalitários.pdfLapbook sobre os Regimes Totalitários.pdf
Lapbook sobre os Regimes Totalitários.pdf
 
special B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdfspecial B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdf
 
Unit 2- Research Aptitude (UGC NET Paper I).pdf
Unit 2- Research Aptitude (UGC NET Paper I).pdfUnit 2- Research Aptitude (UGC NET Paper I).pdf
Unit 2- Research Aptitude (UGC NET Paper I).pdf
 
Multithreading_in_C++ - std::thread, race condition
Multithreading_in_C++ - std::thread, race conditionMultithreading_in_C++ - std::thread, race condition
Multithreading_in_C++ - std::thread, race condition
 
"Protectable subject matters, Protection in biotechnology, Protection of othe...
"Protectable subject matters, Protection in biotechnology, Protection of othe..."Protectable subject matters, Protection in biotechnology, Protection of othe...
"Protectable subject matters, Protection in biotechnology, Protection of othe...
 
The approach at University of Liverpool.pptx
The approach at University of Liverpool.pptxThe approach at University of Liverpool.pptx
The approach at University of Liverpool.pptx
 
2024.06.01 Introducing a competency framework for languag learning materials ...
2024.06.01 Introducing a competency framework for languag learning materials ...2024.06.01 Introducing a competency framework for languag learning materials ...
2024.06.01 Introducing a competency framework for languag learning materials ...
 
Synthetic Fiber Construction in lab .pptx
Synthetic Fiber Construction in lab .pptxSynthetic Fiber Construction in lab .pptx
Synthetic Fiber Construction in lab .pptx
 
Best Digital Marketing Institute In NOIDA
Best Digital Marketing Institute In NOIDABest Digital Marketing Institute In NOIDA
Best Digital Marketing Institute In NOIDA
 

Apereo OAE - Bootcamp

  • 3. OAE @ MIAMI • Sunday: Development Bootcamp • Monday @ 10am: State of the Project • Monday @ 11am: Project talks • Monday @ 1pm: Architectural Overview • Tuesday @ 1pm: The FOLD • Tuesday @ 2pm: Stories from the Frontlines of innovation • Wednesday @ 11.45am: Apereo & ESUP: Brothers in arms
  • 4. TOPICS 1. OAE Project 2. Hilary System Architecture 3. Node.js Exercise 4. Back-end Exercise 5. UI Architecture 6. Front-end Exercise
  • 5. Support for academic collaboration
 and networking
  • 7. PROJECT GOALS • User-led • Multi-tenant platform • Cloud-ready • SaaS • Cross-institutional • Used at large scale
  • 8. INTEGRATION • Integrate OAE with other systems • Integrate other systems with OAE
  • 9. MULTI-TENANCY • Support multiple institutions on same installation • Easily created, maintained and configured • Each institution has its own URL, branding, skinning and users • Share infrastructure • Institutions can share and collaborate with other institutions
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18. TOPICS 1. Project Goals 2. Hilary System Architecture 3. Node.js Exercise 4. Back-end Exercise 5. UI Architecture 6. Front-end Exercise
  • 19. OAE ARCHITECTURE The Apereo OAE project is made up of 2 distinct source code platforms: • “Hilary” • Server-side RESTful web platform that exposes the OAE services • Written entirely using server-side JavaScript in Node.js • “3akai-ux” • A client-side / browser platform that provides the HTML, JavaScript and CSS that make up the UI of the application
  • 21. APPLICATION SERVERS • Written in server-side JavaScript, run in Node.js • Light-Weight • Single-Threaded • Event-Driven • Non-Blocking • Uses callbacks/promises and an event queue to stash work to be done after I/O or other heavy processes complete • App servers can be configured into functional specialization: • User Request Processor • Activity Processor • Search Indexer • Preview Processor
  • 22. APACHE CASSANDRA • Authoritative data source • Provides high-availability and fault-tolerance without trading away performance • Regarding CAP theorem, Cassandra favours Availability and PartitionTolerance over Consistency, however consistency is tunable on the connection-level (we always use “quorum”) • Uses a ring topology to shard data across nodes, with configurable replication levels • Used by: Netflix, eBay,Twitter
  • 23. ELASTICSEARCH • Lucene-backed search platform • Built for incremental scaling and high-availability • Exposes HTTP RESTful APIs for indexing and querying documents • RESTful query interface uses JSON-based Query DSL • Powers all of Hilary search functions (Library Search, Members / Memberships Search) • Used by: GitHub, FourSquare, StackOverflow,WordPress
  • 24. RABBITMQ • Light-weight message queue platform written in Erlang • Used for distributing tasks to specialized application server instances • Supports active-active queue mirroring for high availability • Used by: Joyent
  • 25. REDIS • REmote DIctionary Server • Fills a variety of functionality in OAE: • Broadcast messaging (could move to RabbitMQ) • Locking • Caching of basic user profiles • Holds volatile activity aggregation data • Comes with no managed clustering solution (yet), but has slave replication for active fail- over • Some clients manage master-slave switching, and distributed reads for you • Used by:Twitter, Instagram, StackOverflow, Flickr
  • 26. ETHERPAD • Open Source collaborative editing application written in Node.js • Originally developed by Google and Mozilla • Licensed under Apache License v2 • Powers collaborative document editing in OAE • Collaborative documents sharded by ID to dedicated Etherpad instances
  • 27. NGINX • HTTP and reverse-proxy server • Used to distribute load to application servers, etherpad servers and stream file downloads • Useful rate-limiting features based on source IP • Proxy web socket connections to Hilary and Etherpad • Used by: Netflix,WordPress.com
  • 28. TOPICS 1. Project Goals 2. Hilary System Architecture 3. Node.js Exercise 4. Back-end Exercise 5. UI Architecture 6. Front-end Exercise
  • 29. IDE • OAETeam uses mostly SublimeText 2 and Aptana Studio 3 • http://www.sublimetext.com/2 • http://www.aptana.com/products/studio3/download • Useful things in an IDE: • Syntax highlighting • Automatic “linting” • Variable assistance (don’t expect much from dynamic scripting language) • File-system navigation
  • 30. GITHUB • OAETeam uses it for: • Version control • IssueTracking • Code Integration Workflow (Pull Requests) • TravisCI Integration for: • Running unit tests on all commits and pull requests • Packaging up and uploading all commits to Amazon S3 so they can be easily pulled down and deployed • Packaging up and uploading all tagged releases to Amazon S3 for production releases • Coveralls Integration for: • Reporting on trends in unit tests code coverage (e.g., indicates if test coverage drops from 90.2% to 90.15%)
  • 31. TOPICS 1. Project Goals 2. Hilary System Architecture 3. Node.js Exercise 4. Back-end Exercise 5. UI Architecture 6. Front-end Exercise
  • 32. GOAL
  • 33. NPM • Used to download packages and manage versions • Packages can be installed from: • Central NPM repo: npm install oae-tasklist • Git: npm install git+https://github.com/oaeproject/oae-tasklist • File-system directory: npm install ../oae-tasklist • package.json file describes metadata about a module and its dependencies • When a package is installed, they are placed either locally in a 
 ./node_modules directory or globally (npm install -g) in a shared location such as /usr/local/share/npm/lib/node_modules
  • 34. EXTENDING OAE WITH NPM • NPM module represents a logical set of functionality (e.g., a back-end REST API, or a set of related widgets) • NPM modules in 3akai-ux are searched for custom widgets • NPM modules in Hilary (that start with oae-) are searched for init.js and rest.js to integrate to the application container • New dependencies can be added to package.json file and then fetched / installed running “npm install”
  • 35. PACKAGE.JSON • Describes metadata about a package: • Version • Author • Unique package id • Required for installing a package as a module
  • 36. TOPICS 1. Project Goals 2. Hilary System Architecture 3. Node.js Exercise 4. Back-end Exercise 5. UI Architecture 6. Front-end Exercise
  • 39. UI ARCHITECTURE • In essence • HTML • CSS • JavaScript • Talks to Hilary via REST APIs
  • 40. WIDGETS • Modular UI components • HTML Fragment • JavaScript • CSS • I18n bundles • Manifest file • Loaded into DOM • Re-usable
  • 42. TOOLBOX JS frameworks CSS frameworks 3rd party plugins OAE UI API OAE CSS components
  • 43. TOOLBOX JS frameworks CSS frameworks 3rd party plugins OAE UI API OAE CSS components
  • 44. JS FRAMEWORKS • jQuery • RequireJS • underscore.js
  • 45. • DOM manipulation • Cross-browser abstraction • Events • Pretty much everything
  • 46. • Utility toolbelt • Manipulate objects, arrays, etc.
  • 47. • File and module loader • Load files on the fly • Necessity to keep things modular • Optimisation built-in
  • 48. TOOLBOX JS frameworks CSS frameworks 3rd party plugins OAE UI API OAE CSS components
  • 49. CSS FRAMEWORKS • Twitter Bootstrap • Font Awesome
  • 51. TWITTER BOOTSTRAP • Most popular CSS framework • Responsive (!) • Documentation • Basic components, styles, etc. • Override where necessary
  • 52. BOOTSTRAP GRID • Predefined classes make up rows and columns • 12 available columns to span • e.g., 3 x `.col-xs-4` columns • 4 media-queries Device Class Width Phones .col-xs- < 768px tablets .col-sm- ≥ 768px Desktops .col-md- ≥ 992px Desktops .col-lg- ≥ 1200px
  • 55. FONT AWESOME • Icon font • No more images • Style with CSS • Skinning • Easy
  • 56. TOOLBOX JS frameworks CSS frameworks 3rd party plugins OAE UI API OAE CSS components
  • 57. 3RD PARTY PLUG-INS • jQuery plug-ins • Bootstrap plug-ins
  • 58. 3RD PARTY PLUG-INS • Autosuggest • History.js • Fileupload • Validation • Markdown • etc.
  • 60. TOOLBOX JS frameworks CSS frameworks 3rd party plugins OAE UI API OAE CSS components
  • 61. OAE UI API • Wrapper for REST requests • Authentication • Content • Comments • Discussions • Following • Groups • Users • Admin
  • 62. OAE UI API • Utilities • i18n • l10n • Template rendering • Widget loading • Notifications • XSS escaping • etc.
  • 64. TOOLBOX JS frameworks CSS frameworks 3rd party plugins OAE UI API OAE CSS components
  • 65. OAE CSS COMPONENTS • Re-usable HTML fragments • Consistency • Design guide
  • 66. OAE CSS COMPONENTS • Clips • Visibility icon • Large options • Thumbnails • Clip • Left hand navigation • Tiles • List items • List header • Skinnable Panel
  • 67. WIDGET BEST PRACTICES • Namespacing • i18n • UITemplating
  • 68. NAMESPACING • Widgets share same container • Avoid clashes • Namespace: • HTML IDs • CSS classes • jQuery selectors
  • 69. I18N • UI available in multiple languages • Standard .properties files • 2 types of bundles • Core bundles • Widget bundles
  • 70. I18N Translation priority 1. Widget user language file 2. Widget default language file 3. Container user language file 4. Container user language file
  • 73. I18N
  • 74. L10N • API methods for localizing: • Number formatting • Date formatting
  • 75. UITEMPLATING • TrimPath • Avoids lots of DOM manipulation • Pass in JSON data • Supports if statements, for loops, etc.
  • 76. UITEMPLATING • Templates are defined in between <!-- --> • oae.api.util.template().render(...)
  • 77. UITEMPLATING • Template
 
 <div id="example_template"><!-- <h4>Welcome {firstName}.</h4> You are ${profile.age} years old --></div>
 • Input 
 oae.api.util.template().render($("#example_template"), { “firstName”: “John”, “profile”: { “placeofbirth”: “Los Angeles”, “age”: 45 } });
 • Result
 
 <h4>Welcome John.</h4>
 You are 45 years old.
  • 78. UITEMPLATING • Template
 
 <div id="example_template"><!-- {if score >= 5} <h1>Congratulations, you have succeeded</h1> {elseif score >= 0} <h1>Sorry, you have failed} {else} <h1>You have cheated</h1> {/if} --></div>
 • Input 
 oae.api.util.template().render($("#example_template"), { “score”: 6 });
 • Result
 
 <h1>Congratulations, you have succeeded!</h1>
  • 79. UITEMPLATING • Template

 <div id="example_template"><!-- {for conference in conferences} <div>${conference.name} (${conference.year})</div> {forelse} <div>No conferences have been organized</div> {/for} --></div>
 • Input 
 oae.api.util.template().renderTemplate($("#example_template"), { “conferences”: [
 {“name”: “Apereo Miami”, “year”: 2014},
 {“name”: “Apereo San Diego”, “year”: 2013},
 {“name”: “Sakai Atlanta”, “year”: 2012} ] });
 • Result

 <div>Apereo Miami (2014)</div> 
 <div>Apereo San Diego (2013)</div>
 <div>Sakai Atlanta (2012)</div>
  • 80. UI RELEASE PROCESSES • Grunt • Task-based build system implemented in JavaScript • Similar in theory of operation to Make, Rake • Rich ecosystem of plug-ins to do most tasks • Easy to implement new task when a plugin doesn’t exist yet • Used for running test suites, production builds, linting tools
  • 81. UI RELEASE PROCESSES • Production Build • Optimizes the static assets to reduce throughput, request frequency, and optimize caching across versions • Require.js Optimization: • Concatenate JavaScript dependencies (reduces number of web requests significantly) • Minify / Uglify JavaScript files (reduces payload sizes significantly, even when gzip enabled on web server) • Hash optimization: • Hash the contents of static assets and append result to the filename, then cache them indefinitely on the browsers • When the files change, the hash in the filename changes to force reloading of the updated asset • If files never change across version, client never reloads file until their cache is cleared
  • 82. TOPICS 1. Project Goals 2. Hilary System Architecture 3. Node.js Exercise 4. Back-end Exercise 5. UI Architecture 6. Front-end Exercise