Biological Modeling, Powered by AngularJS Gil Fink CEO and Senior Consultant, sparXys @gilfink
This session is about graphics (SVG)
This is how I draw a man…
And this is how I draw a bus…
This is how I draw a toilet…
I wish…
And somebody let me speak about graphics… My Codemotion Session Me
Ok, so let’s get serious!
About Me • sparXys CEO and Senior consultant • ASP.NET/IIS Microsoft MVP • Co-author of Pro Single Page Application Development (Apress) • ng-conf Israel co-organizer and GDG Rashlatz Meetup co-organizer
Agenda • SVG in a Nutshell • SVG + AngularJS = <3 • Use Case: Biological Modelling
SVG in a Nutshell • Graphics model in the browser • Create and draw 2D vector graphics using HTML • Support for: o Full DOM access o Document structure, scripting, styling, paths, shapes, colors, transforms, gradients, patterns, masking, clipping, markers, linking and views
2D Vector Graphics <svg width="400" height="200" xmlns="http://www.w3.org/2000/svg"> <rect fill="red" x="20" y="20" width="100" height="75" /> <rect fill="blue" x="50" y="50" width="100" height="75" /> </svg>
SVG Demo
SVG + AngularJS = <3 Combining SVG and AngularJS isn’t hard SVG elements are part of the DOM!
SVG + AngularJS Caveats • In directives that generate SVG, use templateNamespace in the DDO: • Set SVG attributes by using ng-attr- prefix: <circle ng-attr-cx="{{radius}}" ng-attr-cy="{{radius}}" ng-attr-r="{{radius}}"/> templateNamespace: 'svg'
SVG & AngularJS Directive Demo
Use Case SVG + AngularJS for Biological Modeling
Biology Disclaimer
Biology 101 • Plasmids - small DNA molecules represented as a circle with annotations
Biology 101 • Sequence – primary structure of a biological molecule written in characters (A, T, G, C)
Customer Needs • Synchronize plasmid and sequence views • Fast scrolling • Sequence and plasmid selection • Annotation layers
Lazy Developer
Are there any JavaScript libraries for plasmids or sequences? With AngularJS support?
AngularPlasmid • DNA plasmid visualization component using AngularJS and SVG • http://angularplasmid.vixis.com/index.php <plasmid sequencelength='1000'> <plasmidtrack radius='50'> <tracklabel text='Demo'></tracklabel> <trackscale interval='100' showlabels='1'></trackscale> <trackmarker start='212' end='345'></trackmarker> <trackmarker start='530' end='650'> <markerlabel text='Ecol'></markerlabel> </trackmarker> <trackmarker start='677' end='820'></trackmarker> </plasmidtrack> </plasmid>
Problems We Faced • Generating the plasmid dynamically from specific files o Solved by dynamically adding AngularPlasmid elements o Then, we use the $compile service • Adding selection to the plasmid o Solved by adding our own implementation
Demo AngularPlasmid + $compile
No DNA sequence library 
Building the Sequence – The Naïve Way • Let AngularJS generate the whole sequence o Use ng-repeat, SVG and browser scrolling • Add annotation layers with SVG • The problem is…
What’s the problem you ask?
Can we do better? Maybe infinite scrolling? Not good enough!
Virtual Scrolling • Generate only the current viewport • Good reading reference: o http://blog.stackfull.com/2013/02/angularjs-virtual-scrolling-part-1/ o http://blog.stackfull.com/2013/03/angularjs-virtual-scrolling-part-2/
Front-end Architecture AngularPlasmid Every row is a directive
Demo Genome Viewer (work in progress)
Questions?
Summary • SVG is one of the options to create graphics in the browser • SVG and AngularJS can work well together • You can create sophisticated modelling using SVG and AngularJS
Thank You!

Biological Modeling, Powered by AngularJS

  • 1.
    Biological Modeling, Poweredby AngularJS Gil Fink CEO and Senior Consultant, sparXys @gilfink
  • 2.
    This session isabout graphics (SVG)
  • 3.
    This is howI draw a man…
  • 5.
    And this ishow I draw a bus…
  • 7.
    This is howI draw a toilet…
  • 9.
  • 11.
    And somebody letme speak about graphics… My Codemotion Session Me
  • 13.
    Ok, so let’sget serious!
  • 14.
    About Me • sparXysCEO and Senior consultant • ASP.NET/IIS Microsoft MVP • Co-author of Pro Single Page Application Development (Apress) • ng-conf Israel co-organizer and GDG Rashlatz Meetup co-organizer
  • 15.
    Agenda • SVG ina Nutshell • SVG + AngularJS = <3 • Use Case: Biological Modelling
  • 16.
    SVG in aNutshell • Graphics model in the browser • Create and draw 2D vector graphics using HTML • Support for: o Full DOM access o Document structure, scripting, styling, paths, shapes, colors, transforms, gradients, patterns, masking, clipping, markers, linking and views
  • 17.
    2D Vector Graphics <svgwidth="400" height="200" xmlns="http://www.w3.org/2000/svg"> <rect fill="red" x="20" y="20" width="100" height="75" /> <rect fill="blue" x="50" y="50" width="100" height="75" /> </svg>
  • 18.
  • 19.
    SVG + AngularJS= <3 Combining SVG and AngularJS isn’t hard SVG elements are part of the DOM!
  • 20.
    SVG + AngularJSCaveats • In directives that generate SVG, use templateNamespace in the DDO: • Set SVG attributes by using ng-attr- prefix: <circle ng-attr-cx="{{radius}}" ng-attr-cy="{{radius}}" ng-attr-r="{{radius}}"/> templateNamespace: 'svg'
  • 21.
  • 22.
    Use Case SVG +AngularJS for Biological Modeling
  • 23.
  • 24.
    Biology 101 • Plasmids- small DNA molecules represented as a circle with annotations
  • 25.
    Biology 101 • Sequence– primary structure of a biological molecule written in characters (A, T, G, C)
  • 26.
    Customer Needs • Synchronizeplasmid and sequence views • Fast scrolling • Sequence and plasmid selection • Annotation layers
  • 27.
  • 28.
    Are there anyJavaScript libraries for plasmids or sequences? With AngularJS support?
  • 29.
    AngularPlasmid • DNA plasmidvisualization component using AngularJS and SVG • http://angularplasmid.vixis.com/index.php <plasmid sequencelength='1000'> <plasmidtrack radius='50'> <tracklabel text='Demo'></tracklabel> <trackscale interval='100' showlabels='1'></trackscale> <trackmarker start='212' end='345'></trackmarker> <trackmarker start='530' end='650'> <markerlabel text='Ecol'></markerlabel> </trackmarker> <trackmarker start='677' end='820'></trackmarker> </plasmidtrack> </plasmid>
  • 30.
    Problems We Faced •Generating the plasmid dynamically from specific files o Solved by dynamically adding AngularPlasmid elements o Then, we use the $compile service • Adding selection to the plasmid o Solved by adding our own implementation
  • 31.
  • 32.
    No DNA sequencelibrary 
  • 33.
    Building the Sequence– The Naïve Way • Let AngularJS generate the whole sequence o Use ng-repeat, SVG and browser scrolling • Add annotation layers with SVG • The problem is…
  • 35.
  • 37.
    Can we dobetter? Maybe infinite scrolling? Not good enough!
  • 38.
    Virtual Scrolling • Generateonly the current viewport • Good reading reference: o http://blog.stackfull.com/2013/02/angularjs-virtual-scrolling-part-1/ o http://blog.stackfull.com/2013/03/angularjs-virtual-scrolling-part-2/
  • 39.
  • 40.
  • 41.
  • 42.
    Summary • SVG isone of the options to create graphics in the browser • SVG and AngularJS can work well together • You can create sophisticated modelling using SVG and AngularJS
  • 43.