• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
NetBioSIG2012 mikesmoot
 

NetBioSIG2012 mikesmoot

on

  • 2,149 views

Cytoscape is a popular, open source desktop application for visualizing and analyzing biological networks. Cytoscape 2.X consists of a core application that provides a visualization and analysis ...

Cytoscape is a popular, open source desktop application for visualizing and analyzing biological networks. Cytoscape 2.X consists of a core application that provides a visualization and analysis capabilities along with an API for extending Cytoscape’s functionality through “plugins.” Scientists and other Cytoscape users benefit from the analytical depth provided by the plugins, while plugin authors benefit from the core Cytoscape functionality and the framework for distributing and advertising plugins. This mutually beneficial relationship has resulted in over 150 plugins (http://cytoscape.org/plugins.html) along with dozens of publications about the plugins themselves.
Cytoscape 3.0 represents an attempt to refactor Cytoscape to make app writing (plugins will be renamed “apps” in 3.0) simpler while at the same time providing more stability, power, and flexibility to the system as a whole. First and foremost, Cytoscape 3.0 has been modularized with the API cleanly separated from the implementation. This modularity is being facilitated and enforced with OSGi (http://osgi.org), a popular Java modularization framework. OSGi’s micro service architecture allows private implementation code to remain private by registering micro services, which rely only on the public API. This means that any app only has the opportunity to depend on the public API, which will hopefully clarify and simplify what is needed to write an app. We have also begun using the Semantic Versioning standard (http://semver.org) for Cytoscape code to make clear how and when a public API may change. This will all go towards helping the Cytoscape core maintain backwards compatibility, which will greatly increase app stability. All “apps” in 3.0 can be written as OSGi bundles, just like the Cytoscape core modules. This means that apps will now have the opportunity to register their own public API, eliminating the distinction between core and app and resulting in a much more powerful and flexible system. While the architecture of Cytoscape 3.0 relies on OSGi, very little code does.
While not without risk, we believe that Cytoscape 3.0 will enable a new generation of Cytoscape apps as well as much greater opportunity for collaboration with different systems. This talk will elaborate on the new Cytoscape architecture including its benefits, challenges, and risks.

Statistics

Views

Total Views
2,149
Views on SlideShare
701
Embed Views
1,448

Actions

Likes
0
Downloads
12
Comments
0

6 Embeds 1,448

http://nrnb.org 1426
http://www.nrnb.org 7
http://pointer.ucsf.edu 7
http://nrnb.github.io 4
http://pinscher.ucsf.edu 3
http://webcache.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    NetBioSIG2012 mikesmoot NetBioSIG2012 mikesmoot Presentation Transcript

    • Architecture for Extension Michael Smoot Ph.D. ISMB NetBIO SIG Cytoscape Chief Architect July 13, 2012Thursday, July 19, 2012
    • Desktop Application written in Java 2Thursday, July 19, 2012
    • Biological Network Visualization + Analysis 3Thursday, July 19, 2012
    • Free Software - LGPL 4Thursday, July 19, 2012
    • ~5000 downloads per month 5Thursday, July 19, 2012
    • 6Thursday, July 19, 2012
    • Cytoscape’s most important feature? Our Plugin App Architecture Photo credit: Samuel L. Livingston 7Thursday, July 19, 2012
    • Apps allow for customization Primary analysis mechanism Builds a community of stakeholders 8Thursday, July 19, 2012
    • AllegroMCODE APCluster APID2NET BioQualiPlugin BLAST2SimilarityGraph BNMatch CABIN CalculateNodeDegree CentiScaPe ChemViz clusterExplorerPlugin clusterMaker ClusterONE ClusterViz COMA CommFinder CyClus3D CyOog cytoHubba Cytomcl DualLayout dynamicXpr EnhancedSearch EnrichmentMap ExprEssence GraMoFoNe GraphletCounter HiderSlider jActiveModules mcl-new MCODE MINE NeMo NetAtlas NetCirChro netMatch NetworkAnalyzer NetworkEvolution OmicsAnalyzer OmicsViz OrthoNets PanGIA PerturbationAnalyzer PinnacleZ RandomNetworks RDFScsape Reactome FIs RemainingDegreeDistribution Re Ori en tP l ugin S hor t e s tP a th Pl u g i n Si m Tre k st ruc tureVi z TransC l ust VennDiagramGenerator VistaClaraPlugin WordCloud BiNoM bioCycPlugin BiogridPlugin BiomartClient BioNetBuilder BisoGenet ConsensusPathDBplugin CoryneRegNetLoader CyThesaurus-ID-Mapping CytoSQL DroID Genoscape GPML- Plugin GraphMLReader IntActWSClient iRefScape KGMLReader MetScape MiMIplugin NCBIClient NCBIEntrezGeneUserInterface Pathintegrator PhosphositePlus Web Service Client Module PICRClient PSICQUICUniversalClient ReConn SessionForWeb SFLDLoader StringWSClient Superpathways-Plugin 3DScape AgilentLiteratureSearch Cytoprophet DisGeNET DomainGraph ExpressionCorrelation GeneMANIA MetaNetter MONET BiNGO BubbleRouter ClueGO CommonAttributes DisplayNetworkFromFlatFile FluxViz FunNetViz HyperEdgeEditor PiNGO CyGoose CytoscapeRPC GroovyScriptingEngine JavaScriptEngine MiSink PythonScriptingEngine RubyScriptingEngine ScriptEngineManager addParentNeighbors AdvancedNetworkMerge batchTool BiLayout commandTool coreCommands CyAnimator edgeLengthPlugin edgeLister EpiTrace FERN FM3 GoogleChartFunctions GroupTool MetaNodePlugin2 MultilevelLayoutPlugin NamedSelection NatureProtocolsWorkflow NeighborHighlight NetLink nodeCharts PhyloTree VennDiagrams 9Thursday, July 19, 2012
    • AllegroMCODE APCluster APID2NET BioQualiPlugin BLAST2SimilarityGraph BNMatch CABIN CalculateNodeDegree CentiScaPe ChemViz clusterExplorerPlugin clusterMaker ClusterONE ClusterViz COMA CommFinder CyClus3D CyOog cytoHubba Cytomcl DualLayout dynamicXpr EnhancedSearch EnrichmentMap ExprEssence GraMoFoNe GraphletCounter HiderSlider jActiveModules mcl-new MCODE MINE NeMo NetAtlas NetCirChro netMatch NetworkAnalyzer NetworkEvolution OmicsAnalyzer OmicsViz OrthoNets PanGIA PerturbationAnalyzer PinnacleZ RandomNetworks RDFScsape Reactome FIs RemainingDegreeDistribution Re Ori en tP l ugin ShortestPath Plugin SimTrek structureViz TransClust VennDiagramGenerator VistaClaraPlugin WordCloud BiNoM bioCycPlugin BiogridPlugin BiomartClient BioNetBuilder BisoGenet ConsensusPathDBplugin CoryneRegNetLoader CyThesaurus-ID-Mapping CytoSQL DroID Genoscape GPML- Plugin GraphMLReader IntActWSClient iRefScape KGMLReader MetScape MiMIplugin NCBIClient NCBIEntrezGeneUserInterface Pathintegrator PhosphositePlus Web Service Client Module PICRClient PSICQUICUniversalClient ReConn SessionForWeb SFLDLoader StringWSClient Superpathways-Plugin 3DScape AgilentLiteratureSearch Cytoprophet DisGeNET DomainGraph ExpressionCorrelation GeneMANIA MetaNetter MONET BiNGO BubbleRouter ClueGO CommonAttributes DisplayNetworkFromFlatFile FluxViz FunNetViz HyperEdgeEditor PiNGO CyGoose CytoscapeRPC GroovyScriptingEngine JavaScriptEngine MiSink PythonScriptingEngine RubyScriptingEngine ScriptEngineManager addParentNeighbors AdvancedNetworkMerge batchTool BiLayout commandTool coreCommands CyAnimator edgeLengthPlugin edgeLister EpiTrace FERN FM3 GoogleChartFunctions GroupTool MetaNodePlugin2 MultilevelLayoutPlugin NamedSelection NatureProtocolsWorkflow NeighborHighlight NetLink nodeCharts PhyloTree VennDiagrams 10Thursday, July 19, 2012
    • AllegroMCODE APCluster APID2NET BioQualiPlugin BLAST2SimilarityGraph BNMatch CABIN CalculateNodeDegree CentiScaPe ChemViz clusterExplorerPlugin clusterMaker ClusterONE ClusterViz COMA CommFinder CyClus3D CyOog cytoHubba Cytomcl DualLayout dynamicXpr EnhancedSearch EnrichmentMap ExprEssence GraMoFoNe GraphletCounter HiderSlider jActiveModules mcl-new MCODE MINE NeMo NetAtlas NetCirChro netMatch NetworkAnalyzer NetworkEvolution OmicsAnalyzer OmicsViz OrthoNets PanGIA PerturbationAnalyzer PinnacleZ RandomNetworks RDFScsape Reactome FIs RemainingDegreeDistribution Re Ori en tP l ugin ShortestPath Plugin SimTrek structureViz TransClust VennDiagramGenerator VistaClaraPlugin WordCloud BiNoM bioCycPlugin BiogridPlugin BiomartClient BioNetBuilder BisoGenet ConsensusPathDBplugin CoryneRegNetLoader CyThesaurus-ID-Mapping CytoSQL DroID Genoscape GPML- Plugin GraphMLReader IntActWSClient iRefScape KGMLReader MetScape MiMIplugin NCBIClient NCBIEntrezGeneUserInterface Pathintegrator PhosphositePlus Web Service Client Module PICRClient PSICQUICUniversalClient ReConn SessionForWeb SFLDLoader StringWSClient Superpathways-Plugin 3DScape AgilentLiteratureSearch Cytoprophet DisGeNET DomainGraph ExpressionCorrelation GeneMANIA MetaNetter MONET BiNGO BubbleRouter ClueGO CommonAttributes DisplayNetworkFromFlatFile FluxViz FunNetViz HyperEdgeEditor PiNGO CyGoose CytoscapeRPC GroovyScriptingEngine JavaScriptEngine MiSink PythonScriptingEngine RubyScriptingEngine ScriptEngineManager addParentNeighbors AdvancedNetworkMerge batchTool BiLayout commandTool coreCommands CyAnimator edgeLengthPlugin edgeLister EpiTrace FERN FM3 GoogleChartFunctions GroupTool MetaNodePlugin2 MultilevelLayoutPlugin NamedSelection NatureProtocolsWorkflow NeighborHighlight NetLink nodeCharts PhyloTree VennDiagrams 11Thursday, July 19, 2012
    • So whatʼs the problem? Photo credit: Taekwonweirdo Photo credit: Dean247 12Thursday, July 19, 2012
    • 13Thursday, July 19, 2012
    • Photo credit: Taekwonweirdo Photo credit: Dean247 14Thursday, July 19, 2012
    • 15Thursday, July 19, 2012
    • Photo credit: Taekwonweirdo 16Thursday, July 19, 2012
    • 17Thursday, July 19, 2012
    • !!! A tangled mess of inter-dependencies !!! Every public class is part of the API !!! Backwards compatibility is impossible !!! Poor deprecation and versioning strategy 18Thursday, July 19, 2012
    • Is that all? 19Thursday, July 19, 2012
    • !!! Apps canʼt use conflicting libraries !!! Apps canʼt publish their own APIs 20Thursday, July 19, 2012
    • Hurts core developers, app writers, and users! 21Thursday, July 19, 2012
    • How do we fix this? 22Thursday, July 19, 2012
    • 1. OSGi 2. Semantic Versioning 3. Maven 23Thursday, July 19, 2012
    • Cytoscape 3.0 24Thursday, July 19, 2012
    • Cytoscape 3.0 Milestone 5 is available here: http://cytoscape.org 25Thursday, July 19, 2012
    • Cytoscape Application Stack  OSGi − provides App 1 App 2 App X App Y runtime container Cytoscape Impl Cytoscape Cytoscape − defines module Bundle A Impl Bundle B Impl Bundle C boundaries − provides micro Cytoscape Cytoscape Cytoscape Lib Lib service 1 2 API Bundle A API Bundle B API Bundle C architecture OSGi Framework Java Virtual Machine 26Thursday, July 19, 2012
    • How does OSGi accomplish this? 27Thursday, July 19, 2012
    • Module = Jar + Metadata 28Thursday, July 19, 2012
    • Module X Module Y Module Z Defines what can depend on the module. Export-Packages: org.cytocape.model Defines what the module can depend on. Import-Packages: org.cytoscape.events API 1 API 3 API 2 29Thursday, July 19, 2012
    • Independence Library X v 1.1 Module K Library X v 1.2 Module M Module B Module C Module A Every App gets its own Classloader! Module Z 30Thursday, July 19, 2012
    • μServices Apps depend on Apps get on instances of Your App classes and service services interfaces from interfaces defined in the Service Registry using the API ONLY the service interfaces! Service Registry Cytoscape abc API IMPL modules + register instances OSGi of service interfaces with the Service Registry IMPL modules create instances of service xyz API interfaces defined in the abc IMPL xyz IMPL API 31Thursday, July 19, 2012
    • OSGi enables Modularity Photo credit: Maurice Koop 32Thursday, July 19, 2012
    • OSGi enforces Modularity Photo credit: BlackmanVision 33Thursday, July 19, 2012
    • Semantic Versioning: Version numbers have meaning! 34Thursday, July 19, 2012
    • VERSION: major.minor.patch patch - backwards compatible bug fixes minor - backwards compatible new features major - backwards INcompatible changes 35Thursday, July 19, 2012
    • Because versions have a functional meaning, we can reason about ranges [3.1,4) As long as we version honestly, your app will always work! (At least until the next major version update) 36Thursday, July 19, 2012
    • Maven Organize Build Release 37Thursday, July 19, 2012
    • 1. OSGi - To enable/enforce modularity 2. Semantic Versioning - To define how and when changes happen 3. Maven - To organize, build, and release 38Thursday, July 19, 2012
    • 1. Clearly define API 2. Enforce separation of API and implementation 3. Clearly define what can change and when 4. Sensible dependencies 5. Make writing and maintaining plugins easy 39Thursday, July 19, 2012
    • For more information visit: http://cytoscape.org 40Thursday, July 19, 2012
    • P41 RR031228 NIH GM070743-01 P01 HG005062 41Thursday, July 19, 2012
    • 42Thursday, July 19, 2012
    • Thank you! 43Thursday, July 19, 2012
    • Any Questions? 44Thursday, July 19, 2012
    • Risks? No ropes!!!  Lose momentum in lengthy rewrite?  Is the new API too limiting? Climber  Porting apps more trouble than itʼs worth?  Is OSGi just too complicated? Photo credit: notorious d.a.v. 45Thursday, July 19, 2012