Google Summer of Code is back!

Google has started accepting applications for Google Summer of Code 2010!  Get your proposals ready and submitted before April 9, 2010 (19:00 UTC)!!

As some of you may know, I participated in Google Summer of Code 2008.  And the project I worked on is called Cytoscape.  So if any of you are interested in this project, here are a few links:

Google Summer of Code 2010 — GenMAPP, Cytoscape, WikiPathways & Reactome

For those of you who are interested in working on the project idea I worked on two years ago, it’s this one:

IDEA 16: Automatic (Smart) Node and Edge Label Layout

Cytoscape currently has a large number of layout algorithms that place nodes according to various criteria. However, a common problem with all of these layout algorithms is that node and edge labels are not accounted for in the aesthetic criteria of the algorithm. This means that labels frequently end up in awkward locations which are hard to read, overlap or obscure other labels, and otherwise don’t look quite right. As a consequence, users are frequently forced to adjust the position of labels s, which is a time consuming and tedious process. To fix this, we propose developing a layout algorithm for labels. Perhaps this algorithm could be integrated with a normal layout algorithm, or perhaps it could be a subsequent step that lays the labels out in an intelligent fashion once the nodes have been placed. Some work has been done on this, but more layouts are needed.

Language and Skills: Java, graph layout algorithms

Idea by: Mike Smoot

Potential Mentors: Ruth Isserlin, Gary Bader

My blog posts that are related to this project can be found here.

Lessons Learned & Special Thanks

A few months ago, the Google Summer of Code 2008 program officially came to an end. I don’t think I can name all the things that I’ve learned throughout the summer, since there’s just so many! But I thought I’d mention a few:

  • Reading – It wasn’t until this summer, had I realized how much reading a developer does. I devoted more time familiarizing myself with the Cytoscape code base than actually developing myself. I’ve also realized that reading external resources like books and discussion boards often facilitate your ability to work independently.
  • Documentation – Over the summer, I’ve truly learned the importance of documentation. Spending the time to document your code while you develop it will save a lot of time for yourself and others that will have to work with your code in the future.
  • Communication – In open source projects, developers are often located in all parts of the world. It is very important to have good communication skills so problems, ideas, and concerns can be addressed and brought to the others’ attention regardless of where they are. Read the rest of this entry »

Wrapping Up!

Ever since my last post, I’ve been busy finishing off my plugin by implementing various additional features. These include the first two suggestions from the previous Refinements post, as well as:

  • Allowing users to specify separate Spring Length and Spring Coefficient parameters for node and label edges. This further improves the label layout plugin’s ability in enhancing network readability.
  • Allow users to reset the label position of all their nodes. Without this option, users will have to reset the label position of each and every node manually in order to undo the change in position.

In addition to implementation, I’ve also been:

  • Editing the Cytoscape User Manual on the Cytoscape Wiki to let users know how to use this label layout plugin
  • Cleaning up code and adding more documentation
  • Issuing tickets on Cytoscape’s bug tracking system regarding what still needs to be done/fixed
  • Testing, testing, and more testing..

This will be my last week of Google Summer of Code 2008. It’s been an awesome summer, and I’ve definitely learned a lot! For the rest of this week, I will continue wrapping up this project, and I will be working on making my ScreenCast.

Refinements :)

Gary kindly dropped by my office this morning to take a look at what I’ve got up and running so far for my plugin. It seems like the both of us are quite happy with the general functionality of the plugin, and how well our approach turned out. So what’s next is a few new features that I will be adding to my plugin:

  • Of the total number of iterations of the algorithm, users can specify what percentage of these iterations they would like the network nodes to be moved as well. [Kindly suggested by Greg :)]
  • Reposition the labels (and network nodes as well, taking the previous feature into account) only for the selected nodes.
  • Implement some sort of smart label wrapping which will wrap long labels into more of a square/circular shape.

In addition, I will also be spending some time testing out my label plugin to see which default values will work best for the plugin.

With a week and a half left of my GSoC summer (I will be volunteering at the Agile Conference next week), I am going to implement as many of these as I can. :)

New Approach

As of last week, I’ve completed my first label repositioning plugin. It successfully repositions the labels of the network so that the networks are more readable. However, it is currently tied with the Force-Directed layout algorithm in Cytoscape. Also, this current approach creates too many additional temporary edges, which are later removed. So after meeting with my mentors last Friday, we’ve decided to take a new approach:

  • Make a copy of the current Force-Directed layout class (this will also copy the Tunables over so that constants that the algorithm needs can still be set by the users)
  • Convert each label to a LayoutNode as well
  • The list of LayoutNodes that will now be used will contain both network nodes and labels
  • Modify the algorithm so that it only needs to look at the x and y coordinates of various LayoutNodes

So this is what I will be working on for the next little while. :)

Here is an example of how networks look after the current label plugin is applied:

Before:

After:

Links

Blogroll