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
Abstract:
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.
Deliverables:
·         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.