Getting Things GNOME! - rewrite liblarch library for managing directed acyclic graphs

Izidor MatuĊĦov

Short description: Getting Things GNOME! is a powerful software for managing personal tasks. It supports many features. Its components must be very flexible to support all of these features. Unfortunately, GTK TreeWidget is not and liblarch was created but it needs to rewrite and separate from GTK as much as possible. I want to rewrite liblarch that way during the summer.

Getting Things GNOME! (a.k.a GTG) is a software which helps you with tracking your tasks. It is inspired by a method Getting Things Done from David Allen. Your tasks could consists of sub-tasks which could again have sub-tasks... To help you navigate through a such amount of tasks you can tag each task with its context, e.g. @school for school assignments, @gsoc for tasks which you have to do with GSoC. Some tasks could have a common sub-task, e.g. buying various green groceries needs in common to go to shop and buy them. In other words, the sub-task has to have multiple parents.

You can see that GTG has to be flexible to support all this features. It’s GUI is created mainly of GTK TreeWidgets which do not support every needed feature. A TreeWidget expects that shown items could have just one parents and several children --- without allowing multiple parents. Also, filtering items does not follow GTG semantic. In workview, parents are hidden and just doable children are shown what is not possible in TreeWidget.

Tasks representation in GTG creates a directed acyclic graph which needs to be converted into a tree graph to be shown through a TreeWidget. There is no library which can do that. Therefore Lionel Dricot, one of GTG founders, has decided to create a special library called liblarch to support missing features.

Thanks to last Google Summer of Code, Luca Invernizzi wrote support for multiple backends (in GTG backend means anything which could store/create a new tasks like twitter, bugzilla, etc) Each backend runs in its own thread and notices liblarch about tasks and relationships between them.

Liblarch consists of two parts: liblarch (managing relationships between tasks from various backends and filtering them) and liblarch-gtk (showing them in Tree Widget). The current version tries to be as close to TreeWidget as possible. It seems to be a bad step because of several TreeWidget bugs and thread problems. It created many weird bugs which are hard to debug and many times are on the side of TreeWidget.

During the summer I want to rewrite liblarch so it would be more stable. I would like to preserve the existing interface between liblarch.


Liblarch consists of three parts which are shown in the figure:
  1. MainTree -- manage relationship between tasks from various backends
  2. FilteredTree -- interchangeable object which shows just tasks with certain tags or other features
  3. Liblarch-gtk -- wrap communication with Gtk TreeWidget since TreeWidget is buggy a lot.


(Note: In the beginning of GTG development a tree graph was sufficient for representing tasks and therefore some classes have in name Tree although they do not represent tree graphs any more)

Rewriting code and preserving the existing interface would be hard. Therefore, as the first step I want to completely rewrite liblarch-gtk from scratch. Only liblarch-gtk should be allowed to communicated wtih TreeWidget.

In the second step, MainTree and FilteredTree would be polished. I would eliminate GTK code what make this part more simple and get rid of thread problems.

Afterwards, it would be possible to draw an imaginary border between GUI and server part of GTG. By replacing liblarch-gtk you could create a web interface instead of GTK.

Liblarch must be able to manage several separated trees. One of them would be for tasks, other for tags and for plugins.

What benefits does it have for GNOME and its community?

Rewritten liblarch would be more stable and reliable. It would enable GTG developers to spend their time on implementing new cool features without fear about the core component of GTG. More new features and stable GTG would attract more users which could use this great task manager.

Parts of liblarch could be later used by other GNOME projects with similar needs.

Why you'd like to complete this particular project?

I use GTG for about a year. A task manager is a very important application for me. Before GTG I had tried various applications but none of them suits my needs so good as GTG. Therefore I would like to contribute to GTG and make it even better.

How do you plan to achieve completion of your project?

In the middle of June I have my final exams for my bachelor degree. Therefore I would like to start working during Community Bonding period (20 hours per week). After the middle of June I worked the full time (40 hours per week).

April 27, Community bonding period
Week -3 --- Week -0: Studying the current state of code and experimenting with GTK TreeWidget. I need to become GTK professional to implement liblarch-gtk which should be reliable against bugs in GTK TreeWidget.

May 24, Start coding!
Week 1 --- Week 4: Writing liblarch-gtk from scratch. I use the gained knowledge to create a reliable and robust layer around TreeWidget.

After my exams, working 40 hours per week
Week 5 - Week 6: Polish MainTree. Get rid of GTK and make MainTree simpler.
Week 7: Ensure that FilteredTree enables to filter items (tasks) filter easily

July 12, Midterm evaluation
Week 8 - Week 9: Add support to liblarchs for tags. The code for handling tasks and tags should be almost the same but few differences exists.
Week 10: Overall integration, debugging eventual problems.
Week 11 - Week 12: Documentation and extensive testing to prevent as much bugs as possible.

Why do you think you are be the best person to work on this project?

I applied to GTG during the last Google Summer of Code. However, there were better candidates. I’ve spent the year by observing GTG community, filling few bugs and patches and actively using GTG.

From my technical background, I like coding in python which is a language GTG is written in. I have several smaller scripts available on my Github account . I also like programming GUI applications in PyGTK.

I study on Faculty of Information Technology, Brno University of Technology in Czech Republic. The university gives me formal knowledge about various points of Information Technology and math which could be useful for this project.

What are your past experiences (if any) with the open source world?

I didn’t contribute to any open source project a lot in the past. I filled several bugs and attached few patches (mainly to GTG).

Why are you interested in improving GNOME?

I am everyday user of GNOME for several years. I like the simplicity of GNOME and the style of working with applications in GNOME. Contributing to GTG as GNOME would eliminate at least a little pain in my life and life other users.

Please attach a link to a bug containing a patch you've written.

https://bugs.launchpad.net/gtg/+bug/625708

Izidor Matušov
E-mail: izidor.matusov@gmail.com
IRC: iyonius in gimpnet (#gtg)
Twitter: iyonius
Launchpad account: https://launchpad.net/~izidor