graPharo
GraPharo is a graph layout library in Pharo (Smalltalk inspired programming language), created under the Graph library with layout algorithms project.
If you want to see the code or documentation of this project, please visit graPharo repository.
OVERVIEW
Google Summer of Code (GSoC) is a global program, intending to bring more students into open-source software development. Students work for 3 months on an open-source project for their chosen organization. The organisation for which I made my proposal was Pharo Consortium.
PROBLEM
When dealing with a large amount of data, it is necessary to organize it, to make it easier for reading and understanding. Therefore it is most useful to represent, a data structure, such as a graph, visually. This way the data gets separated and shown in a way that is easy to discern.
For Pharo developers, the issue that arises here is that all existing layout (visualizations of different positioning of vertices in a graph) implementations are made as a part of some other big structure and they can not be reused or used independently. This is a big problem because it makes the developers coding the same segment more than once. Also, the ability to adapt these functions (layouts) to a new implementation of graph structure or to an individual problem is almost impossible.
MY ROLE
After writing a proposal, being accepted to GSoC and community bonding month, my job was to isolate and resolve all the tasks needed for the project and report my progress. The project consisted of:
architecture and design faze
coding faze
optimization faze (It was necessary to improve several existing layouts)
documentation faze
creation of project presentation video.
CHALENGES
The main issues:
How to divide layouts from the graph structure?
How to divide layouts from the visualization engine?
Deciding on a structure and a design for the new library.
Optimizing existing algorithms.
Fixing algorithms which were not working properly.

SOLUTION
Create a new independent and reusable layout library.
Beside layouts itself, this solution includes a new simple graph implementation. The existing layout implementations have been modified in such a way that they are not dependent on the visualization engine or the graph structure. This freedom gives the library ability to be reused with different engines (Telescope, Roassal) and with any graph. To achieve this the methods necessary for the connections are placed in traits, which can be applied to any graph structure.
To solve the optimization problems that existed in circle typed layouts, I used special mathematical equations to calculate the orientation and position of each vertex.
PROJECTS OUTCOMES
As expected, I manage to create an independent reusable layout library. In the current form, the library contains a graph structure implementation and these layouts:
Linear (Vertical and Horizontal), Grid, Cell, Circle (Regular, Equidistant and Weighted), Tree (with 4 different orientations), Cluster, Force Based.
There is room for future work. Many other layout algorithms can be added, some can be given different implementations (one layout can have more than one algorithms) and optimization of several can be improved.
Certificate
After successfully finishing the project I was awarded a completion certificate.
