YUIConf2013: Introducing The "Modown" Project

Caridy Patino
Caridy PatinoPrincipal Software Engineer at Yahoo! Search
#yuiconf
#modown
@caridy
http://www.flickr.com/photos/diverkeith/379540273/
the web platform
“modown”
YUIConf2013: Introducing The "Modown" Project
motivations
web applications becoming
single-page applications
YAF success
mojito constraints
modown components

mojito-next
(yui, search)

hermes
(flickr)

assembler
(touchdown)
Rendr
AngularJS

Backbone

EmberJS

Meteor
DerbyJS

YAF

React

Mojito
single-page applications
YUIConf2013: Introducing The "Modown" Project
users can switch between
different states in no time
... and doing so without breaking
any of the core features of the web
(history, url, openness, seo)
back to our roots
building blocks rather
than prescriptions
libraries over frameworks
development on the open
goals
building blocks for
SPA written in nodejs
extending express
rendering initial state on the server,
then let the browser takes over
today
13 modules in NPM
modown components
expressview expressyui
expressannotation

expressmap

express expresscombo

expressstate

expressslash

locatoryui

locatormicro

Locator
locatordust

https://npmjs.org/search?q=modown

locatorlang

locatorhandlebars
2 major customers in production
(flickr and media)
all major changes in YAF
are already in place

https://github.com/yui/yui3/blob/master/src/app/HISTORY.md
no docs, only component level
docs and examples in github
examples
express-yui
for yui core modules
var express = require('express'),
app

= express();

 

app.get('/', function (req, res, next) {
// `res.locals` holds all data
// available on the template
});
app.listen(3000);
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);

app.get('/', function (req, res, next) {
// `res.locals` holds all data
// available on the template
});
app.listen(3000);
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);

app.use(expyui.expose());

app.get('/', function (req, res, next) {
// `res.locals.state.toString()` will be
// available on the template as a javascript blob
});
app.listen(3000);
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);
app.yui.setCoreFromAppOrigin();

app.use(expyui.expose());

app.get('/', function (req, res, next) {
// `res.locals.state.toString()` will be
// available on the template as a javascript blob
});
app.listen(3000);
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);
app.yui.setCoreFromAppOrigin();

app.use(expyui.expose());

app.yui.applyConfig({ fetchCSS: false });

app.get('/', function (req, res, next) {
// `res.locals.state.toString()` will be
// available on the template as a javascript blob
});
app.listen(3000);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>usage of `express-yui`</title>
<script>{{{state}}}</script>
// if using handlebars, or
<script><%== state %></script> // if using micro, or
<script>{state|s}</script>
// if using dust

</head>
<body>
<p>non-blocking way to inject yui seed files</p>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>usage of `express-yui`</title>
<script>{{{state}}}</script>
<script>
app.yui.ready(function (err) {
// `YUI().use()` and `app.yui.use()` are available
});
</script>
</head>
<body>
<p>non-blocking way to inject yui seed files</p>
</body>
</html>
express-yui
for custom yui modules
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);
app.use(expyui.expose());

app.get('/item/:id', function (req, res, next) {

});

app.listen(3000);
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);
app.use(expyui.expose());

app.get('/item/:id', function (req, res, next) {

});
app.yui.ready(function (err) {
app.listen(3000);
});
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);
app.use(expyui.expose());

app.get('/item/:id', function (req, res, next) {
app.yui.use('model-foo', function (Y) {
var model = new Y.ModelFoo();

});
});
app.yui.ready(function (err) {
app.listen(3000);
});
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);
app.use(expyui.expose());

app.get('/item/:id', function (req, res, next) {
app.yui.use('model-foo', function (Y) {
var model = new Y.ModelFoo();
model.load(req.params.id, function (err) {
res.render('view-name', model.toJSON());
});
});
});
app.yui.ready(function (err) {
app.listen(3000);
});
var express = require('express'),
expyui = require('express-yui'),
app
= express();
 
expyui.extend(app);
app.use(expyui.expose());

app.get('/item/:id', function (req, res, next) {
app.yui.use('model-foo', function (Y) {
var model = new Y.ModelFoo();
model.load(req.params.id, function (err) {
res.expose(model,'fooData'); //window.app.fooData
res.render('view-name', model.toJSON());
});
});
});
app.yui.ready(function (err) {
app.listen(3000);
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>usage of `express-yui` and `locator-yui`</title>
<script>{{{state}}}</script>
<script>
app.yui.ready(function (err) {
app.yui.use('model-foo', function (Y) {
});
});
</script>
</head>
<body>
<p>non-blocking way to inject yui seed files</p>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>usage of `express-yui` and `locator-yui`</title>
<script>{{{state}}}</script>
<script>
app.yui.ready(function (err) {
app.yui.use('model-foo', function (Y) {
var model = new Y.ModelFoo(app.fooData);
});
});
</script>
</head>
<body>
<p>non-blocking way to inject yui seed files</p>
</body>
</html>
filesystem abstraction
with locator
locator gives semantic meaning
to files on the filesystem
filesystem analysis to understand
the capabilities of the app
on the making...
Intl
composition
ES6 modules
UI data bindings
modownization of YUI
some final notes
modown is not a framework
modown is not a product
modown is just a principle
Thanks
@caridy
1 of 60

Recommended

GKAC 2014 Nov. - 안드로이드 5.0의 새로운 기능 by
GKAC 2014 Nov. - 안드로이드 5.0의 새로운 기능GKAC 2014 Nov. - 안드로이드 5.0의 새로운 기능
GKAC 2014 Nov. - 안드로이드 5.0의 새로운 기능GDG Korea
1.3K views49 slides
Ar by
ArAr
ArBobby Chandra
628 views2 slides
Yahoo! Mojito @JSDC by
Yahoo! Mojito @JSDCYahoo! Mojito @JSDC
Yahoo! Mojito @JSDCDavid Shariff
3.4K views49 slides
Progresywny WordPress by
Progresywny WordPressProgresywny WordPress
Progresywny WordPressWordCamp Polska
371 views29 slides
Mojito: Building for multiple devices using a single language and framework by
Mojito: Building for multiple devices using a single language and frameworkMojito: Building for multiple devices using a single language and framework
Mojito: Building for multiple devices using a single language and frameworkDiego Ferreiro Val
419 views20 slides
Fluid mechanic white (cap2.1) by
Fluid mechanic   white (cap2.1)Fluid mechanic   white (cap2.1)
Fluid mechanic white (cap2.1)Raul Garcia
57.1K views44 slides

More Related Content

Similar to YUIConf2013: Introducing The "Modown" Project

Microservices for the Masses with Spring Boot, JHipster, and OAuth - Jforum S... by
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Jforum S...Microservices for the Masses with Spring Boot, JHipster, and OAuth - Jforum S...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Jforum S...Matt Raible
150 views75 slides
Taking your Web App for a walk by
Taking your Web App for a walkTaking your Web App for a walk
Taking your Web App for a walkJens-Christian Fischer
3.5K views93 slides
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl... by
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...Matt Raible
237 views74 slides
Arquitetura de Front-end em Aplicações de Larga Escala by
Arquitetura de Front-end em Aplicações de Larga EscalaArquitetura de Front-end em Aplicações de Larga Escala
Arquitetura de Front-end em Aplicações de Larga EscalaEduardo Shiota Yasuda
3K views108 slides
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения by
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложенияCodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложенияCodeFest
2.3K views92 slides
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We... by
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...Matt Raible
355 views73 slides

Similar to YUIConf2013: Introducing The "Modown" Project(20)

Microservices for the Masses with Spring Boot, JHipster, and OAuth - Jforum S... by Matt Raible
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Jforum S...Microservices for the Masses with Spring Boot, JHipster, and OAuth - Jforum S...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Jforum S...
Matt Raible150 views
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl... by Matt Raible
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...
Matt Raible237 views
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения by CodeFest
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложенияCodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения
CodeFest2.3K views
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We... by Matt Raible
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...
Matt Raible355 views
Modular Test-driven SPAs with Spring and AngularJS by Gunnar Hillert
Modular Test-driven SPAs with Spring and AngularJSModular Test-driven SPAs with Spring and AngularJS
Modular Test-driven SPAs with Spring and AngularJS
Gunnar Hillert3.8K views
JavaScript Dependencies, Modules & Browserify by Johan Nilsson
JavaScript Dependencies, Modules & BrowserifyJavaScript Dependencies, Modules & Browserify
JavaScript Dependencies, Modules & Browserify
Johan Nilsson8.4K views
HTML5 Who what where when why how by brucelawson
HTML5 Who what where when why howHTML5 Who what where when why how
HTML5 Who what where when why how
brucelawson1.8K views
Juzu framework by Kien Nguyen
Juzu frameworkJuzu framework
Juzu framework
Kien Nguyen1.3K views
Universal JS Web Applications with React - Luciano Mammino - Codemotion Rome ... by Luciano Mammino
Universal JS Web Applications with React - Luciano Mammino - Codemotion Rome ...Universal JS Web Applications with React - Luciano Mammino - Codemotion Rome ...
Universal JS Web Applications with React - Luciano Mammino - Codemotion Rome ...
Luciano Mammino330 views
Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti... by Codemotion
Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...
Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...
Codemotion1.1K views
BlackBerry DevCon 2011 - PhoneGap and WebWorks by mwbrooks
BlackBerry DevCon 2011 - PhoneGap and WebWorksBlackBerry DevCon 2011 - PhoneGap and WebWorks
BlackBerry DevCon 2011 - PhoneGap and WebWorks
mwbrooks987 views
Front End Development for Back End Java Developers - Jfokus 2020 by Matt Raible
Front End Development for Back End Java Developers - Jfokus 2020Front End Development for Back End Java Developers - Jfokus 2020
Front End Development for Back End Java Developers - Jfokus 2020
Matt Raible181 views
Angular server side rendering - Strategies & Technics by Eliran Eliassy
Angular server side rendering - Strategies & Technics Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics
Eliran Eliassy1.1K views
Java Technology by ifnu bima
Java TechnologyJava Technology
Java Technology
ifnu bima749 views
Building Single Page Application (SPA) with Symfony2 and AngularJS by Antonio Peric-Mazar
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJS
Primefaces mobile users_guide_0_9 by ednilsoncampos
Primefaces mobile users_guide_0_9Primefaces mobile users_guide_0_9
Primefaces mobile users_guide_0_9
ednilsoncampos77 views

More from Caridy Patino

MiamiJS - The Future of JavaScript by
MiamiJS - The Future of JavaScriptMiamiJS - The Future of JavaScript
MiamiJS - The Future of JavaScriptCaridy Patino
761 views50 slides
CSP Level 2: Defensa en profundidad para aplicaciones Web by
CSP Level 2: Defensa en profundidad para aplicaciones WebCSP Level 2: Defensa en profundidad para aplicaciones Web
CSP Level 2: Defensa en profundidad para aplicaciones WebCaridy Patino
853 views52 slides
The rise of single-page applications by
The rise of single-page applicationsThe rise of single-page applications
The rise of single-page applicationsCaridy Patino
2.5K views60 slides
FOWA2013: The rise of single page applications by
FOWA2013: The rise of single page applicationsFOWA2013: The rise of single page applications
FOWA2013: The rise of single page applicationsCaridy Patino
7.9K views50 slides
FEDM Meetup: Introducing Mojito by
FEDM Meetup: Introducing MojitoFEDM Meetup: Introducing Mojito
FEDM Meetup: Introducing MojitoCaridy Patino
719 views55 slides
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife by
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - RecifeThe challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - RecifeCaridy Patino
1.1K views82 slides

More from Caridy Patino(12)

MiamiJS - The Future of JavaScript by Caridy Patino
MiamiJS - The Future of JavaScriptMiamiJS - The Future of JavaScript
MiamiJS - The Future of JavaScript
Caridy Patino761 views
CSP Level 2: Defensa en profundidad para aplicaciones Web by Caridy Patino
CSP Level 2: Defensa en profundidad para aplicaciones WebCSP Level 2: Defensa en profundidad para aplicaciones Web
CSP Level 2: Defensa en profundidad para aplicaciones Web
Caridy Patino853 views
The rise of single-page applications by Caridy Patino
The rise of single-page applicationsThe rise of single-page applications
The rise of single-page applications
Caridy Patino2.5K views
FOWA2013: The rise of single page applications by Caridy Patino
FOWA2013: The rise of single page applicationsFOWA2013: The rise of single page applications
FOWA2013: The rise of single page applications
Caridy Patino7.9K views
FEDM Meetup: Introducing Mojito by Caridy Patino
FEDM Meetup: Introducing MojitoFEDM Meetup: Introducing Mojito
FEDM Meetup: Introducing Mojito
Caridy Patino719 views
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife by Caridy Patino
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - RecifeThe challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
Caridy Patino1.1K views
YUIConf2012: Mojito for YUI Developers by Caridy Patino
YUIConf2012: Mojito for YUI DevelopersYUIConf2012: Mojito for YUI Developers
YUIConf2012: Mojito for YUI Developers
Caridy Patino2K views
BayJax: Expanding Yahoo! Axis across 3 screens by Caridy Patino
BayJax: Expanding Yahoo! Axis across 3 screensBayJax: Expanding Yahoo! Axis across 3 screens
BayJax: Expanding Yahoo! Axis across 3 screens
Caridy Patino1.1K views
HTML5 summit - DevCon5 - Miami - Feb 2, 2012 by Caridy Patino
HTML5 summit - DevCon5 - Miami - Feb 2, 2012HTML5 summit - DevCon5 - Miami - Feb 2, 2012
HTML5 summit - DevCon5 - Miami - Feb 2, 2012
Caridy Patino789 views
Conquistando el Servidor con Node.JS by Caridy Patino
Conquistando el Servidor con Node.JSConquistando el Servidor con Node.JS
Conquistando el Servidor con Node.JS
Caridy Patino1.8K views
YUI 3 Loading Strategies - YUIConf2010 by Caridy Patino
YUI 3 Loading Strategies - YUIConf2010YUI 3 Loading Strategies - YUIConf2010
YUI 3 Loading Strategies - YUIConf2010
Caridy Patino1.9K views

Recently uploaded

Design Driven Network Assurance by
Design Driven Network AssuranceDesign Driven Network Assurance
Design Driven Network AssuranceNetwork Automation Forum
19 views42 slides
Melek BEN MAHMOUD.pdf by
Melek BEN MAHMOUD.pdfMelek BEN MAHMOUD.pdf
Melek BEN MAHMOUD.pdfMelekBenMahmoud
17 views1 slide
Business Analyst Series 2023 - Week 3 Session 5 by
Business Analyst Series 2023 -  Week 3 Session 5Business Analyst Series 2023 -  Week 3 Session 5
Business Analyst Series 2023 - Week 3 Session 5DianaGray10
345 views20 slides
Five Things You SHOULD Know About Postman by
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About PostmanPostman
38 views43 slides
Evolving the Network Automation Journey from Python to Platforms by
Evolving the Network Automation Journey from Python to PlatformsEvolving the Network Automation Journey from Python to Platforms
Evolving the Network Automation Journey from Python to PlatformsNetwork Automation Forum
17 views21 slides
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading... by
Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading...The Digital Insurer
24 views52 slides

Recently uploaded(20)

Business Analyst Series 2023 - Week 3 Session 5 by DianaGray10
Business Analyst Series 2023 -  Week 3 Session 5Business Analyst Series 2023 -  Week 3 Session 5
Business Analyst Series 2023 - Week 3 Session 5
DianaGray10345 views
Five Things You SHOULD Know About Postman by Postman
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About Postman
Postman38 views
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading... by The Digital Insurer
Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... by Bernd Ruecker
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
Bernd Ruecker48 views
Data Integrity for Banking and Financial Services by Precisely
Data Integrity for Banking and Financial ServicesData Integrity for Banking and Financial Services
Data Integrity for Banking and Financial Services
Precisely29 views
2024: A Travel Odyssey The Role of Generative AI in the Tourism Universe by Simone Puorto
2024: A Travel Odyssey The Role of Generative AI in the Tourism Universe2024: A Travel Odyssey The Role of Generative AI in the Tourism Universe
2024: A Travel Odyssey The Role of Generative AI in the Tourism Universe
Simone Puorto13 views
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f... by TrustArc
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc72 views
Special_edition_innovator_2023.pdf by WillDavies22
Special_edition_innovator_2023.pdfSpecial_edition_innovator_2023.pdf
Special_edition_innovator_2023.pdf
WillDavies2218 views
"Running students' code in isolation. The hard way", Yurii Holiuk by Fwdays
"Running students' code in isolation. The hard way", Yurii Holiuk "Running students' code in isolation. The hard way", Yurii Holiuk
"Running students' code in isolation. The hard way", Yurii Holiuk
Fwdays24 views
PharoJS - Zürich Smalltalk Group Meetup November 2023 by Noury Bouraqadi
PharoJS - Zürich Smalltalk Group Meetup November 2023PharoJS - Zürich Smalltalk Group Meetup November 2023
PharoJS - Zürich Smalltalk Group Meetup November 2023
Noury Bouraqadi139 views
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院 by IttrainingIttraining
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院

YUIConf2013: Introducing The "Modown" Project