SlideShare a Scribd company logo
1 of 161
CommonJS Everywhere
              wakanday 2011
  JS.everywhere(Boston, October, 15)




                  by Christoph Dorn

    Copyright (c) 2011 Christoph Dorn <christoph@christophdorn.com>
   License: Creative Commons Attribution-NonCommercial-ShareAlike 3.0
         Various names and trademarks copyright respective parties.
CommonJS Everywhere
CommonJS Everywhere
 What does CommonJS Everywhere mean?
CommonJS Everywhere
 What does CommonJS Everywhere mean?

   Being able to run CommonJS
compliant code in all areas a system.
CommonJS Everywhere
     What does CommonJS Everywhere mean?

      Being able to run CommonJS
   compliant code in all areas a system.

Since CommonJS builds on JavaScript we need
         JavaScript Everywhere
                  first!
CommonJS Everywhere
     What does CommonJS Everywhere mean?

      Being able to run CommonJS
   compliant code in all areas a system.

Since CommonJS builds on JavaScript we need
         JavaScript Everywhere
                  first!

          Where are we at with that and
   where does CommonJS fit within this context?
JavaScript Everywhere
JavaScript Everywhere
• All too familiar with Browsers
JavaScript Everywhere
• All too familiar with Browsers
• Have heard of Server Side JavaScript (thanks to NodeJS)
JavaScript Everywhere
• All too familiar with Browsers
• Have heard of Server Side JavaScript (thanks to NodeJS)
• Know about Firebug a Firefox Extension
JavaScript Everywhere
• All too familiar with Browsers
• Have heard of Server Side JavaScript (thanks to NodeJS)
• Know about Firebug a Firefox Extension
• Titanium and PhoneGap for Native JS Mobile Apps
JavaScript Everywhere
• All too familiar with Browsers
• Have heard of Server Side JavaScript (thanks to NodeJS)
• Know about Firebug a Firefox Extension
• Titanium and PhoneGap for Native JS Mobile Apps
• AppEngineJS for Google App Engine (Java/Rhino)
JavaScript Everywhere
• All too familiar with Browsers
• Have heard of Server Side JavaScript (thanks to NodeJS)
• Know about Firebug a Firefox Extension
• Titanium and PhoneGap for Native JS Mobile Apps
• AppEngineJS for Google App Engine (Java/Rhino)
• V8CGI for CGI, FastCGI, Apache module and CLI JS
JavaScript Everywhere
• All too familiar with Browsers
• Have heard of Server Side JavaScript (thanks to NodeJS)
• Know about Firebug a Firefox Extension
• Titanium and PhoneGap for Native JS Mobile Apps
• AppEngineJS for Google App Engine (Java/Rhino)
• V8CGI for CGI, FastCGI, Apache module and CLI JS
• GPSEE for Embedding Spidermonkey in C and Shell JS
JavaScript Everywhere
• All too familiar with Browsers
• Have heard of Server Side JavaScript (thanks to NodeJS)
• Know about Firebug a Firefox Extension
• Titanium and PhoneGap for Native JS Mobile Apps
• AppEngineJS for Google App Engine (Java/Rhino)
• V8CGI for CGI, FastCGI, Apache module and CLI JS
• GPSEE for Embedding Spidermonkey in C and Shell JS
• RingoJS for Embedding Rhino in Java
JavaScript Everywhere
• All too familiar with Browsers
• Have heard of Server Side JavaScript (thanks to NodeJS)
• Know about Firebug a Firefox Extension
• Titanium and PhoneGap for Native JS Mobile Apps
• AppEngineJS for Google App Engine (Java/Rhino)
• V8CGI for CGI, FastCGI, Apache module and CLI JS
• GPSEE for Embedding Spidermonkey in C and Shell JS
• RingoJS for Embedding Rhino in Java
• Narwhal for JavaScriptCore, Node & Rhino
JavaScript Everywhere
• All too familiar with Browsers
• Have heard of Server Side JavaScript (thanks to NodeJS)
• Know about Firebug a Firefox Extension
• Titanium and PhoneGap for Native JS Mobile Apps
• AppEngineJS for Google App Engine (Java/Rhino)
• V8CGI for CGI, FastCGI, Apache module and CLI JS
• GPSEE for Embedding Spidermonkey in C and Shell JS
• RingoJS for Embedding Rhino in Java
• Narwhal for JavaScriptCore, Node & Rhino
• Add-on SDK for Restartless & Secure Firefox Extensions
JavaScript Everywhere
• All too familiar with Browsers
• Have heard of Server Side JavaScript (thanks to NodeJS)
• Know about Firebug a Firefox Extension
• Titanium and PhoneGap for Native JS Mobile Apps
• AppEngineJS for Google App Engine (Java/Rhino)
• V8CGI for CGI, FastCGI, Apache module and CLI JS
• GPSEE for Embedding Spidermonkey in C and Shell JS
• RingoJS for Embedding Rhino in Java
• Narwhal for JavaScriptCore, Node & Rhino
• Add-on SDK for Restartless & Secure Firefox Extensions
• CouchDB Apps served from a User-facing REST Database
JavaScript Everywhere
• All too familiar with Browsers
• Have heard of Server Side JavaScript (thanks to NodeJS)
• Know about Firebug a Firefox Extension
• Titanium and PhoneGap for Native JS Mobile Apps
• AppEngineJS for Google App Engine (Java/Rhino)
• V8CGI for CGI, FastCGI, Apache module and CLI JS
• GPSEE for Embedding Spidermonkey in C and Shell JS
• RingoJS for Embedding Rhino in Java
• Narwhal for JavaScriptCore, Node & Rhino
• Add-on SDK for Restartless & Secure Firefox Extensions
• CouchDB Apps served from a User-facing REST Database

  What do all these platforms have in common?
JavaScript Everywhere
JavaScript Everywhere
All these (and many more) platforms:
JavaScript Everywhere
All these (and many more) platforms:

• Allow us to run JavaScript everywhere
JavaScript Everywhere
All these (and many more) platforms:

• Allow us to run JavaScript everywhere
• Maintained by passionate authors and contributors
JavaScript Everywhere
All these (and many more) platforms:

• Allow us to run JavaScript everywhere
• Maintained by passionate authors and contributors
• Have energetic and loyal userbases
JavaScript Everywhere
All these (and many more) platforms:

• Allow us to run JavaScript everywhere
• Maintained by passionate authors and contributors
• Have energetic and loyal userbases
• Have great ideas
JavaScript Everywhere
All these (and many more) platforms:

• Allow us to run JavaScript everywhere
• Maintained by passionate authors and contributors
• Have energetic and loyal userbases
• Have great ideas
• Solve specific problems
JavaScript Everywhere
All these (and many more) platforms:

• Allow us to run JavaScript everywhere
• Maintained by passionate authors and contributors
• Have energetic and loyal userbases
• Have great ideas
• Solve specific problems
• Share common problems
JavaScript Everywhere
All these (and many more) platforms:

• Allow us to run JavaScript everywhere
• Maintained by passionate authors and contributors
• Have energetic and loyal userbases
• Have great ideas
• Solve specific problems
• Share common problems

        That is a great thing!
JavaScript Everywhere
JavaScript Everywhere
BUT all these (and many more) platforms also lack:
JavaScript Everywhere
BUT all these (and many more) platforms also lack:

• A compatible standard library
JavaScript Everywhere
BUT all these (and many more) platforms also lack:

• A compatible standard library
    (Binary, IO, File, Socket, Event, System, ...)
JavaScript Everywhere
BUT all these (and many more) platforms also lack:

• A compatible standard library
    (Binary, IO, File, Socket, Event, System, ...)
• Ability to share the same code packages & modules
JavaScript Everywhere
BUT all these (and many more) platforms also lack:

• A compatible standard library
    (Binary, IO, File, Socket, Event, System, ...)
• Ability to share the same code packages & modules
• Ability to share the same debug tools
JavaScript Everywhere
BUT all these (and many more) platforms also lack:

• A compatible standard library
    (Binary, IO, File, Socket, Event, System, ...)
• Ability to share the same code packages & modules
• Ability to share the same debug tools
• Ability to set portable standards by themselves
JavaScript Everywhere
BUT all these (and many more) platforms also lack:

• A compatible standard library
    (Binary, IO, File, Socket, Event, System, ...)
• Ability to share the same code packages & modules
• Ability to share the same debug tools
• Ability to set portable standards by themselves

  That is an unfortunate thing!
JavaScript Everywhere
JavaScript Everywhere
BUT there is a solution:
JavaScript Everywhere
BUT there is a solution:



         CommonJS!
JavaScript Everywhere
BUT there is a solution:



         CommonJS!
         What is CommonJS?
CommonJS: What
CommonJS: What
• Group of volunteers from many different projects
CommonJS: What
• Group of volunteers from many different projects
  • Want to: use JavaScript & share code
CommonJS: What
• Group of volunteers from many different projects
  • Want to: use JavaScript & share code
• A Mailing List
CommonJS: What
• Group of volunteers from many different projects
  • Want to: use JavaScript & share code
• A Mailing List
• A Wiki with specifications in various stages
CommonJS: What
• Group of volunteers from many different projects
  • Want to: use JavaScript & share code
• A Mailing List
• A Wiki with specifications in various stages
• Run by group consensus and benevolent dictators
CommonJS: What
• Group of volunteers from many different projects
  • Want to: use JavaScript & share code
• A Mailing List
• A Wiki with specifications in various stages
• Run by group consensus and benevolent dictators
• Implementation driven
CommonJS: What
• Group of volunteers from many different projects
  • Want to: use JavaScript & share code
• A Mailing List
• A Wiki with specifications in various stages
• Run by group consensus and benevolent dictators
• Implementation driven
• Always open for membership!
CommonJS: What
• Group of volunteers from many different projects
  • Want to: use JavaScript & share code
• A Mailing List
• A Wiki with specifications in various stages
• Run by group consensus and benevolent dictators
• Implementation driven
• Always open for membership!
            A group of people
       working together to realize
      an Ecosystem for JavaScript
What does it look like?
What does it look like?
CommonJS: API Process
CommonJS: API Process
How does the CommonJS API proposal process work?
CommonJS: API Process
How does the CommonJS API proposal process work?

 1. You pick a JS platform
CommonJS: API Process
How does the CommonJS API proposal process work?

 1. You pick a JS platform
 2. Play with it and tie it into some of your stuff
CommonJS: API Process
How does the CommonJS API proposal process work?

 1. You pick a JS platform
 2. Play with it and tie it into some of your stuff
 3. Now you want to do something with a second platform; BUT:
CommonJS: API Process
How does the CommonJS API proposal process work?

 1. You pick a JS platform
 2. Play with it and tie it into some of your stuff
 3. Now you want to do something with a second platform; BUT:
   • There are no consistent APIs across platforms
CommonJS: API Process
How does the CommonJS API proposal process work?

 1. You pick a JS platform
 2. Play with it and tie it into some of your stuff
 3. Now you want to do something with a second platform; BUT:
   • There are no consistent APIs across platforms
 4. So you ASK and then:
CommonJS: API Process
How does the CommonJS API proposal process work?

 1. You pick a JS platform
 2. Play with it and tie it into some of your stuff
 3. Now you want to do something with a second platform; BUT:
   • There are no consistent APIs across platforms
 4. So you ASK and then:
   • Hack something together based on the best you can find or know
CommonJS: API Process
How does the CommonJS API proposal process work?

 1. You pick a JS platform
 2. Play with it and tie it into some of your stuff
 3. Now you want to do something with a second platform; BUT:
   • There are no consistent APIs across platforms
 4. So you ASK and then:
   • Hack something together based on the best you can find or know
   • Notice sound common ground and improve your implementation
CommonJS: API Process
How does the CommonJS API proposal process work?

 1. You pick a JS platform
 2. Play with it and tie it into some of your stuff
 3. Now you want to do something with a second platform; BUT:
   • There are no consistent APIs across platforms
 4. So you ASK and then:
   • Hack something together based on the best you can find or know
   • Notice sound common ground and improve your implementation
 5. Champion your solution on the CommonJS Wiki & Mailing List
CommonJS: API Process
How does the CommonJS API proposal process work?

 1. You pick a JS platform
 2. Play with it and tie it into some of your stuff
 3. Now you want to do something with a second platform; BUT:
   • There are no consistent APIs across platforms
 4. So you ASK and then:
   • Hack something together based on the best you can find or know
   • Notice sound common ground and improve your implementation
 5. Champion your solution on the CommonJS Wiki & Mailing List
 6. Expect to be redirected or have your solution dissected
CommonJS: API Process
How does the CommonJS API proposal process work?

 1. You pick a JS platform
 2. Play with it and tie it into some of your stuff
 3. Now you want to do something with a second platform; BUT:
   • There are no consistent APIs across platforms
 4. So you ASK and then:
   • Hack something together based on the best you can find or know
   • Notice sound common ground and improve your implementation
 5. Champion your solution on the CommonJS Wiki & Mailing List
 6. Expect to be redirected or have your solution dissected
 7. See the solution grow into a specification with many implementations
CommonJS: API Process
How does the CommonJS API proposal process work?

 1. You pick a JS platform
 2. Play with it and tie it into some of your stuff
 3. Now you want to do something with a second platform; BUT:
   • There are no consistent APIs across platforms
 4. So you ASK and then:
   • Hack something together based on the best you can find or know
   • Notice sound common ground and improve your implementation
 5. Champion your solution on the CommonJS Wiki & Mailing List
 6. Expect to be redirected or have your solution dissected
 7. See the solution grow into a specification with many implementations


Take pride in helping CommonJS move forward!
CommonJS: Standards
CommonJS: Standards
What makes a CommonJS specification ratified?
CommonJS: Standards
What makes a CommonJS specification ratified?

 1. A proposal
CommonJS: Standards
What makes a CommonJS specification ratified?

 1. A proposal
 2. Sufficient discussions
CommonJS: Standards
What makes a CommonJS specification ratified?

 1. A proposal
 2. Sufficient discussions
 3. Group consensus
CommonJS: Standards
What makes a CommonJS specification ratified?

 1. A proposal
 2. Sufficient discussions
 3. Group consensus
 4. Draft specification
CommonJS: Standards
What makes a CommonJS specification ratified?

 1. A proposal
 2. Sufficient discussions
 3. Group consensus
 4. Draft specification
 5. Sufficient votes from members with skin in the CommonJS game
CommonJS: Standards
What makes a CommonJS specification ratified?

 1. A proposal
 2. Sufficient discussions
 3. Group consensus
 4. Draft specification
 5. Sufficient votes from members with skin in the CommonJS game
 6. At least a handful of implementations
CommonJS: Standards
What makes a CommonJS specification ratified?

 1. A proposal
 2. Sufficient discussions
 3. Group consensus
 4. Draft specification
 5. Sufficient votes from members with skin in the CommonJS game
 6. At least a handful of implementations
 7. Sufficient time
CommonJS: Standards
What makes a CommonJS specification ratified?

 1. A proposal
 2. Sufficient discussions
 3. Group consensus
 4. Draft specification
 5. Sufficient votes from members with skin in the CommonJS game
 6. At least a handful of implementations
 7. Sufficient time

Is it worth it?
CommonJS: Standards
What makes a CommonJS specification ratified?

 1. A proposal
 2. Sufficient discussions
 3. Group consensus
 4. Draft specification
 5. Sufficient votes from members with skin in the CommonJS game
 6. At least a handful of implementations
 7. Sufficient time

Is it worth it?


            Absolutely!
CommonJS: The Result
CommonJS: The Result

  Modules, Packages &
   Platforms targeting
 CommonJS compliance
 are truly interoperable!
CommonJS: Status
CommonJS: Status
Where is CommonJS at?
CommonJS: Status
Where is CommonJS at?

 • Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY!
CommonJS: Status
Where is CommonJS at?

 • Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY!
 • Packages 1.0 (RATIFIED) 1.1 in the works
CommonJS: Status
Where is CommonJS at?

 • Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY!
 • Packages 1.0 (RATIFIED) 1.1 in the works
 • Unit Testing 1.0 (RATIFIED) amendment pending
CommonJS: Status
Where is CommonJS at?

 •   Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY!
 •   Packages 1.0 (RATIFIED) 1.1 in the works
 •   Unit Testing 1.0 (RATIFIED) amendment pending
 •   System 1.0 (pre-RATIFIED) more IMPLEMENTATIONS needed
CommonJS: Status
Where is CommonJS at?

 •   Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY!
 •   Packages 1.0 (RATIFIED) 1.1 in the works
 •   Unit Testing 1.0 (RATIFIED) amendment pending
 •   System 1.0 (pre-RATIFIED) more IMPLEMENTATIONS needed
 •   JSGI 0.2/0.3 (PROPOSALS) more IMPLEMENTATIONS needed
CommonJS: Status
Where is CommonJS at?

 •   Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY!
 •   Packages 1.0 (RATIFIED) 1.1 in the works
 •   Unit Testing 1.0 (RATIFIED) amendment pending
 •   System 1.0 (pre-RATIFIED) more IMPLEMENTATIONS needed
 •   JSGI 0.2/0.3 (PROPOSALS) more IMPLEMENTATIONS needed
 •   Many proposals that need discussion and IMPLEMENTATIONS
CommonJS: Status
Where is CommonJS at?

 •   Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY!
 •   Packages 1.0 (RATIFIED) 1.1 in the works
 •   Unit Testing 1.0 (RATIFIED) amendment pending
 •   System 1.0 (pre-RATIFIED) more IMPLEMENTATIONS needed
 •   JSGI 0.2/0.3 (PROPOSALS) more IMPLEMENTATIONS needed
 •   Many proposals that need discussion and IMPLEMENTATIONS


Sufficient for CommonJS Everywhere?
CommonJS: Status
Where is CommonJS at?

 •   Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY!
 •   Packages 1.0 (RATIFIED) 1.1 in the works
 •   Unit Testing 1.0 (RATIFIED) amendment pending
 •   System 1.0 (pre-RATIFIED) more IMPLEMENTATIONS needed
 •   JSGI 0.2/0.3 (PROPOSALS) more IMPLEMENTATIONS needed
 •   Many proposals that need discussion and IMPLEMENTATIONS


Sufficient for CommonJS Everywhere?

              Unfortunately NO :(
CommonJS: Status
Where is CommonJS at?

 •   Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY!
 •   Packages 1.0 (RATIFIED) 1.1 in the works
 •   Unit Testing 1.0 (RATIFIED) amendment pending
 •   System 1.0 (pre-RATIFIED) more IMPLEMENTATIONS needed
 •   JSGI 0.2/0.3 (PROPOSALS) more IMPLEMENTATIONS needed
 •   Many proposals that need discussion and IMPLEMENTATIONS


Sufficient for CommonJS Everywhere?

              Unfortunately NO :(
What is needed?
CommonJS: Needed
CommonJS: Needed
What do we need for CommonJS Everywhere?
CommonJS: Needed
What do we need for CommonJS Everywhere?
 • Portable unit tests for specifications
CommonJS: Needed
What do we need for CommonJS Everywhere?
 • Portable unit tests for specifications
 • Move to Github for specifications and tests
CommonJS: Needed
What do we need for CommonJS Everywhere?
 • Portable unit tests for specifications
 • Move to Github for specifications and tests
 • New interest from new and existing members
CommonJS: Needed
What do we need for CommonJS Everywhere?
 •   Portable unit tests for specifications
 •   Move to Github for specifications and tests
 •   New interest from new and existing members
 •   More implementers seeking CommonJS compliance
CommonJS: Needed
What do we need for CommonJS Everywhere?
 •   Portable unit tests for specifications
 •   Move to Github for specifications and tests
 •   New interest from new and existing members
 •   More implementers seeking CommonJS compliance
 •   Users demanding CommonJS compliance
CommonJS: Needed
What do we need for CommonJS Everywhere?
 •   Portable unit tests for specifications
 •   Move to Github for specifications and tests
 •   New interest from new and existing members
 •   More implementers seeking CommonJS compliance
 •   Users demanding CommonJS compliance
 •   Packages/Mappings/C (PROPOSAL)
Packages/Mappings/C
CommonJS: Needed
What do we need for CommonJS Everywhere?
 •   Portable unit tests for specifications
 •   Move to Github for specifications and tests
 •   New interest from new and existing members
 •   More implementers seeking CommonJS compliance
 •   Users demanding CommonJS compliance
 •   Packages/Mappings/C (PROPOSAL)
CommonJS: Needed
What do we need for CommonJS Everywhere?
 •   Portable unit tests for specifications
 •   Move to Github for specifications and tests
 •   New interest from new and existing members
 •   More implementers seeking CommonJS compliance
 •   Users demanding CommonJS compliance
 •   Packages/Mappings/C (PROPOSAL)
 •   Modules 2.0 (DRAFT) “wrapped” Modules 1.1 + more
CommonJS: Needed
What do we need for CommonJS Everywhere?
 •   Portable unit tests for specifications
 •   Move to Github for specifications and tests
 •   New interest from new and existing members
 •   More implementers seeking CommonJS compliance
 •   Users demanding CommonJS compliance
 •   Packages/Mappings/C (PROPOSAL)
 •   Modules 2.0 (DRAFT) “wrapped” Modules 1.1 + more
 •   Portable loaders + package managers & registries
CommonJS: Needed
What do we need for CommonJS Everywhere?
 •   Portable unit tests for specifications
 •   Move to Github for specifications and tests
 •   New interest from new and existing members
 •   More implementers seeking CommonJS compliance
 •   Users demanding CommonJS compliance
 •   Packages/Mappings/C (PROPOSAL)
 •   Modules 2.0 (DRAFT) “wrapped” Modules 1.1 + more
 •   Portable loaders + package managers & registries
 •   Agreement on low-level APIs
CommonJS: Needed
What do we need for CommonJS Everywhere?
 •   Portable unit tests for specifications
 •   Move to Github for specifications and tests
 •   New interest from new and existing members
 •   More implementers seeking CommonJS compliance
 •   Users demanding CommonJS compliance
 •   Packages/Mappings/C (PROPOSAL)
 •   Modules 2.0 (DRAFT) “wrapped” Modules 1.1 + more
 •   Portable loaders + package managers & registries
 •   Agreement on low-level APIs

What is happening in this regard?
CommonJS: Happenings
CommonJS: Happenings
Key platforms are converging:
CommonJS: Happenings
Key platforms are converging:
 • RingoJS, GPSEE and V8CGI increasingly compatible
CommonJS: Happenings
Key platforms are converging:
 • RingoJS, GPSEE and V8CGI increasingly compatible
 • NodeJS learning CommonJS APIs thanks to CommonNode
CommonJS: Happenings
Key platforms are converging:
 • RingoJS, GPSEE and V8CGI increasingly compatible
 • NodeJS learning CommonJS APIs thanks to CommonNode
Module loaders becoming multi-platform capable:
CommonJS: Happenings
Key platforms are converging:
 • RingoJS, GPSEE and V8CGI increasingly compatible
 • NodeJS learning CommonJS APIs thanks to CommonNode
Module loaders becoming multi-platform capable:
 • RequireJS (Browser, Rhino, NodeJS)
CommonJS: Happenings
Key platforms are converging:
 • RingoJS, GPSEE and V8CGI increasingly compatible
 • NodeJS learning CommonJS APIs thanks to CommonNode
Module loaders becoming multi-platform capable:
 • RequireJS (Browser, Rhino, NodeJS)
 • PINF (Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir)
CommonJS: Happenings
Key platforms are converging:
 • RingoJS, GPSEE and V8CGI increasingly compatible
 • NodeJS learning CommonJS APIs thanks to CommonNode
Module loaders becoming multi-platform capable:
 • RequireJS (Browser, Rhino, NodeJS)
 • PINF (Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir)
Module loaders implementing Packages/Mappings:
CommonJS: Happenings
Key platforms are converging:
 • RingoJS, GPSEE and V8CGI increasingly compatible
 • NodeJS learning CommonJS APIs thanks to CommonNode
Module loaders becoming multi-platform capable:
 • RequireJS (Browser, Rhino, NodeJS)
 • PINF (Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir)
Module loaders implementing Packages/Mappings:
  • Nodules (Async loading: NodeJS)
CommonJS: Happenings
Key platforms are converging:
 • RingoJS, GPSEE and V8CGI increasingly compatible
 • NodeJS learning CommonJS APIs thanks to CommonNode
Module loaders becoming multi-platform capable:
 • RequireJS (Browser, Rhino, NodeJS)
 • PINF (Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir)
Module loaders implementing Packages/Mappings:
  • Nodules (Async loading: NodeJS)
  • PINF (Async loading: NodeJS, Static loading: other platforms)
CommonJS: Happenings
Key platforms are converging:
 • RingoJS, GPSEE and V8CGI increasingly compatible
 • NodeJS learning CommonJS APIs thanks to CommonNode
Module loaders becoming multi-platform capable:
 • RequireJS (Browser, Rhino, NodeJS)
 • PINF (Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir)
Module loaders implementing Packages/Mappings:
  • Nodules (Async loading: NodeJS)
  • PINF (Async loading: NodeJS, Static loading: other platforms)
Package repositories with package managers:
CommonJS: Happenings
Key platforms are converging:
 • RingoJS, GPSEE and V8CGI increasingly compatible
 • NodeJS learning CommonJS APIs thanks to CommonNode
Module loaders becoming multi-platform capable:
 • RequireJS (Browser, Rhino, NodeJS)
 • PINF (Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir)
Module loaders implementing Packages/Mappings:
  • Nodules (Async loading: NodeJS)
  • PINF (Async loading: NodeJS, Static loading: other platforms)
Package repositories with package managers:
  • NodeJS Package Registry via NPM
CommonJS: Happenings
Key platforms are converging:
 • RingoJS, GPSEE and V8CGI increasingly compatible
 • NodeJS learning CommonJS APIs thanks to CommonNode
Module loaders becoming multi-platform capable:
 • RequireJS (Browser, Rhino, NodeJS)
 • PINF (Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir)
Module loaders implementing Packages/Mappings:
  • Nodules (Async loading: NodeJS)
  • PINF (Async loading: NodeJS, Static loading: other platforms)
Package repositories with package managers:
  • NodeJS Package Registry via NPM
  • Dojo Foundation Package Repository via CPM
CommonJS: Happenings
Key platforms are converging:
 • RingoJS, GPSEE and V8CGI increasingly compatible
 • NodeJS learning CommonJS APIs thanks to CommonNode
Module loaders becoming multi-platform capable:
 • RequireJS (Browser, Rhino, NodeJS)
 • PINF (Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir)
Module loaders implementing Packages/Mappings:
  • Nodules (Async loading: NodeJS)
  • PINF (Async loading: NodeJS, Static loading: other platforms)
Package repositories with package managers:
  • NodeJS Package Registry via NPM
  • Dojo Foundation Package Repository via CPM
  • CommonJS package URLs and paths via PINF
What is the ultimate
CommonJS Everywhere
         Goal?
How close are we?
How close are we?
12 to 24 months!
How close are we?
12 to 24 months!
        IF
How close are we?
12 to 24 months!
           IF
   We embrace portable
loaders such as PINF and
agree on low-level APIs
PINF JavaScript Loader
PINF JavaScript Loader
• Loads multiple module source formats:
PINF JavaScript Loader
• Loads multiple module source formats:
 • Asynchronous Module Definition (AMD)
PINF JavaScript Loader
• Loads multiple module source formats:
 • Asynchronous Module Definition (AMD)
 • CommonJS Modules 1.1
PINF JavaScript Loader
• Loads multiple module source formats:
 • Asynchronous Module Definition (AMD)
 • CommonJS Modules 1.1
 • CommonJS Modules 2.0 (draft)
PINF JavaScript Loader
• Loads multiple module source formats:
 •   Asynchronous Module Definition (AMD)
 •   CommonJS Modules 1.1
 •   CommonJS Modules 2.0 (draft)
 •   Plain JavaScript files
PINF JavaScript Loader
• Loads multiple module source formats:
 •   Asynchronous Module Definition (AMD)
 •   CommonJS Modules 1.1
 •   CommonJS Modules 2.0 (draft)
 •   Plain JavaScript files

• Dynamically downloads and resolves dependencies
PINF JavaScript Loader
• Loads multiple module source formats:
 •   Asynchronous Module Definition (AMD)
 •   CommonJS Modules 1.1
 •   CommonJS Modules 2.0 (draft)
 •   Plain JavaScript files

• Dynamically downloads and resolves dependencies
• Runs an identical CommonJS package on many platforms
 for development and production:
PINF JavaScript Loader
• Loads multiple module source formats:
 •   Asynchronous Module Definition (AMD)
 •   CommonJS Modules 1.1
 •   CommonJS Modules 2.0 (draft)
 •   Plain JavaScript files

• Dynamically downloads and resolves dependencies
• Runs an identical CommonJS package on many platforms
 for development and production:
 • Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal,
   Jetpack, Titanium, AdobeAir (platform and API support varies)
PINF JavaScript Loader
• Loads multiple module source formats:
 •   Asynchronous Module Definition (AMD)
 •   CommonJS Modules 1.1
 •   CommonJS Modules 2.0 (draft)
 •   Plain JavaScript files

• Dynamically downloads and resolves dependencies
• Runs an identical CommonJS package on many platforms
 for development and production:
 • Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal,
   Jetpack, Titanium, AdobeAir (platform and API support varies)

• Can load CommonJS programs and export static bundle
 (inlined modules) based programs for running in Browser via
 BravoJS (multiple platforms and loaders coming soon)
PINF JavaScript Loader
PINF JavaScript Loader
Types of applications:
PINF JavaScript Loader
Types of applications:
 • Browser: Websites and application user interfaces (web views)
PINF JavaScript Loader
Types of applications:
 • Browser: Websites and application user interfaces (web views)
 • NodeJS: Asynchronous network programs
PINF JavaScript Loader
Types of applications:
 • Browser: Websites and application user interfaces (web views)
 • NodeJS: Asynchronous network programs
 • V8CGI: PHP-like server apps (via Apache module/CGI)
PINF JavaScript Loader
Types of applications:
 • Browser: Websites and application user interfaces (web views)
 • NodeJS: Asynchronous network programs
 • V8CGI: PHP-like server apps (via Apache module/CGI)
 • GPSEE: JS scripting for C apps
PINF JavaScript Loader
Types of applications:
 • Browser: Websites and application user interfaces (web views)
 • NodeJS: Asynchronous network programs
 • V8CGI: PHP-like server apps (via Apache module/CGI)
 • GPSEE: JS scripting for C apps
 • RingoJS: JS scripting for Java apps
PINF JavaScript Loader
Types of applications:
 • Browser: Websites and application user interfaces (web views)
 • NodeJS: Asynchronous network programs
 • V8CGI: PHP-like server apps (via Apache module/CGI)
 • GPSEE: JS scripting for C apps
 • RingoJS: JS scripting for Java apps
 • Narwhal: JS scripting for Mac OS X apps via JavaScriptCore
PINF JavaScript Loader
Types of applications:
 • Browser: Websites and application user interfaces (web views)
 • NodeJS: Asynchronous network programs
 • V8CGI: PHP-like server apps (via Apache module/CGI)
 • GPSEE: JS scripting for C apps
 • RingoJS: JS scripting for Java apps
 • Narwhal: JS scripting for Mac OS X apps via JavaScriptCore
 • Jetpack: Restartless Firefox extensions
PINF JavaScript Loader
Types of applications:
 • Browser: Websites and application user interfaces (web views)
 • NodeJS: Asynchronous network programs
 • V8CGI: PHP-like server apps (via Apache module/CGI)
 • GPSEE: JS scripting for C apps
 • RingoJS: JS scripting for Java apps
 • Narwhal: JS scripting for Mac OS X apps via JavaScriptCore
 • Jetpack: Restartless Firefox extensions
 • Titanium: Native mobile, tablet and desktop apps
PINF JavaScript Loader
Types of applications:
 • Browser: Websites and application user interfaces (web views)
 • NodeJS: Asynchronous network programs
 • V8CGI: PHP-like server apps (via Apache module/CGI)
 • GPSEE: JS scripting for C apps
 • RingoJS: JS scripting for Java apps
 • Narwhal: JS scripting for Mac OS X apps via JavaScriptCore
 • Jetpack: Restartless Firefox extensions
 • Titanium: Native mobile, tablet and desktop apps
 • AdobeAir: Mobile, desktop and TV apps
PINF JavaScript Loader
Types of applications:
 • Browser: Websites and application user interfaces (web views)
 • NodeJS: Asynchronous network programs
 • V8CGI: PHP-like server apps (via Apache module/CGI)
 • GPSEE: JS scripting for C apps
 • RingoJS: JS scripting for Java apps
 • Narwhal: JS scripting for Mac OS X apps via JavaScriptCore
 • Jetpack: Restartless Firefox extensions
 • Titanium: Native mobile, tablet and desktop apps
 • AdobeAir: Mobile, desktop and TV apps
 • Wakanda: COMING SOON
PINF JavaScript Loader
Types of applications:
 • Browser: Websites and application user interfaces (web views)
 • NodeJS: Asynchronous network programs
 • V8CGI: PHP-like server apps (via Apache module/CGI)
 • GPSEE: JS scripting for C apps
 • RingoJS: JS scripting for Java apps
 • Narwhal: JS scripting for Mac OS X apps via JavaScriptCore
 • Jetpack: Restartless Firefox extensions
 • Titanium: Native mobile, tablet and desktop apps
 • AdobeAir: Mobile, desktop and TV apps
 • Wakanda: COMING SOON
Low-level API standards needed!
PINF JavaScript Loader


      Demos
Cross-platform ‘Hello World’
time commonjs --platform node ./HelloWorld
  Hello World
  real 0m0.157s
time commonjs --platform v8cgi ./HelloWorld
  Hello World
  real 0m0.089s <--
time commonjs --platform gpsee ./HelloWorld
  Hello World
  real 0m0.071s <--
time commonjs --platform ringo ./HelloWorld
  Hello World
  real 0m1.796s
time commonjs --platform narwhal ./HelloWorld
  Hello World
  real 0m2.246s
Cross-platform benchmarks
time commonjs --platform node ./JSLintBenchmark
Running JSLint Benchmark by running JSLint against itself ...
... took: 0.874 seconds
real 0m1.675s
user 0m1.578s
sys   0m0.055s

time commonjs --platform v8cgi ./JSLintBenchmark
Running JSLint Benchmark by running JSLint against itself ...
... took: 0.238 seconds
real 0m0.622s
user 0m0.463s
sys   0m0.033s




     Google Chrome: 0.179                Firefox: 0.533
Develop; integrate; deploy
                           Production Application
    Standalone Dev




UI Framework Integration
Parting Suggestions
Parting Suggestions
1. Use packages to hold modules
Parting Suggestions
1. Use packages to hold modules
2. Store packages by their URI:
Parting Suggestions
1. Use packages to hold modules
2. Store packages by their URI:
  ~/packages/<URI_NO_PROTOCOL>/<REVISION>
  ~/packages/github.com/commonjs/stdlib/zipball/v0.1.0 (dev & prod)
  ~/packages/github.com/commonjs/stdlib/master (dev only)
Parting Suggestions
1. Use packages to hold modules
2. Store packages by their URI:
  ~/packages/<URI_NO_PROTOCOL>/<REVISION>
  ~/packages/github.com/commonjs/stdlib/zipball/v0.1.0 (dev & prod)
  ~/packages/github.com/commonjs/stdlib/master (dev only)

3. Define dependencies via mappings in package.json
Parting Suggestions
1. Use packages to hold modules
2. Store packages by their URI:
  ~/packages/<URI_NO_PROTOCOL>/<REVISION>
  ~/packages/github.com/commonjs/stdlib/zipball/v0.1.0 (dev & prod)
  ~/packages/github.com/commonjs/stdlib/master (dev only)

3. Define dependencies via mappings in package.json
4. Use and support module loaders and package managers that
   support not only modules and packages, but also mappings
Parting Suggestions
1. Use packages to hold modules
2. Store packages by their URI:
  ~/packages/<URI_NO_PROTOCOL>/<REVISION>
  ~/packages/github.com/commonjs/stdlib/zipball/v0.1.0 (dev & prod)
  ~/packages/github.com/commonjs/stdlib/master (dev only)

3. Define dependencies via mappings in package.json
4. Use and support module loaders and package managers that
   support not only modules and packages, but also mappings


This will allow you to SWAP OUT PACKAGES depending on
 the environment your application is running in WITHOUT
     HAVING TO WORRY ABOUT CONFLICTS. EVER!
Thank you!


         Big applause for the
                  Community!


Slides and links will be made available at:


http://bit.ly/commonjs-everywhere

More Related Content

What's hot

Asynchronous Module Definition (AMD)
Asynchronous Module Definition (AMD)Asynchronous Module Definition (AMD)
Asynchronous Module Definition (AMD)xMartin12
 
Workshop Intro: FrontEnd General Overview
Workshop Intro: FrontEnd General OverviewWorkshop Intro: FrontEnd General Overview
Workshop Intro: FrontEnd General OverviewVisual Engineering
 
General Assembly Workshop: Advanced JavaScript
General Assembly Workshop: Advanced JavaScriptGeneral Assembly Workshop: Advanced JavaScript
General Assembly Workshop: Advanced JavaScriptSpike Brehm
 
ME vs WEB - AngularJS Fundamentals
ME vs WEB - AngularJS FundamentalsME vs WEB - AngularJS Fundamentals
ME vs WEB - AngularJS FundamentalsAviran Cohen
 
Modules and EmbedJS
Modules and EmbedJSModules and EmbedJS
Modules and EmbedJSJens Arps
 
2013 04-02-server-side-backbone
2013 04-02-server-side-backbone2013 04-02-server-side-backbone
2013 04-02-server-side-backboneSC5.io
 
Building Isomorphic Apps (JSConf.Asia 2014)
Building Isomorphic Apps (JSConf.Asia 2014)Building Isomorphic Apps (JSConf.Asia 2014)
Building Isomorphic Apps (JSConf.Asia 2014)Spike Brehm
 
An Introduction To Testing In AngularJS Applications
An Introduction To Testing In AngularJS Applications An Introduction To Testing In AngularJS Applications
An Introduction To Testing In AngularJS Applications Rohan Chandane
 
Modern Web Application Development Workflow - EclipseCon Europe 2014
Modern Web Application Development Workflow - EclipseCon Europe 2014Modern Web Application Development Workflow - EclipseCon Europe 2014
Modern Web Application Development Workflow - EclipseCon Europe 2014Stéphane Bégaudeau
 
Frontend Application Architecture, Patterns, and Workflows
Frontend Application Architecture, Patterns, and WorkflowsFrontend Application Architecture, Patterns, and Workflows
Frontend Application Architecture, Patterns, and WorkflowsTreasure Data, Inc.
 
Handlebars and Require.js
Handlebars and Require.jsHandlebars and Require.js
Handlebars and Require.jsIvano Malavolta
 
Spring framework 3.2 > 4.0 — themes and trends
Spring framework 3.2 > 4.0 — themes and trendsSpring framework 3.2 > 4.0 — themes and trends
Spring framework 3.2 > 4.0 — themes and trendsArawn Park
 
JavaScript Dependencies, Modules & Browserify
JavaScript Dependencies, Modules & BrowserifyJavaScript Dependencies, Modules & Browserify
JavaScript Dependencies, Modules & BrowserifyJohan Nilsson
 
Advanced java programming-contents
Advanced java programming-contentsAdvanced java programming-contents
Advanced java programming-contentsSelf-Employed
 
Modular JavaScript
Modular JavaScriptModular JavaScript
Modular JavaScriptNLJUG
 

What's hot (20)

Client-Side Packages
Client-Side PackagesClient-Side Packages
Client-Side Packages
 
Asynchronous Module Definition (AMD)
Asynchronous Module Definition (AMD)Asynchronous Module Definition (AMD)
Asynchronous Module Definition (AMD)
 
Workshop Intro: FrontEnd General Overview
Workshop Intro: FrontEnd General OverviewWorkshop Intro: FrontEnd General Overview
Workshop Intro: FrontEnd General Overview
 
General Assembly Workshop: Advanced JavaScript
General Assembly Workshop: Advanced JavaScriptGeneral Assembly Workshop: Advanced JavaScript
General Assembly Workshop: Advanced JavaScript
 
Requirejs
RequirejsRequirejs
Requirejs
 
J servlets
J servletsJ servlets
J servlets
 
ME vs WEB - AngularJS Fundamentals
ME vs WEB - AngularJS FundamentalsME vs WEB - AngularJS Fundamentals
ME vs WEB - AngularJS Fundamentals
 
Modules and EmbedJS
Modules and EmbedJSModules and EmbedJS
Modules and EmbedJS
 
Java J2EE Complete Syllabus Checklist
Java J2EE Complete Syllabus ChecklistJava J2EE Complete Syllabus Checklist
Java J2EE Complete Syllabus Checklist
 
2013 04-02-server-side-backbone
2013 04-02-server-side-backbone2013 04-02-server-side-backbone
2013 04-02-server-side-backbone
 
Building Isomorphic Apps (JSConf.Asia 2014)
Building Isomorphic Apps (JSConf.Asia 2014)Building Isomorphic Apps (JSConf.Asia 2014)
Building Isomorphic Apps (JSConf.Asia 2014)
 
An Introduction To Testing In AngularJS Applications
An Introduction To Testing In AngularJS Applications An Introduction To Testing In AngularJS Applications
An Introduction To Testing In AngularJS Applications
 
Modern Web Application Development Workflow - EclipseCon Europe 2014
Modern Web Application Development Workflow - EclipseCon Europe 2014Modern Web Application Development Workflow - EclipseCon Europe 2014
Modern Web Application Development Workflow - EclipseCon Europe 2014
 
Require js
Require jsRequire js
Require js
 
Frontend Application Architecture, Patterns, and Workflows
Frontend Application Architecture, Patterns, and WorkflowsFrontend Application Architecture, Patterns, and Workflows
Frontend Application Architecture, Patterns, and Workflows
 
Handlebars and Require.js
Handlebars and Require.jsHandlebars and Require.js
Handlebars and Require.js
 
Spring framework 3.2 > 4.0 — themes and trends
Spring framework 3.2 > 4.0 — themes and trendsSpring framework 3.2 > 4.0 — themes and trends
Spring framework 3.2 > 4.0 — themes and trends
 
JavaScript Dependencies, Modules & Browserify
JavaScript Dependencies, Modules & BrowserifyJavaScript Dependencies, Modules & Browserify
JavaScript Dependencies, Modules & Browserify
 
Advanced java programming-contents
Advanced java programming-contentsAdvanced java programming-contents
Advanced java programming-contents
 
Modular JavaScript
Modular JavaScriptModular JavaScript
Modular JavaScript
 

Viewers also liked

Viewers also liked (6)

CSS3: Ripe and Ready to Respond
CSS3: Ripe and Ready to RespondCSS3: Ripe and Ready to Respond
CSS3: Ripe and Ready to Respond
 
Css3
Css3Css3
Css3
 
Html javascript
Html javascriptHtml javascript
Html javascript
 
CSS3 Refresher
CSS3 RefresherCSS3 Refresher
CSS3 Refresher
 
(C)NodeJS
(C)NodeJS(C)NodeJS
(C)NodeJS
 
Node.JS and WebSockets with Faye
Node.JS and WebSockets with FayeNode.JS and WebSockets with Faye
Node.JS and WebSockets with Faye
 

Similar to CommonJS Everywhere (Wakanday 2011)

The Future of Cross-Platform is Native
The Future of Cross-Platform is NativeThe Future of Cross-Platform is Native
The Future of Cross-Platform is NativeJustin Mancinelli
 
HTML5 is the Future of Mobile, PhoneGap Takes You There Today
HTML5 is the Future of Mobile, PhoneGap Takes You There TodayHTML5 is the Future of Mobile, PhoneGap Takes You There Today
HTML5 is the Future of Mobile, PhoneGap Takes You There Todaydavyjones
 
CommonJS via PINF JavaScript Loader - Introduction
CommonJS via PINF JavaScript Loader - IntroductionCommonJS via PINF JavaScript Loader - Introduction
CommonJS via PINF JavaScript Loader - Introductioncadorn
 
Application Deployment at UC Riverside
Application Deployment at UC RiversideApplication Deployment at UC Riverside
Application Deployment at UC RiversideMichael Kennedy
 
Dcjq node.js presentation
Dcjq node.js presentationDcjq node.js presentation
Dcjq node.js presentationasync_io
 
Javascript Best Practices and Intro to Titanium
Javascript Best Practices and Intro to TitaniumJavascript Best Practices and Intro to Titanium
Javascript Best Practices and Intro to TitaniumTechday7
 
Angular mobile angular_u
Angular mobile angular_uAngular mobile angular_u
Angular mobile angular_uDoris Chen
 
Android java fx-jme@jug-lugano
Android java fx-jme@jug-luganoAndroid java fx-jme@jug-lugano
Android java fx-jme@jug-luganoFabrizio Giudici
 
Intro to WordPress Plugins
Intro to WordPress PluginsIntro to WordPress Plugins
Intro to WordPress Pluginszamoose
 
Webdevcon Keynote hh-2012-09-18
Webdevcon Keynote hh-2012-09-18Webdevcon Keynote hh-2012-09-18
Webdevcon Keynote hh-2012-09-18Pierre Joye
 
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...DevDay.org
 
Quo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynoteQuo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynoteChristian Heilmann
 
What's New With Appium? From 1.0 to Now
What's New With Appium? From 1.0 to NowWhat's New With Appium? From 1.0 to Now
What's New With Appium? From 1.0 to NowSauce Labs
 
Phonegap facebook- plugin
Phonegap facebook- pluginPhonegap facebook- plugin
Phonegap facebook- pluginSteve Gill
 
fooConf - JavaScript frameworks of tomorrow
fooConf - JavaScript frameworks of tomorrowfooConf - JavaScript frameworks of tomorrow
fooConf - JavaScript frameworks of tomorrowJuho Vepsäläinen
 
PhoneGap talk from Singapore
PhoneGap talk from SingaporePhoneGap talk from Singapore
PhoneGap talk from SingaporeSteve Gill
 
NodeWay in my project & sails.js
NodeWay in my project & sails.jsNodeWay in my project & sails.js
NodeWay in my project & sails.jsDmytro Ovcharenko
 
Scaling with swagger
Scaling with swaggerScaling with swagger
Scaling with swaggerTony Tam
 

Similar to CommonJS Everywhere (Wakanday 2011) (20)

The Future of Cross-Platform is Native
The Future of Cross-Platform is NativeThe Future of Cross-Platform is Native
The Future of Cross-Platform is Native
 
HTML5 is the Future of Mobile, PhoneGap Takes You There Today
HTML5 is the Future of Mobile, PhoneGap Takes You There TodayHTML5 is the Future of Mobile, PhoneGap Takes You There Today
HTML5 is the Future of Mobile, PhoneGap Takes You There Today
 
CommonJS via PINF JavaScript Loader - Introduction
CommonJS via PINF JavaScript Loader - IntroductionCommonJS via PINF JavaScript Loader - Introduction
CommonJS via PINF JavaScript Loader - Introduction
 
Application Deployment at UC Riverside
Application Deployment at UC RiversideApplication Deployment at UC Riverside
Application Deployment at UC Riverside
 
Dcjq node.js presentation
Dcjq node.js presentationDcjq node.js presentation
Dcjq node.js presentation
 
UCLA HACKU'11
UCLA HACKU'11UCLA HACKU'11
UCLA HACKU'11
 
Javascript Best Practices and Intro to Titanium
Javascript Best Practices and Intro to TitaniumJavascript Best Practices and Intro to Titanium
Javascript Best Practices and Intro to Titanium
 
Angular mobile angular_u
Angular mobile angular_uAngular mobile angular_u
Angular mobile angular_u
 
Android java fx-jme@jug-lugano
Android java fx-jme@jug-luganoAndroid java fx-jme@jug-lugano
Android java fx-jme@jug-lugano
 
Intro to WordPress Plugins
Intro to WordPress PluginsIntro to WordPress Plugins
Intro to WordPress Plugins
 
Webdevcon Keynote hh-2012-09-18
Webdevcon Keynote hh-2012-09-18Webdevcon Keynote hh-2012-09-18
Webdevcon Keynote hh-2012-09-18
 
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...
[DevDay 2017] ReactJS Hands on - Speaker: Binh Phan - Developer at mgm techno...
 
Quo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynoteQuo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynote
 
What's New With Appium? From 1.0 to Now
What's New With Appium? From 1.0 to NowWhat's New With Appium? From 1.0 to Now
What's New With Appium? From 1.0 to Now
 
Phonegap facebook- plugin
Phonegap facebook- pluginPhonegap facebook- plugin
Phonegap facebook- plugin
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript Introduction
 
fooConf - JavaScript frameworks of tomorrow
fooConf - JavaScript frameworks of tomorrowfooConf - JavaScript frameworks of tomorrow
fooConf - JavaScript frameworks of tomorrow
 
PhoneGap talk from Singapore
PhoneGap talk from SingaporePhoneGap talk from Singapore
PhoneGap talk from Singapore
 
NodeWay in my project & sails.js
NodeWay in my project & sails.jsNodeWay in my project & sails.js
NodeWay in my project & sails.js
 
Scaling with swagger
Scaling with swaggerScaling with swagger
Scaling with swagger
 

Recently uploaded

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
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
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
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
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
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
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
 
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
 
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
 
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
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 

Recently uploaded (20)

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
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
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
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
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
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
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
 
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
 
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
 
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
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 

CommonJS Everywhere (Wakanday 2011)

  • 1. CommonJS Everywhere wakanday 2011 JS.everywhere(Boston, October, 15) by Christoph Dorn Copyright (c) 2011 Christoph Dorn <christoph@christophdorn.com> License: Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Various names and trademarks copyright respective parties.
  • 3. CommonJS Everywhere What does CommonJS Everywhere mean?
  • 4. CommonJS Everywhere What does CommonJS Everywhere mean? Being able to run CommonJS compliant code in all areas a system.
  • 5. CommonJS Everywhere What does CommonJS Everywhere mean? Being able to run CommonJS compliant code in all areas a system. Since CommonJS builds on JavaScript we need JavaScript Everywhere first!
  • 6. CommonJS Everywhere What does CommonJS Everywhere mean? Being able to run CommonJS compliant code in all areas a system. Since CommonJS builds on JavaScript we need JavaScript Everywhere first! Where are we at with that and where does CommonJS fit within this context?
  • 8. JavaScript Everywhere • All too familiar with Browsers
  • 9. JavaScript Everywhere • All too familiar with Browsers • Have heard of Server Side JavaScript (thanks to NodeJS)
  • 10. JavaScript Everywhere • All too familiar with Browsers • Have heard of Server Side JavaScript (thanks to NodeJS) • Know about Firebug a Firefox Extension
  • 11. JavaScript Everywhere • All too familiar with Browsers • Have heard of Server Side JavaScript (thanks to NodeJS) • Know about Firebug a Firefox Extension • Titanium and PhoneGap for Native JS Mobile Apps
  • 12. JavaScript Everywhere • All too familiar with Browsers • Have heard of Server Side JavaScript (thanks to NodeJS) • Know about Firebug a Firefox Extension • Titanium and PhoneGap for Native JS Mobile Apps • AppEngineJS for Google App Engine (Java/Rhino)
  • 13. JavaScript Everywhere • All too familiar with Browsers • Have heard of Server Side JavaScript (thanks to NodeJS) • Know about Firebug a Firefox Extension • Titanium and PhoneGap for Native JS Mobile Apps • AppEngineJS for Google App Engine (Java/Rhino) • V8CGI for CGI, FastCGI, Apache module and CLI JS
  • 14. JavaScript Everywhere • All too familiar with Browsers • Have heard of Server Side JavaScript (thanks to NodeJS) • Know about Firebug a Firefox Extension • Titanium and PhoneGap for Native JS Mobile Apps • AppEngineJS for Google App Engine (Java/Rhino) • V8CGI for CGI, FastCGI, Apache module and CLI JS • GPSEE for Embedding Spidermonkey in C and Shell JS
  • 15. JavaScript Everywhere • All too familiar with Browsers • Have heard of Server Side JavaScript (thanks to NodeJS) • Know about Firebug a Firefox Extension • Titanium and PhoneGap for Native JS Mobile Apps • AppEngineJS for Google App Engine (Java/Rhino) • V8CGI for CGI, FastCGI, Apache module and CLI JS • GPSEE for Embedding Spidermonkey in C and Shell JS • RingoJS for Embedding Rhino in Java
  • 16. JavaScript Everywhere • All too familiar with Browsers • Have heard of Server Side JavaScript (thanks to NodeJS) • Know about Firebug a Firefox Extension • Titanium and PhoneGap for Native JS Mobile Apps • AppEngineJS for Google App Engine (Java/Rhino) • V8CGI for CGI, FastCGI, Apache module and CLI JS • GPSEE for Embedding Spidermonkey in C and Shell JS • RingoJS for Embedding Rhino in Java • Narwhal for JavaScriptCore, Node & Rhino
  • 17. JavaScript Everywhere • All too familiar with Browsers • Have heard of Server Side JavaScript (thanks to NodeJS) • Know about Firebug a Firefox Extension • Titanium and PhoneGap for Native JS Mobile Apps • AppEngineJS for Google App Engine (Java/Rhino) • V8CGI for CGI, FastCGI, Apache module and CLI JS • GPSEE for Embedding Spidermonkey in C and Shell JS • RingoJS for Embedding Rhino in Java • Narwhal for JavaScriptCore, Node & Rhino • Add-on SDK for Restartless & Secure Firefox Extensions
  • 18. JavaScript Everywhere • All too familiar with Browsers • Have heard of Server Side JavaScript (thanks to NodeJS) • Know about Firebug a Firefox Extension • Titanium and PhoneGap for Native JS Mobile Apps • AppEngineJS for Google App Engine (Java/Rhino) • V8CGI for CGI, FastCGI, Apache module and CLI JS • GPSEE for Embedding Spidermonkey in C and Shell JS • RingoJS for Embedding Rhino in Java • Narwhal for JavaScriptCore, Node & Rhino • Add-on SDK for Restartless & Secure Firefox Extensions • CouchDB Apps served from a User-facing REST Database
  • 19. JavaScript Everywhere • All too familiar with Browsers • Have heard of Server Side JavaScript (thanks to NodeJS) • Know about Firebug a Firefox Extension • Titanium and PhoneGap for Native JS Mobile Apps • AppEngineJS for Google App Engine (Java/Rhino) • V8CGI for CGI, FastCGI, Apache module and CLI JS • GPSEE for Embedding Spidermonkey in C and Shell JS • RingoJS for Embedding Rhino in Java • Narwhal for JavaScriptCore, Node & Rhino • Add-on SDK for Restartless & Secure Firefox Extensions • CouchDB Apps served from a User-facing REST Database What do all these platforms have in common?
  • 21. JavaScript Everywhere All these (and many more) platforms:
  • 22. JavaScript Everywhere All these (and many more) platforms: • Allow us to run JavaScript everywhere
  • 23. JavaScript Everywhere All these (and many more) platforms: • Allow us to run JavaScript everywhere • Maintained by passionate authors and contributors
  • 24. JavaScript Everywhere All these (and many more) platforms: • Allow us to run JavaScript everywhere • Maintained by passionate authors and contributors • Have energetic and loyal userbases
  • 25. JavaScript Everywhere All these (and many more) platforms: • Allow us to run JavaScript everywhere • Maintained by passionate authors and contributors • Have energetic and loyal userbases • Have great ideas
  • 26. JavaScript Everywhere All these (and many more) platforms: • Allow us to run JavaScript everywhere • Maintained by passionate authors and contributors • Have energetic and loyal userbases • Have great ideas • Solve specific problems
  • 27. JavaScript Everywhere All these (and many more) platforms: • Allow us to run JavaScript everywhere • Maintained by passionate authors and contributors • Have energetic and loyal userbases • Have great ideas • Solve specific problems • Share common problems
  • 28. JavaScript Everywhere All these (and many more) platforms: • Allow us to run JavaScript everywhere • Maintained by passionate authors and contributors • Have energetic and loyal userbases • Have great ideas • Solve specific problems • Share common problems That is a great thing!
  • 30. JavaScript Everywhere BUT all these (and many more) platforms also lack:
  • 31. JavaScript Everywhere BUT all these (and many more) platforms also lack: • A compatible standard library
  • 32. JavaScript Everywhere BUT all these (and many more) platforms also lack: • A compatible standard library (Binary, IO, File, Socket, Event, System, ...)
  • 33. JavaScript Everywhere BUT all these (and many more) platforms also lack: • A compatible standard library (Binary, IO, File, Socket, Event, System, ...) • Ability to share the same code packages & modules
  • 34. JavaScript Everywhere BUT all these (and many more) platforms also lack: • A compatible standard library (Binary, IO, File, Socket, Event, System, ...) • Ability to share the same code packages & modules • Ability to share the same debug tools
  • 35. JavaScript Everywhere BUT all these (and many more) platforms also lack: • A compatible standard library (Binary, IO, File, Socket, Event, System, ...) • Ability to share the same code packages & modules • Ability to share the same debug tools • Ability to set portable standards by themselves
  • 36. JavaScript Everywhere BUT all these (and many more) platforms also lack: • A compatible standard library (Binary, IO, File, Socket, Event, System, ...) • Ability to share the same code packages & modules • Ability to share the same debug tools • Ability to set portable standards by themselves That is an unfortunate thing!
  • 39. JavaScript Everywhere BUT there is a solution: CommonJS!
  • 40. JavaScript Everywhere BUT there is a solution: CommonJS! What is CommonJS?
  • 42. CommonJS: What • Group of volunteers from many different projects
  • 43. CommonJS: What • Group of volunteers from many different projects • Want to: use JavaScript & share code
  • 44. CommonJS: What • Group of volunteers from many different projects • Want to: use JavaScript & share code • A Mailing List
  • 45. CommonJS: What • Group of volunteers from many different projects • Want to: use JavaScript & share code • A Mailing List • A Wiki with specifications in various stages
  • 46. CommonJS: What • Group of volunteers from many different projects • Want to: use JavaScript & share code • A Mailing List • A Wiki with specifications in various stages • Run by group consensus and benevolent dictators
  • 47. CommonJS: What • Group of volunteers from many different projects • Want to: use JavaScript & share code • A Mailing List • A Wiki with specifications in various stages • Run by group consensus and benevolent dictators • Implementation driven
  • 48. CommonJS: What • Group of volunteers from many different projects • Want to: use JavaScript & share code • A Mailing List • A Wiki with specifications in various stages • Run by group consensus and benevolent dictators • Implementation driven • Always open for membership!
  • 49. CommonJS: What • Group of volunteers from many different projects • Want to: use JavaScript & share code • A Mailing List • A Wiki with specifications in various stages • Run by group consensus and benevolent dictators • Implementation driven • Always open for membership! A group of people working together to realize an Ecosystem for JavaScript
  • 50. What does it look like?
  • 51. What does it look like?
  • 53. CommonJS: API Process How does the CommonJS API proposal process work?
  • 54. CommonJS: API Process How does the CommonJS API proposal process work? 1. You pick a JS platform
  • 55. CommonJS: API Process How does the CommonJS API proposal process work? 1. You pick a JS platform 2. Play with it and tie it into some of your stuff
  • 56. CommonJS: API Process How does the CommonJS API proposal process work? 1. You pick a JS platform 2. Play with it and tie it into some of your stuff 3. Now you want to do something with a second platform; BUT:
  • 57. CommonJS: API Process How does the CommonJS API proposal process work? 1. You pick a JS platform 2. Play with it and tie it into some of your stuff 3. Now you want to do something with a second platform; BUT: • There are no consistent APIs across platforms
  • 58. CommonJS: API Process How does the CommonJS API proposal process work? 1. You pick a JS platform 2. Play with it and tie it into some of your stuff 3. Now you want to do something with a second platform; BUT: • There are no consistent APIs across platforms 4. So you ASK and then:
  • 59. CommonJS: API Process How does the CommonJS API proposal process work? 1. You pick a JS platform 2. Play with it and tie it into some of your stuff 3. Now you want to do something with a second platform; BUT: • There are no consistent APIs across platforms 4. So you ASK and then: • Hack something together based on the best you can find or know
  • 60. CommonJS: API Process How does the CommonJS API proposal process work? 1. You pick a JS platform 2. Play with it and tie it into some of your stuff 3. Now you want to do something with a second platform; BUT: • There are no consistent APIs across platforms 4. So you ASK and then: • Hack something together based on the best you can find or know • Notice sound common ground and improve your implementation
  • 61. CommonJS: API Process How does the CommonJS API proposal process work? 1. You pick a JS platform 2. Play with it and tie it into some of your stuff 3. Now you want to do something with a second platform; BUT: • There are no consistent APIs across platforms 4. So you ASK and then: • Hack something together based on the best you can find or know • Notice sound common ground and improve your implementation 5. Champion your solution on the CommonJS Wiki & Mailing List
  • 62. CommonJS: API Process How does the CommonJS API proposal process work? 1. You pick a JS platform 2. Play with it and tie it into some of your stuff 3. Now you want to do something with a second platform; BUT: • There are no consistent APIs across platforms 4. So you ASK and then: • Hack something together based on the best you can find or know • Notice sound common ground and improve your implementation 5. Champion your solution on the CommonJS Wiki & Mailing List 6. Expect to be redirected or have your solution dissected
  • 63. CommonJS: API Process How does the CommonJS API proposal process work? 1. You pick a JS platform 2. Play with it and tie it into some of your stuff 3. Now you want to do something with a second platform; BUT: • There are no consistent APIs across platforms 4. So you ASK and then: • Hack something together based on the best you can find or know • Notice sound common ground and improve your implementation 5. Champion your solution on the CommonJS Wiki & Mailing List 6. Expect to be redirected or have your solution dissected 7. See the solution grow into a specification with many implementations
  • 64. CommonJS: API Process How does the CommonJS API proposal process work? 1. You pick a JS platform 2. Play with it and tie it into some of your stuff 3. Now you want to do something with a second platform; BUT: • There are no consistent APIs across platforms 4. So you ASK and then: • Hack something together based on the best you can find or know • Notice sound common ground and improve your implementation 5. Champion your solution on the CommonJS Wiki & Mailing List 6. Expect to be redirected or have your solution dissected 7. See the solution grow into a specification with many implementations Take pride in helping CommonJS move forward!
  • 66. CommonJS: Standards What makes a CommonJS specification ratified?
  • 67. CommonJS: Standards What makes a CommonJS specification ratified? 1. A proposal
  • 68. CommonJS: Standards What makes a CommonJS specification ratified? 1. A proposal 2. Sufficient discussions
  • 69. CommonJS: Standards What makes a CommonJS specification ratified? 1. A proposal 2. Sufficient discussions 3. Group consensus
  • 70. CommonJS: Standards What makes a CommonJS specification ratified? 1. A proposal 2. Sufficient discussions 3. Group consensus 4. Draft specification
  • 71. CommonJS: Standards What makes a CommonJS specification ratified? 1. A proposal 2. Sufficient discussions 3. Group consensus 4. Draft specification 5. Sufficient votes from members with skin in the CommonJS game
  • 72. CommonJS: Standards What makes a CommonJS specification ratified? 1. A proposal 2. Sufficient discussions 3. Group consensus 4. Draft specification 5. Sufficient votes from members with skin in the CommonJS game 6. At least a handful of implementations
  • 73. CommonJS: Standards What makes a CommonJS specification ratified? 1. A proposal 2. Sufficient discussions 3. Group consensus 4. Draft specification 5. Sufficient votes from members with skin in the CommonJS game 6. At least a handful of implementations 7. Sufficient time
  • 74. CommonJS: Standards What makes a CommonJS specification ratified? 1. A proposal 2. Sufficient discussions 3. Group consensus 4. Draft specification 5. Sufficient votes from members with skin in the CommonJS game 6. At least a handful of implementations 7. Sufficient time Is it worth it?
  • 75. CommonJS: Standards What makes a CommonJS specification ratified? 1. A proposal 2. Sufficient discussions 3. Group consensus 4. Draft specification 5. Sufficient votes from members with skin in the CommonJS game 6. At least a handful of implementations 7. Sufficient time Is it worth it? Absolutely!
  • 77. CommonJS: The Result Modules, Packages & Platforms targeting CommonJS compliance are truly interoperable!
  • 80. CommonJS: Status Where is CommonJS at? • Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY!
  • 81. CommonJS: Status Where is CommonJS at? • Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY! • Packages 1.0 (RATIFIED) 1.1 in the works
  • 82. CommonJS: Status Where is CommonJS at? • Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY! • Packages 1.0 (RATIFIED) 1.1 in the works • Unit Testing 1.0 (RATIFIED) amendment pending
  • 83. CommonJS: Status Where is CommonJS at? • Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY! • Packages 1.0 (RATIFIED) 1.1 in the works • Unit Testing 1.0 (RATIFIED) amendment pending • System 1.0 (pre-RATIFIED) more IMPLEMENTATIONS needed
  • 84. CommonJS: Status Where is CommonJS at? • Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY! • Packages 1.0 (RATIFIED) 1.1 in the works • Unit Testing 1.0 (RATIFIED) amendment pending • System 1.0 (pre-RATIFIED) more IMPLEMENTATIONS needed • JSGI 0.2/0.3 (PROPOSALS) more IMPLEMENTATIONS needed
  • 85. CommonJS: Status Where is CommonJS at? • Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY! • Packages 1.0 (RATIFIED) 1.1 in the works • Unit Testing 1.0 (RATIFIED) amendment pending • System 1.0 (pre-RATIFIED) more IMPLEMENTATIONS needed • JSGI 0.2/0.3 (PROPOSALS) more IMPLEMENTATIONS needed • Many proposals that need discussion and IMPLEMENTATIONS
  • 86. CommonJS: Status Where is CommonJS at? • Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY! • Packages 1.0 (RATIFIED) 1.1 in the works • Unit Testing 1.0 (RATIFIED) amendment pending • System 1.0 (pre-RATIFIED) more IMPLEMENTATIONS needed • JSGI 0.2/0.3 (PROPOSALS) more IMPLEMENTATIONS needed • Many proposals that need discussion and IMPLEMENTATIONS Sufficient for CommonJS Everywhere?
  • 87. CommonJS: Status Where is CommonJS at? • Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY! • Packages 1.0 (RATIFIED) 1.1 in the works • Unit Testing 1.0 (RATIFIED) amendment pending • System 1.0 (pre-RATIFIED) more IMPLEMENTATIONS needed • JSGI 0.2/0.3 (PROPOSALS) more IMPLEMENTATIONS needed • Many proposals that need discussion and IMPLEMENTATIONS Sufficient for CommonJS Everywhere? Unfortunately NO :(
  • 88. CommonJS: Status Where is CommonJS at? • Modules 1.1/1.1.1 (RATIFIED) MANY implementations YAY! • Packages 1.0 (RATIFIED) 1.1 in the works • Unit Testing 1.0 (RATIFIED) amendment pending • System 1.0 (pre-RATIFIED) more IMPLEMENTATIONS needed • JSGI 0.2/0.3 (PROPOSALS) more IMPLEMENTATIONS needed • Many proposals that need discussion and IMPLEMENTATIONS Sufficient for CommonJS Everywhere? Unfortunately NO :( What is needed?
  • 90. CommonJS: Needed What do we need for CommonJS Everywhere?
  • 91. CommonJS: Needed What do we need for CommonJS Everywhere? • Portable unit tests for specifications
  • 92. CommonJS: Needed What do we need for CommonJS Everywhere? • Portable unit tests for specifications • Move to Github for specifications and tests
  • 93. CommonJS: Needed What do we need for CommonJS Everywhere? • Portable unit tests for specifications • Move to Github for specifications and tests • New interest from new and existing members
  • 94. CommonJS: Needed What do we need for CommonJS Everywhere? • Portable unit tests for specifications • Move to Github for specifications and tests • New interest from new and existing members • More implementers seeking CommonJS compliance
  • 95. CommonJS: Needed What do we need for CommonJS Everywhere? • Portable unit tests for specifications • Move to Github for specifications and tests • New interest from new and existing members • More implementers seeking CommonJS compliance • Users demanding CommonJS compliance
  • 96. CommonJS: Needed What do we need for CommonJS Everywhere? • Portable unit tests for specifications • Move to Github for specifications and tests • New interest from new and existing members • More implementers seeking CommonJS compliance • Users demanding CommonJS compliance • Packages/Mappings/C (PROPOSAL)
  • 98. CommonJS: Needed What do we need for CommonJS Everywhere? • Portable unit tests for specifications • Move to Github for specifications and tests • New interest from new and existing members • More implementers seeking CommonJS compliance • Users demanding CommonJS compliance • Packages/Mappings/C (PROPOSAL)
  • 99. CommonJS: Needed What do we need for CommonJS Everywhere? • Portable unit tests for specifications • Move to Github for specifications and tests • New interest from new and existing members • More implementers seeking CommonJS compliance • Users demanding CommonJS compliance • Packages/Mappings/C (PROPOSAL) • Modules 2.0 (DRAFT) “wrapped” Modules 1.1 + more
  • 100. CommonJS: Needed What do we need for CommonJS Everywhere? • Portable unit tests for specifications • Move to Github for specifications and tests • New interest from new and existing members • More implementers seeking CommonJS compliance • Users demanding CommonJS compliance • Packages/Mappings/C (PROPOSAL) • Modules 2.0 (DRAFT) “wrapped” Modules 1.1 + more • Portable loaders + package managers & registries
  • 101. CommonJS: Needed What do we need for CommonJS Everywhere? • Portable unit tests for specifications • Move to Github for specifications and tests • New interest from new and existing members • More implementers seeking CommonJS compliance • Users demanding CommonJS compliance • Packages/Mappings/C (PROPOSAL) • Modules 2.0 (DRAFT) “wrapped” Modules 1.1 + more • Portable loaders + package managers & registries • Agreement on low-level APIs
  • 102. CommonJS: Needed What do we need for CommonJS Everywhere? • Portable unit tests for specifications • Move to Github for specifications and tests • New interest from new and existing members • More implementers seeking CommonJS compliance • Users demanding CommonJS compliance • Packages/Mappings/C (PROPOSAL) • Modules 2.0 (DRAFT) “wrapped” Modules 1.1 + more • Portable loaders + package managers & registries • Agreement on low-level APIs What is happening in this regard?
  • 105. CommonJS: Happenings Key platforms are converging: • RingoJS, GPSEE and V8CGI increasingly compatible
  • 106. CommonJS: Happenings Key platforms are converging: • RingoJS, GPSEE and V8CGI increasingly compatible • NodeJS learning CommonJS APIs thanks to CommonNode
  • 107. CommonJS: Happenings Key platforms are converging: • RingoJS, GPSEE and V8CGI increasingly compatible • NodeJS learning CommonJS APIs thanks to CommonNode Module loaders becoming multi-platform capable:
  • 108. CommonJS: Happenings Key platforms are converging: • RingoJS, GPSEE and V8CGI increasingly compatible • NodeJS learning CommonJS APIs thanks to CommonNode Module loaders becoming multi-platform capable: • RequireJS (Browser, Rhino, NodeJS)
  • 109. CommonJS: Happenings Key platforms are converging: • RingoJS, GPSEE and V8CGI increasingly compatible • NodeJS learning CommonJS APIs thanks to CommonNode Module loaders becoming multi-platform capable: • RequireJS (Browser, Rhino, NodeJS) • PINF (Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir)
  • 110. CommonJS: Happenings Key platforms are converging: • RingoJS, GPSEE and V8CGI increasingly compatible • NodeJS learning CommonJS APIs thanks to CommonNode Module loaders becoming multi-platform capable: • RequireJS (Browser, Rhino, NodeJS) • PINF (Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir) Module loaders implementing Packages/Mappings:
  • 111. CommonJS: Happenings Key platforms are converging: • RingoJS, GPSEE and V8CGI increasingly compatible • NodeJS learning CommonJS APIs thanks to CommonNode Module loaders becoming multi-platform capable: • RequireJS (Browser, Rhino, NodeJS) • PINF (Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir) Module loaders implementing Packages/Mappings: • Nodules (Async loading: NodeJS)
  • 112. CommonJS: Happenings Key platforms are converging: • RingoJS, GPSEE and V8CGI increasingly compatible • NodeJS learning CommonJS APIs thanks to CommonNode Module loaders becoming multi-platform capable: • RequireJS (Browser, Rhino, NodeJS) • PINF (Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir) Module loaders implementing Packages/Mappings: • Nodules (Async loading: NodeJS) • PINF (Async loading: NodeJS, Static loading: other platforms)
  • 113. CommonJS: Happenings Key platforms are converging: • RingoJS, GPSEE and V8CGI increasingly compatible • NodeJS learning CommonJS APIs thanks to CommonNode Module loaders becoming multi-platform capable: • RequireJS (Browser, Rhino, NodeJS) • PINF (Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir) Module loaders implementing Packages/Mappings: • Nodules (Async loading: NodeJS) • PINF (Async loading: NodeJS, Static loading: other platforms) Package repositories with package managers:
  • 114. CommonJS: Happenings Key platforms are converging: • RingoJS, GPSEE and V8CGI increasingly compatible • NodeJS learning CommonJS APIs thanks to CommonNode Module loaders becoming multi-platform capable: • RequireJS (Browser, Rhino, NodeJS) • PINF (Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir) Module loaders implementing Packages/Mappings: • Nodules (Async loading: NodeJS) • PINF (Async loading: NodeJS, Static loading: other platforms) Package repositories with package managers: • NodeJS Package Registry via NPM
  • 115. CommonJS: Happenings Key platforms are converging: • RingoJS, GPSEE and V8CGI increasingly compatible • NodeJS learning CommonJS APIs thanks to CommonNode Module loaders becoming multi-platform capable: • RequireJS (Browser, Rhino, NodeJS) • PINF (Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir) Module loaders implementing Packages/Mappings: • Nodules (Async loading: NodeJS) • PINF (Async loading: NodeJS, Static loading: other platforms) Package repositories with package managers: • NodeJS Package Registry via NPM • Dojo Foundation Package Repository via CPM
  • 116. CommonJS: Happenings Key platforms are converging: • RingoJS, GPSEE and V8CGI increasingly compatible • NodeJS learning CommonJS APIs thanks to CommonNode Module loaders becoming multi-platform capable: • RequireJS (Browser, Rhino, NodeJS) • PINF (Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir) Module loaders implementing Packages/Mappings: • Nodules (Async loading: NodeJS) • PINF (Async loading: NodeJS, Static loading: other platforms) Package repositories with package managers: • NodeJS Package Registry via NPM • Dojo Foundation Package Repository via CPM • CommonJS package URLs and paths via PINF
  • 117. What is the ultimate CommonJS Everywhere Goal?
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 124. How close are we? 12 to 24 months!
  • 125. How close are we? 12 to 24 months! IF
  • 126. How close are we? 12 to 24 months! IF We embrace portable loaders such as PINF and agree on low-level APIs
  • 128. PINF JavaScript Loader • Loads multiple module source formats:
  • 129. PINF JavaScript Loader • Loads multiple module source formats: • Asynchronous Module Definition (AMD)
  • 130. PINF JavaScript Loader • Loads multiple module source formats: • Asynchronous Module Definition (AMD) • CommonJS Modules 1.1
  • 131. PINF JavaScript Loader • Loads multiple module source formats: • Asynchronous Module Definition (AMD) • CommonJS Modules 1.1 • CommonJS Modules 2.0 (draft)
  • 132. PINF JavaScript Loader • Loads multiple module source formats: • Asynchronous Module Definition (AMD) • CommonJS Modules 1.1 • CommonJS Modules 2.0 (draft) • Plain JavaScript files
  • 133. PINF JavaScript Loader • Loads multiple module source formats: • Asynchronous Module Definition (AMD) • CommonJS Modules 1.1 • CommonJS Modules 2.0 (draft) • Plain JavaScript files • Dynamically downloads and resolves dependencies
  • 134. PINF JavaScript Loader • Loads multiple module source formats: • Asynchronous Module Definition (AMD) • CommonJS Modules 1.1 • CommonJS Modules 2.0 (draft) • Plain JavaScript files • Dynamically downloads and resolves dependencies • Runs an identical CommonJS package on many platforms for development and production:
  • 135. PINF JavaScript Loader • Loads multiple module source formats: • Asynchronous Module Definition (AMD) • CommonJS Modules 1.1 • CommonJS Modules 2.0 (draft) • Plain JavaScript files • Dynamically downloads and resolves dependencies • Runs an identical CommonJS package on many platforms for development and production: • Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir (platform and API support varies)
  • 136. PINF JavaScript Loader • Loads multiple module source formats: • Asynchronous Module Definition (AMD) • CommonJS Modules 1.1 • CommonJS Modules 2.0 (draft) • Plain JavaScript files • Dynamically downloads and resolves dependencies • Runs an identical CommonJS package on many platforms for development and production: • Browser, NodeJS, V8CGI, GPSEE, RingoJS, Narwhal, Jetpack, Titanium, AdobeAir (platform and API support varies) • Can load CommonJS programs and export static bundle (inlined modules) based programs for running in Browser via BravoJS (multiple platforms and loaders coming soon)
  • 138. PINF JavaScript Loader Types of applications:
  • 139. PINF JavaScript Loader Types of applications: • Browser: Websites and application user interfaces (web views)
  • 140. PINF JavaScript Loader Types of applications: • Browser: Websites and application user interfaces (web views) • NodeJS: Asynchronous network programs
  • 141. PINF JavaScript Loader Types of applications: • Browser: Websites and application user interfaces (web views) • NodeJS: Asynchronous network programs • V8CGI: PHP-like server apps (via Apache module/CGI)
  • 142. PINF JavaScript Loader Types of applications: • Browser: Websites and application user interfaces (web views) • NodeJS: Asynchronous network programs • V8CGI: PHP-like server apps (via Apache module/CGI) • GPSEE: JS scripting for C apps
  • 143. PINF JavaScript Loader Types of applications: • Browser: Websites and application user interfaces (web views) • NodeJS: Asynchronous network programs • V8CGI: PHP-like server apps (via Apache module/CGI) • GPSEE: JS scripting for C apps • RingoJS: JS scripting for Java apps
  • 144. PINF JavaScript Loader Types of applications: • Browser: Websites and application user interfaces (web views) • NodeJS: Asynchronous network programs • V8CGI: PHP-like server apps (via Apache module/CGI) • GPSEE: JS scripting for C apps • RingoJS: JS scripting for Java apps • Narwhal: JS scripting for Mac OS X apps via JavaScriptCore
  • 145. PINF JavaScript Loader Types of applications: • Browser: Websites and application user interfaces (web views) • NodeJS: Asynchronous network programs • V8CGI: PHP-like server apps (via Apache module/CGI) • GPSEE: JS scripting for C apps • RingoJS: JS scripting for Java apps • Narwhal: JS scripting for Mac OS X apps via JavaScriptCore • Jetpack: Restartless Firefox extensions
  • 146. PINF JavaScript Loader Types of applications: • Browser: Websites and application user interfaces (web views) • NodeJS: Asynchronous network programs • V8CGI: PHP-like server apps (via Apache module/CGI) • GPSEE: JS scripting for C apps • RingoJS: JS scripting for Java apps • Narwhal: JS scripting for Mac OS X apps via JavaScriptCore • Jetpack: Restartless Firefox extensions • Titanium: Native mobile, tablet and desktop apps
  • 147. PINF JavaScript Loader Types of applications: • Browser: Websites and application user interfaces (web views) • NodeJS: Asynchronous network programs • V8CGI: PHP-like server apps (via Apache module/CGI) • GPSEE: JS scripting for C apps • RingoJS: JS scripting for Java apps • Narwhal: JS scripting for Mac OS X apps via JavaScriptCore • Jetpack: Restartless Firefox extensions • Titanium: Native mobile, tablet and desktop apps • AdobeAir: Mobile, desktop and TV apps
  • 148. PINF JavaScript Loader Types of applications: • Browser: Websites and application user interfaces (web views) • NodeJS: Asynchronous network programs • V8CGI: PHP-like server apps (via Apache module/CGI) • GPSEE: JS scripting for C apps • RingoJS: JS scripting for Java apps • Narwhal: JS scripting for Mac OS X apps via JavaScriptCore • Jetpack: Restartless Firefox extensions • Titanium: Native mobile, tablet and desktop apps • AdobeAir: Mobile, desktop and TV apps • Wakanda: COMING SOON
  • 149. PINF JavaScript Loader Types of applications: • Browser: Websites and application user interfaces (web views) • NodeJS: Asynchronous network programs • V8CGI: PHP-like server apps (via Apache module/CGI) • GPSEE: JS scripting for C apps • RingoJS: JS scripting for Java apps • Narwhal: JS scripting for Mac OS X apps via JavaScriptCore • Jetpack: Restartless Firefox extensions • Titanium: Native mobile, tablet and desktop apps • AdobeAir: Mobile, desktop and TV apps • Wakanda: COMING SOON Low-level API standards needed!
  • 151. Cross-platform ‘Hello World’ time commonjs --platform node ./HelloWorld Hello World real 0m0.157s time commonjs --platform v8cgi ./HelloWorld Hello World real 0m0.089s <-- time commonjs --platform gpsee ./HelloWorld Hello World real 0m0.071s <-- time commonjs --platform ringo ./HelloWorld Hello World real 0m1.796s time commonjs --platform narwhal ./HelloWorld Hello World real 0m2.246s
  • 152. Cross-platform benchmarks time commonjs --platform node ./JSLintBenchmark Running JSLint Benchmark by running JSLint against itself ... ... took: 0.874 seconds real 0m1.675s user 0m1.578s sys 0m0.055s time commonjs --platform v8cgi ./JSLintBenchmark Running JSLint Benchmark by running JSLint against itself ... ... took: 0.238 seconds real 0m0.622s user 0m0.463s sys 0m0.033s Google Chrome: 0.179 Firefox: 0.533
  • 153. Develop; integrate; deploy Production Application Standalone Dev UI Framework Integration
  • 155. Parting Suggestions 1. Use packages to hold modules
  • 156. Parting Suggestions 1. Use packages to hold modules 2. Store packages by their URI:
  • 157. Parting Suggestions 1. Use packages to hold modules 2. Store packages by their URI: ~/packages/<URI_NO_PROTOCOL>/<REVISION> ~/packages/github.com/commonjs/stdlib/zipball/v0.1.0 (dev & prod) ~/packages/github.com/commonjs/stdlib/master (dev only)
  • 158. Parting Suggestions 1. Use packages to hold modules 2. Store packages by their URI: ~/packages/<URI_NO_PROTOCOL>/<REVISION> ~/packages/github.com/commonjs/stdlib/zipball/v0.1.0 (dev & prod) ~/packages/github.com/commonjs/stdlib/master (dev only) 3. Define dependencies via mappings in package.json
  • 159. Parting Suggestions 1. Use packages to hold modules 2. Store packages by their URI: ~/packages/<URI_NO_PROTOCOL>/<REVISION> ~/packages/github.com/commonjs/stdlib/zipball/v0.1.0 (dev & prod) ~/packages/github.com/commonjs/stdlib/master (dev only) 3. Define dependencies via mappings in package.json 4. Use and support module loaders and package managers that support not only modules and packages, but also mappings
  • 160. Parting Suggestions 1. Use packages to hold modules 2. Store packages by their URI: ~/packages/<URI_NO_PROTOCOL>/<REVISION> ~/packages/github.com/commonjs/stdlib/zipball/v0.1.0 (dev & prod) ~/packages/github.com/commonjs/stdlib/master (dev only) 3. Define dependencies via mappings in package.json 4. Use and support module loaders and package managers that support not only modules and packages, but also mappings This will allow you to SWAP OUT PACKAGES depending on the environment your application is running in WITHOUT HAVING TO WORRY ABOUT CONFLICTS. EVER!
  • 161. Thank you! Big applause for the Community! Slides and links will be made available at: http://bit.ly/commonjs-everywhere

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