SlideShare a Scribd company logo
From web sites
to web apps
to mobile apps
 An interesting journey
The past: Web sites
Today: Web apps
Today: Web apps
●   Single page applications
●   Communication via API
●   "Backend as a service"
●   Client side MV*-Frameworks
●   Templates rendered on the client
●   Data on the wire
Going mobile




With web technologies
Pick one
      First fundamental question:


           HTML / CSS / JS
                 vs.
           Pure JavaScript
Pick one
      First fundamental decision:


           HTML / CSS / JS
                 vs.
           Pure JavaScript
A tough choice
● Javascript MV* Libraries / Frameworks
  ○ Backbone
  ○ Ember
  ○ Knockout
  ○ Angular
● UI Frameworks
  ○ Lungo
  ○ Kendo
  ○ jQTouch
  ○ jQuery mobile
● Deployment frameworks
  ○ PhoneGap
  ○ Sencha
  ○ Calatrava
  ○ The M-Project
A tough choice
● Javascript MV* Libraries / Frameworks
  ○ Backbone
  ○ Ember
  ○ Knockout
  ○ Angular
● UI Frameworks
  ○ Lungo
  ○ Kendo
  ○ jQTouch
  ○ jQuery mobile
● Deployment frameworks
  ○ PhoneGap
  ○ Sencha
  ○ Calatrava
  ○ The M-Project
Problems with picking the right mix
● overlap between the three:
  ○ multiple frameworks trying to be clever
  ○ e.g. Calatrava: Deployment & UI
  ○ e.g. Kendo: MVVM & UI
● finding good combinations:
  ○   Knockout & Lungo
  ○   Knockout & Kendo
  ○   Angular & iUI
  ○   Angular & Lungo
Our stack



             Rails-API
            Angular JS
              Lungo
            PhoneGap
Our stack



         Rails-API
        Angular JS
   Lungo-Angular-Bridge
          Lungo
        PhoneGap
What's the bridge?



      Lungo          Angular


              Routing
Two choices:
● I want the Lungo routing
  ○ The Angular-Lungo-Adapter is for you
● I want the Angular routing
  ○ There is nothing for that
Two choices:
● I want the Lungo routing
  ○ The Angular-Lungo-Adapter is for you
● I want the Angular routing
  ○ There was nothing for that


Centralway proudly presents...
Lungo-Angular-Bridge
           Batteries included!
https://github.com/centralway/lungo-
            angular-bridge
LAB - Lungo Angular Bridge
● Allows to use Lungo fancyness together with
  Angular awesomeness
● Use Angular routes but leverage Lungo
  transitions
● Comes with a set of examples
● Extends Angular with the lab-view directive
Batteries included - get going!
Demo time!
Fasten your seatbelts
Experiences & Learnings
        from us
Things you may hear
● "But it's soo slooooow"

● "What if you need something native?"

● "How does deployment work?"

● "But it won't look&feel native!"
Things you may say
● "But it's soo slooooow"
○ Only in a few cases, e.g. SVG on iPhone 4
● "What if you need something native?"
○ You can do that >> Phonegap Plugins
● "How does deployment work?"
○ Either manually or via App Stores


● "But it won't look&feel native!"
○ This depends solely on the UI Framework
  used - e.g. Lungo makes it feel native
In the trenches




The pitfalls of mobile development
Round 1: iframes vs. iOS
<iframe src="http://example.com"></iframe>
<a href="http://somesite.com" target="_blank">Open</a>


What will happen?
● Android
     ○ iframe loads in the page
     ○ link opens a browser window
●   iOS
     ○ "stay-in-webview=false" (default)
        ■ iframe opens a new browser window
        ■ link opens a new browser window
     ○ "stay-in-webview=true"
        ■ iframe opens in the page
        ■ link opens in the page
Round 1: iframes vs. iOS
● 4 possible solutions
  a.   using "access" rule in Config.xml
  b.   using "InApp-Browser" (window.open)
  c.   specify target="_self" for iframe
  d.   using ChildBrowser plugin
Round 1: iframe vs. iOS
● 4 possible solutions
  a.   using "access" rule in Config.xml
  b.   using "InApp-Browser" (window.open)
  c.   specify target="_self" for iframe
  d.   using ChildBrowser plugin
Round 2: "HTML5 routing"
$locationProvider.html5Mode(true);
Round 2: "HTML5 routing"
$locationProvider.html5Mode(false);



● HTML 5 routing not supported properly
    ○ weird behaviour
    ○ non-routing relating things go wrong
    ○ no error messages / warnings
●   Setting to "false" uses "#/..."-style routing instead of
    "real" routing ("/...")
General conclusions
● PhoneGap plugins <3
  ○ when it doesn't exist in PhoneGap
  ○ when it is too slow in HTML / CSS / JS
● Active communities & many resources
● Web is a powerful platform
Wrap-up
● Mobile is on the rise
● Web technologies rock!
● Find the right mix of Frameworks for your
  needs is hard
● Be aware of potential pitfalls
● Leverage the active communities to work
  around problems
From website to mobile app - a journey

More Related Content

What's hot

Codemotion Rome 2016 - Polymer
Codemotion Rome 2016 - PolymerCodemotion Rome 2016 - Polymer
Codemotion Rome 2016 - Polymer
Maurizio Mangione
 
(WS11) Saša Matijašić (LogIT internet usluge): Quo Vadis, Browser?*
(WS11) Saša Matijašić (LogIT internet usluge): Quo Vadis, Browser?*(WS11) Saša Matijašić (LogIT internet usluge): Quo Vadis, Browser?*
(WS11) Saša Matijašić (LogIT internet usluge): Quo Vadis, Browser?*
Web::Strategija
 
Building your first WordPress plugin
Building your first WordPress pluginBuilding your first WordPress plugin
Building your first WordPress plugin
Justin Foell
 
NodeJs Intro - JavaScript Zagreb Meetup #1
NodeJs Intro - JavaScript Zagreb Meetup #1NodeJs Intro - JavaScript Zagreb Meetup #1
NodeJs Intro - JavaScript Zagreb Meetup #1
Tomislav Capan
 

What's hot (20)

Thinkful FrontEnd Crash Course - HTML & CSS
Thinkful FrontEnd Crash Course - HTML & CSSThinkful FrontEnd Crash Course - HTML & CSS
Thinkful FrontEnd Crash Course - HTML & CSS
 
Beg, Borrow or Steal: The Art of Flashing Without Flashing
Beg, Borrow or Steal: The Art of Flashing Without FlashingBeg, Borrow or Steal: The Art of Flashing Without Flashing
Beg, Borrow or Steal: The Art of Flashing Without Flashing
 
[DevDay 2016] Web Components, is it the future of Web Development? Speaker: V...
[DevDay 2016] Web Components, is it the future of Web Development? Speaker: V...[DevDay 2016] Web Components, is it the future of Web Development? Speaker: V...
[DevDay 2016] Web Components, is it the future of Web Development? Speaker: V...
 
Drupal Day 2011 - Features: una vita felice
Drupal Day 2011 - Features: una vita feliceDrupal Day 2011 - Features: una vita felice
Drupal Day 2011 - Features: una vita felice
 
Cutting edge of web technology
Cutting edge of web technologyCutting edge of web technology
Cutting edge of web technology
 
WooCommerce: Customization FAQ
WooCommerce: Customization FAQWooCommerce: Customization FAQ
WooCommerce: Customization FAQ
 
Codemotion Rome 2016 - Polymer
Codemotion Rome 2016 - PolymerCodemotion Rome 2016 - Polymer
Codemotion Rome 2016 - Polymer
 
Accessible client side routing - Nick Colley
Accessible client side routing - Nick ColleyAccessible client side routing - Nick Colley
Accessible client side routing - Nick Colley
 
(WS11) Saša Matijašić (LogIT internet usluge): Quo Vadis, Browser?*
(WS11) Saša Matijašić (LogIT internet usluge): Quo Vadis, Browser?*(WS11) Saša Matijašić (LogIT internet usluge): Quo Vadis, Browser?*
(WS11) Saša Matijašić (LogIT internet usluge): Quo Vadis, Browser?*
 
Thinkful DC FrontEnd Crash Course - HTML & CSS
Thinkful DC FrontEnd Crash Course - HTML & CSSThinkful DC FrontEnd Crash Course - HTML & CSS
Thinkful DC FrontEnd Crash Course - HTML & CSS
 
Frontend Crash Course
Frontend Crash CourseFrontend Crash Course
Frontend Crash Course
 
Thinkful FrontEnd Crash Course - HTML & CSS
Thinkful FrontEnd Crash Course - HTML & CSSThinkful FrontEnd Crash Course - HTML & CSS
Thinkful FrontEnd Crash Course - HTML & CSS
 
Building your first WordPress plugin
Building your first WordPress pluginBuilding your first WordPress plugin
Building your first WordPress plugin
 
자바스크립트 공부를 위한 책 소개
자바스크립트 공부를 위한 책 소개자바스크립트 공부를 위한 책 소개
자바스크립트 공부를 위한 책 소개
 
Tars Tsuiper - When Drupal is not needed. Try to use Symfony.
Tars Tsuiper - When Drupal is not needed. Try to use Symfony.Tars Tsuiper - When Drupal is not needed. Try to use Symfony.
Tars Tsuiper - When Drupal is not needed. Try to use Symfony.
 
CV_2016_en
CV_2016_enCV_2016_en
CV_2016_en
 
Webinar: Next Generation, Data-Driven Plugin and Theme Development
Webinar: Next Generation, Data-Driven Plugin and Theme DevelopmentWebinar: Next Generation, Data-Driven Plugin and Theme Development
Webinar: Next Generation, Data-Driven Plugin and Theme Development
 
Full stack java script development
Full stack java script developmentFull stack java script development
Full stack java script development
 
Frontend Crash Course
Frontend Crash CourseFrontend Crash Course
Frontend Crash Course
 
NodeJs Intro - JavaScript Zagreb Meetup #1
NodeJs Intro - JavaScript Zagreb Meetup #1NodeJs Intro - JavaScript Zagreb Meetup #1
NodeJs Intro - JavaScript Zagreb Meetup #1
 

Similar to From website to mobile app - a journey

HTML5 - The Good, the Bad, the Ugly
HTML5 - The Good, the Bad, the UglyHTML5 - The Good, the Bad, the Ugly
HTML5 - The Good, the Bad, the Ugly
Mario Heiderich
 

Similar to From website to mobile app - a journey (20)

Beyond responsive design - UI for the modern web application
Beyond responsive design - UI for the modern web applicationBeyond responsive design - UI for the modern web application
Beyond responsive design - UI for the modern web application
 
Phone gap & jquerymobile
Phone gap & jquerymobilePhone gap & jquerymobile
Phone gap & jquerymobile
 
Ionic
IonicIonic
Ionic
 
A Period of Transition
A Period of TransitionA Period of Transition
A Period of Transition
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
Listfy Sprint #0
Listfy Sprint #0Listfy Sprint #0
Listfy Sprint #0
 
Globant Week Cali - Entendiendo el desarrollo Front-end del mundo moderno.
Globant Week Cali - Entendiendo el desarrollo Front-end del mundo moderno.Globant Week Cali - Entendiendo el desarrollo Front-end del mundo moderno.
Globant Week Cali - Entendiendo el desarrollo Front-end del mundo moderno.
 
Getting Started With AngularJS
Getting Started With AngularJSGetting Started With AngularJS
Getting Started With AngularJS
 
Top 10 Incredible Websites Built With Angular Framework
Top 10 Incredible Websites Built With Angular FrameworkTop 10 Incredible Websites Built With Angular Framework
Top 10 Incredible Websites Built With Angular Framework
 
Building SPAs with AngularJS
Building SPAs with AngularJSBuilding SPAs with AngularJS
Building SPAs with AngularJS
 
APIs for mobile
APIs for mobileAPIs for mobile
APIs for mobile
 
YUI App Framework
YUI App FrameworkYUI App Framework
YUI App Framework
 
Stapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San FranciscoStapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San Francisco
 
Recent Market Trends in software development
Recent Market Trends in software developmentRecent Market Trends in software development
Recent Market Trends in software development
 
uMobile, I’m Mobile, We’re All Mobile!!
uMobile, I’m Mobile, We’re All Mobile!!uMobile, I’m Mobile, We’re All Mobile!!
uMobile, I’m Mobile, We’re All Mobile!!
 
HTML5 - The Good, the Bad, the Ugly
HTML5 - The Good, the Bad, the UglyHTML5 - The Good, the Bad, the Ugly
HTML5 - The Good, the Bad, the Ugly
 
A brief description about Angular
A brief description about AngularA brief description about Angular
A brief description about Angular
 
What is the Use of Angular?
What is the Use of Angular?What is the Use of Angular?
What is the Use of Angular?
 
Introducing chrome apps (ogura)
Introducing chrome apps (ogura)Introducing chrome apps (ogura)
Introducing chrome apps (ogura)
 
Javascript & SEO 2019
Javascript & SEO 2019Javascript & SEO 2019
Javascript & SEO 2019
 

Recently uploaded

Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Bhaskar Mitra
 

Recently uploaded (20)

Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 

From website to mobile app - a journey

  • 1. From web sites to web apps to mobile apps An interesting journey
  • 4. Today: Web apps ● Single page applications ● Communication via API ● "Backend as a service" ● Client side MV*-Frameworks ● Templates rendered on the client ● Data on the wire
  • 5. Going mobile With web technologies
  • 6. Pick one First fundamental question: HTML / CSS / JS vs. Pure JavaScript
  • 7. Pick one First fundamental decision: HTML / CSS / JS vs. Pure JavaScript
  • 8. A tough choice ● Javascript MV* Libraries / Frameworks ○ Backbone ○ Ember ○ Knockout ○ Angular ● UI Frameworks ○ Lungo ○ Kendo ○ jQTouch ○ jQuery mobile ● Deployment frameworks ○ PhoneGap ○ Sencha ○ Calatrava ○ The M-Project
  • 9. A tough choice ● Javascript MV* Libraries / Frameworks ○ Backbone ○ Ember ○ Knockout ○ Angular ● UI Frameworks ○ Lungo ○ Kendo ○ jQTouch ○ jQuery mobile ● Deployment frameworks ○ PhoneGap ○ Sencha ○ Calatrava ○ The M-Project
  • 10. Problems with picking the right mix ● overlap between the three: ○ multiple frameworks trying to be clever ○ e.g. Calatrava: Deployment & UI ○ e.g. Kendo: MVVM & UI ● finding good combinations: ○ Knockout & Lungo ○ Knockout & Kendo ○ Angular & iUI ○ Angular & Lungo
  • 11. Our stack Rails-API Angular JS Lungo PhoneGap
  • 12. Our stack Rails-API Angular JS Lungo-Angular-Bridge Lungo PhoneGap
  • 13. What's the bridge? Lungo Angular Routing
  • 14. Two choices: ● I want the Lungo routing ○ The Angular-Lungo-Adapter is for you ● I want the Angular routing ○ There is nothing for that
  • 15. Two choices: ● I want the Lungo routing ○ The Angular-Lungo-Adapter is for you ● I want the Angular routing ○ There was nothing for that Centralway proudly presents...
  • 16. Lungo-Angular-Bridge Batteries included! https://github.com/centralway/lungo- angular-bridge
  • 17. LAB - Lungo Angular Bridge ● Allows to use Lungo fancyness together with Angular awesomeness ● Use Angular routes but leverage Lungo transitions ● Comes with a set of examples ● Extends Angular with the lab-view directive
  • 18. Batteries included - get going!
  • 21. Things you may hear ● "But it's soo slooooow" ● "What if you need something native?" ● "How does deployment work?" ● "But it won't look&feel native!"
  • 22. Things you may say ● "But it's soo slooooow" ○ Only in a few cases, e.g. SVG on iPhone 4 ● "What if you need something native?" ○ You can do that >> Phonegap Plugins ● "How does deployment work?" ○ Either manually or via App Stores ● "But it won't look&feel native!" ○ This depends solely on the UI Framework used - e.g. Lungo makes it feel native
  • 23. In the trenches The pitfalls of mobile development
  • 24. Round 1: iframes vs. iOS <iframe src="http://example.com"></iframe> <a href="http://somesite.com" target="_blank">Open</a> What will happen? ● Android ○ iframe loads in the page ○ link opens a browser window ● iOS ○ "stay-in-webview=false" (default) ■ iframe opens a new browser window ■ link opens a new browser window ○ "stay-in-webview=true" ■ iframe opens in the page ■ link opens in the page
  • 25. Round 1: iframes vs. iOS ● 4 possible solutions a. using "access" rule in Config.xml b. using "InApp-Browser" (window.open) c. specify target="_self" for iframe d. using ChildBrowser plugin
  • 26. Round 1: iframe vs. iOS ● 4 possible solutions a. using "access" rule in Config.xml b. using "InApp-Browser" (window.open) c. specify target="_self" for iframe d. using ChildBrowser plugin
  • 27. Round 2: "HTML5 routing" $locationProvider.html5Mode(true);
  • 28. Round 2: "HTML5 routing" $locationProvider.html5Mode(false); ● HTML 5 routing not supported properly ○ weird behaviour ○ non-routing relating things go wrong ○ no error messages / warnings ● Setting to "false" uses "#/..."-style routing instead of "real" routing ("/...")
  • 29. General conclusions ● PhoneGap plugins <3 ○ when it doesn't exist in PhoneGap ○ when it is too slow in HTML / CSS / JS ● Active communities & many resources ● Web is a powerful platform
  • 30. Wrap-up ● Mobile is on the rise ● Web technologies rock! ● Find the right mix of Frameworks for your needs is hard ● Be aware of potential pitfalls ● Leverage the active communities to work around problems