Notes from Javascript Saturday Event

Chandler Dhall – Microsoft MVP INETA speaker

  1. problem solving/ algorithms
    • worst case or Omega
    • best case omega
    • average case theta
  2. secure coding practices
    • sanity checks
    • validations (client side and server side)
    • authentication
    • authorization
    • .asp top 10
  3. object oriented principles
    • principles do not change
    • get the right abstractions
    • inheritence
    • encapsulation
    • aggregation
    • composition
  4. solid principles
    •  there should never be more than one reason for a class to change
    • classes should be open to extension but closed for modification
    • make fine grained interfaces that are client specific
    • abstractions should not depend upon abstractions
  5. REST
    • 1 client-server
    • clients aren’t concerned with data storage
    • servers aren’t concerned with user interface
  6. Unit Test
    • unit testing frameworks
    • code coverage
    • test first approach
    • your tests should define your api
    • tests should be in memory
    • every test should be self-sufficient
    • don’t test outside your code
  7. Source Control
    • git
    • tfs
  8. Continuous Integration
    • team system
    • cruise control
    • jenkins
    • team city
    • go
  9. Design Patterns
  10. Learn more than 2 languages
  11. Team Dynamics

Javascript – James Johnson twitter @tringo

each browser has its own js engine, today most behaviors the same

local variables

  • defined within a function

global variables

  • defined outside the functions

chaining improves performance since you don’t have to search the DOM again

using the $ in front of the object makes the object not just a string

.clone() – clone an object and add another object to the page – like a player

.wrap() –

.stop() jump to end

nathan totten @ntotten



node.js js on the server

  • not thread based
  • efficient and highly scalable
  • async model
  • single-threaded event loop

operating system >V8 Javascript Engine > libuv


crossplatform IO lib

api is asyncronous

non-sync IO is managed by libuv

good for:

  • realtime communication
  • custom network services (proxy severs)
  • JSON web services
  • client-oriented web UI’s
  • (anything you’d build with sinatra)

OK for

  • forms over data


  • CPU intensive processing -video transcoding, image rendering


  • process management
  • scalability on multi-core servers
  • access to log over http
  • side by side with other content types
  • integrated management experience
  • webSockets on Windows Server 2012

Windows Azure

  • using node.js
  • global footprint
  • windows azure for node apps

microsoft BizSpark


start a node server

npm = install node module ” express”

debugging in node

  • debug server.js
  • also install node-inspector

debuggin in browser

  •  install    node superviser.js (for dev environment) -like livereload

install node (realtime comm with browser)

they laughed at tfs


 anand raja – solutions engineer



MVM = separation of concerns

  • view = UI Logic
  • View Model = Pres Logic/ State
  • Model = Data /Bus Logic

knockout.js the binding for the browser

knockout more on server, ember more on client, backbone in between those two

js best practices

  1. script tags at bottom of page before closing body tag
  2. mini faction and bundling
    • fewer HTTP calls
    • smaller files = faster download
  4. namespacing
    window.ns = window.ns \\ {};
  5. closures are powerful
  6. revealing module patterns (controversial)
    var Person = function() {
    //private members
    //public members
    return {
    speak: speak
  7. single var pattern
  8. Hoisting Coding tips
  9. Loop optimization
  10. curly braces – on the same line
  11. ‘eval’  is evil – don’t use it
  12. avoid implied type casting
  13. use js lint