Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Operations Tooling for UI - DevOps for CSS Developers

Operations Tooling for UI - DevOps for CSS Developers

Linting, testing, distribution, deployment--and all the associated tooling and tracking.

The learning curve on all this stuff can be pretty harsh for web UI developers. All the vocabulary. All the options. All the extra code. What does it all mean? And what, if anything, does your project need?

In this talk I discuss web user interfaces at scale and the benefits of bringing more of DevOps culture to the UI space, combining introductory material with practical applications.

Talk presented at CSSConf in June 2015.

Rachael L Moore

June 18, 2015
Tweet

More Decks by Rachael L Moore

Other Decks in Technology

Transcript

  1. Ops Tooling for UI DevOps and the CSS Developer CSSConf

    June 18, 2015 (full speaker notes included) Rachael L Moore UI Engineer OpenTable morewry
  2. button { dispay: block; padding: 0 1rem; color: #FFF; background:

    #333; text-transform: uppercase; } Typo Example
  3. button { dispay: block; padding: 0 1rem; color: #FFF; background:

    #333; text-transform: uppercase; } Typo Example
  4. Prefix Example button { display: -ms-flexbox; display: -webkit-flex; display: flex;

    -webkit-justify-content: center; -ms-flex-pack: center; justify-content: center;
  5. What are we delivering? UI Components What's the process for

    producing it? Supported by automated pipeline Questions
  6. ul#id li button { display: block; color: white; } Linting

    vs Validating button } display: block; color: %FFF \ Validation vs Linting
  7. button { dispay: block; padding: 0 1rem; color: #FFF; background:

    #333; text-transform: uppercase; } Typo Example Caught by Linting
  8. WARNING: Unknown property 'dispay'. Properties should be known (listed in

    CSS3 specification) or be a vendor-prefixed property. Typo Example Caught by Linting
  9. button { display: flex; flex: 1 1 auto; justify-content: center;

    align-items: center; } Vanilla CSS Features
  10. Auto-Prefixed Comparison button { display: -webkit-box; display: -moz-box; display: -ms-flexbox;

    display: -webkit-flex; display: flex; -webkit-box-pack: center; -moz-box-pack: center; -webkit-justify-content: center; -ms-flex-pack: center; justify-content: center; -webkit-box-align: center; -moz-box-align: center; -webkit-align-items: center; ... button { display: flex; justify-content: center; align-items: center; }
  11. test harness / test framework / test fixture stub /

    spy / mock object / fake object test double / dummy object / use case unit / integration / performance / e2e / ui smoke / compatibility / acceptance / coverage black-box / white-box / gray-box visual / system / regression / reporter benchmark / test case / scenario / test suite test matrix / security / page object selenium / webdriver / test runner / baseline functional / non-functional / ad hoc bottom up / top down / test bed / test driver
  12. { "guests": [ { "name": "Testina T. McTesterson-Testfield", "seated": true

    }, { "name": "T.J. Test", "seated": false } ] } Mock Data Example
  13. > grunt build Running lint task Running preprocess task Running

    postprocess task > grunt test Running unit-test task Running visual-diff task Running e2e-test task Grunt Tasks Running
  14. > bower install custom-button bower download ... bower install ...

    custom-button#1.2.3 bower_components/custom-button Tagging & Bower
  15. Prerequisites Temple of Balance Two tall stone pillars hold up

    the overhang of the temple, shielding the worshippers from the elements. You see the Temple Square to the north and the altar of the neutral gods to the east. [Exits: north up (down)] (White Aura) Iauro the old priest is here. > look
  16. Gruntfile.js module.exports = function (grunt) { // load tasks grunt.loadNpmTasks("");

    grunt.initConfig({}); // config tasks grunt.config({}) // custom pipeline tasks grunt.registerTask("", []); };
  17. ... // load tasks grunt.loadNpmTasks("grunt-csslint"); // config tasks grunt.config("csslint", {

    "default": { options: { csslintrc: ".csslintrc" }, src: ["/*.css"] } }); ... CSSLint - Gruntfile.js
  18. ... // load tasks grunt.loadNpmTasks("grunt-postcss"); // config tasks grunt.config("postcss", {

    options: { processors: [ require("autoprefixer-core")() ]}, "default": { src: ["*.css"] } }); ... PostCSS/Autoprefixer - Gruntfile.js
  19. ... // custom pipeline tasks grunt.registerTask("build", [ "csslint:default", "postcss:default" ]);

    grunt.registerTask("test", [...]); grunt.registerTask("distribute", [...]); ... Pipline Tasks - Gruntfile.js
  20. language: node_js node_js: - "0.12" install: - npm install -g

    grunt-cli - npm install script: - grunt build .travis.yml
  21. Resources Rachael L Moore UI Engineer OpenTable morewry Example Github

    Repository http://github.com/morewry/CSSConf-2015-Pipeline Supplementary Reading List CSSConf-2015-Pipeline/wiki/Reading Suggested Tools List CSSConf-2015-Pipeline/wiki/Tools
  22. Thanks! Sara Rahimian, Susan Lin, Agustin Colchado, Barry Wong, Simon

    Attley, Rahul Choudhury & entire Guest Center Web Team
  23. Visit our careers page at opentable.com/careers/ Visit our careers page

    at opentable.com/careers/ We’re hiring! We’re hiring! GUI Devs Q1 2016!