SlideShare a Scribd company logo
1 of 28
Download to read offline
AngularJS Exposed: Deep Dives
Nitya Narasimhan
@nitya
NYC GTUG Meetup
April 23, 2013
AngularJS (breaking it down..)
¤  1: Introduced (Feb) = bird’s eye view (what + why)
¤  2: Exposed (Apr) = deep dives (concepts in code)
¤  3: Applied (??) = end-to-end app (routes, promises, tests)
¤  4: Extended (??) = advanced topics (Batarang, Karma, ..)
¤  Other??
Bird’s Eye View (Recap)
¤  Client-side JavaScript Framework (OSS Google, 2009)
¤  Advocates Model-View-* architecture for web apps
¤  “HTML enhanced for web apps” (CRUD, single-page)
¤  Directives = Declarative view, Imperative behavior
¤  Scope = Transparent 2-way data binding
¤  Plays nice with others (pure JavaScript, clear boundary)
The “Declarative” Difference
“Static”
View
“Dynamic”
View
Variable = user input
Fixed = string literal
View
(HTML)
Using jQuery Using AngularJS
Behavior
(JavaScript)
No DOM Wrangling needed
2-way Data Binding (in MVC)
JavaScript
UserEvents
ServerEvents
HTML
Tightly
coupled
by logic
Decoupled
with scope
Deep Dives (Today)
¤  Startup (bootstrapping)
¤  Runtime (event handling)
¤  View Templates (HTML ++)
¤  MV-* Philosophy
¤  Binding ($scope context)
¤  Injection (Dependency)
¤  API & Modules
¤  Directives
¤  Services
¤  Filters
¤  Types
¤  Global APIs
¤  Workflow (Seed + Yeoman)
¤  Testing (BDD + Karma)
Bootstrapping: Angular ‘injector’
¤  Declare a static view (HTML)
¤  Identify ‘root’ element for the
dynamic view (ng-app)
¤  Angular treats rooted ‘tree’
as your web-app template
¤  Identifies associated module,
configures $injector service
¤  It creates $scope object to
maintain application state
¤  It uses $compile service to
process AngularJS markup
and render dynamic DOM
JSFiddle-4: Configuring Module
Runtime: Angular ‘interceptor’
¤  Browser event (initiated by
user, network, timer) occurs
¤  Enters JavaScript context to
execute event callbacks
¤  Exits JavaScript context and
renders modified DOM (view)
¤  Angular modifies event flow
to enter custom $digest loop
¤  $eval executes async tasks
¤  $watch evaluates expressions
to detect & process changes
¤  Exits loop when state stabilizes Angular context entry can be explicit (call
$apply) or implicit (Angular operation)
View Templates: HTML Enhanced
¤  “Template” boundaries defined by ng-app
¤  declarative specification of view (static DOM)
¤  compiled at runtime using model + controller (to render dynamic DOM)
¤  consists of standard elements (HTML, CSS) + angular-enhanced elements
¤  Angular-Enhanced Elements
¤  Directive – augmenting attribute or reusable DOM element
¤  Markup – “{{ }}” notation used to bind expressions to elements
¤  Expressions are processed by $parse, can include JS-like code
¤  Filters – “ | “ notation used to format data for display (chain-able)
¤  Form Controls – declarative validation, view manipulation
JSFiddle-2: “Hello “
JSFiddle-3: Form Validation
Data Binding: $scope as context
¤  Stores application state (data
model), links view-controller
¤  Detects data changes to
attached models ($watch)
¤  Provides execution context to
evaluate expressions i.e., {{ }}
¤  Has nested hierarchy (DOM-like)
for accessibility and efficiency
Code shows how ‘name’ binds to
different models in different scopes Angular “2-way binding” synchronizes data
models at view and controller via $scope
JSFiddle-5: Controller context
Injection: Handling Dependency
¤  Client-server relationships
involve “dependency”
¤  Imperative: Clients “craft” the
required dependencies.
¤  Injection: Clients “declare”
dependencies; injector fulfills
them (Inversion of control)
¤  AngularJS $inject service
¤  Ex: controller($scope, $http, $dep)
¤  Provider: “core” $http service
¤  Provider: “custom” $dep service
The Hollywood Principle
“Don’t call us ---- we’ll call you”
Angular API: The Big Picture
¤  Module è Wires application together (analogous to ‘main’)
¤  Directive è Enhance HTML (transform DOM, register behaviors)
¤  Service è Injectable singletons, execute common/async tasks
¤  Filter è Data transforms for display (ornamental or reductive)
¤  Type è Core Angular objects (e.g., FormController)
¤  Global API è Core “angular.*” methods (e.g., angular.toJson)
Angular API: ‘ng’ Module & more
Modules Filters Types gl. APIsServicesDirectives
Directives: Popular usage
¤  ngInit = initialization tasks to do before executing template
¤  ngBind = replace text content of element (e.g., span)
¤  ngModel = perform 2-way data binding for an input element
¤  ngView = adds $route template to view (single page apps)
¤  ngController = assign behavior to a given scope (context)
¤  ngRepeat = auto-instantiate template per item in collection
JSFiddle-6: ng-repeat Directive
Services: Popular Usage
¤ $window = reference to browser’s window object
¤ $document = jQuery-like ref to $window document
¤ $http = server interaction tasks (via XHR or JSONP)
¤ $location = parses app location (URL in address bar)
¤ $route = deep-linking for single-page apps
¤  $routeProvider defines routes for resources
¤  $routeParams extracted from $location search/path
JSFiddle-7: $http Service
Filters: Popular Usage
¤ currency – formats number as currency (w/ symbol)
¤ date – formats to both composed, predefined strings
¤ lowercase, uppercase – transform ‘string’ case
¤ On “Arrays”, processes according to predicate
¤  orderBy – reorders array elements to suit
¤  limitTo – returns slice of array limited to specified count
¤  filter – return selected “matching” subset of array
JSFiddle-4: Custom filter
Quick Start: angular-seed (github)
Recommended Workflow: Yeoman
Scaffolding
(think ‘seed’)
Resolving
(think ‘maven’)
Running
(think ‘ant’)
Workflow: Yeoman Benefits
(Adds)
HTML5 Shiv
Scripts
Analytics
(Simplifies)
Scaffold
Test Runner
Build
Additional (new) resources
Published April 2013
Authors oversaw AngularJS
adoption at Google
Early Access Program
Brian Ford built Batarang for
AngularJS as Google intern
Questions?
Closing the loop:
¤  Twitter è @nitya or #angular-nygdg
¤  Google+ è http://gplus.to/nitya
¤  Meetup è NYC-GDG ‘comments’
¤  Feedback and questions welcome (especially to
influence content and coverage in future talks).

More Related Content

What's hot

Transakcyjność w django
Transakcyjność w djangoTransakcyjność w django
Transakcyjność w django
Marcin Baran
 

What's hot (20)

Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Introduction to AJAX In WordPress
Introduction to AJAX In WordPressIntroduction to AJAX In WordPress
Introduction to AJAX In WordPress
 
AngularJS Basics
AngularJS BasicsAngularJS Basics
AngularJS Basics
 
Advanced Tips & Tricks for using Angular JS
Advanced Tips & Tricks for using Angular JSAdvanced Tips & Tricks for using Angular JS
Advanced Tips & Tricks for using Angular JS
 
Managing JavaScript Dependencies With RequireJS
Managing JavaScript Dependencies With RequireJSManaging JavaScript Dependencies With RequireJS
Managing JavaScript Dependencies With RequireJS
 
Laravel 8 export data as excel file with example
Laravel 8 export data as excel file with exampleLaravel 8 export data as excel file with example
Laravel 8 export data as excel file with example
 
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)
 
Introducing AngularJS
Introducing AngularJSIntroducing AngularJS
Introducing AngularJS
 
AngularJS - Architecture decisions in a large project 
AngularJS - Architecture decisionsin a large project AngularJS - Architecture decisionsin a large project 
AngularJS - Architecture decisions in a large project 
 
Integrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationIntegrating React.js Into a PHP Application
Integrating React.js Into a PHP Application
 
Transakcyjność w django
Transakcyjność w djangoTransakcyjność w django
Transakcyjność w django
 
AngularJS Basics and Best Practices - CC FE &UX
AngularJS Basics and Best Practices - CC FE &UXAngularJS Basics and Best Practices - CC FE &UX
AngularJS Basics and Best Practices - CC FE &UX
 
Requirejs
RequirejsRequirejs
Requirejs
 
React
React React
React
 
Angularjs architecture
Angularjs architectureAngularjs architecture
Angularjs architecture
 
The AngularJS way
The AngularJS wayThe AngularJS way
The AngularJS way
 
AngularJS introduction
AngularJS introductionAngularJS introduction
AngularJS introduction
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
 
Building a Startup Stack with AngularJS
Building a Startup Stack with AngularJSBuilding a Startup Stack with AngularJS
Building a Startup Stack with AngularJS
 
Angularjs - lazy loading techniques
Angularjs - lazy loading techniques Angularjs - lazy loading techniques
Angularjs - lazy loading techniques
 

Similar to AngularJS Deep Dives (NYC GDG Apr 2013)

Practical AngularJS
Practical AngularJSPractical AngularJS
Practical AngularJS
Wei Ru
 

Similar to AngularJS Deep Dives (NYC GDG Apr 2013) (20)

Practical AngularJS
Practical AngularJSPractical AngularJS
Practical AngularJS
 
AngularJS Workshop
AngularJS WorkshopAngularJS Workshop
AngularJS Workshop
 
Angular js
Angular jsAngular js
Angular js
 
Angularjs Basics
Angularjs BasicsAngularjs Basics
Angularjs Basics
 
Angular workshop - Full Development Guide
Angular workshop - Full Development GuideAngular workshop - Full Development Guide
Angular workshop - Full Development Guide
 
Angular.js Primer in Aalto University
Angular.js Primer in Aalto UniversityAngular.js Primer in Aalto University
Angular.js Primer in Aalto University
 
Angular1x and Angular 2 for Beginners
Angular1x and Angular 2 for BeginnersAngular1x and Angular 2 for Beginners
Angular1x and Angular 2 for Beginners
 
Angular js
Angular jsAngular js
Angular js
 
Angular.js - An introduction for the unitiated
Angular.js - An introduction for the unitiatedAngular.js - An introduction for the unitiated
Angular.js - An introduction for the unitiated
 
MEAN - Notes from the field (Full-Stack Development with Javascript)
MEAN - Notes from the field (Full-Stack Development with Javascript)MEAN - Notes from the field (Full-Stack Development with Javascript)
MEAN - Notes from the field (Full-Stack Development with Javascript)
 
Basics of AngularJS
Basics of AngularJSBasics of AngularJS
Basics of AngularJS
 
Dive into AngularJS and directives
Dive into AngularJS and directivesDive into AngularJS and directives
Dive into AngularJS and directives
 
Angular js 2.0 beta
Angular js 2.0 betaAngular js 2.0 beta
Angular js 2.0 beta
 
Introduction to Angular js 2.0
Introduction to Angular js 2.0Introduction to Angular js 2.0
Introduction to Angular js 2.0
 
AngularJs Superheroic JavaScript MVW Framework Services by Miracle Studios
AngularJs Superheroic JavaScript MVW Framework Services by Miracle StudiosAngularJs Superheroic JavaScript MVW Framework Services by Miracle Studios
AngularJs Superheroic JavaScript MVW Framework Services by Miracle Studios
 
Angular Js Get Started - Complete Course
Angular Js Get Started - Complete CourseAngular Js Get Started - Complete Course
Angular Js Get Started - Complete Course
 
Angular
AngularAngular
Angular
 
Angular
AngularAngular
Angular
 
Angular js
Angular jsAngular js
Angular js
 
Understanding angular js
Understanding angular jsUnderstanding angular js
Understanding angular js
 

More from Nitya Narasimhan (6)

Introduction To Dart (GDG NY Jan 2014 Meetup)
Introduction To Dart (GDG NY Jan 2014 Meetup)Introduction To Dart (GDG NY Jan 2014 Meetup)
Introduction To Dart (GDG NY Jan 2014 Meetup)
 
From 'Meteor' to 'Maker'
From 'Meteor' to 'Maker'From 'Meteor' to 'Maker'
From 'Meteor' to 'Maker'
 
Chrome Dev Summit Highlights (NYC GDG Dec 2013)
Chrome Dev Summit Highlights (NYC GDG Dec 2013)Chrome Dev Summit Highlights (NYC GDG Dec 2013)
Chrome Dev Summit Highlights (NYC GDG Dec 2013)
 
MeteorJS Introduction
MeteorJS IntroductionMeteorJS Introduction
MeteorJS Introduction
 
Angular js gtg-27feb2013
Angular js gtg-27feb2013Angular js gtg-27feb2013
Angular js gtg-27feb2013
 
The Evolution of Social Search
The Evolution of Social SearchThe Evolution of Social Search
The Evolution of Social Search
 

Recently uploaded

Recently uploaded (20)

Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Quantum Leap in Next-Generation Computing
Quantum Leap in Next-Generation ComputingQuantum Leap in Next-Generation Computing
Quantum Leap in Next-Generation Computing
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
TEST BANK For Principles of Anatomy and Physiology, 16th Edition by Gerard J....
TEST BANK For Principles of Anatomy and Physiology, 16th Edition by Gerard J....TEST BANK For Principles of Anatomy and Physiology, 16th Edition by Gerard J....
TEST BANK For Principles of Anatomy and Physiology, 16th Edition by Gerard J....
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Navigating Identity and Access Management in the Modern Enterprise
Navigating Identity and Access Management in the Modern EnterpriseNavigating Identity and Access Management in the Modern Enterprise
Navigating Identity and Access Management in the Modern Enterprise
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
AI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by AnitarajAI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by Anitaraj
 
Decarbonising Commercial Real Estate: The Role of Operational Performance
Decarbonising Commercial Real Estate: The Role of Operational PerformanceDecarbonising Commercial Real Estate: The Role of Operational Performance
Decarbonising Commercial Real Estate: The Role of Operational Performance
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Choreo: Empowering the Future of Enterprise Software Engineering
Choreo: Empowering the Future of Enterprise Software EngineeringChoreo: Empowering the Future of Enterprise Software Engineering
Choreo: Empowering the Future of Enterprise Software Engineering
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
API Governance and Monetization - The evolution of API governance
API Governance and Monetization -  The evolution of API governanceAPI Governance and Monetization -  The evolution of API governance
API Governance and Monetization - The evolution of API governance
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDM
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 

AngularJS Deep Dives (NYC GDG Apr 2013)

  • 1. AngularJS Exposed: Deep Dives Nitya Narasimhan @nitya NYC GTUG Meetup April 23, 2013
  • 2. AngularJS (breaking it down..) ¤  1: Introduced (Feb) = bird’s eye view (what + why) ¤  2: Exposed (Apr) = deep dives (concepts in code) ¤  3: Applied (??) = end-to-end app (routes, promises, tests) ¤  4: Extended (??) = advanced topics (Batarang, Karma, ..) ¤  Other??
  • 3. Bird’s Eye View (Recap) ¤  Client-side JavaScript Framework (OSS Google, 2009) ¤  Advocates Model-View-* architecture for web apps ¤  “HTML enhanced for web apps” (CRUD, single-page) ¤  Directives = Declarative view, Imperative behavior ¤  Scope = Transparent 2-way data binding ¤  Plays nice with others (pure JavaScript, clear boundary)
  • 4. The “Declarative” Difference “Static” View “Dynamic” View Variable = user input Fixed = string literal View (HTML) Using jQuery Using AngularJS Behavior (JavaScript) No DOM Wrangling needed
  • 5. 2-way Data Binding (in MVC) JavaScript UserEvents ServerEvents HTML Tightly coupled by logic Decoupled with scope
  • 6. Deep Dives (Today) ¤  Startup (bootstrapping) ¤  Runtime (event handling) ¤  View Templates (HTML ++) ¤  MV-* Philosophy ¤  Binding ($scope context) ¤  Injection (Dependency) ¤  API & Modules ¤  Directives ¤  Services ¤  Filters ¤  Types ¤  Global APIs ¤  Workflow (Seed + Yeoman) ¤  Testing (BDD + Karma)
  • 7. Bootstrapping: Angular ‘injector’ ¤  Declare a static view (HTML) ¤  Identify ‘root’ element for the dynamic view (ng-app) ¤  Angular treats rooted ‘tree’ as your web-app template ¤  Identifies associated module, configures $injector service ¤  It creates $scope object to maintain application state ¤  It uses $compile service to process AngularJS markup and render dynamic DOM
  • 9. Runtime: Angular ‘interceptor’ ¤  Browser event (initiated by user, network, timer) occurs ¤  Enters JavaScript context to execute event callbacks ¤  Exits JavaScript context and renders modified DOM (view) ¤  Angular modifies event flow to enter custom $digest loop ¤  $eval executes async tasks ¤  $watch evaluates expressions to detect & process changes ¤  Exits loop when state stabilizes Angular context entry can be explicit (call $apply) or implicit (Angular operation)
  • 10. View Templates: HTML Enhanced ¤  “Template” boundaries defined by ng-app ¤  declarative specification of view (static DOM) ¤  compiled at runtime using model + controller (to render dynamic DOM) ¤  consists of standard elements (HTML, CSS) + angular-enhanced elements ¤  Angular-Enhanced Elements ¤  Directive – augmenting attribute or reusable DOM element ¤  Markup – “{{ }}” notation used to bind expressions to elements ¤  Expressions are processed by $parse, can include JS-like code ¤  Filters – “ | “ notation used to format data for display (chain-able) ¤  Form Controls – declarative validation, view manipulation
  • 13. Data Binding: $scope as context ¤  Stores application state (data model), links view-controller ¤  Detects data changes to attached models ($watch) ¤  Provides execution context to evaluate expressions i.e., {{ }} ¤  Has nested hierarchy (DOM-like) for accessibility and efficiency Code shows how ‘name’ binds to different models in different scopes Angular “2-way binding” synchronizes data models at view and controller via $scope
  • 15. Injection: Handling Dependency ¤  Client-server relationships involve “dependency” ¤  Imperative: Clients “craft” the required dependencies. ¤  Injection: Clients “declare” dependencies; injector fulfills them (Inversion of control) ¤  AngularJS $inject service ¤  Ex: controller($scope, $http, $dep) ¤  Provider: “core” $http service ¤  Provider: “custom” $dep service The Hollywood Principle “Don’t call us ---- we’ll call you”
  • 16. Angular API: The Big Picture ¤  Module è Wires application together (analogous to ‘main’) ¤  Directive è Enhance HTML (transform DOM, register behaviors) ¤  Service è Injectable singletons, execute common/async tasks ¤  Filter è Data transforms for display (ornamental or reductive) ¤  Type è Core Angular objects (e.g., FormController) ¤  Global API è Core “angular.*” methods (e.g., angular.toJson)
  • 17. Angular API: ‘ng’ Module & more Modules Filters Types gl. APIsServicesDirectives
  • 18. Directives: Popular usage ¤  ngInit = initialization tasks to do before executing template ¤  ngBind = replace text content of element (e.g., span) ¤  ngModel = perform 2-way data binding for an input element ¤  ngView = adds $route template to view (single page apps) ¤  ngController = assign behavior to a given scope (context) ¤  ngRepeat = auto-instantiate template per item in collection
  • 20. Services: Popular Usage ¤ $window = reference to browser’s window object ¤ $document = jQuery-like ref to $window document ¤ $http = server interaction tasks (via XHR or JSONP) ¤ $location = parses app location (URL in address bar) ¤ $route = deep-linking for single-page apps ¤  $routeProvider defines routes for resources ¤  $routeParams extracted from $location search/path
  • 22. Filters: Popular Usage ¤ currency – formats number as currency (w/ symbol) ¤ date – formats to both composed, predefined strings ¤ lowercase, uppercase – transform ‘string’ case ¤ On “Arrays”, processes according to predicate ¤  orderBy – reorders array elements to suit ¤  limitTo – returns slice of array limited to specified count ¤  filter – return selected “matching” subset of array
  • 25. Recommended Workflow: Yeoman Scaffolding (think ‘seed’) Resolving (think ‘maven’) Running (think ‘ant’)
  • 26. Workflow: Yeoman Benefits (Adds) HTML5 Shiv Scripts Analytics (Simplifies) Scaffold Test Runner Build
  • 27. Additional (new) resources Published April 2013 Authors oversaw AngularJS adoption at Google Early Access Program Brian Ford built Batarang for AngularJS as Google intern
  • 28. Questions? Closing the loop: ¤  Twitter è @nitya or #angular-nygdg ¤  Google+ è http://gplus.to/nitya ¤  Meetup è NYC-GDG ‘comments’ ¤  Feedback and questions welcome (especially to influence content and coverage in future talks).