Org-sync

Table of Contents

Name

My name is Aurélien Aptel. I'm a 3rd year Computer-Science student at University Claude Bernard in Lyon, France.

Email address

Aurélien Aptel <aurelien.aptel@gmail.com>

Project

Org-mode – Let Org-mode synchronize with online bug-tracking and todo-list services.

Summary

There's currently no convenient way to manage services like Redmine, Bugzilla or GitHub issue tracking system in Org-mode. Org-mode already handles TODO-list pretty well, but there's no synchronization functionality for TODO-list services such as Toodledo or Google Tasks. The goal of the project is to let Org-mode import and export to these kind of services in a generic way so that new services can be added easily later on.

The possible mentors for this project are Bastien Guerry <bzg@gnu.org> and Nicolas Goaziou <n.goaziou@gmail.com>.

Benefits

Emacs is one of the flagship software of GNU and Org-mode is a major editing mode bundled with Emacs. This project will improve Org-mode and thus Emacs interaction with the outside world. Developers will be able to manipulate their favorite bug-tracking service via Emacs.

Deliverables

The project consists of more than just backends for several services. As there is currently no support for such service, this new import/export feature will require several changes in Org-mode internals, namely the parser.

The parsing module of Org-mode has access to all properties of a document. Some of them are irrelevant to bug-tracker backends and other have to be processed the same way by each backends.

As it happens, the parser is currently being rewritten by Nicolas Goaziou and after discussing with him and other developers of Org-mode, we have come to the conclusion that I should help him finishing the parser, adding things as I need them.

I will then write a library sitting between the parser and the backends that will factor out redundant code and provide helpers for backends.

Finally, once everything is in place writing the actual backends will be a lot easier. I plan to write backends for at least Redmine, Bugzilla, BitBucket, Google Tasks, Google Code and Github.

Documentation will be an integral part of the project and will be written in my code repository.

Plan

I will start by analyzing the different services I will write backends for. I need a clear list of common features that every services shares. Once that list is done I will know how to design my interfaces and what can be factored out.

I will then study the Org-mode codebase and more specifically the parser to identify what parts I will have to use or change.

Then, I will start writing a simple tool that connects to one the services and stores its content to a data structure that can be manipulated by Org-mode.

Subsequently, I will have to identify all useful interactions between an Org-mode buffer and a bug-tracker data structure. These interactions along with the list of common features of bug-trackers will let me design my library.

I know I will be half-way to completion when the parser reach a usable state, when my library has a well-defined API and is being implemented. I will be done when all the backends are implemented and the documentation is complete.

Timeline

I won't be able to work full-time on the project until May 4 because of school engagements.

Before April 23

  • Get familiar with, study and analyze various services. Start writing the list of common usecase and feature.

April 23 to May 22 (official coding period starts)

  • Finish previous list.
  • Write a tool to connect and retrive data off a first service as a starting point.
  • Study Org-mode's new parser (org-element.el) and introduce necessary changes.

May 23 to July 8

  • Design, implement and document library for interfacing Org-mode with backends.

July 9 – Mid-term evaluation

July 9 to August 5

  • Finish library implementation
  • Use library to write all backends

August 6 to August 20

  • Additionnal time for unpredictable delay.
  • Polish code and documentation, help with integration in Org-mode.

Communications

I can be reached via email or irc. I will idle on the Org-mode irc channel during the GSoC. Also, since my mentors are both French-speaker (and living in France) phone calls can be arranged.

As Org-mode already uses git, I plan on using it too. Thus, importing my changes at the end will be straight-forward. I will publish my commits on a public hosting service such as Gitorious so everyone can follow my progress. I will seek assistance when I need it from the irc channel, my mentors and the Org-mode mailing list.

I will report my progress every 2 or 3 days to my mentors and I will probably post to the developer mailing list after each meaningful steps. I have agreed to call my mentor once a week to discuss my progress and the work left.

Qualification

I've already contributed to free software

  • I've added cross-platform "underwave" support to GNU Emacs, hopefully included in future releases. More info and patch here and here.
  • I have a project of my own: a very small terminal emulator with a very small userbase. More info at http://st.suckless.org
  • I have other smaller projects on my bitbucket page.

I'm familiar with parsing techniques

I've had classes on languages theory and automata which involved the implementation of several algorithms such as a recursive descendant parser or the implementation of deterministic and non-deterministic finite state automaton which are commonly used in regex engines and parsers.

I use Emacs every day

  • I read and sometime post on various Emacs mailing lists and I keep up with Emacs-related news on the web.
  • I'm familiar with Lisp-like language. I've implemented a interpreter in C for my own Lisp dialect.
  • I have already got basic Elisp skills and I plan to improve them with this project.
  • I use Org-mode on a daily basis.

Documentation from the http://orgmode.org/worg/ website (either in its HTML format or in its Org format) is licensed under the GNU Free Documentation License version 1.3 or later. The code examples and css stylesheets are licensed under the GNU General Public License v3 or later.