SlideShare a Scribd company logo
1 of 121
Javascript As A
Programming Language
IS
    Javascript As A
Programming Language
Versioning, Test Driven Development & Continuous Integration



              http://joind.in/3354
Hello, who’s speaking?
Hello, who’s speaking?

           Marco Cedaro
             @cedmax
Hello, who’s speaking?

           Marco Cedaro
             @cedmax

           They said I am a...
            Frontend Cowboy
                              Nicola Vitto
Hello, who’s speaking?

           Marco Cedaro
             @cedmax

           They said I am a...
            Frontend Cowboy
                                   Nicola Vitto
            Javascript Pervert
                                 Roberto Felter
Hello, who’s speaking?

           Marco Cedaro
             @cedmax

           They said I am a...
            Frontend Cowboy
                                    Nicola Vitto
            Javascript Pervert
                                 Roberto Felter
            Perfect Stranger
                            basically anyone else
Hello, who’s speaking?

           Marco Cedaro
             @cedmax

           Actually I am:

            Platform Software Developer at
            Yoox Group, currently in
            charge of js architecture
            development
Hello, who’s speaking?

           Marco Cedaro
             @cedmax

           Actually I am:

            Platform Software Developer at
            Yoox Group, currently in
            charge of js architecture
            development

            Frontend Meetup organizer
            with From The Front
Hello, who’s speaking?

           Marco Cedaro
             @cedmax

           Actually I am:

            Platform Software Developer at
            Yoox Group, currently in
            charge of js architecture
            development

            Frontend Meetup organizer
            with From The Front
            and a javascript pervert
1. Disclaimer           2. You Need a Strategy   3. Continuous Integration




4. Choose Your Tools    5. The Environment       6. In The Wild




                       1. Disclaimer
1. Disclaimer           2. You Need a Strategy   3. Continuous Integration




4. Choose Your Tools    5. The Environment       6. In The Wild




                       1. Disclaimer
DISCLAIMER


Always code as if the guy who ends up
maintaining your code will be a violent
psychopath who knows where you live
                               Martin Golding
REAL DISCLAIMER


Javascript is not jQuery
  Let’s say it all together: “Javascript is not jQuery”
     What do you mean?
        I mean that Javascript is not just something you find
        online, cut and paste in a <script> just before the end
        of the </body>
Not jQuery’s fault


jQuery is extremely powerful

but...WITH GREAT POWER THERE
MUST ALSO COME - - GREAT
RESPONSABILITY! *




* original sentence from 1962 first spiderman story
The right tool in wrong hands


  but who cares? as long as interaction is held by:
    designers
    that aren’t exactly aware of what they are doing
    backend developers
    even worse: they mostly don’t even care about what’s
    happening clientside as long as everything works
Not a “merchant of complexity”


   we don’t need just to let stuff work
       we don’t need complexity either
         we need a strategy to let code be
         maintainable and reusable
is it about simplicity?


it isn't
   there’s a lot of people who hides their ignorance behind
   simplicity
       we have to claim our role in development
       roadmap and business strategy, because...
Javascript is a serious business
1. Disclaimer          2. You Need a Strategy   3. Continuous Integration




4. Choose Your Tools   5. The Environment       6. In The Wild




                2.You Need a Strategy
1. Disclaimer          2. You Need a Strategy   3. Continuous Integration




4. Choose Your Tools   5. The Environment       6. In The Wild




                2.You Need a Strategy
YOU NEED A STRATEGY



  What's the use of running if you are
        not on the right road
                               German proverb
YOU NEED A STRATEGY


  Why do you need a strategy?
       you need a strategy because best practices and
       design patterns are the same in a 4 guys based
       company as well as in a large corporate.
It doesn’t really matter if you are working at facebook,
      soundcloud or by yourself in a small office.




  How many people code?
A real life example


          Small Web Agency

          1 designer, 2 developers and a
          lot of small website with low
          maintenance rate.
The designer
introduces a slider on 5
         websites:
”it’s cool on apple store”.
The developer gets a jQuery
       plugin online




                     a SLIDER’s Story
The designer
introduces a slider on 5        Major release of the
         websites:              most used browser.
”it’s cool on apple store”.        A small fix has been
                              released, they have to change
The developer gets a jQuery   5 files in 5 different projects.
       plugin online




                     a SLIDER’s Story
The designer                                             Oh damn! There’s no
introduces a slider on 5        Major release of the
                                                                   mouse wheel
         websites:              most used browser.
                                                                    integration!
”it’s cool on apple store”.        A small fix has been
                              released, they have to change     should they ask for support
The developer gets a jQuery   5 files in 5 different projects.    or should they change the
       plugin online                                                library by themself?




                     a SLIDER’s Story
Am I the only one or
there’s something wrong?
Just a spoonful of sugar...

               We need to manage
               codebase just in one
               place

               We need to be able to
               continue
               development without
               regression

               We need to use stable
               versions of our libraries
1. Disclaimer          2. You Need a Strategy   3. Continuous Integration




4. Choose Your Tools   5. The Environment       6. In The Wild




          3. Continuous Integration
1. Disclaimer          2. You Need a Strategy   3. Continuous Integration




4. Choose Your Tools   5. The Environment       6. In The Wild




          3. Continuous Integration
Continuous Integration

 A software development practice where members of
 a team integrate their work frequently.
 Each integration is verified by an automated build to
 detect integration errors as quickly as possible.
                                                     Martin Fowler




 CI is about the fundamentals. If we don’t focus on the
 fundamentals we’ll be forced to perform low-level
 tasks later, usually at the most inconvenient times
                                 Paul Duvall, Continuous Integration
I Build So Consistently
I Build So Consistently



identify
I Build So Consistently
                      build




identify
I Build So Consistently
                      build




identify




           share
I Build So Consistently
                               build




identify




           share   make it continuous
How does this fit our
     needs?
codebase just in one place


 setup an isolated repository for reused libraries
 share the code through a CI process
 resolve dependency on websites
continue development
   without regression


validate the code
run unit test against errors (both coding and logic)
version the shared code against interface changes
stable versions


use a declared semantic versioning
use a file system based pattern:
 //jsRepo/dist/yourscript-1.0.0/yourscript.js
 //jsRepo/dist/yourscript-1.0.0.js

never modify already released versions
  increase version number instead
Unit & Functional an overview
Unit & Functional an overview
Unit & Functional an overview
Unit & Functional an overview
Unit & Functional an overview




 is it red? is it a 4x2 block?   is the roof red?
  is it made to fit                       is there a porch?
well other block?                 is there a door?
Unit vs Functional

                  test                consistency
                            control
test cross   interaction                against   execution     test
                             over
 browser       between                 external     time    integration
                           codebase
               libraries                changes
Test Driven Development
You will, eventually..
Everyone should be happy
KISS



              Keep it Simple & Smart
Don’t over-engineer it: you will eventually regret every
single useless complexity you will introduce
1. Disclaimer          2. You Need a Strategy   3. Continuous Integration




4. Choose Your Tools   5. The Environment       6. In The Wild




                4. Choose Your Tools
1. Disclaimer          2. You Need a Strategy   3. Continuous Integration




4. Choose Your Tools   5. The Environment       6. In The Wild




                4. Choose Your Tools
CHOOSE YOUR TOOLS



 A man cannot be too careful in the
      choice of his enemies
                               Oscar Wilde
Another Neat Tool



Simply saying the documentation sucks
         doesn't do any good
                Larry V. Streepy - Ant Mailing List 06.06.2001
Another Neat Tool



Simply saying the documentation sucks
         doesn't do any good
                                  Larry V. Streepy - Ant Mailing List 06.06.2001



He was right: 10 years later ANT documentation still sucks but ANT is a solid
choice in build automation configuration.
ANT


XML driven: simple and straightforward
a standard
there are a lot of implementations and plugins
  every tool in this presentation is easily capable to be used
  in Ant build process
ANT - Alternatives



There are a lot of valuable Ant alternatives.
    Choose the one that fits better your needs
Code Base:
  CODE QUALITY VALIDATOR
  UNIT TEST RUNNER


Websites:
  DEPENDENCY RESOLVER
  CODE MINIFIER
Code Base:
  JSLINT
  JS TEST DRIVER


Websites:
  DEPENDENCY RESOLVER
  CODE MINIFIER
JsLint


javascript execution often runs into silent errors due to its
bad parts (ref. Javascript the Good Parts, Crockford) and Lint, most of
times, avoids those problems
and, most of all, you can have full control on how code is
written in the team
JS Test Driver

Js Test Driver is the most complete javascript unit test runner
available
  external api integration
  jasmine and qunit as well as its own api
  test report
  console return and junit compatible report
  smooth integration
  both locally and on a build machine
How does it work?


It runs a server
opens browsers
runs test suites
retrieves results on the console
creates a JUnit report
Pitfalls?



testing asynchronous execution is a mess
Sinon.js

a standalone javascript library with unit test utilities
   fake server
   manage server response in order to test ajax interaction
   fake timer
   in order to test timeouts, intervals, animation callbacks...
   spy, stub & mock
   in order to make advanced assertions on object interaction
JS Test Driver - Alternatives #1


  Env.JS
  a javascript DOM implementation in javascript engines: it is
  possible to fake browser execution and run unit tests.
       PROS: really fast, easily integrated in build
       CONS: it is all fake
JS Test Driver - Alternatives #2


  PhantomJS
  It is a minimalistic, headless, WebKit-based, JavaScript-driven tool
  upon which is possible to build unit test.
       PROS: fast, integrable in build, real browser engine
       CONS: only WebKit
JS Test Driver - Alternatives #3


  TestSwarm
  It is a John Resig’s project of Distributed Continuous Integration
  released in 2009 as an official Mozilla Labs project (not
  anymore).
       PROS: replaces all tools in a all-in-one solution, not only js
       test driver
       CONS: it's in alpha since 2009
JS Test Driver - Alternatives #4


  Yeti
  it stands for Yahoo Easy Test Interface and it is a very promising
  unit test runner, potentially the most suitable alternative.
       PROS: a real, stable alternative
       CONS: strictly tied to YUI framework test and build on
       node.js (a mess on windows: it requires cygwin)
Code Base:
  JSLINT
  JS TEST DRIVER


Websites:
  DEPENDENCY RESOLVER
  CODE MINIFIER
Code Base:
  JSLINT
  JS TEST DRIVER


Websites:
  APACHE IVY
  YUI COMPRESSOR
Apache Ivy


Ivy is a simple, powerful and well documented dependency
manager
It has a full integration in ANT build system
and, again, it’s really simple, especially if you keep a file system
based versioning.
Ivy Alternatives


Is there any alternative?
   I haven’t found anything simple enough to compete with Ivy
   straightforwardness: the other solutions I’ve found drove
   me nuts
Yui Compressor


we don’t really need Yui Compressor to set up our
environment, but why should we publish uncompressed js for
our websites?
    I don’t want to introduce the performance topic but if you
    do... DON’T
Yui Compressor Alternatives

  Packer is quite powerful in terms of filesize, but it introduces
  processing time lag
  Google Closure in simple mode is similar to yui (except for
  the fact that yui is more consolidated in time), in advanced
  mode is unsafe to use if you are not exactly aware of what
  kind of optimization your code will pass through
  Uglify has good points but it’s build upon node.js (again on
  windows is a mess) and, as for closure, you’d better know
  what will happen to your code
1. Disclaimer          2. You Need a Strategy   3. Continuous Integration




4. Choose Your Tools   5. The Environment       6. In The Wild




                  5. The Environment
1. Disclaimer          2. You Need a Strategy   3. Continuous Integration




4. Choose Your Tools   5. The Environment       6. In The Wild




                  5. The Environment
THE ENVIRONMENT



    I like boring things
                           Andy Warhol
Javascript Repository
Javascript Repository


/
    dist
    libs
    src
    tools
    build.xml
Javascript Repository


/
    dist
    libs
    src
    tools
    build.xml

                  /tools/
                    jslint
                    JsTestDriver-1.3.1
Javascript Repository


/                                        /src/
    dist                                   form-validator
    libs                                   slider
    src                                        src
    tools                                          slider.js
    build.xml                                  test
                                                   slider.test.js
                  /tools/
                                               jsTestDriver.conf
                    jslint
                                               version.prop
                    JsTestDriver-1.3.1
                                           twitter-widget
                                           ...
Javascript Repository
                                         /libs/
                                           jquery-1.5.1.min.js
                                           sinon-1.0.0.js

/                                        /src/
    dist                                   form-validator
    libs                                   slider
    src                                        src
    tools                                          slider.js
    build.xml                                  test
                                                   slider.test.js
                  /tools/
                                               jsTestDriver.conf
                    jslint
                                               version.prop
                    JsTestDriver-1.3.1
                                           twitter-widget
                                           ...
Javascript Repository
                                         /libs/
                                           jquery-1.5.1.min.js
                                           sinon-1.0.0.js

/                                        /src/
    dist                                   form-validator
    libs                                   slider
    src                                        src
    tools                                          slider.js
    build.xml                                  test
                                                   slider.test.js
                  /tools/
                                               jsTestDriver.conf
                    jslint
                                               version.prop
                    JsTestDriver-1.3.1
                                           twitter-widget
                                           ...
basepath: ../..
server: http://127.0.0.1:9876
load:
  - libs/sinon-1.0.0.js
  - libs/jquery-1.5.1.min.js
  - src/slider/src/slider.js
  - src/slider/test/slider.test.js




                                JsTestDriver.conf
Let's code
Test
var test = new TestCase("Slider.test", {
    setUp: function(){

      },
      tearDown: function(){

      }
});


                              Code
var slider;
Test
var test = new TestCase("Slider.test", {
    setUp: function(){
        /*:DOC += <ul id="foo"><li></li><li></li></ul> */
    },
      tearDown: function(){

      }
});


                              Code
var slider;
Test
var test = new TestCase("Slider.test", {
    setUp: function(){
        /*:DOC += <ul id="foo"><li></li><li></li></ul> */
    },
      testSliderIsAPlugin: function(){
          var test = function(){
              $("slidable").slider();
          };
          assertNoException(test);
      },
      tearDown: function(){

      }
});


                              Code
var slider;
JS Test Driver in action
Test
var test = new TestCase("Slider.test", {
    setUp: function(){
        /*:DOC += <ul id="foo"><li></li><li></li></ul> */
    },
      testSliderIsAPlugin: function(){
          var test = function(){
              $("slidable").slider();
          };
          assertNoException(test);
      },
      tearDown: function(){

      }
});


                              Code
var slider;
Test
var test = new TestCase("Slider.test", {
    setUp: function(){
        /*:DOC += <ul id="foo"><li></li><li></li></ul> */
    },
      testSliderIsAPlugin: function(){
          var test = function(){
              $("slidable").slider();
          };
          assertNoException(test);
      },
      tearDown: function(){

      }
});


                              Code
(function($){
    $.fn.slider = function(){};
}(jQuery));
JS Test Driver in action
Javascript Repository
                                         /libs/
                                           jquery-1.5.1.min.js
                                           sinon-1.0.0.js

/                                        /src/
    dist                                   form-validator
    libs                                   slider
    src                                        src
    tools                                          slider.js
    build.xml                                  test
                                                   slider.test.js
                  /tools/
                                               jsTestDriver.conf
                    jslint
                                               version.prop
                    JsTestDriver-1.3.1
                                           twitter-widget
                                           ...
Javascript Repository
                  /dist/                   /libs/
                    form-validator-1.0.0     jquery-1.5.1.min.js
                    form-validator-1.1.0     sinon-1.0.0.js
                    slider-1.0.0
/                                          /src/
    dist                slider.min.js        form-validator
    libs            twitter-widget-1.0.0
                                             slider
    src             twitter-widget-1.0.1
                                                 src
    tools           twitter-widget-2.0.0             slider.js
    build.xml       ...                          test
                                                     slider.test.js
                  /tools/
                                                 jsTestDriver.conf
                    jslint
                                                 version.prop
                    JsTestDriver-1.3.1
                                             twitter-widget
                                             ...
Website Solution
Website Solution


/
    css
    img
    inc
    scripts
    .htaccess
    index.php
Website Solution

                      /scripts/
                        public
/
    css                 src
    img                 tools
    inc                     apache-ivy-2.2.0
    scripts                 yui-compressor-2.4.6
    .htaccess               ivy-settings.xml
    index.php           mywebapp.xml
                        ivy.xml
Website Solution

                      /scripts/
                        public
/
    css                 src
    img                 tools
    inc                     apache-ivy-2.2.0
    scripts                 yui-compressor-2.4.6
    .htaccess               ivy-settings.xml
    index.php           mywebapp.xml
                        ivy.xml
<ivysettings>
   <settings defaultResolver="JSResolver"/>

    <resolvers>
        <url name="JSResolver" checkmodified="true">
           <artifact

   
 
 
 pattern="//jsRepo/dist/[module]-[revision]/[module].js"

   
 
 />
        </url>
    </resolvers>

    <caches

   
 defaultCacheDir="${basedir}/.artifacts"

   
 artifactPattern="[organization]/[module]-[revision].js"

   />


   <property

   
 name="ivy.artifactproperty.name"

   
 value="[organization].[module]"

   />

   <property

 
 name="ivy.artifactproperty.value"

 
 value="[organization]/[module]-[revision].js"

 />
</ivysettings>
<ivy-module version="2.0">
    <info organisation="libs" module="myWebSite" />
    <dependencies>
        <dependency org="libs" name="slider" rev="1.0.0"/>
        <dependency org="libs" name="twitter-widget" rev="2.0.0"/>
        <dependency org="libs" name="form-validator" rev="1.1.0"/>
    </dependencies>
</ivy-module>




                                                           ivy.xml
1. Disclaimer           2. You Need a Strategy   3. Continuous Integration




4. Choose Your Tools    5. The Environment       6. In The Wild




                       6. In The Wild
1. Disclaimer           2. You Need a Strategy   3. Continuous Integration




4. Choose Your Tools    5. The Environment       6. In The Wild




                       6. In The Wild
IN THE WILD



In the wild, there is no health care.
                           Dwight Schrute (the office)
what is it about?



control & knowledge
Inversion of control freakness
      I am not a control freak.

Gain control and then leave to the
machine the responsibility to check
 everything; focus on knowledge.




* Inspired (and I mean copied) by http://blog.jonathanoliver.com/ - Inversion of Control Freak:
Dependency Injection, Domain-Driven Design, Test-Driven Development techniques
LOOKING FORWARD


Javascript had several springs
  buzzwords: DHTML before and Ajax after
  big frameworks: from Prototype+Scriptaculous to jQuery
  future: HTML5 and the microjs framework era
LOOKING FORWARD

Javascript had several springs
  buzzwords: DHTML before and Ajax after
  big frameworks: from Prototype+Scriptaculous to jQuery
  future: HTML5 and the tiny super focused framework era
LOOKING FORWARD

Javascript had several springs
  buzzwords: DHTML before and Ajax after
  big frameworks: from Prototype+Scriptaculous to jQuery
  future: HTML5 and the tiny super focused framework era
on browser
LOOKING FORWARD

Javascript had several springs
  buzzwords: DHTML before and Ajax after
  big frameworks: from Prototype+Scriptaculous to jQuery
  future: HTML5 and the tiny super focused framework era
on browser
  then there’s a brand new world on server: node.js,
  noSQL databases (couchdb, mongodb..)
LOOKING FORWARD



    the further we look at,
  the more control we need
LOOKING FORWARD

    the further we look at,
  the more control we need
LOOKING FORWARD

    the further we look at,
  the more control we need
  javascript is a programming language
LOOKING FORWARD

     the further we look at,
   the more control we need
  javascript is a programming language

 javascript is a serious business.
LOOKING FORWARD

     the further we look at,
   the more control we need
  javascript is a programming language

 javascript is a serious business.
              and, most of all...
javascript kicks asses
marco@fromthefront.it
https://github.com/cedmax
@cedmax
One last word..
Massimiliano Davoli
Alberto Brandolini
Francesco Fullone
  Luca Lischetti
  Rocco Curcio
 Matteo Gazziola

More Related Content

What's hot

The Death of Lorem Ipsum and Pixel-Perfect Content (MinneWebCon version)
The Death of Lorem Ipsum and Pixel-Perfect Content (MinneWebCon version)The Death of Lorem Ipsum and Pixel-Perfect Content (MinneWebCon version)
The Death of Lorem Ipsum and Pixel-Perfect Content (MinneWebCon version)Dave Olsen
 
Joys and Pains of Node.js in the Enterprise
Joys and Pains of Node.js in the EnterpriseJoys and Pains of Node.js in the Enterprise
Joys and Pains of Node.js in the EnterpriseMarc Fasel
 
The Server Side of Responsive Web Design
The Server Side of Responsive Web DesignThe Server Side of Responsive Web Design
The Server Side of Responsive Web DesignDave Olsen
 
Responsive Design Workflow: Mobilism 2012
Responsive Design Workflow: Mobilism 2012Responsive Design Workflow: Mobilism 2012
Responsive Design Workflow: Mobilism 2012Stephen Hay
 
Beyond Squishy: The Principles of Adaptive Design
Beyond Squishy: The Principles of Adaptive DesignBeyond Squishy: The Principles of Adaptive Design
Beyond Squishy: The Principles of Adaptive DesignBrad Frost
 
MIMA 2014 - Changing your Responsive Design Workflow
MIMA 2014 - Changing your Responsive Design WorkflowMIMA 2014 - Changing your Responsive Design Workflow
MIMA 2014 - Changing your Responsive Design Workfloweaselsolutions
 
Building the Media Block in ReactJS
Building the Media Block in ReactJS Building the Media Block in ReactJS
Building the Media Block in ReactJS Nicole Sullivan
 
Atomic Design - An Event Apart San Diego
Atomic Design - An Event Apart San DiegoAtomic Design - An Event Apart San Diego
Atomic Design - An Event Apart San DiegoBrad Frost
 
Atomic Design - BDConf Nashville, 2013
Atomic Design - BDConf Nashville, 2013Atomic Design - BDConf Nashville, 2013
Atomic Design - BDConf Nashville, 2013Brad Frost
 
WebDev References
WebDev ReferencesWebDev References
WebDev Referencesdynamis
 
Voorhoede - Front-end architecture
Voorhoede - Front-end architectureVoorhoede - Front-end architecture
Voorhoede - Front-end architectureJasper Moelker
 
Data science for infrastructure dev week 2022
Data science for infrastructure   dev week 2022Data science for infrastructure   dev week 2022
Data science for infrastructure dev week 2022ZainAsgar1
 
ACSS: Rethinking CSS Best Practices
ACSS: Rethinking CSS Best PracticesACSS: Rethinking CSS Best Practices
ACSS: Rethinking CSS Best PracticesRenato Iwashima
 
Devoxx2010 - Mobile Development Choices: Native Apps vs Web Apps
Devoxx2010 - Mobile Development Choices: Native Apps vs Web AppsDevoxx2010 - Mobile Development Choices: Native Apps vs Web Apps
Devoxx2010 - Mobile Development Choices: Native Apps vs Web AppsMax Katz
 
React Storybook, Atomic Design, and ITCSS
React Storybook, Atomic Design, and ITCSSReact Storybook, Atomic Design, and ITCSS
React Storybook, Atomic Design, and ITCSSTrevor Pierce
 
Creating Android Apps with PhoneGap
Creating Android Apps with PhoneGapCreating Android Apps with PhoneGap
Creating Android Apps with PhoneGapDean Peters
 
An introduction to Emulsify
An introduction to EmulsifyAn introduction to Emulsify
An introduction to Emulsifyvaluebound
 
Atomic design React Nova Presentation
Atomic design React Nova PresentationAtomic design React Nova Presentation
Atomic design React Nova PresentationSteve Zyglowicz
 

What's hot (20)

The Death of Lorem Ipsum and Pixel-Perfect Content (MinneWebCon version)
The Death of Lorem Ipsum and Pixel-Perfect Content (MinneWebCon version)The Death of Lorem Ipsum and Pixel-Perfect Content (MinneWebCon version)
The Death of Lorem Ipsum and Pixel-Perfect Content (MinneWebCon version)
 
Joys and Pains of Node.js in the Enterprise
Joys and Pains of Node.js in the EnterpriseJoys and Pains of Node.js in the Enterprise
Joys and Pains of Node.js in the Enterprise
 
The Server Side of Responsive Web Design
The Server Side of Responsive Web DesignThe Server Side of Responsive Web Design
The Server Side of Responsive Web Design
 
Responsive Design Workflow: Mobilism 2012
Responsive Design Workflow: Mobilism 2012Responsive Design Workflow: Mobilism 2012
Responsive Design Workflow: Mobilism 2012
 
Atomic design
Atomic designAtomic design
Atomic design
 
Beyond Squishy: The Principles of Adaptive Design
Beyond Squishy: The Principles of Adaptive DesignBeyond Squishy: The Principles of Adaptive Design
Beyond Squishy: The Principles of Adaptive Design
 
MIMA 2014 - Changing your Responsive Design Workflow
MIMA 2014 - Changing your Responsive Design WorkflowMIMA 2014 - Changing your Responsive Design Workflow
MIMA 2014 - Changing your Responsive Design Workflow
 
Building the Media Block in ReactJS
Building the Media Block in ReactJS Building the Media Block in ReactJS
Building the Media Block in ReactJS
 
Atomic Design - An Event Apart San Diego
Atomic Design - An Event Apart San DiegoAtomic Design - An Event Apart San Diego
Atomic Design - An Event Apart San Diego
 
Atomic Design - BDConf Nashville, 2013
Atomic Design - BDConf Nashville, 2013Atomic Design - BDConf Nashville, 2013
Atomic Design - BDConf Nashville, 2013
 
WebDev References
WebDev ReferencesWebDev References
WebDev References
 
Voorhoede - Front-end architecture
Voorhoede - Front-end architectureVoorhoede - Front-end architecture
Voorhoede - Front-end architecture
 
Data science for infrastructure dev week 2022
Data science for infrastructure   dev week 2022Data science for infrastructure   dev week 2022
Data science for infrastructure dev week 2022
 
ACSS: Rethinking CSS Best Practices
ACSS: Rethinking CSS Best PracticesACSS: Rethinking CSS Best Practices
ACSS: Rethinking CSS Best Practices
 
Devoxx2010 - Mobile Development Choices: Native Apps vs Web Apps
Devoxx2010 - Mobile Development Choices: Native Apps vs Web AppsDevoxx2010 - Mobile Development Choices: Native Apps vs Web Apps
Devoxx2010 - Mobile Development Choices: Native Apps vs Web Apps
 
React Storybook, Atomic Design, and ITCSS
React Storybook, Atomic Design, and ITCSSReact Storybook, Atomic Design, and ITCSS
React Storybook, Atomic Design, and ITCSS
 
Creating Android Apps with PhoneGap
Creating Android Apps with PhoneGapCreating Android Apps with PhoneGap
Creating Android Apps with PhoneGap
 
An introduction to Emulsify
An introduction to EmulsifyAn introduction to Emulsify
An introduction to Emulsify
 
Atomic Design con Pattern Lab
Atomic Design con Pattern LabAtomic Design con Pattern Lab
Atomic Design con Pattern Lab
 
Atomic design React Nova Presentation
Atomic design React Nova PresentationAtomic design React Nova Presentation
Atomic design React Nova Presentation
 

Similar to jsDay - Javascript as a programming language

Paris Web - Javascript as a programming language
Paris Web - Javascript as a programming languageParis Web - Javascript as a programming language
Paris Web - Javascript as a programming languageMarco Cedaro
 
Preparing for the WebGeek DevCup
Preparing for the WebGeek DevCupPreparing for the WebGeek DevCup
Preparing for the WebGeek DevCupbryanbibat
 
Scottish Ruby Conference 2014
Scottish Ruby Conference  2014Scottish Ruby Conference  2014
Scottish Ruby Conference 2014michaelag1971
 
The Coming Earthquake in WebSphere Application Server Configuration Management
The Coming Earthquake in WebSphere Application Server Configuration ManagementThe Coming Earthquake in WebSphere Application Server Configuration Management
The Coming Earthquake in WebSphere Application Server Configuration ManagementDeborah Schalm
 
The Coming Earthquake in WebSphere Application Server Configuration Management
The Coming Earthquake in WebSphere Application Server Configuration Management The Coming Earthquake in WebSphere Application Server Configuration Management
The Coming Earthquake in WebSphere Application Server Configuration Management DevOps.com
 
Breaking out of the endless callback look - #jsday Italy keynote
Breaking out of the endless callback look - #jsday Italy keynoteBreaking out of the endless callback look - #jsday Italy keynote
Breaking out of the endless callback look - #jsday Italy keynoteChristian Heilmann
 
The Coming Earthquake in IIS and SQL Configuration Management
The Coming Earthquake  in IIS and SQL Configuration ManagementThe Coming Earthquake  in IIS and SQL Configuration Management
The Coming Earthquake in IIS and SQL Configuration ManagementJules Pierre-Louis
 
10 practices that every developer needs to start right now
10 practices that every developer needs to start right now10 practices that every developer needs to start right now
10 practices that every developer needs to start right nowCaleb Jenkins
 
Do Try This At Home Ajax Bookmarking, Cross Site Scripting, And Other Web 2 ...
Do Try This At Home  Ajax Bookmarking, Cross Site Scripting, And Other Web 2 ...Do Try This At Home  Ajax Bookmarking, Cross Site Scripting, And Other Web 2 ...
Do Try This At Home Ajax Bookmarking, Cross Site Scripting, And Other Web 2 ...jward5519
 
Continuous integration
Continuous integrationContinuous integration
Continuous integrationBoris Dominic
 
Improving developer collaboration with CodeSandbox
Improving developer collaboration with CodeSandboxImproving developer collaboration with CodeSandbox
Improving developer collaboration with CodeSandboxAbati Adewale
 
Quo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynoteQuo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynoteChristian Heilmann
 
“High performance teams" - Marco Cecconi
“High performance teams" - Marco Cecconi“High performance teams" - Marco Cecconi
“High performance teams" - Marco CecconiSpeck&Tech
 
Agile Patterns and Anti-Patterns
Agile Patterns and Anti-PatternsAgile Patterns and Anti-Patterns
Agile Patterns and Anti-PatternsRichard Cheng
 
8 Principles for Enabling Build/Measure/Learn: Lean Engineering in Action
8 Principles for Enabling Build/Measure/Learn: Lean Engineering in Action8 Principles for Enabling Build/Measure/Learn: Lean Engineering in Action
8 Principles for Enabling Build/Measure/Learn: Lean Engineering in ActionBill Scott
 
Common Missteps in Cross-Platform Development.pdf
Common Missteps in Cross-Platform Development.pdfCommon Missteps in Cross-Platform Development.pdf
Common Missteps in Cross-Platform Development.pdfPridesys IT Ltd.
 

Similar to jsDay - Javascript as a programming language (20)

Paris Web - Javascript as a programming language
Paris Web - Javascript as a programming languageParis Web - Javascript as a programming language
Paris Web - Javascript as a programming language
 
Preparing for the WebGeek DevCup
Preparing for the WebGeek DevCupPreparing for the WebGeek DevCup
Preparing for the WebGeek DevCup
 
Scottish Ruby Conference 2014
Scottish Ruby Conference  2014Scottish Ruby Conference  2014
Scottish Ruby Conference 2014
 
The Coming Earthquake in WebSphere Application Server Configuration Management
The Coming Earthquake in WebSphere Application Server Configuration ManagementThe Coming Earthquake in WebSphere Application Server Configuration Management
The Coming Earthquake in WebSphere Application Server Configuration Management
 
The Coming Earthquake in WebSphere Application Server Configuration Management
The Coming Earthquake in WebSphere Application Server Configuration Management The Coming Earthquake in WebSphere Application Server Configuration Management
The Coming Earthquake in WebSphere Application Server Configuration Management
 
Breaking out of the endless callback look - #jsday Italy keynote
Breaking out of the endless callback look - #jsday Italy keynoteBreaking out of the endless callback look - #jsday Italy keynote
Breaking out of the endless callback look - #jsday Italy keynote
 
Jsday
JsdayJsday
Jsday
 
Ready, Set, Refactor
Ready, Set, RefactorReady, Set, Refactor
Ready, Set, Refactor
 
The Coming Earthquake in IIS and SQL Configuration Management
The Coming Earthquake  in IIS and SQL Configuration ManagementThe Coming Earthquake  in IIS and SQL Configuration Management
The Coming Earthquake in IIS and SQL Configuration Management
 
10 practices that every developer needs to start right now
10 practices that every developer needs to start right now10 practices that every developer needs to start right now
10 practices that every developer needs to start right now
 
TxJS 2011
TxJS 2011TxJS 2011
TxJS 2011
 
Agile iOS
Agile iOSAgile iOS
Agile iOS
 
Do Try This At Home Ajax Bookmarking, Cross Site Scripting, And Other Web 2 ...
Do Try This At Home  Ajax Bookmarking, Cross Site Scripting, And Other Web 2 ...Do Try This At Home  Ajax Bookmarking, Cross Site Scripting, And Other Web 2 ...
Do Try This At Home Ajax Bookmarking, Cross Site Scripting, And Other Web 2 ...
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
Improving developer collaboration with CodeSandbox
Improving developer collaboration with CodeSandboxImproving developer collaboration with CodeSandbox
Improving developer collaboration with CodeSandbox
 
Quo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynoteQuo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynote
 
“High performance teams" - Marco Cecconi
“High performance teams" - Marco Cecconi“High performance teams" - Marco Cecconi
“High performance teams" - Marco Cecconi
 
Agile Patterns and Anti-Patterns
Agile Patterns and Anti-PatternsAgile Patterns and Anti-Patterns
Agile Patterns and Anti-Patterns
 
8 Principles for Enabling Build/Measure/Learn: Lean Engineering in Action
8 Principles for Enabling Build/Measure/Learn: Lean Engineering in Action8 Principles for Enabling Build/Measure/Learn: Lean Engineering in Action
8 Principles for Enabling Build/Measure/Learn: Lean Engineering in Action
 
Common Missteps in Cross-Platform Development.pdf
Common Missteps in Cross-Platform Development.pdfCommon Missteps in Cross-Platform Development.pdf
Common Missteps in Cross-Platform Development.pdf
 

Recently uploaded

Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 

Recently uploaded (20)

Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 

jsDay - Javascript as a programming language

  • 2. IS Javascript As A Programming Language Versioning, Test Driven Development & Continuous Integration http://joind.in/3354
  • 4. Hello, who’s speaking? Marco Cedaro @cedmax
  • 5. Hello, who’s speaking? Marco Cedaro @cedmax They said I am a... Frontend Cowboy Nicola Vitto
  • 6. Hello, who’s speaking? Marco Cedaro @cedmax They said I am a... Frontend Cowboy Nicola Vitto Javascript Pervert Roberto Felter
  • 7. Hello, who’s speaking? Marco Cedaro @cedmax They said I am a... Frontend Cowboy Nicola Vitto Javascript Pervert Roberto Felter Perfect Stranger basically anyone else
  • 8. Hello, who’s speaking? Marco Cedaro @cedmax Actually I am: Platform Software Developer at Yoox Group, currently in charge of js architecture development
  • 9. Hello, who’s speaking? Marco Cedaro @cedmax Actually I am: Platform Software Developer at Yoox Group, currently in charge of js architecture development Frontend Meetup organizer with From The Front
  • 10. Hello, who’s speaking? Marco Cedaro @cedmax Actually I am: Platform Software Developer at Yoox Group, currently in charge of js architecture development Frontend Meetup organizer with From The Front and a javascript pervert
  • 11. 1. Disclaimer 2. You Need a Strategy 3. Continuous Integration 4. Choose Your Tools 5. The Environment 6. In The Wild 1. Disclaimer
  • 12. 1. Disclaimer 2. You Need a Strategy 3. Continuous Integration 4. Choose Your Tools 5. The Environment 6. In The Wild 1. Disclaimer
  • 13. DISCLAIMER Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live Martin Golding
  • 14. REAL DISCLAIMER Javascript is not jQuery Let’s say it all together: “Javascript is not jQuery” What do you mean? I mean that Javascript is not just something you find online, cut and paste in a <script> just before the end of the </body>
  • 15. Not jQuery’s fault jQuery is extremely powerful but...WITH GREAT POWER THERE MUST ALSO COME - - GREAT RESPONSABILITY! * * original sentence from 1962 first spiderman story
  • 16. The right tool in wrong hands but who cares? as long as interaction is held by: designers that aren’t exactly aware of what they are doing backend developers even worse: they mostly don’t even care about what’s happening clientside as long as everything works
  • 17. Not a “merchant of complexity” we don’t need just to let stuff work we don’t need complexity either we need a strategy to let code be maintainable and reusable
  • 18. is it about simplicity? it isn't there’s a lot of people who hides their ignorance behind simplicity we have to claim our role in development roadmap and business strategy, because...
  • 19. Javascript is a serious business
  • 20. 1. Disclaimer 2. You Need a Strategy 3. Continuous Integration 4. Choose Your Tools 5. The Environment 6. In The Wild 2.You Need a Strategy
  • 21. 1. Disclaimer 2. You Need a Strategy 3. Continuous Integration 4. Choose Your Tools 5. The Environment 6. In The Wild 2.You Need a Strategy
  • 22. YOU NEED A STRATEGY What's the use of running if you are not on the right road German proverb
  • 23. YOU NEED A STRATEGY Why do you need a strategy? you need a strategy because best practices and design patterns are the same in a 4 guys based company as well as in a large corporate.
  • 24. It doesn’t really matter if you are working at facebook, soundcloud or by yourself in a small office. How many people code?
  • 25. A real life example Small Web Agency 1 designer, 2 developers and a lot of small website with low maintenance rate.
  • 26. The designer introduces a slider on 5 websites: ”it’s cool on apple store”. The developer gets a jQuery plugin online a SLIDER’s Story
  • 27. The designer introduces a slider on 5 Major release of the websites: most used browser. ”it’s cool on apple store”. A small fix has been released, they have to change The developer gets a jQuery 5 files in 5 different projects. plugin online a SLIDER’s Story
  • 28. The designer Oh damn! There’s no introduces a slider on 5 Major release of the mouse wheel websites: most used browser. integration! ”it’s cool on apple store”. A small fix has been released, they have to change should they ask for support The developer gets a jQuery 5 files in 5 different projects. or should they change the plugin online library by themself? a SLIDER’s Story
  • 29. Am I the only one or there’s something wrong?
  • 30. Just a spoonful of sugar... We need to manage codebase just in one place We need to be able to continue development without regression We need to use stable versions of our libraries
  • 31. 1. Disclaimer 2. You Need a Strategy 3. Continuous Integration 4. Choose Your Tools 5. The Environment 6. In The Wild 3. Continuous Integration
  • 32. 1. Disclaimer 2. You Need a Strategy 3. Continuous Integration 4. Choose Your Tools 5. The Environment 6. In The Wild 3. Continuous Integration
  • 33. Continuous Integration A software development practice where members of a team integrate their work frequently. Each integration is verified by an automated build to detect integration errors as quickly as possible. Martin Fowler CI is about the fundamentals. If we don’t focus on the fundamentals we’ll be forced to perform low-level tasks later, usually at the most inconvenient times Paul Duvall, Continuous Integration
  • 34. I Build So Consistently
  • 35. I Build So Consistently identify
  • 36. I Build So Consistently build identify
  • 37. I Build So Consistently build identify share
  • 38. I Build So Consistently build identify share make it continuous
  • 39. How does this fit our needs?
  • 40. codebase just in one place setup an isolated repository for reused libraries share the code through a CI process resolve dependency on websites
  • 41. continue development without regression validate the code run unit test against errors (both coding and logic) version the shared code against interface changes
  • 42. stable versions use a declared semantic versioning use a file system based pattern: //jsRepo/dist/yourscript-1.0.0/yourscript.js //jsRepo/dist/yourscript-1.0.0.js never modify already released versions increase version number instead
  • 43. Unit & Functional an overview
  • 44. Unit & Functional an overview
  • 45. Unit & Functional an overview
  • 46. Unit & Functional an overview
  • 47. Unit & Functional an overview is it red? is it a 4x2 block? is the roof red? is it made to fit is there a porch? well other block? is there a door?
  • 48. Unit vs Functional test consistency control test cross interaction against execution test over browser between external time integration codebase libraries changes
  • 52. KISS Keep it Simple & Smart Don’t over-engineer it: you will eventually regret every single useless complexity you will introduce
  • 53. 1. Disclaimer 2. You Need a Strategy 3. Continuous Integration 4. Choose Your Tools 5. The Environment 6. In The Wild 4. Choose Your Tools
  • 54. 1. Disclaimer 2. You Need a Strategy 3. Continuous Integration 4. Choose Your Tools 5. The Environment 6. In The Wild 4. Choose Your Tools
  • 55. CHOOSE YOUR TOOLS A man cannot be too careful in the choice of his enemies Oscar Wilde
  • 56. Another Neat Tool Simply saying the documentation sucks doesn't do any good Larry V. Streepy - Ant Mailing List 06.06.2001
  • 57. Another Neat Tool Simply saying the documentation sucks doesn't do any good Larry V. Streepy - Ant Mailing List 06.06.2001 He was right: 10 years later ANT documentation still sucks but ANT is a solid choice in build automation configuration.
  • 58. ANT XML driven: simple and straightforward a standard there are a lot of implementations and plugins every tool in this presentation is easily capable to be used in Ant build process
  • 59. ANT - Alternatives There are a lot of valuable Ant alternatives. Choose the one that fits better your needs
  • 60. Code Base: CODE QUALITY VALIDATOR UNIT TEST RUNNER Websites: DEPENDENCY RESOLVER CODE MINIFIER
  • 61. Code Base: JSLINT JS TEST DRIVER Websites: DEPENDENCY RESOLVER CODE MINIFIER
  • 62. JsLint javascript execution often runs into silent errors due to its bad parts (ref. Javascript the Good Parts, Crockford) and Lint, most of times, avoids those problems and, most of all, you can have full control on how code is written in the team
  • 63. JS Test Driver Js Test Driver is the most complete javascript unit test runner available external api integration jasmine and qunit as well as its own api test report console return and junit compatible report smooth integration both locally and on a build machine
  • 64. How does it work? It runs a server opens browsers runs test suites retrieves results on the console creates a JUnit report
  • 66. Sinon.js a standalone javascript library with unit test utilities fake server manage server response in order to test ajax interaction fake timer in order to test timeouts, intervals, animation callbacks... spy, stub & mock in order to make advanced assertions on object interaction
  • 67. JS Test Driver - Alternatives #1 Env.JS a javascript DOM implementation in javascript engines: it is possible to fake browser execution and run unit tests. PROS: really fast, easily integrated in build CONS: it is all fake
  • 68. JS Test Driver - Alternatives #2 PhantomJS It is a minimalistic, headless, WebKit-based, JavaScript-driven tool upon which is possible to build unit test. PROS: fast, integrable in build, real browser engine CONS: only WebKit
  • 69. JS Test Driver - Alternatives #3 TestSwarm It is a John Resig’s project of Distributed Continuous Integration released in 2009 as an official Mozilla Labs project (not anymore). PROS: replaces all tools in a all-in-one solution, not only js test driver CONS: it's in alpha since 2009
  • 70. JS Test Driver - Alternatives #4 Yeti it stands for Yahoo Easy Test Interface and it is a very promising unit test runner, potentially the most suitable alternative. PROS: a real, stable alternative CONS: strictly tied to YUI framework test and build on node.js (a mess on windows: it requires cygwin)
  • 71. Code Base: JSLINT JS TEST DRIVER Websites: DEPENDENCY RESOLVER CODE MINIFIER
  • 72. Code Base: JSLINT JS TEST DRIVER Websites: APACHE IVY YUI COMPRESSOR
  • 73. Apache Ivy Ivy is a simple, powerful and well documented dependency manager It has a full integration in ANT build system and, again, it’s really simple, especially if you keep a file system based versioning.
  • 74. Ivy Alternatives Is there any alternative? I haven’t found anything simple enough to compete with Ivy straightforwardness: the other solutions I’ve found drove me nuts
  • 75. Yui Compressor we don’t really need Yui Compressor to set up our environment, but why should we publish uncompressed js for our websites? I don’t want to introduce the performance topic but if you do... DON’T
  • 76. Yui Compressor Alternatives Packer is quite powerful in terms of filesize, but it introduces processing time lag Google Closure in simple mode is similar to yui (except for the fact that yui is more consolidated in time), in advanced mode is unsafe to use if you are not exactly aware of what kind of optimization your code will pass through Uglify has good points but it’s build upon node.js (again on windows is a mess) and, as for closure, you’d better know what will happen to your code
  • 77. 1. Disclaimer 2. You Need a Strategy 3. Continuous Integration 4. Choose Your Tools 5. The Environment 6. In The Wild 5. The Environment
  • 78. 1. Disclaimer 2. You Need a Strategy 3. Continuous Integration 4. Choose Your Tools 5. The Environment 6. In The Wild 5. The Environment
  • 79. THE ENVIRONMENT I like boring things Andy Warhol
  • 81. Javascript Repository / dist libs src tools build.xml
  • 82. Javascript Repository / dist libs src tools build.xml /tools/ jslint JsTestDriver-1.3.1
  • 83. Javascript Repository / /src/ dist form-validator libs slider src src tools slider.js build.xml test slider.test.js /tools/ jsTestDriver.conf jslint version.prop JsTestDriver-1.3.1 twitter-widget ...
  • 84. Javascript Repository /libs/ jquery-1.5.1.min.js sinon-1.0.0.js / /src/ dist form-validator libs slider src src tools slider.js build.xml test slider.test.js /tools/ jsTestDriver.conf jslint version.prop JsTestDriver-1.3.1 twitter-widget ...
  • 85. Javascript Repository /libs/ jquery-1.5.1.min.js sinon-1.0.0.js / /src/ dist form-validator libs slider src src tools slider.js build.xml test slider.test.js /tools/ jsTestDriver.conf jslint version.prop JsTestDriver-1.3.1 twitter-widget ...
  • 86. basepath: ../.. server: http://127.0.0.1:9876 load: - libs/sinon-1.0.0.js - libs/jquery-1.5.1.min.js - src/slider/src/slider.js - src/slider/test/slider.test.js JsTestDriver.conf
  • 88. Test var test = new TestCase("Slider.test", { setUp: function(){ }, tearDown: function(){ } }); Code var slider;
  • 89. Test var test = new TestCase("Slider.test", { setUp: function(){ /*:DOC += <ul id="foo"><li></li><li></li></ul> */ }, tearDown: function(){ } }); Code var slider;
  • 90. Test var test = new TestCase("Slider.test", { setUp: function(){ /*:DOC += <ul id="foo"><li></li><li></li></ul> */ }, testSliderIsAPlugin: function(){ var test = function(){ $("slidable").slider(); }; assertNoException(test); }, tearDown: function(){ } }); Code var slider;
  • 91. JS Test Driver in action
  • 92. Test var test = new TestCase("Slider.test", { setUp: function(){ /*:DOC += <ul id="foo"><li></li><li></li></ul> */ }, testSliderIsAPlugin: function(){ var test = function(){ $("slidable").slider(); }; assertNoException(test); }, tearDown: function(){ } }); Code var slider;
  • 93. Test var test = new TestCase("Slider.test", { setUp: function(){ /*:DOC += <ul id="foo"><li></li><li></li></ul> */ }, testSliderIsAPlugin: function(){ var test = function(){ $("slidable").slider(); }; assertNoException(test); }, tearDown: function(){ } }); Code (function($){ $.fn.slider = function(){}; }(jQuery));
  • 94. JS Test Driver in action
  • 95. Javascript Repository /libs/ jquery-1.5.1.min.js sinon-1.0.0.js / /src/ dist form-validator libs slider src src tools slider.js build.xml test slider.test.js /tools/ jsTestDriver.conf jslint version.prop JsTestDriver-1.3.1 twitter-widget ...
  • 96. Javascript Repository /dist/ /libs/ form-validator-1.0.0 jquery-1.5.1.min.js form-validator-1.1.0 sinon-1.0.0.js slider-1.0.0 / /src/ dist slider.min.js form-validator libs twitter-widget-1.0.0 slider src twitter-widget-1.0.1 src tools twitter-widget-2.0.0 slider.js build.xml ... test slider.test.js /tools/ jsTestDriver.conf jslint version.prop JsTestDriver-1.3.1 twitter-widget ...
  • 98. Website Solution / css img inc scripts .htaccess index.php
  • 99. Website Solution /scripts/ public / css src img tools inc apache-ivy-2.2.0 scripts yui-compressor-2.4.6 .htaccess ivy-settings.xml index.php mywebapp.xml ivy.xml
  • 100. Website Solution /scripts/ public / css src img tools inc apache-ivy-2.2.0 scripts yui-compressor-2.4.6 .htaccess ivy-settings.xml index.php mywebapp.xml ivy.xml
  • 101. <ivysettings> <settings defaultResolver="JSResolver"/> <resolvers> <url name="JSResolver" checkmodified="true"> <artifact pattern="//jsRepo/dist/[module]-[revision]/[module].js" /> </url> </resolvers> <caches defaultCacheDir="${basedir}/.artifacts" artifactPattern="[organization]/[module]-[revision].js" /> <property name="ivy.artifactproperty.name" value="[organization].[module]" /> <property name="ivy.artifactproperty.value" value="[organization]/[module]-[revision].js" /> </ivysettings>
  • 102. <ivy-module version="2.0"> <info organisation="libs" module="myWebSite" /> <dependencies> <dependency org="libs" name="slider" rev="1.0.0"/> <dependency org="libs" name="twitter-widget" rev="2.0.0"/> <dependency org="libs" name="form-validator" rev="1.1.0"/> </dependencies> </ivy-module> ivy.xml
  • 103. 1. Disclaimer 2. You Need a Strategy 3. Continuous Integration 4. Choose Your Tools 5. The Environment 6. In The Wild 6. In The Wild
  • 104. 1. Disclaimer 2. You Need a Strategy 3. Continuous Integration 4. Choose Your Tools 5. The Environment 6. In The Wild 6. In The Wild
  • 105. IN THE WILD In the wild, there is no health care. Dwight Schrute (the office)
  • 106. what is it about? control & knowledge
  • 107. Inversion of control freakness I am not a control freak. Gain control and then leave to the machine the responsibility to check everything; focus on knowledge. * Inspired (and I mean copied) by http://blog.jonathanoliver.com/ - Inversion of Control Freak: Dependency Injection, Domain-Driven Design, Test-Driven Development techniques
  • 108. LOOKING FORWARD Javascript had several springs buzzwords: DHTML before and Ajax after big frameworks: from Prototype+Scriptaculous to jQuery future: HTML5 and the microjs framework era
  • 109. LOOKING FORWARD Javascript had several springs buzzwords: DHTML before and Ajax after big frameworks: from Prototype+Scriptaculous to jQuery future: HTML5 and the tiny super focused framework era
  • 110. LOOKING FORWARD Javascript had several springs buzzwords: DHTML before and Ajax after big frameworks: from Prototype+Scriptaculous to jQuery future: HTML5 and the tiny super focused framework era on browser
  • 111. LOOKING FORWARD Javascript had several springs buzzwords: DHTML before and Ajax after big frameworks: from Prototype+Scriptaculous to jQuery future: HTML5 and the tiny super focused framework era on browser then there’s a brand new world on server: node.js, noSQL databases (couchdb, mongodb..)
  • 112. LOOKING FORWARD the further we look at, the more control we need
  • 113. LOOKING FORWARD the further we look at, the more control we need
  • 114. LOOKING FORWARD the further we look at, the more control we need javascript is a programming language
  • 115. LOOKING FORWARD the further we look at, the more control we need javascript is a programming language javascript is a serious business.
  • 116. LOOKING FORWARD the further we look at, the more control we need javascript is a programming language javascript is a serious business. and, most of all...
  • 120.
  • 121. Massimiliano Davoli Alberto Brandolini Francesco Fullone Luca Lischetti Rocco Curcio Matteo Gazziola

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n
  141. \n
  142. \n
  143. \n
  144. \n
  145. \n
  146. \n
  147. \n
  148. \n
  149. \n
  150. \n
  151. \n
  152. \n
  153. \n
  154. \n
  155. \n
  156. \n
  157. \n
  158. \n
  159. \n
  160. \n
  161. \n
  162. \n
  163. \n
  164. \n
  165. \n
  166. \n