SlideShare une entreprise Scribd logo
1  sur  82
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

ActiveMQ 5.9.x new features
ActiveMQ 5.9.x new featuresActiveMQ 5.9.x new features
ActiveMQ 5.9.x new featuresChristian Posta
 
2015 spice world_london_breakout
2015 spice world_london_breakout2015 spice world_london_breakout
2015 spice world_london_breakoutThomas Lee
 
Camel oneactivemq posta-final
Camel oneactivemq posta-finalCamel oneactivemq posta-final
Camel oneactivemq posta-finalChristian Posta
 
2016 spice world_london_breakout
2016 spice world_london_breakout2016 spice world_london_breakout
2016 spice world_london_breakoutThomas 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 TradeLuis 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 ScalaManish Pandit
 
Why real integration developers ride Camels
Why real integration developers ride CamelsWhy real integration developers ride Camels
Why real integration developers ride CamelsChristian Posta
 
Monitor Micro-service with MicroProfile metrics
Monitor Micro-service with MicroProfile metricsMonitor Micro-service with MicroProfile metrics
Monitor Micro-service with MicroProfile metricsRudy De Busscher
 
Simplify integrations-final-pdf
Simplify integrations-final-pdfSimplify integrations-final-pdf
Simplify integrations-final-pdfChristian 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 2014Arun 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 Fabric8Christian 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 StartupRudy 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
 
Microservices with WildFly Swarm - JavaSI 2016
Microservices with WildFly Swarm - JavaSI 2016Microservices with WildFly Swarm - JavaSI 2016
Microservices with WildFly Swarm - JavaSI 2016Charles Moulliard
 

Tendances (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
 

Similaire à 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
 
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 appsAmazon 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
 
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 FelixMarcel 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 AWSAWS 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 PlatformAntonio 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 PractisesMichel 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 GrazInfralovers
 
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 PlatformNuxeo
 
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 ProposalMike Slinn
 

Similaire à 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
 

Plus de 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 projectNicolaas Matthijs
 
Apereo OAE - Architectural overview
Apereo OAE - Architectural overviewApereo OAE - Architectural overview
Apereo OAE - Architectural overviewNicolaas 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 RadlinskiNicolaas Matthijs
 

Plus de 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
 

Dernier

Science 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxScience 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxMaryGraceBautista27
 
Judging the Relevance and worth of ideas part 2.pptx
Judging the Relevance  and worth of ideas part 2.pptxJudging the Relevance  and worth of ideas part 2.pptx
Judging the Relevance and worth of ideas part 2.pptxSherlyMaeNeri
 
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...Postal Advocate Inc.
 
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdfLike-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdfMr Bounab Samir
 
Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Celine George
 
Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...Jisc
 
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxMULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxAnupkumar Sharma
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...JhezDiaz1
 
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdfAMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdfphamnguyenenglishnb
 
Choosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for ParentsChoosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for Parentsnavabharathschool99
 
ENGLISH6-Q4-W3.pptxqurter our high choom
ENGLISH6-Q4-W3.pptxqurter our high choomENGLISH6-Q4-W3.pptxqurter our high choom
ENGLISH6-Q4-W3.pptxqurter our high choomnelietumpap1
 
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYKayeClaireEstoconing
 
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTSGRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTSJoshuaGantuangco2
 
Karra SKD Conference Presentation Revised.pptx
Karra SKD Conference Presentation Revised.pptxKarra SKD Conference Presentation Revised.pptx
Karra SKD Conference Presentation Revised.pptxAshokKarra1
 
Keynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designKeynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designMIPLM
 
Concurrency Control in Database Management system
Concurrency Control in Database Management systemConcurrency Control in Database Management system
Concurrency Control in Database Management systemChristalin Nelson
 
Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Seán Kennedy
 

Dernier (20)

Science 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxScience 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptx
 
Judging the Relevance and worth of ideas part 2.pptx
Judging the Relevance  and worth of ideas part 2.pptxJudging the Relevance  and worth of ideas part 2.pptx
Judging the Relevance and worth of ideas part 2.pptx
 
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
 
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdfLike-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
 
Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17
 
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
 
Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...
 
FINALS_OF_LEFT_ON_C'N_EL_DORADO_2024.pptx
FINALS_OF_LEFT_ON_C'N_EL_DORADO_2024.pptxFINALS_OF_LEFT_ON_C'N_EL_DORADO_2024.pptx
FINALS_OF_LEFT_ON_C'N_EL_DORADO_2024.pptx
 
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxMULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
 
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdfAMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
 
Choosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for ParentsChoosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for Parents
 
ENGLISH6-Q4-W3.pptxqurter our high choom
ENGLISH6-Q4-W3.pptxqurter our high choomENGLISH6-Q4-W3.pptxqurter our high choom
ENGLISH6-Q4-W3.pptxqurter our high choom
 
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
 
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTSGRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
 
Karra SKD Conference Presentation Revised.pptx
Karra SKD Conference Presentation Revised.pptxKarra SKD Conference Presentation Revised.pptx
Karra SKD Conference Presentation Revised.pptx
 
Keynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designKeynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-design
 
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptxYOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
 
Concurrency Control in Database Management system
Concurrency Control in Database Management systemConcurrency Control in Database Management system
Concurrency Control in Database Management system
 
Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...Student Profile Sample - We help schools to connect the data they have, with ...
Student Profile Sample - We help schools to connect the data they have, with ...
 

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