Skip to content

GSOC 2015 Application Goran Cetusic: Graph data backend API

Goran Cetušić edited this page Mar 26, 2015 · 1 revision
Goran Cetušić Short bio
Avatar My academic and programming career started with my enrollment as a Bachelor student at the Faculty of Electrical Engineering and Computing in Zagreb. During that time I've been involved in various activities like lecturing student courses, organizing events and projects, leading several of them as the section leader of the Electrical Engineering student club. I got my first job as a network administrator at a small firm and where I started to learn some real programming in Python. Before finishing my Bachelor studies, I got an internship position as an Openlab summer student at CERN where I worked on process accounting software for their batch cluster. After a year working as a Linux administrator and contributing to several open source projects, I'm now a dedicated Python and Django developer, juggling my responsibilities as a Masters student in Telecommunications and Informatics, currently working on my thesis on Linux network simulators and various other interests like machine learning and bioinformatics, often "wasting" my time on Coursera.
Education Faculty of Electrical Engineering and Computing, University of Zagreb
      Telecommunication and Informatics, Master studies
Contacts
Curiculum vitae https://github.com/gcetusic/gcetusic.github.io/blob/master/docs/gcetusic_en.pdf

The Programmer

A Linux enthusiast every since in 2006 someone installed Ubuntu on my laptop at a yearly Linux InstallFest. Since then I've taken over the organization of the same installfest for a couple of years and even organized and lectured two Linux courses at my college. After writing (mostly) bad C code in Gedit, I've switched to Python and Komodo Edit and it's been kind to me ever since. Except for that time when Komodo Edit deleted 300 lines of code...I'm using Sublime now, with all the benefits of its lint plugins.


After spending some time writing more bad code and making rookie mistakes, suddenly I realized I actually have something interesting to show to other developers. Python has served me well in this but I still have a lot to learn. For example, after doing web development for a couple of years, while trying to work around badly written Django code, I've implemented my own Python metaclass, probably the most abstract thing I've done in a programming language. Here are examples of some of the projects I've worked on (for a more complete list, please view my GitHub page, some are under NDA and closed sourced)

The Project

The idea of the project is to make it possible to store graph data to separate backends. Until now, graph data has been represented as volatile Python dictionaries. It would make sense to provide a flexible backend interface to easily create modules for graph storage to efficiently access graphs at any time. This would usually include graph databases since their data representation is close what NetworkX does and such databases have efficient algorithms to access graph data but it shouldn't be restricted to such storages. Case in point would be document-store databases that can more or less directly save Python dictionaries as JSON data and load them. SQL databases are somewhat trickier because their data representation isn't directly compatible with graph.


Because this project would be implemented as part of GSOC there are a couple of ideas that are directly related to what the final implementation would look like because the other ideas proposed would be done in parallel. The most important one is the NetworkX 2.0 API. Right now, NetworkX has a lot of ways to access graph data because the data is represented as Python objects (dicts). A central data access location inside the code should make the job of creating a backend interface a lot easier. Since this largely depends on the redesign of the NetworkX API, people involved in these two projects should coordinate their efforts and keep track of the changes between these two branches. Also, there is talk about adjacency matrix representations of graphs. While the reasoning behind this are matrix related algorithms, it would make sense to also coordinate the development of this feature with backend storage and API 2.0 development. So the combined roles of these three projects would be:

  1. NetworkX 2.0 API
    * create a consistent and centralized graph data accessor but with the usual dict-based storage
  2. Backend API
    * extend the 2.0 API to make the dict (memory) access modular * use the same interface to make a backend module - one for a graph db (possibly Neo4j) and one for a document db (Mongo or Couch)
  3. Matrix graphs
    * in accordance with the Backend API, create a backend module to store graphs as matrices

Timeline

Community Bonding period (27th April - 25th May):
  • Getting more familiar with the codebase
  • Coordinating and defining specifications for related projects
  • Researching graph-based databases and available graph algorithms
Week 1 (25th May - 31st May):
  • Defining clean generic methods for possible backends
  • Representative benchmark suite for performance evaluation
Week 2 (1st June - 7th June):
  • Extracting the Python dict storage as a module
Week 3 (8th June - 14th June):
  • Implementing the caching system
Week 4 and 5 (15th June - 28th June):
  • Syncing designs with NetworkX 2.0 API
  • Extensive cache related unit testing
Week 6 (29th June - 5th July):
  • Midterm evaluation
  • Resolving any design problems
  • Maintenance and codebase improvements
Week 7-8 (6th July - 19th July):
  • Implementing a graph backend
  • Implementing a document store backend
Week 9-10 (20th July - 2nd August):
  • Refining the backend API - make it more flexible
  • Researching SQL-based backend
  • Creating stub methods for relational DB specific actions (e.g. migrations)
  • Implementing some of them if there is time
Week 11 (3rd August - 9th August):
  • Buffer Period for completing any incomplete work
  • Making sure there's good test coverage and documentation
Week 12 - Pencils Down Date (10th August - 16th August):
  • Final syncing of other GSOC projects (merges)
Endterm Evaluation (17th August - 23rd August)

Schedule information

During the first 4-5 weeks I would have to work on my masters thesis parallel to GSOC (the network simulator mentioned in the NetworkX GUI proposal). It's my last year as a student and the deadline for turning it in is the end of June. Even though I would be able to devote at least 4 hrs a day during the period between the start of GSOC and the end of June I would start coding by the beginning of May (during the community bonding period) to get a head start.

Clone this wiki locally