picking a technology stack

Upload: skumardxb

Post on 01-Jun-2018

223 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/9/2019 Picking a Technology Stack

    1/38

    Picking a

    Technology Stack 

    tinyurl.com/pickyourstack

  • 8/9/2019 Picking a Technology Stack

    2/38

    Keep in mind...Your app:

    ● Who is your target audience?● Will you have both a mobile and web presence?● What browsers do you want to support?

    Your team:

    ● How many codebases do you want to have?● What languages/technologies do you know/want to learn?

  • 8/9/2019 Picking a Technology Stack

    3/38

    Frontend vs. Backend

  • 8/9/2019 Picking a Technology Stack

    4/38

    Frontend

  • 8/9/2019 Picking a Technology Stack

    5/38

    Frontend: Web Apps

  • 8/9/2019 Picking a Technology Stack

    6/38

     Why use libraries?● DOM● Events●  AJAX● Effects & Animation● HTML Templating● Page Layout● Widgets/Theming● Graphics/Charts● Data Modeling● Routing

    ●  ARIA Compliance● Multi-Browser Support● Mobile Support

  • 8/9/2019 Picking a Technology Stack

    7/38

    DOM

    var form = document.getElementById('guestbook');

    var textArea = form.getElementsByTagName('textarea')[0];

    var comment = textArea.value;textArea.style.border = '1px solid red';

    var comment = $('#form textarea').val();

    comment.css({'border': '1px solid red'});

    No library:

     jQuery:

  • 8/9/2019 Picking a Technology Stack

    8/38

    Eventsvar form = document.getElementById('guestbook');

    try {

      form.addEventListener("submit", onSubmit);} catch(e) {

      form.attachEvent("submit", onSubmit);

    }

    $('#guestbook').on('submit', onSubmit);

    No library:

     jQuery:

  • 8/9/2019 Picking a Technology Stack

    9/38

     AJAXvar status = -1;

    if (typeof ActiveXObject != 'undefined') {

      var request = new ActiveXObject('Microsoft.XMLHTTP');

    } else if (window["XMLHttpRequest"]) {

      var request = new XMLHttpRequest();

    }

    request.onreadystatechange = function() {  if (request.readyState == 4) {

      try {

      status = request.status;

      } catch (e) {}

      if (status == 200) {

      onDataReceived(request.responseText, request.status);

      request.onreadystatechange = function() {};

      }

      }

     }

     request.open('GET', '/guestbook/entries/', true);

     try {

      request.send(null); } catch (e) {}

    };

    $.ajax({url: '/guestbook/entries/', success: onDataReceived});

    No library:

     jQuery:

  • 8/9/2019 Picking a Technology Stack

    10/38

    Effects & Animationvar element = document.getElementById("error");

    var duration = 3000;

    var hidtime = 2000;

    var showtime = 2000;

    function setOpacity(percentage) {

      element.style.opacity = percentage;

      element.style.MozOpacity = percentage;

      element.style.KhtmlOpacity = percentage;

      element.style.filter = 'alpha(opacity=' + (percentage * 100) + ');';

    }

    function fadeIn() {

      for (i = 0; i

  • 8/9/2019 Picking a Technology Stack

    11/38

    HTML Templatingvar ul = document.createElement('ul');

    for (var i = 0; i < entries.length; i++) {

      var entry = entries[i];

      var li = document.createElement('li');

      li.innerHTML = entry.name + ' wrote: ' + entry.comment + '
    ' + entry.date +

    ' ';

      ul.appendChild(div);

    }

      

      

      {{#each entries}}

      {{name}} wrote: {{comment}}
    {{date}} 

       

      {{/each}}

      

      

    No library:

    Handlebars:

    var template = Handlebars.compile($("#guestbook-template").html());var html = template({entries: entries});

  • 8/9/2019 Picking a Technology Stack

    12/38

    Page LayoutYUI Grids Builder :

    Tabs, Multi-Column, Grids, etc.

    http://developer.yahoo.com/yui/grids/builder/http://developer.yahoo.com/yui/grids/builder/

  • 8/9/2019 Picking a Technology Stack

    13/38

     WidgetsForms

    Data Grids

    Menus

    Carousel, Lightbox, Dialog,Tooltip, Accordion, Paginator,etc..

    Screenshots from Dojo

    http://dojocampus.org/explorer/

  • 8/9/2019 Picking a Technology Stack

    14/38

    Theming jQuery UI Theme Roller:

    http://jqueryui.com/themeroller/

  • 8/9/2019 Picking a Technology Stack

    15/38

    Graphics/ChartsgRaphael:RaphaelJS:

    http://raphaeljs.com/http://g.raphaeljs.com/

  • 8/9/2019 Picking a Technology Stack

    16/38

    Frameworks & Libraries

  • 8/9/2019 Picking a Technology Stack

    17/38

     W eb Frameworks...that do it "all."

    ●  jQuery UI● YUI

    ● Dojo● Sencha● QooxDoo● Closure● SproutCore● MooTools

    Roundup, Comparison

    http://mootools.net/http://guides.sproutcore.com/http://mootools.net/http://guides.sproutcore.com/http://qooxdoo.org/http://www.sencha.com/products/extjs/examples/http://dojotoolkit.org/http://jqueryui.com/http://en.wikipedia.org/wiki/Comparison_of_JavaScript_frameworkshttp://www.developerdrive.com/2011/09/13-javascript-frameworks-that-can-make-you-a-better-web-developer/http://mootools.net/http://guides.sproutcore.com/https://developers.google.com/closure/library/http://qooxdoo.org/http://www.sencha.com/products/extjs/examples/http://dojotoolkit.org/http://yuilibrary.com/http://jqueryui.com/

  • 8/9/2019 Picking a Technology Stack

    18/38

    CSS Frameworks● Twitter Bootstrap● ZURB Foundation

    ● BlueTrip● Blueprint CSS● YUI Grids● Skeleton● 960 grids

    http://960.gs/http://960.gs/http://developer.yahoo.com/yui/grids/http://www.blueprintcss.org/http://bluetrip.org/http://twitter.github.com/bootstrap/http://960.gs/http://www.getskeleton.com/http://developer.yahoo.com/yui/grids/http://www.blueprintcss.org/http://bluetrip.org/http://foundation.zurb.com/http://twitter.github.com/bootstrap/

  • 8/9/2019 Picking a Technology Stack

    19/38

    JS Li braries: BrowserDOM, Events, AJAX, General Utility

    ●  jQuer y● Prototype● SnackJS

    ● $dom● QuoJS

    http://quojs.tapquo.com/http://julienw.github.com/dollardom/http://snackjs.com/http://jquery.com/http://quojs.tapquo.com/http://julienw.github.com/dollardom/http://snackjs.com/http://www.prototypejs.org/http://jquery.com/

  • 8/9/2019 Picking a Technology Stack

    20/38

    JS Libraries: ArchitectureData Retrieval & Modeling, Routing, Object-Orientation

    ● Backbone

    ● EmberJS● SammyJS● JavaScriptMVC

    http://javascriptmvc.com/http://sammyjs.org/http://javascriptmvc.com/http://sammyjs.org/http://emberjs.com/http://documentcloud.github.com/backbone/

  • 8/9/2019 Picking a Technology Stack

    21/38

    JS Libraries: Micro-Libs● DOM: tinyDOM● Events: Events.js● AJAX: MicroAjax● Animation: Morpheus, Viper ● Data Modeling: Spine, Knockout● Templates: Handlebars, Mustache● Routing: PathJS

    ● Object-Orientation: Classy, Klass● Graphics, Widgets, Charts,

    Date/time, Drag/Drop,Internationalization

    ...many more at microjs.com or justGoo le what ou need.

    http://www.microjs.com/http://classy.pocoo.org/https://github.com/ded/klasshttps://github.com/ded/klasshttps://github.com/ded/klasshttps://github.com/mtrpcic/pathjshttp://spinejs.com/http://knockoutjs.com/http://knockoutjs.com/https://github.com/ded/morpheushttps://github.com/ded/morpheushttp://code.google.com/p/microajax/https://github.com/ctult/TinyDOMhttp://www.microjs.com/https://github.com/ded/klasshttp://classy.pocoo.org/https://github.com/mtrpcic/pathjshttps://github.com/janl/mustache.jshttp://handlebarsjs.com/http://knockoutjs.com/http://spinejs.com/https://github.com/alpha123/Viperhttps://github.com/ded/morpheushttp://code.google.com/p/microajax/https://github.com/kbjr/Events.jshttps://github.com/ctult/TinyDOM

  • 8/9/2019 Picking a Technology Stack

    22/38

    Frontend: Mobile AppsNative

  • 8/9/2019 Picking a Technology Stack

    23/38

    Frontend: Mobile AppsCross-Compiled

  • 8/9/2019 Picking a Technology Stack

    24/38

    Frontend: Mobile AppsHybrid

  • 8/9/2019 Picking a Technology Stack

    25/38

    Frontend: Mobile AppsHybrid

      

      

       

       

       

      function capturePhoto() {

      navigator.camera.getPicture(onPhotoDataSuccess);  }

      function onPhotoDataSuccess(imageData) {

      var smallImage = document.getElementById('smallImage');

      smallImage.src = "data:image/jpeg;base64," + imageData;

      }

       

       

       

      Capture Photo
     

         

  • 8/9/2019 Picking a Technology Stack

    26/38

    Frontend: Hybrid Apps

  • 8/9/2019 Picking a Technology Stack

    27/38

     Why use libraries?

    ● DOM● Events●  AJAX● Effects & Animation● HTML Templating● Page Layout● Widgets/Theming● Graphics/Charts● Data Modeling

    ● Routing

    Most of the reasons before...Plus:

    ● Touch events● Scrolling● Mobile-optimized UI

    But:

    Library size is more important.

  • 8/9/2019 Picking a Technology Stack

    28/38

    (Mobile Optimized)

     Web Frameworks jQueryMobile

     Also: Jo, WinkUI, DHTMLxTouch, DojoMobile, Lungo

    Sencha Kendo UI

    http://www.kendoui.com/http://www.sencha.com/http://www.lungojs.com/http://dojotoolkit.org/features/mobile.phphttp://www.dhtmlx.com/touch/http://www.winktoolkit.org/http://joapp.com/http://jquerymobile.com/

  • 8/9/2019 Picking a Technology Stack

    29/38

    (Mobile Optimized)

    CSS FrameworksZURB

    See Also: Responsive Frameworks Roundup

    Bootstrap iUI

    http://speckyboy.com/2011/11/17/15-responsive-css-frameworks-worth-considering/http://www.iui-js.org/http://twitter.github.com/bootstraphttp://speckyboy.com/2011/11/17/15-responsive-css-frameworks-worth-considering/http://foundation.zurb.com/

  • 8/9/2019 Picking a Technology Stack

    30/38

    (Mobile Optimized)

    JS LibrariesBrowser:● Zepto

    Micro-librar ies:● DOM: XUI● Touch Events: jQTouch● Scrolling: iScroll

    ● Games: Impact● ...and more at microjs.com

    http://microjs.com/#mobilehttp://impactjs.com/http://cubiq.org/iscroll-4http://xuijs.com/http://microjs.com/#mobilehttp://impactjs.com/http://cubiq.org/iscroll-4http://jqtouch.com/http://xuijs.com/http://zeptojs.com/

  • 8/9/2019 Picking a Technology Stack

    31/38

    Frontend: Recap

  • 8/9/2019 Picking a Technology Stack

    32/38

     What if you want to do

     both web and mobile?Web Frameworks:● Dojo + Dijit + Dojo Mobile

    ● jQuery + jQueryUI + jQueryMobile● Sencha + ExtJS

    CSS Frameworks:● Bootstrap● ZURB

    JS Libraries:●  jQuery + Zepto

  • 8/9/2019 Picking a Technology Stack

    33/38

    Backend

  • 8/9/2019 Picking a Technology Stack

    34/38

    Backend: Code"Server-side Languages"

    ● PHP● ASP.Net● Ruby● Perl● Python● ColdFusion● Java● JavaScript

  • 8/9/2019 Picking a Technology Stack

    35/38

    Backend: DatabaseRelational

    ● MySQL

    ● PostGreSQL

    Non-Relational ("NoSQL")● MongoDB● Redis● BigTable

  • 8/9/2019 Picking a Technology Stack

    36/38

    Backend: ServerShared hosting:GoDaddy, MediaTemple, DreamHost

    Virtual Private Server:Linode, RackSpace, Amazon EC2

    Cloud Hosting (PaaS):

    Windows Azure, Google AppEngine, Heroku, DotCloud, AppFog

    http://appfog.com/http://www.microsoft.com/windowsazure/http://code.google.com/appenginehttp://appfog.com/https://www.dotcloud.com/http://www.heroku.com/http://code.google.com/appenginehttp://www.microsoft.com/windowsazure/http://aws.amazon.com/ec2/http://www.rackspacecloud.com/http://www.linode.com/http://dreamhost.com/http://mediatemple.com/http://godaddy.com/

  • 8/9/2019 Picking a Technology Stack

    37/38

    Backend-less Frontend

  • 8/9/2019 Picking a Technology Stack

    38/38

    Keep in mind...Your app:

    ● Who is your target audience?● Will you have both a mobile and web presence?● What browsers do you want to support?

    Your team:

    ● How many codebases do you want to have?● What languages/technologies do you know/want to learn?