<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Gsoc on Tushar Choudhary</title><link>https://tushar-c23.github.io/tags/gsoc/</link><description>Recent content in Gsoc on Tushar Choudhary</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 08 Jul 2024 16:10:07 +0530</lastBuildDate><atom:link href="https://tushar-c23.github.io/tags/gsoc/index.xml" rel="self" type="application/rss+xml"/><item><title>Week 6 with GSoC</title><link>https://tushar-c23.github.io/posts/gsoc/week-6/</link><pubDate>Mon, 08 Jul 2024 16:10:07 +0530</pubDate><guid>https://tushar-c23.github.io/posts/gsoc/week-6/</guid><description>&lt;p&gt;The sixth week was mainly focused on improving the code structure as well as implementation of the &lt;code&gt;LayoutContext&lt;/code&gt; for fCoSE layout algorithm in the plugin.&lt;/p&gt;
&lt;h3 id="todos"&gt;TODOs&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Generate a layout context for the fCoSE layout algorithm.&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Implement &lt;code&gt;TunableValidator&lt;/code&gt; for the layout context.&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Get the parameters for the layout from the user using &lt;code&gt;Tunable&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Dynamically generate the layout request using the parameters from the user.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="experiments-with-code"&gt;Experiments with code&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Implement &lt;code&gt;TunableValidator&lt;/code&gt; for the layout context to validate the parameters for the layout.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;package&lt;/span&gt; org.cytoscape.sample.internal;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; java.io.IOException;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; org.cytoscape.work.Tunable;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; org.cytoscape.work.TunableValidator;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;CustomLayoutContext&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;implements&lt;/span&gt; TunableValidator {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Randomize&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;boolean&lt;/span&gt; randomize &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Node Dimensions Include Labels&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;boolean&lt;/span&gt; nodeDimensionsIncludeLabels&lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Uniform Node Dimensions&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;boolean&lt;/span&gt; uniformNodeDimensions&lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Pack Components&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;boolean&lt;/span&gt; packComponents&lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Tile&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;boolean&lt;/span&gt; tile&lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Padding&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; padding&lt;span style="color:#f92672"&gt;=&lt;/span&gt; 30;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Node Repulsion&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; nodeRepulsion&lt;span style="color:#f92672"&gt;=&lt;/span&gt; 4500;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Ideal Edge Length&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; idealEdgeLength&lt;span style="color:#f92672"&gt;=&lt;/span&gt; 50;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Edge Elasticity&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;double&lt;/span&gt; edgeElasticity&lt;span style="color:#f92672"&gt;=&lt;/span&gt; 0.&lt;span style="color:#a6e22e"&gt;45&lt;/span&gt;;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Nesting Factor&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;double&lt;/span&gt; nestingFactor&lt;span style="color:#f92672"&gt;=&lt;/span&gt; 0.&lt;span style="color:#a6e22e"&gt;1&lt;/span&gt;;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Number of Iterations&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; numIter&lt;span style="color:#f92672"&gt;=&lt;/span&gt; 2500;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Tiling Padding Vertical&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; tilingPaddingVertical&lt;span style="color:#f92672"&gt;=&lt;/span&gt; 10;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Tiling Padding Horizontal&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; tilingPaddingHorizontal&lt;span style="color:#f92672"&gt;=&lt;/span&gt; 10;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Gravity&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;double&lt;/span&gt; gravity&lt;span style="color:#f92672"&gt;=&lt;/span&gt; 0.&lt;span style="color:#a6e22e"&gt;25&lt;/span&gt;;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Gravity Range&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;double&lt;/span&gt; gravityRange&lt;span style="color:#f92672"&gt;=&lt;/span&gt; 3.&lt;span style="color:#a6e22e"&gt;8&lt;/span&gt;;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Gravity Compound&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;double&lt;/span&gt; gravityCompound&lt;span style="color:#f92672"&gt;=&lt;/span&gt; 1;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Gravity Range Compound&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;double&lt;/span&gt; gravityRangeCompound&lt;span style="color:#f92672"&gt;=&lt;/span&gt; 1.&lt;span style="color:#a6e22e"&gt;5&lt;/span&gt;;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#a6e22e"&gt;@Tunable&lt;/span&gt;(description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Initial Energy On Incremental&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;double&lt;/span&gt; initialEnergyOnIncremental&lt;span style="color:#f92672"&gt;=&lt;/span&gt; 0.&lt;span style="color:#a6e22e"&gt;3&lt;/span&gt;;&lt;span style="color:#75715e"&gt;// Default value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; ValidationState &lt;span style="color:#a6e22e"&gt;getValidationState&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;final&lt;/span&gt; Appendable errMsg) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; ValidationState.&lt;span style="color:#a6e22e"&gt;OK&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="learnings"&gt;Learnings&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;TunableValidator&lt;/code&gt; interface is used to validate the parameters for the layout.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;Tunable&lt;/code&gt; annotation is used to get the parameters from the user.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;LayoutContext&lt;/code&gt; is used to get and set the parameters for the layout from the user.&lt;/li&gt;
&lt;li&gt;The layout context along with the tunable parameters generate a GUI for the user to input the parameters in a user friendly way.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="milestones"&gt;Milestones&lt;/h2&gt;
&lt;h3 id="successful-implementation-of-the-layout-context-for-the-fcose-layout-algorithm-in-the-plugin-to-get-the-user-entered-parameters"&gt;Successful implementation of the layout context for the fCoSE layout algorithm in the plugin to get the user entered parameters.&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;JSONObject layoutOptions &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; JSONObject();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;fcose&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;randomize&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;randomize&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;padding&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;padding&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;nodeDimensionsIncludeLabels&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;nodeDimensionsIncludeLabels&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;uniformNodeDimensions&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;uniformNodeDimensions&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;packComponents&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;packComponents&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;nodeRepulsion&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;nodeRepulsion&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;idealEdgeLength&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;idealEdgeLength&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;edgeElasticity&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;edgeElasticity&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;nestingFactor&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;nestingFactor&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;numIter&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;numIter&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;tile&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;tile&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;tilingPaddingVertical&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;tilingPaddingVertical&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;tilingPaddingHorizontal&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;tilingPaddingHorizontal&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;gravity&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;gravity&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;gravityRange&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;gravityRange&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;gravityCompound&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;gravityCompound&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;gravityRangeCompound&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;gravityRangeCompound&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;layoutOptions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;initialEnergyOnIncremental&amp;#34;&lt;/span&gt;, myContext.&lt;span style="color:#a6e22e"&gt;initialEnergyOnIncremental&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Week 5 with GSoC</title><link>https://tushar-c23.github.io/posts/gsoc/week-5/</link><pubDate>Mon, 01 Jul 2024 16:10:07 +0530</pubDate><guid>https://tushar-c23.github.io/posts/gsoc/week-5/</guid><description>&lt;p&gt;The fifth week was mainly focused on writing the functionalities as an implementation of the abstract layout algorithm laid down in cytoscape.&lt;/p&gt;
&lt;h3 id="todos"&gt;TODOs&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Extend &lt;code&gt;AbstractLayoutAlgorithm&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Implement fCoSE layout algorithm in the plugin.&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Implement the task iterator to apply the layout changes to the network in cytoscape.&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Implement &lt;code&gt;doLayout&lt;/code&gt; method to apply the layout changes to the network in cytoscape.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="experiments-with-code"&gt;Experiments with code&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Extended the &lt;code&gt;AbstractLayoutAlgorithm&lt;/code&gt; class to implement the fCoSE layout algorithm. Using the previously developed knowledge and code, the migration to extend the abstract class was smooth.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;CustomLayout&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;extends&lt;/span&gt; AbstractLayoutAlgorithm {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#75715e"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;	 * Creates a new MyLayout object.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;	 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;private&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;final&lt;/span&gt; CyNetworkViewWriterFactory writeCyJs;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;CustomLayout&lt;/span&gt;(UndoSupport undo, CyNetworkViewWriterFactory writeNetwork) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#66d9ef"&gt;super&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;customLayout&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;Custom Layout&amp;#34;&lt;/span&gt;, undo);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#66d9ef"&gt;this&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;writeCyJs&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; writeNetwork;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; TaskIterator &lt;span style="color:#a6e22e"&gt;createTaskIterator&lt;/span&gt;(CyNetworkView networkView,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Object context,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Set&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;View&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;CyNode&lt;span style="color:#f92672"&gt;&amp;gt;&amp;gt;&lt;/span&gt; nodesToLayOut,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; String attrName) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#66d9ef"&gt;final&lt;/span&gt; CyNetworkView myView &lt;span style="color:#f92672"&gt;=&lt;/span&gt; networkView;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#66d9ef"&gt;final&lt;/span&gt; CyNetworkViewWriterFactory writeCyJs &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;this&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;writeCyJs&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		Task task &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; AbstractLayoutTask(toString(), networkView, nodesToLayOut, attrName, undoSupport) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;@Override&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#66d9ef"&gt;protected&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;doLayout&lt;/span&gt;(TaskMonitor taskMonitor) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;//.....&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;				}		
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; TaskIterator(task);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="learnings"&gt;Learnings&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;AbstractLayoutAlgorithm&lt;/code&gt; class provides a lot of functionalities that can be used to implement the layout algorithms in cytoscape.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;createTaskIterator&lt;/code&gt; method is used to create a task iterator which is used to apply the layout changes to the network in cytoscape.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;doLayout&lt;/code&gt; method is used to apply the layout changes to the network in cytoscape.&lt;/li&gt;
&lt;li&gt;Cytoscape layouts also offer layout context which can be used to get and set the parameters for the layout from the user.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="milestones"&gt;Milestones&lt;/h2&gt;
&lt;h3 id="successful-implementation-of-fcose-layout-algorithm-in-the-plugin"&gt;Successful implementation of fCoSE layout algorithm in the plugin.&lt;/h3&gt;</description></item><item><title>Week 4 with GSoC</title><link>https://tushar-c23.github.io/posts/gsoc/week-4/</link><pubDate>Mon, 24 Jun 2024 16:10:07 +0530</pubDate><guid>https://tushar-c23.github.io/posts/gsoc/week-4/</guid><description>&lt;p&gt;The fourth week included a lot of coding and debugging. The main goal was to successfully apply the layout changes to the network in cytoscape using the response from SyBLaRS API.&lt;/p&gt;
&lt;h3 id="todos"&gt;TODOs&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Parse the response from SyBLaRS API to get the layout changes.&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Format the response from the SyBLaRS API to extract the layout changes.&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Fetch the node information from the network in cytoscape.&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Apply the layout changes to the network in cytoscape.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="experiments-with-code"&gt;Experiments with code&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Tried to use org.json library to parse the JSON resonse and extract the required details from the response.
&lt;ul&gt;
&lt;li&gt;Using this library with the below given version caused cytoscape to stop detecting my plugin which prompted me to use javax.json package.&lt;/li&gt;
&lt;li&gt;Eventually with the help of my mentor we figured out the issue, which was a mismatch between versions of the org.json library used in the plugin and the one used in the cytoscape application.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// Parse the JSON string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;JSONObject json &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; JSONObject(dataToSend);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// Access the value of a specific key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String elements &lt;span style="color:#f92672"&gt;=&lt;/span&gt; json.&lt;span style="color:#a6e22e"&gt;getJSONObject&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;elements&amp;#34;&lt;/span&gt;).&lt;span style="color:#a6e22e"&gt;toString&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dataToSend &lt;span style="color:#f92672"&gt;=&lt;/span&gt; elements;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&amp;lt;!-- Incorrect version --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.json&lt;span style="color:#f92672"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;json&lt;span style="color:#f92672"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;20210307&lt;span style="color:#f92672"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&amp;lt;!-- Correct version --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.json&lt;span style="color:#f92672"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;org.json&lt;span style="color:#f92672"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;chargebee-1.0&lt;span style="color:#f92672"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="learnings"&gt;Learnings&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The Cytoscape desktop application uses multiple external dependencies which might conflict with the dependencies used in the plugin.&lt;/li&gt;
&lt;li&gt;The Cytoscape desktop application maintains a descriptive error log which is very helpful in debugging the issues.&lt;/li&gt;
&lt;li&gt;SybLaRS expects only the &lt;code&gt;&amp;quot;elements&amp;quot;&lt;/code&gt; object of the exported network JSON to be sent as the request body.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="milestones"&gt;Milestones&lt;/h2&gt;
&lt;h3 id="successful-parsing-of-the-response-from-syblars-api"&gt;Successful parsing of the response from SyBLaRS API&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Parse the JSON response from the SyBLaRS API to extract the layout changes and the node information.&lt;/li&gt;
&lt;li&gt;Store the new coordinates of the nodes in a map with the node id as the key.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//iterate over response&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;JSONObject jsonResponse &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; JSONObject(response.&lt;span style="color:#a6e22e"&gt;toString&lt;/span&gt;());
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;JSONObject layoutFromResponse &lt;span style="color:#f92672"&gt;=&lt;/span&gt; jsonResponse.&lt;span style="color:#a6e22e"&gt;getJSONObject&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;layout&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Iterator&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;String&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; nodes &lt;span style="color:#f92672"&gt;=&lt;/span&gt; layoutFromResponse.&lt;span style="color:#a6e22e"&gt;keys&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;while&lt;/span&gt;(nodes.&lt;span style="color:#a6e22e"&gt;hasNext&lt;/span&gt;()) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; String node &lt;span style="color:#f92672"&gt;=&lt;/span&gt; nodes.&lt;span style="color:#a6e22e"&gt;next&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; JSONObject value &lt;span style="color:#f92672"&gt;=&lt;/span&gt; layoutFromResponse.&lt;span style="color:#a6e22e"&gt;getJSONObject&lt;/span&gt;(node);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; JSONObject position &lt;span style="color:#f92672"&gt;=&lt;/span&gt; value.&lt;span style="color:#a6e22e"&gt;getJSONObject&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;position&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;try&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; nodePositions.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;(node, position);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; } &lt;span style="color:#66d9ef"&gt;catch&lt;/span&gt; (Exception e) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; System.&lt;span style="color:#a6e22e"&gt;out&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;println&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;Exception: &amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; e.&lt;span style="color:#a6e22e"&gt;getMessage&lt;/span&gt;());
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="successful-application-of-layout-changes-to-the-network-in-cytoscape"&gt;Successful application of layout changes to the network in Cytoscape&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Set the node positions by matching the nodes with SUID.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// Set the node positions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;final&lt;/span&gt; VisualProperty&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;Double&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; xLoc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; BasicVisualLexicon.&lt;span style="color:#a6e22e"&gt;NODE_X_LOCATION&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;final&lt;/span&gt; VisualProperty&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;Double&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; yLoc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; BasicVisualLexicon.&lt;span style="color:#a6e22e"&gt;NODE_Y_LOCATION&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt;(View&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;CyNode&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; nodeView : myView.&lt;span style="color:#a6e22e"&gt;getNodeViews&lt;/span&gt;()) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; String nodeName &lt;span style="color:#f92672"&gt;=&lt;/span&gt; myView.&lt;span style="color:#a6e22e"&gt;getModel&lt;/span&gt;().&lt;span style="color:#a6e22e"&gt;getRow&lt;/span&gt;(nodeView.&lt;span style="color:#a6e22e"&gt;getModel&lt;/span&gt;()).&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;, String.&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; String nodeId &lt;span style="color:#f92672"&gt;=&lt;/span&gt; nodeView.&lt;span style="color:#a6e22e"&gt;getModel&lt;/span&gt;().&lt;span style="color:#a6e22e"&gt;getSUID&lt;/span&gt;().&lt;span style="color:#a6e22e"&gt;toString&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; JSONObject position &lt;span style="color:#f92672"&gt;=&lt;/span&gt; nodePositions.&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(nodeId);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt;(position &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; nodeView.&lt;span style="color:#a6e22e"&gt;setVisualProperty&lt;/span&gt;(xLoc, position.&lt;span style="color:#a6e22e"&gt;getDouble&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;x&amp;#34;&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; nodeView.&lt;span style="color:#a6e22e"&gt;setVisualProperty&lt;/span&gt;(yLoc, position.&lt;span style="color:#a6e22e"&gt;getDouble&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;y&amp;#34;&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Week 3 with GSoC</title><link>https://tushar-c23.github.io/posts/gsoc/week-3/</link><pubDate>Mon, 17 Jun 2024 16:10:07 +0530</pubDate><guid>https://tushar-c23.github.io/posts/gsoc/week-3/</guid><description>&lt;p&gt;The third week included a lot of exploration and trying out multiple approaches to successfully connect cytoscape plugin to the SyBLaRS API.&lt;/p&gt;
&lt;h3 id="todos"&gt;TODOs&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Run SyBLaRS API locally.&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Figure out how to make HTTP API requests from cytoscape plugin.&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Figure out how to make custom HTTP API requests to SyBLaRS with static reuqest body.&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Figure out how to make custom HTTP API requests to SyBLaRS with dynamic request body fetched from the current network in cytoscape.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="experiments-with-code"&gt;Experiments with code&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Tried to use okHTTP to make HTTP requests from the plugin. Cytoscape fails to detect the plugin when okHTTP was used to make HTTP requests. Below is the code used.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//API Call&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String url &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;http://localhost:3000/json?image=false&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String dataToSend &lt;span style="color:#f92672"&gt;=&lt;/span&gt; outputString.&lt;span style="color:#a6e22e"&gt;toString&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String optionsString &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;{\&amp;#34;layoutOptions\&amp;#34;:{\&amp;#34;name\&amp;#34;:\&amp;#34;fcose\&amp;#34;,\&amp;#34;randomize\&amp;#34;:true,\&amp;#34;padding\&amp;#34;:30,\&amp;#34;nodeDimensionsIncludeLabels\&amp;#34;:true,\&amp;#34;uniformNodeDimensions\&amp;#34;:false,\&amp;#34;packComponents\&amp;#34;:true,\&amp;#34;nodeRepulsion\&amp;#34;:4500,\&amp;#34;idealEdgeLength\&amp;#34;:50,\&amp;#34;edgeElasticity\&amp;#34;:0.45,\&amp;#34;nestingFactor\&amp;#34;:0.1,\&amp;#34;numIter\&amp;#34;:2500,\&amp;#34;tile\&amp;#34;:true,\&amp;#34;tilingPaddingVertical\&amp;#34;:10,\&amp;#34;tilingPaddingHorizontal\&amp;#34;:10,\&amp;#34;gravity\&amp;#34;:0.25,\&amp;#34;gravityRange\&amp;#34;:3.8,\&amp;#34;gravityCompound\&amp;#34;:1,\&amp;#34;gravityRangeCompound\&amp;#34;:1.5,\&amp;#34;initialEnergyOnIncremental\&amp;#34;:0.3},\&amp;#34;imageOptions\&amp;#34;:{\&amp;#34;format\&amp;#34;:\&amp;#34;png\&amp;#34;,\&amp;#34;background\&amp;#34;:\&amp;#34;transparent\&amp;#34;,\&amp;#34;width\&amp;#34;:1280,\&amp;#34;height\&amp;#34;:720,\&amp;#34;color\&amp;#34;:\&amp;#34;bluescale\&amp;#34;}}&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// Define the request body&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String payload &lt;span style="color:#f92672"&gt;=&lt;/span&gt; dataToSend &lt;span style="color:#f92672"&gt;+&lt;/span&gt; optionsString;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;System.&lt;span style="color:#a6e22e"&gt;out&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;println&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;$$Payload: &amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; payload);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// Create the request body object&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;RequestBody body &lt;span style="color:#f92672"&gt;=&lt;/span&gt; RequestBody.&lt;span style="color:#a6e22e"&gt;create&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; payload, MediaType.&lt;span style="color:#a6e22e"&gt;parse&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;text/plain&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// Create the request object&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Request request &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Request.&lt;span style="color:#a6e22e"&gt;Builder&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;url&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;http://localhost:3000/json?image=false&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;post&lt;/span&gt;(body)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;addHeader&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;Accept&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;addHeader&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;text/plain&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;build&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// Create the OkHttp client&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;OkHttpClient client &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; OkHttpClient();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// Execute the request&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client.&lt;span style="color:#a6e22e"&gt;newCall&lt;/span&gt;(request).&lt;span style="color:#a6e22e"&gt;enqueue&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Callback() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;@Override&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onFailure&lt;/span&gt;(Call call, IOException e) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; e.&lt;span style="color:#a6e22e"&gt;printStackTrace&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;@Override&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onResponse&lt;/span&gt;(Call call, Response response) &lt;span style="color:#66d9ef"&gt;throws&lt;/span&gt; IOException {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt;response.&lt;span style="color:#a6e22e"&gt;isSuccessful&lt;/span&gt;()) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;throw&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; IOException(&lt;span style="color:#e6db74"&gt;&amp;#34;Unexpected code &amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; response);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// Handle the response&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; String responseBody &lt;span style="color:#f92672"&gt;=&lt;/span&gt; response.&lt;span style="color:#a6e22e"&gt;body&lt;/span&gt;().&lt;span style="color:#a6e22e"&gt;string&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; System.&lt;span style="color:#a6e22e"&gt;out&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;println&lt;/span&gt;(responseBody);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;});
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.squareup.okhttp3&lt;span style="color:#f92672"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;okhttp&lt;span style="color:#f92672"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;4.9.1&lt;span style="color:#f92672"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;!-- Use the latest version --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span style="color:#f92672"&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Tried to use the Java.net package to make HTTP requests from the plugin. Cytoscape was able to detect the plugin when Java.net package was used to make HTTP requests. Below is the code used.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String url &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;http://localhost:3000/json?image=false&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String dataToSend &lt;span style="color:#f92672"&gt;=&lt;/span&gt; outputString.&lt;span style="color:#a6e22e"&gt;toString&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String optionsString &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;{\&amp;#34;layoutOptions\&amp;#34;:{\&amp;#34;name\&amp;#34;:\&amp;#34;fcose\&amp;#34;,\&amp;#34;randomize\&amp;#34;:true,\&amp;#34;padding\&amp;#34;:30,\&amp;#34;nodeDimensionsIncludeLabels\&amp;#34;:true,\&amp;#34;uniformNodeDimensions\&amp;#34;:false,\&amp;#34;packComponents\&amp;#34;:true,\&amp;#34;nodeRepulsion\&amp;#34;:4500,\&amp;#34;idealEdgeLength\&amp;#34;:50,\&amp;#34;edgeElasticity\&amp;#34;:0.45,\&amp;#34;nestingFactor\&amp;#34;:0.1,\&amp;#34;numIter\&amp;#34;:2500,\&amp;#34;tile\&amp;#34;:true,\&amp;#34;tilingPaddingVertical\&amp;#34;:10,\&amp;#34;tilingPaddingHorizontal\&amp;#34;:10,\&amp;#34;gravity\&amp;#34;:0.25,\&amp;#34;gravityRange\&amp;#34;:3.8,\&amp;#34;gravityCompound\&amp;#34;:1,\&amp;#34;gravityRangeCompound\&amp;#34;:1.5,\&amp;#34;initialEnergyOnIncremental\&amp;#34;:0.3},\&amp;#34;imageOptions\&amp;#34;:{\&amp;#34;format\&amp;#34;:\&amp;#34;png\&amp;#34;,\&amp;#34;background\&amp;#34;:\&amp;#34;transparent\&amp;#34;,\&amp;#34;width\&amp;#34;:1280,\&amp;#34;height\&amp;#34;:720,\&amp;#34;color\&amp;#34;:\&amp;#34;bluescale\&amp;#34;}}&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;String payload &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;[&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; dataToSend &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;,&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; optionsString &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;]&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;System.&lt;span style="color:#a6e22e"&gt;out&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;println&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;Payload: &amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; payload);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;try&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; URL obj &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; URI(url).&lt;span style="color:#a6e22e"&gt;toURL&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HttpURLConnection connection &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (HttpURLConnection) obj.&lt;span style="color:#a6e22e"&gt;openConnection&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; connection.&lt;span style="color:#a6e22e"&gt;setRequestMethod&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;POST&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; connection.&lt;span style="color:#a6e22e"&gt;setRequestProperty&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;text/plain&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; connection.&lt;span style="color:#a6e22e"&gt;setDoOutput&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;try&lt;/span&gt; (DataOutputStream os &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; DataOutputStream(connection.&lt;span style="color:#a6e22e"&gt;getOutputStream&lt;/span&gt;())) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; os.&lt;span style="color:#a6e22e"&gt;writeBytes&lt;/span&gt;(payload);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; os.&lt;span style="color:#a6e22e"&gt;flush&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; responseCode &lt;span style="color:#f92672"&gt;=&lt;/span&gt; connection.&lt;span style="color:#a6e22e"&gt;getResponseCode&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt;(responseCode &lt;span style="color:#f92672"&gt;==&lt;/span&gt; HttpURLConnection.&lt;span style="color:#a6e22e"&gt;HTTP_OK&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; StringBuilder response &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; StringBuilder();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;try&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; BufferedReader reader &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; BufferedReader(&lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; InputStreamReader(connection.&lt;span style="color:#a6e22e"&gt;getInputStream&lt;/span&gt;()))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; String line;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt;((line &lt;span style="color:#f92672"&gt;=&lt;/span&gt; reader.&lt;span style="color:#a6e22e"&gt;readLine&lt;/span&gt;()) &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; response.&lt;span style="color:#a6e22e"&gt;append&lt;/span&gt;(line);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; System.&lt;span style="color:#a6e22e"&gt;out&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;println&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;Response: &amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; response.&lt;span style="color:#a6e22e"&gt;toString&lt;/span&gt;());
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; System.&lt;span style="color:#a6e22e"&gt;out&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;println&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;POST request failed: &amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; responseCode);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; connection.&lt;span style="color:#a6e22e"&gt;disconnect&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;catch&lt;/span&gt; (Exception e) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; System.&lt;span style="color:#a6e22e"&gt;out&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;println&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;Exception: &amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; e.&lt;span style="color:#a6e22e"&gt;getMessage&lt;/span&gt;());
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; e.&lt;span style="color:#a6e22e"&gt;printStackTrace&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="learnings"&gt;Learnings&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The Cytoscape desktop application cannot detect plugins with okHTTP as dependency which may have some caveat that i may be overlooking.&lt;/li&gt;
&lt;li&gt;SybLarS expects a JSON array as the request body which contains the data and the options for the layout when posting data to &amp;ldquo;/json&amp;rdquo; endpoint.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="milestones"&gt;Milestones&lt;/h2&gt;
&lt;h3 id="successful-http-requests-to-syblars-api"&gt;Successful HTTP requests to SyBLaRS API&lt;/h3&gt;
&lt;p&gt;Figured out how to trigger the API request to SyBLaRS from the plugin.&lt;/p&gt;</description></item><item><title>Week 2 with GSoC</title><link>https://tushar-c23.github.io/posts/gsoc/week-2/</link><pubDate>Mon, 10 Jun 2024 16:10:07 +0530</pubDate><guid>https://tushar-c23.github.io/posts/gsoc/week-2/</guid><description>&lt;p&gt;The second week included a lot more application of the information gathered in the first week. I also experimented with the pre populated layouts on Cytoscape desktop application.&lt;/p&gt;
&lt;h3 id="todos"&gt;TODOs&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Figure out how to add multiple entries in the application menu from a single plugin.&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Figure out the Cytoscape.js JSON export handler in the cytoscape desktop application.&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Find out a way to trigger the export from the plugin.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Figure out how to populate the layout settings menu with the new layouts from cytoscape.js.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="experiments-with-code"&gt;Experiments with code&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Tried to populate a submenu in the layout menu with multiple entries which will ultimately be used to populate the layouts from the cytoscape.js layouts. To do this i had to register multiple services from a single application.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Properties createNetworkViewTaskFactoryProps &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Properties();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;createNetworkViewTaskFactoryProps.&lt;span style="color:#a6e22e"&gt;setProperty&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;preferredMenu&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;Layout.CytoJS Layouts&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;createNetworkViewTaskFactoryProps.&lt;span style="color:#a6e22e"&gt;setProperty&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;Layout 1&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;registerService(bc,createNetworkViewTaskFactory,TaskFactory.&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;, createNetworkViewTaskFactoryProps);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Properties createNetworkViewTaskFactoryProps1 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; Properties();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;createNetworkViewTaskFactoryProps1.&lt;span style="color:#a6e22e"&gt;setProperty&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;preferredMenu&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;Layout.CytoJS Layouts&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;createNetworkViewTaskFactoryProps1.&lt;span style="color:#a6e22e"&gt;setProperty&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;Layout 2&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;registerService(bc,createNetworkViewTaskFactory,TaskFactory.&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;, createNetworkViewTaskFactoryProps1);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="learnings"&gt;Learnings&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The Cytoscape desktop application uses a plugin named &lt;a href="https://github.com/cytoscape/json"&gt;JSON&lt;/a&gt; which is included as a core plugin. Thanks to my mentor&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; for pointing me to the right direction.&lt;/li&gt;
&lt;li&gt;Upon investigating the code and a little help from Cytoscape app developers&amp;rsquo; google group&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt; i was able to figure out how to use the CytoscapeJS JSON export service in my plugin.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="milestones"&gt;Milestones&lt;/h2&gt;
&lt;h3 id="automation-of-json-export"&gt;Automation of JSON export&lt;/h3&gt;
&lt;p&gt;Figured out how to trigger the JSON export from the plugin.&lt;/p&gt;</description></item><item><title>Week 1 with GSoC</title><link>https://tushar-c23.github.io/posts/gsoc/week-1/</link><pubDate>Mon, 03 Jun 2024 16:10:07 +0530</pubDate><guid>https://tushar-c23.github.io/posts/gsoc/week-1/</guid><description>&lt;p&gt;The first week was fairly informative. Following is a list of my learnings this week:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learned quite a lot about how the Cytoscape apps work and how they are written.&lt;/li&gt;
&lt;li&gt;Running cytoscape in debug mode and listening to the debug port from intellij by setting up debug configurations.&lt;/li&gt;
&lt;li&gt;OSGi model and how cytoscape uses it to structure the software.&lt;/li&gt;
&lt;li&gt;How to write OSGi configurations.&lt;/li&gt;
&lt;li&gt;How to add the instance of the cytoscape app in the menu bar of cytoscape.&lt;/li&gt;
&lt;li&gt;How nodes and networks are modeled in cytoscape.&lt;/li&gt;
&lt;li&gt;Following things related to Nodes in networks
&lt;ul&gt;
&lt;li&gt;Creating nodes&lt;/li&gt;
&lt;li&gt;Naming the nodes&lt;/li&gt;
&lt;li&gt;Creating edges&lt;/li&gt;
&lt;li&gt;Node table entries&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Following things related to cytoscape apps
&lt;ul&gt;
&lt;li&gt;Tasks&lt;/li&gt;
&lt;li&gt;Task factories&lt;/li&gt;
&lt;li&gt;Network views&lt;/li&gt;
&lt;li&gt;Network managers&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Further i plan to take a look at how cytoscape exports networks in the form of cytoscape.js json file.&lt;/p&gt;</description></item></channel></rss>