Tuesday, May 10, 2011

GSoC and Me

This was the first year I had applied to the internship program by Google, the Google Summer of Code. Its 2011 edition had quite a few interesting open source softwares as mentor organizations. Apart from the usual heavyweights like Wordpress, Drupal and the likes, one which caught my eye was a personal finance management software GnuCash. It has some pretty cool features like getting stock prices automatically updated, creating reports and budgets, importing files from other financial softwares etc. It also makes the accounting process a more transparent one since the user has to enter where the money is moving to and from where ( else you would have a very conspicuous ‘Imbalance’ Account).

GnuCash was the only organization I applied to with the proposal of developing an RSS feed reader within the GnuCash window where the user can track how his stocks are performing, how the competitor shares are performing and expert advice from financial newspapers etc. My proposal, however was not accepted :( Nevertheless, my work at GnuCash including fixing bugs, building from source, playing around with the code and editing glade files has got me really interested in Open Source Software development. You definitely feel really good when you see your first patch committed.

I have attached my GSoC proposal lest Google should remove the proposals from their page.

Title: Live news feed from financial newspapers as a GnuCash plugin


GnuCash is a multi-platform account management software. It has a number of features including adding accounts for equities you have invested in. However apart from stock prices updates, there is no plugin in GnuCash which gathers live news feed from financial newspapers and brings it to the user without him/her having to open a browser and scan sites to see how his portfolio is performing, stock news, news about the companies invested in and feeds from blogs of stock market experts. The plugin I wish to implement works like an RSS reader and allows users to track any information (available on the internet) related to the stocks he has invested in. The user can view the entire original web page, by clicking on the summary which acts like a link and opens in a browser. This plugin would be a step towards making the GnuCash software a more internet based one.

Benefit to the users:

While GnuCash gives a platform for users to keep a record of their equities and keep track of stock price updates automatically, it is better to provide a more personalized approach with respect to "HOW" or "WHY" the stock price actually changed and this plugin comes into play scanning financial news feeds and bringing the news right into the window of GnuCash.
I felt the need for this because I usually open my browser for financial news in sites like www.economictimes.com to know about the latest developments in the companies I have invested in. This plugin would bring this relevant information in GnuCash without having to go elsewhere.
Moreover, the support for gtkmm widgets is relatively new and the documentation for it is still in the nascent state. I wish to improve this documentation and develop plugin support using this technology, thereby encouraging a larger pool of developers to develop quality plugins using it. I feel GnuCash has not yet tapped into this area and if done so, it would greatly increase the functionality of GnuCash.

Project Details:

GnuCash has a lot of features including accounting for equities and shares. GnuCash allows the user to select automatic updation of stock quotes through the Price Editor. However, any change in these quotes, big or small, will definetely have the user asking for more information like for example, the reasons for these changes, how is the market performing in general, how are competitior shares performing etc. And for this, the user will have to open his browser and views news from finance newspapers and advice from stock market experts. This is why I thought of creating a plugin which functions like an RSS feed in the GnuCash window itself and scans financial news and other stock news and expert advice from newspapers and other sources selected by the user beforehand. Thus, a personalised live news feed is available to the user in GnuCash itself.
Possible implementation methods available are:
·         A webkit window which loads an HTML page with embedded javascript which is saved in the gnucash's installation path.
·         Using C code to implement gtk widgets
·         Using C++ code to implement gtkmm widgets
·         Using Scheme to write a plugin

I have seen and tweaked around the existing support for the first three technologies in GnuCash.

I have looked into some plugins developed using gtk and also the webkit rendering done for the reports in GnuCash. I have narrowed my choice of implementation down to 2 methods -

- Webkit window using html and javascript
- gtkmm widgets.

Support for gtkmm widgets is a relatively new functionality. However, I feel gtkmm is the implementation method I would choose because of the functionality it provides and the ability to mix C code if necessary. It can also be easily integrated in the codebase of GnuCash.

Currently, I am developing some test menu plugins similar to the bi_import plugin and have familiarized myself with how the UI and backend code can be implemented. These plugins can live in src/plugins/ . They will be included under Tools in the menu toolbar. On clicking, the action in the ui.xml file will be called. I am working on different actions that a plugin can perform.

Also with respect to GnuCash functionality and working, I am going through a couple of existing minor priority bugs and getting more familiar with the source code.


·         A plugin wherein the user gets personalized live news feed from financial newspapers and other sources.
·         The plugin will have the following features:
  The RSS Feed tab in the Edit>Preferences window will show the feeds subscribed to under the folders the user has created in a tree view form. For example, if the user has created a folder called Blogs, the blogs subscribed to by the user will be displayed under it. So is the case with a folder called Financial Newspapers. I have created a Mockup by editing the preferences window in src/gnome-utils/preferences.glade file using the Glade Interface Designer.
      Buttons on the left will open up another window. For example, the add button will open a window where the user can add feed urls. (mockup)
  Edit and delete the feed urls and organize the feed urls into specific folders.
   GnuCash Feed window displaying the summary of the link in the feed. This will be under Tools>RSS Feeds. If a user wants to see a more detailed report, the user can click on the title which acts as a link to see the complete web page through a browser.

If time permits, I plan to include some of these functionalities described below. I intend to implement some of these ideas after the GSoC as an ongoing effort to improve the plugin functionality:

·         Support for APML – Attention Profiling Mark up language
 APML is an open standard (in APML.xml) that encapsulates our interest through our feed urls in an open standard way. Having this information, we can use it to communicate or choose proper feeds, enable/ disable feed based on our attention value.
·         Offline availability of feed content and better organization of feed urls
Based on user input, the plugin chooses how much data (in terms of MB) should be cached for future offline reading and for how long. Also based on this information, we can suggest to users to delete feed urls that do not have updates for a threshold time, which can again be set by the user itself.
·         User can remove specific news feed based on keywords.
Sometimes, newsfeeds from a particular feed URL can be overwhelming and users might want to restrict the newsfeed by choosing only topics within a particular feed that they are interested in. This seems to be a challenging idea, but after implementing the current functionality of the plugin, I could decide on the feasibility of this feature. We can also make use of the APML profile to automatically enable/disable news items from news feed. 

Project Schedule:

Before 23 May
·         Study in detail the Glib library, and implementation of widgets and integration of plugins with the codebase of GnuCash
·         Develop test plugins using the above mentioned implementation methods.
·         Bond with development community and ask for suggestions and feedback on the test plugins developed
·         Work on the UI and back end design of the plugin

23 May – 11 June
·         Develop the code to display the GnuCash Feed window for displaying the RSS feeds within gnucash.
·         Develop the menu for the plugin and other UI related work.
·         Modify the makefile for including the plugin in the building and configuration step.

12 June – 11 July
·         Develop the RSS Feeds tab under Edit>Preferences for viewing and adding feeds.
·         Develop code to allow users to create folders for related feed urls.
·         Develop the Add dialog box and Edit dialog box for the plugin.
·         Document the code using doxygen.

12 July – 15 July
Mid Term Evaluation

13 July – 9 August
·         Develop the code to display the URLs within the GnuCash Feed Window and show a short summary of the link.
·         Work on the rendering of the web pages and other intricate user design details, by taking advice from mentors and other developers.

     10 August- 22August
·         Complete the documentation and test for bugs.
·         Write up a developer documentation manual that would help other developers to build plugins for GnuCash easily.
·         Buffer time for any unforeseen delays.

Bio/Programming Experience:

I am undergraduate student studying Computer Science and Engineering in NITK Surathkal, India.

I have built GnuCash from source. Using svn, I checked out the source on my linux system. I have built other softwares from source and am very comfortable with svn commands and creating patches.

C and C++ are my favourite languages and have coded almost all my projects using these languages for the past 4 years. In Grade 12, I created an air travel management software using C++ (graphics included) with a friend of mine as a course project. As part of my course work in my fourth semester, I am currently working on developing the popular game, Tetris. It uses the C++ graphics library, OpenGL.

I am also very good at web development and have a strong command over HTML, PHP, MySQL and JavaScript. I am a part of the Web Club at NITK and I have created many websites. Notable ones among them include the website for the Student Union of my college (NITK) which is currently hosted on a free server for development purposes. We are in the final phase, just fixing a few bugs and filling content. It should be moved to the NITK server by the end of April. It will have the details of all students of the college on its database and in the near future, we intend to include sms feature and fees payment through it. I have also lent a helping hand to the development of the site for Eforea, the Entrepreneurship cell of NITK which was made using Joomla. I have also created a basic test Facebook application using HTML and JavaScript and I intend to make more advanced apps using the Graph Protocol and Facebook API.

I am also good at assembly level programming. We are currently learning Microprocessor and Interfacing (Intel 8086 microprocessor) using TASM (Turbo Assembler). As part of this course, I am currently working on developing a speed sensor to detect speed of cars on highways. It uses 2 piezoelectric sensors to detect the entry and exit of cars on a particular strip of road of known length. The time is calculated using a timer and the speed is thus calculated and displayed on seven segment display board.

I am an avid fan of the Linux operating system and a user of Ubuntu for the past 2 years. I have experience in Windows as well. However for this project I will be using linux for development purposes. I have good experience using the gcc compiler, the Gnu Debugger and doxygen for development, testing and documentation.  

Moreover, apart from programming, I am very interested in finance and keep a constant watch on the stock market. I have appeared for and passed India's National stock Exchange (NSE) certified financial module, “Financial Markets”.

Why GnuCash?

GnuCash is a finance management software that has helped me get a better understanding of the world of finance. I have been using it for some time and I am proud to say that GnuCash has definitely helped me be moneywise keeping track of my finances.  When I came to know that it was selected for GsoC 2011, I really wanted to be a part of the project. In fact, this is the only proposal I have sent for this year's edition of GSoC.

I believe that coding for open source communities is something that would require skill and diligence from my part and I am very passionate about this. GnuCash is a very good desktop application for managing finance. I would like to add more functionality that makes it more internet based and the RSS feeds plugin is a first step.

I hope to be a part of the GnuCash team during GSoC, and post-GSoC, and would love to see my code being shipped as part of a release in the near future. Apart from my love for programming, my interests in finance and being a part of the developer community of a software I regularly use, have triggered me to contribute to this project.

No comments:

Post a Comment