Difference between revisions of "GSoC2012"

From GnuCash
Jump to: navigation, search
(GnuCash Expense Tracker Android application)
(Google Summer of Code 2012: Update with more concrete umbrella info)
 
(19 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 
== Google Summer of Code 2012 ==
 
== Google Summer of Code 2012 ==
  
GnuCash applies as a mentoring organization in the [http://www.google-melange.com/gsoc/program/home/google/gsoc2012 2012 Google Summer of Code] (GSoC) program. See our org application here: [[GSoC2012/OrgApplication]]
+
GnuCash applied as a mentoring organization in the [http://www.google-melange.com/gsoc/program/home/google/gsoc2012 2012 Google Summer of Code] (GSoC) program, but was not accepted as an organization by itself.  
  
 
+
However, we have been accepted under the umbrella of Gnome.org, so if you are interested in applying as a student with a GnuCash-related proposal such as the ones shown below, please file your application [http://www.google-melange.com/gsoc/org/google/gsoc2012/gnome there].  For more information about their administration, see their [http://live.gnome.org/SummerOfCode2012 project page].
The following are the proposed ideas from the GnuCash developers for student projects. If you are interested in applying as a student for the Google Summer of Code, first contact the GnuCash developers through the [[Mailing Lists|Mailing List]] <tt>gnucash-devel@gnucash.org</tt> to discuss your ideas, then follow the link above and apply at Google.
 
  
 
== Timeline ==
 
== Timeline ==
The timeline is copied from [http://www.google-melange.com/document/show/gsoc_program/google/gsoc2012/timeline here]:
+
The timeline is copied from [http://www.google-melange.com/gsoc/events/google/gsoc2012 here]:
 
* March 16: List of accepted mentoring organizations published
 
* March 16: List of accepted mentoring organizations published
 
* April 6: Student application deadline.
 
* April 6: Student application deadline.
Line 15: Line 14:
 
== Proposed Projects ==
 
== Proposed Projects ==
  
Here we collect projects which are proposed for students interested in the 2011 GSoC.
+
Here we collect projects which are proposed for students interested in GSoC work.
  
 
Other lists of feature proposals are here:
 
Other lists of feature proposals are here:
* http://gnucash uservoice.com/ , ranked by user's votes
+
* http://gnucash.uservoice.com/ , ranked by user's votes
 
* https://bugzilla.gnome.org/browse.cgi?product=GnuCash , then click on "enhancements" in the middle of the right column
 
* https://bugzilla.gnome.org/browse.cgi?product=GnuCash , then click on "enhancements" in the middle of the right column
  
 
In particular, the GnuCash developers think the following ideas would make good GSoC projects:
 
In particular, the GnuCash developers think the following ideas would make good GSoC projects:
 
=== GnuCash Expense Tracker Android application ===
 
=== GnuCash Expense Tracker Android application ===
-GnuCash is a desktop application. It will make the life of users easier, if they can capture expenses closer to where they incur expenses using a mobile phone. This will be more accurate and save them time when later entering the transactions.
+
GnuCash is a desktop application. It will make the life of users easier, if they can capture expenses closer to where they incur expenses using a mobile phone. This will be more accurate and save them time when later entering the transactions.
 
* Allow users to enter expenses.
 
* Allow users to enter expenses.
 
* Make a selection for each expense as to the mode of payment - cash, credit card, debit/ATM card or check.
 
* Make a selection for each expense as to the mode of payment - cash, credit card, debit/ATM card or check.
Line 29: Line 28:
 
* Mark those entries exported with a flag to avoid duplicate export.
 
* Mark those entries exported with a flag to avoid duplicate export.
  
'''Prerequisites''': Software engineering knowledge; Android SDK, Java, C knowledge to understand GnuCash code.
+
HOWEVER: So far GnuCash is a "normal" C program intended to be used on the PC as a single user. Hence, as a part of this project you would need to come up with a good idea on how to get the data from the Android device into the database of the existing PC-based GnuCash program. Currently the PC-based GnuCash has some data import functions (CSV files, QIF files, or OFX files), but those might not be suitable to a regular repeated import of data from a different device. This aspect needs some serious thoughts during your application phase, so that your project application already contains some viable proposals on how to deal with this issue.
 +
 
 +
'''Prerequisites''': Software engineering knowledge; Android SDK, Java, C knowledge to understand the [[C_API|internal GnuCash C API]].
  
'''You will learn''': You will have the time to evaluate the required and optional fields that need to be populated for importing expenses into GnuCash. You will also learn how to allow users to configure multiple credit cards and bank accounts into the Android application. You will get an insight into GnuCash data model and business logic, while advancing in Java and Android development.
+
'''You will learn''': You will have the time to evaluate the required and optional fields that need to be populated for importing expenses into GnuCash. You will get an insight into GnuCash data model and business logic, while advancing in Java and Android development.
  
 
'''You can achieve''': The result of your project would be an Android application readily used by thousands of users for their personal and business financial transactions.
 
'''You can achieve''': The result of your project would be an Android application readily used by thousands of users for their personal and business financial transactions.
Line 37: Line 38:
 
'''Mentor''': Muslim Chochlov
 
'''Mentor''': Muslim Chochlov
  
=== Data model unit testing ===
+
=== Core libraries unit testing ===
-*** draft *** Many parts of the data and object model of gnucash are not yet well covered by unit tests. Also, this usually means the data model itself isn't well documented. In this task, the student can use GnuCash as a real-life example for software engineering, working his/her way through the architecture and documenting and adding unittests along the way. Unit testing, at least for the core classes that are GObject-based, can be done independent of UML modelling of the class relationships.
+
Many parts of Gnucash's core libraries are not well covered by unit tests. In some cases the programming interface isn't well documented. In this task, the student can use GnuCash as a real-life example for software engineering, working his/her way through the code and documenting and/or adding unit tests. Many of the classes exhibit poor object-oriented design and don't fully or correctly implement the desired [http://en.wikipedia.org/wiki/GObject GObject] framework. This task involves achieving 100% unit test coverage (using [http://developer.gnome.org/glib/2.30/glib-Testing.html GLib Testing]) on functions in one or more compilation units (the number of modules and which ones can be determined by the student based on his/her experience and interests).
  
'''Prerequisites''': Software engineering knowledge; C coding on Linux; probably UML
+
'''Prerequisites''': Software engineering knowledge including basics of unit testing with [http://en.wikipedia.org/wiki/XUnit XUnit] and object-oriented design; you'll need to be fairly proficient in C programming on a Unix platform. You must have enough C knowledge to understand the [[C_API|internal GnuCash C API]].
  
'''You will learn''': You will have the time to evaluate your preferred unittesting framework, or write your own. You will apply this framework to the existing application code of GnuCash, so that the use cases for the tested code sections are always visible as well.  
+
'''You will learn''': Real-life software engineering with legacy code: Refactoring complex functions to get test access to different branches, writing comprehensive unit tests, memory management in a reference-counted (as opposed to garbage collected) environment.
  
'''You can achieve''': You will see how some more fragile parts of GnuCash can be refactored into much better code by using your newly introduced unittests. Eventually new user features will become possible only because your unittests lay the foundation for major architecture changes.
+
'''You can achieve''': You will see how some more fragile parts of GnuCash can be refactored into much better code by using your newly introduced unit tests. Eventually new user features will become possible only because your unit tests lay the foundation for major architecture changes.
  
 
'''Mentor''': John Ralls and others
 
'''Mentor''': John Ralls and others
 +
 +
=== Online Banking integration in Desktop and web browser ===
 +
In certain countries (e.g. Germany), GnuCash is able to fully manage bank accounts through online banking, including sending real money online. This project would integrate those online banking features in the full desktop and browser. Eventually, web sites can offer a "Click here to send donations online", and this will launch gnucash and initiate the online money transfer. See also [[Custom URI Scheme]]
 +
 +
'''Prerequisites''': C coding on Linux; an online bank account with HBCI (in Germany) or OFX DirectConnect (U.S.?) is also a necessary prerequisite in order to test those features
 +
 +
'''You will learn''': Integrating features into today's Linux desktops so that users are happy. This involves setting correct URI protocols, mime types, etc.
 +
 +
'''You can achieve''': GnuCash will then have its own "Donate Now" button, both inside the program and on other websites.
 +
 +
'''Mentor''': tbd
 +
 +
'''What to do next''': Read [http://lists.gnucash.org/pipermail/gnucash-devel/2011-March/031505.html this mailing list reply (if you're in the U.S.)] and follow its instructions. Then, explain your progress on the mailing list and discuss your project ideas in some more detail there.
 +
 +
=== GnuCash Business Integration ===
 +
GnuCash already offers many powerful features for usage in business. However, some of those features are not yet integrated well enough within gnucash, and we would love to see some closer integration of those in the whole of GnuCash. For example, it is probably possible to turn gnucash into a Point-of-Sale (POS) application with only minor changes.
 +
 +
'''Prerequisites''': C coding on Linux; GUI creation in Gtk+; Knowledge about use cases in business (POS or similar), or good communication skills to talk to some of the business users (our "customers") to find out their exact requirements. You must have enough C knowledge to understand the [[C_API|internal GnuCash C API]].
 +
 +
'''You will learn''': Turning customer requirements into C and Gtk+ code so that the customers are happy
 +
 +
'''You can achieve''': GnuCash will then be not only one among many software products, but it will be the one that makes the business users really happy
 +
 +
'''Mentor''': tbd
 +
 +
=== Python reporting and scripting engine ===
 +
 +
Currently, the scripting in gnucash for e.g. report creation is avilable in the rather uncommon language Scheme. We would like to see a more common scripting language such as Python in there. The first steps of its integration are already prepared.
 +
 +
'''Prerequisites''': C coding on Linux; Python coding. You must have enough C knowledge to understand the [[C_API|internal GnuCash C API]].
 +
 +
'''You will learn''': Deciding which features are implemented more efficiently in the C language or better in the Python language; Tying C and Python together really well
 +
 +
'''You can achieve''': Opening a whole lot of new scripting possibilities inside gnucash; Implementing many long-awaited financial reports in the newly integrated Python language
 +
 +
'''Mentor''': tbd
 +
 +
'''What to do next''': Read [http://lists.gnucash.org/pipermail/gnucash-devel/2011-March/031506.html this mailing list reply] and follow its instructions. (Note: Building gnucash with python support requires the <tt>--enable-python</tt> argument to ./configure.) Then, explain your progress on the mailing list and discuss your project ideas in some more detail there.
  
 
=== Others ===
 
=== Others ===
Line 57: Line 96:
 
If you're a student who is interested in any of the ideas above, please perform the following steps:
 
If you're a student who is interested in any of the ideas above, please perform the following steps:
 
* Subscribe to our [[Mailing Lists|mailing list]] <tt>gnucash-devel</tt> and send a message to the list, announcing your interest and starting a discussion on how to work on this project.  The idea is to find out from members if your idea is feasible in the timescales of Google Summer of Code.
 
* Subscribe to our [[Mailing Lists|mailing list]] <tt>gnucash-devel</tt> and send a message to the list, announcing your interest and starting a discussion on how to work on this project.  The idea is to find out from members if your idea is feasible in the timescales of Google Summer of Code.
* You will then need to turn your ideas into a proposal for a project and apply at google for your project. We are proposing the following template for student proposals:  
+
* You will then need to turn your ideas into a proposal for a project and apply at google for your project. We are proposing a template for student proposals as shown below.
 +
 
 +
=== Prerequisites ===
 +
Before you complete the application, you have to get to know the GnuCash source code at least a little bit and accomplish these two tasks:
 +
* You have to [[Building|build GnuCash from source code]] before you complete the application. You have to note the command line commands that you had to use in your application.
 +
* You have to get to know the [[C_API|GnuCash source code]] a little bit. You have to name at least one function inside the GnuCash C code that you are going to use or modify.
 +
 
 +
=== Student Application Template ===
 +
'''Basic Information'''
 +
 
 +
* Student name:
 +
* Location (Home town, state, country):
 +
* School (Name, location, candidate for what degree):
 +
 
 +
'''Contact Information'''
 +
 
 +
* Email:
 +
* Instant messaging contact details (Skype or similar):
 +
* Phone number (our mentors may ask for a few phone conversations, especially in the beginning):
 +
 
 +
'''Background/Programming Information'''
 +
 
 +
* What programming experience do you have so far (languages, operating systems, version control systems)?
 +
* Describe some programming projects you've already undertaken and their outcomes. If possible, include links to commits in public source code repositories:
 +
* You have to build GnuCash from source code before you complete this application. How did you succeed in building from source, i.e. which command line commands did you have to use?
  
Basic Information
+
'''Project Proposal'''
-----------------
 
Student name:
 
Location (Country, state, Home town, state):
 
Email:
 
Instant messaging contact details (Skype or similar):
 
College/University:
 
About yourself (short bio):
 
 
Programming skills
 
------------------
 
What operating systems you are used to work with?
 
 
What is your experience with programming languages (what language/how many years)?
 
 
Are you used to version control systems?
 
 
Any other IT skills that you think might help you with your project.
 
 
Get to know GnuCash
 
-------------------
 
Have you ever built GnuCash from source? Please do so before applying (see
 
http://wiki.gnucash.org/wiki/Building), otherwise your application will not be considered!
 
 
What problems did you encounter during the build process?
 
 
** //TODO Other pop quiz questions about GnuCash
 
  
Project Information
+
* What is your goal?
-------------------
+
* How will that improve GnuCash, or what known GnuCash problems or limitations will it fix?
What project in GnuCash would you like to work on?
+
* How do you intend to accomplish the goal and what obstacles do you anticipate? Be sure to address in some detail what functions you intend to add or modify, how it will integrate with existing code, and how you plan to test your code.
+
* You have to get to know the GnuCash source code before you complete this application. Please name at least one function inside the GnuCash C code that you are going to use or modify.
What will be the result of your project (e.g. "At the end of my project,
 
GnuCash can handle twenty new import and export file formats")?
 
 
What makes you the right person to be selected for this project?
 
 
How do you propose to solve the problem(s) posed in the project you'd like to work on?
 
 
Provide the timeline of how you are going to subdivide the project into tasks (it is not final and could be changed
 
during the GSoC).
 
  
If you're accepted we will also be asking for your proposed username and SSH public key for access to the [[SVN|subversion]] server. If you need assistance with those steps, don't hesitate to ask on the mailing list gnucash-devel as well.
+
=== Source code exchange ===
 +
If you're accepted you will need to open a free account on Github and to clone the Gnucash/gnucash repository. You and your mentor will use this for coordinating your work, and your mentor will pull your code from here and commit it.
  
 
== Previous Years ==
 
== Previous Years ==
  
See [[SoC2007]] and [[SoC2010]] and [[GSoC2011]] for our previous ideas and accepted students who worked on gnucash projects in the GSoC 2007 and 2011. Our 2011 Mentoring [[GSoC2011/OrgApplication| organization application]] was successful.
+
See [[SoC2007]] and [[SoC2010]] and [[GSoC2011]] for our previous ideas and accepted students who worked on gnucash projects in the GSoC 2007 and 2011. Our 2011 Mentoring [[GSoC2011/OrgApplication| organization application]] was successful. Our [[GSoC2012/OrgApplication]] not.

Latest revision as of 13:42, 28 March 2012

Google Summer of Code 2012

GnuCash applied as a mentoring organization in the 2012 Google Summer of Code (GSoC) program, but was not accepted as an organization by itself.

However, we have been accepted under the umbrella of Gnome.org, so if you are interested in applying as a student with a GnuCash-related proposal such as the ones shown below, please file your application there. For more information about their administration, see their project page.

Timeline

The timeline is copied from here:

  • March 16: List of accepted mentoring organizations published
  • April 6: Student application deadline.
  • April 23: Accepted student proposals published
  • May 21 - August 20: Students work on their GSoC projects.

Proposed Projects

Here we collect projects which are proposed for students interested in GSoC work.

Other lists of feature proposals are here:

In particular, the GnuCash developers think the following ideas would make good GSoC projects:

GnuCash Expense Tracker Android application

GnuCash is a desktop application. It will make the life of users easier, if they can capture expenses closer to where they incur expenses using a mobile phone. This will be more accurate and save them time when later entering the transactions.

  • Allow users to enter expenses.
  • Make a selection for each expense as to the mode of payment - cash, credit card, debit/ATM card or check.
  • Allow the expense entries to be exported in QIF/CSV format for import into GnuCash.
  • Mark those entries exported with a flag to avoid duplicate export.

HOWEVER: So far GnuCash is a "normal" C program intended to be used on the PC as a single user. Hence, as a part of this project you would need to come up with a good idea on how to get the data from the Android device into the database of the existing PC-based GnuCash program. Currently the PC-based GnuCash has some data import functions (CSV files, QIF files, or OFX files), but those might not be suitable to a regular repeated import of data from a different device. This aspect needs some serious thoughts during your application phase, so that your project application already contains some viable proposals on how to deal with this issue.

Prerequisites: Software engineering knowledge; Android SDK, Java, C knowledge to understand the internal GnuCash C API.

You will learn: You will have the time to evaluate the required and optional fields that need to be populated for importing expenses into GnuCash. You will get an insight into GnuCash data model and business logic, while advancing in Java and Android development.

You can achieve: The result of your project would be an Android application readily used by thousands of users for their personal and business financial transactions.

Mentor: Muslim Chochlov

Core libraries unit testing

Many parts of Gnucash's core libraries are not well covered by unit tests. In some cases the programming interface isn't well documented. In this task, the student can use GnuCash as a real-life example for software engineering, working his/her way through the code and documenting and/or adding unit tests. Many of the classes exhibit poor object-oriented design and don't fully or correctly implement the desired GObject framework. This task involves achieving 100% unit test coverage (using GLib Testing) on functions in one or more compilation units (the number of modules and which ones can be determined by the student based on his/her experience and interests).

Prerequisites: Software engineering knowledge including basics of unit testing with XUnit and object-oriented design; you'll need to be fairly proficient in C programming on a Unix platform. You must have enough C knowledge to understand the internal GnuCash C API.

You will learn: Real-life software engineering with legacy code: Refactoring complex functions to get test access to different branches, writing comprehensive unit tests, memory management in a reference-counted (as opposed to garbage collected) environment.

You can achieve: You will see how some more fragile parts of GnuCash can be refactored into much better code by using your newly introduced unit tests. Eventually new user features will become possible only because your unit tests lay the foundation for major architecture changes.

Mentor: John Ralls and others

Online Banking integration in Desktop and web browser

In certain countries (e.g. Germany), GnuCash is able to fully manage bank accounts through online banking, including sending real money online. This project would integrate those online banking features in the full desktop and browser. Eventually, web sites can offer a "Click here to send donations online", and this will launch gnucash and initiate the online money transfer. See also Custom URI Scheme

Prerequisites: C coding on Linux; an online bank account with HBCI (in Germany) or OFX DirectConnect (U.S.?) is also a necessary prerequisite in order to test those features

You will learn: Integrating features into today's Linux desktops so that users are happy. This involves setting correct URI protocols, mime types, etc.

You can achieve: GnuCash will then have its own "Donate Now" button, both inside the program and on other websites.

Mentor: tbd

What to do next: Read this mailing list reply (if you're in the U.S.) and follow its instructions. Then, explain your progress on the mailing list and discuss your project ideas in some more detail there.

GnuCash Business Integration

GnuCash already offers many powerful features for usage in business. However, some of those features are not yet integrated well enough within gnucash, and we would love to see some closer integration of those in the whole of GnuCash. For example, it is probably possible to turn gnucash into a Point-of-Sale (POS) application with only minor changes.

Prerequisites: C coding on Linux; GUI creation in Gtk+; Knowledge about use cases in business (POS or similar), or good communication skills to talk to some of the business users (our "customers") to find out their exact requirements. You must have enough C knowledge to understand the internal GnuCash C API.

You will learn: Turning customer requirements into C and Gtk+ code so that the customers are happy

You can achieve: GnuCash will then be not only one among many software products, but it will be the one that makes the business users really happy

Mentor: tbd

Python reporting and scripting engine

Currently, the scripting in gnucash for e.g. report creation is avilable in the rather uncommon language Scheme. We would like to see a more common scripting language such as Python in there. The first steps of its integration are already prepared.

Prerequisites: C coding on Linux; Python coding. You must have enough C knowledge to understand the internal GnuCash C API.

You will learn: Deciding which features are implemented more efficiently in the C language or better in the Python language; Tying C and Python together really well

You can achieve: Opening a whole lot of new scripting possibilities inside gnucash; Implementing many long-awaited financial reports in the newly integrated Python language

Mentor: tbd

What to do next: Read this mailing list reply and follow its instructions. (Note: Building gnucash with python support requires the --enable-python argument to ./configure.) Then, explain your progress on the mailing list and discuss your project ideas in some more detail there.

Others

If you have other ideas yourself, do not hesitate to propose them on the gnucash-devel mailing list. We have several mentors available which could mentor projects proposed by yourself as well.

However, first please read this mailing list reply and follow its instructions. Then, explain your progress on the mailing list and discuss your project ideas in some more detail there. Announce your idea on the list, and you will quickly receive some feedback on whether this sounds like a viable project within GSoC or not. We are looking for your ideas.

Student Participants Application

If you're a student who is interested in any of the ideas above, please perform the following steps:

  • Subscribe to our mailing list gnucash-devel and send a message to the list, announcing your interest and starting a discussion on how to work on this project. The idea is to find out from members if your idea is feasible in the timescales of Google Summer of Code.
  • You will then need to turn your ideas into a proposal for a project and apply at google for your project. We are proposing a template for student proposals as shown below.

Prerequisites

Before you complete the application, you have to get to know the GnuCash source code at least a little bit and accomplish these two tasks:

  • You have to build GnuCash from source code before you complete the application. You have to note the command line commands that you had to use in your application.
  • You have to get to know the GnuCash source code a little bit. You have to name at least one function inside the GnuCash C code that you are going to use or modify.

Student Application Template

Basic Information

  • Student name:
  • Location (Home town, state, country):
  • School (Name, location, candidate for what degree):

Contact Information

  • Email:
  • Instant messaging contact details (Skype or similar):
  • Phone number (our mentors may ask for a few phone conversations, especially in the beginning):

Background/Programming Information

  • What programming experience do you have so far (languages, operating systems, version control systems)?
  • Describe some programming projects you've already undertaken and their outcomes. If possible, include links to commits in public source code repositories:
  • You have to build GnuCash from source code before you complete this application. How did you succeed in building from source, i.e. which command line commands did you have to use?

Project Proposal

  • What is your goal?
  • How will that improve GnuCash, or what known GnuCash problems or limitations will it fix?
  • How do you intend to accomplish the goal and what obstacles do you anticipate? Be sure to address in some detail what functions you intend to add or modify, how it will integrate with existing code, and how you plan to test your code.
  • You have to get to know the GnuCash source code before you complete this application. Please name at least one function inside the GnuCash C code that you are going to use or modify.

Source code exchange

If you're accepted you will need to open a free account on Github and to clone the Gnucash/gnucash repository. You and your mentor will use this for coordinating your work, and your mentor will pull your code from here and commit it.

Previous Years

See SoC2007 and SoC2010 and GSoC2011 for our previous ideas and accepted students who worked on gnucash projects in the GSoC 2007 and 2011. Our 2011 Mentoring organization application was successful. Our GSoC2012/OrgApplication not.