

Technology Fundamentals -Behind the scenes


David Dao @daviddao_
The Problem
Biologist
Developer
//Selfish Visualization Component
Complex JS Code
I am deeply in need of awesome visualization for the web!
Dependency One
Dependency Two
Dependency Three


David Dao @daviddao_
script tag hell
<html>
<head>
<meta charset="utf-8" />
<title>Hell no!</title>
</head>
<body>
<script src="jquery.js"></script>
<script src="d3.js"></script>
<script src="underscore.js"></script>
<script src="backbone.js"></script>
<script src="fancy.js"></script>
<script src="newick.js"></script>
<script src="tree.js"></script>
<script src="main.js"></script>
<script src="server.js"></script>
//ongoing...
</body>
</html>
The state of the art is to have a ton of script tags that either leak globals e.g. jQuery plugins all use $


David Dao @daviddao_


David Dao @daviddao_
-
browsers don't have a good way to load modules
-
Tons of HTTP requests
-
A good module system enables better code to be written


David Dao @daviddao_
Solving the Script Tag Hell


David Dao @daviddao_
The anatomy of a BioJS Component
Node & NPM (Node Package Manager)
Common JS
BioJS Component
Server Side

Browserify
Client / Browser


David Dao @daviddao_
What is NPM ?


David Dao @daviddao_
NODE Packaged Module
-
JS Library (with versions)
Node Package Manager
-
Hosts Node Packaged Modules



David Dao @daviddao_
Pros of Node.js
-
language: JavaScript
-
virtual-machine: V8 is faster than should be allowed
-
module system ALIAS ...


David Dao @daviddao_

The Treasure (ModuleTOPIA)


David Dao @daviddao_

It grew really fast...


David Dao @daviddao_
Unix Philosophy

... How ?


David Dao @daviddao_
The anatomy of a BioJS Component
Node & NPM (Node Package Manager)
Common JS
BioJS Component
Server Side

Browserify
Client / Browser


David Dao @daviddao_
CommonJS is a Standard which allows you to require Modules by name only
var d3 = require('d3');
var newick_parser = require('biojs-io-newick').parse_nwk;
var tree = newick_parser("(a,(b,c))");
d3.select("body")
.append("svg")
...
//your awesome code
...


David Dao @daviddao_
Require


David Dao @daviddao_
The anatomy of a BioJS Component
Node & NPM (Node Package Manager)
Common JS
BioJS Component
Server Side

Browserify
Client / Browser


David Dao @daviddao_
BioJS Component Dependencies


David Dao @daviddao_
Besides of reusing libraries by others, NPM gives a productive and safe way to split the internal code into small pieces


David Dao @daviddao_
require('./path/to/local/module')
will be calling another local module


David Dao @daviddao_
The anatomy of a BioJS Component
Node & NPM (Node Package Manager)
Common JS
BioJS Component
Server Side

Browserify
Client / Browser


David Dao @daviddao_
$ browserify ./lib/hello.js
Browserify - Solving your Script Hell

Local Development
Global Delivery
<script src="http://wzrd.in/bundle/biojs-vis-chromosome@0.0.2"></script>


David Dao @daviddao_
BioJS Workshop - Technology Fundamentals Part 1
By David Dao
BioJS Workshop - Technology Fundamentals Part 1
- 834