Difference between revisions of "GSoC2011"

From GnuCash
Jump to: navigation, search
(Student Participants Application)
(Add summary of GSoC 2011 Cutecash project)
 
(19 intermediate revisions by one other user not shown)
Line 1: Line 1:
= Google Summer of Code 2011 =
+
== Google Summer of Code 2011 ==
  
GnuCash will apply as a mentoring organization to the [http://www.google-melange.com/gsoc/program/home/google/gsoc2011 2011 Google Summer of Code] (GSoC).  The following are the proposed ideas from the GnuCash developers for student projects.  If you are interested in applying to the Google Summer of Code, follow the link to google and apply.
+
GnuCash participates as a mentoring organization in the [http://www.google-melange.com/gsoc/program/home/google/gsoc2011 2011 Google Summer of Code] (GSoC) program.  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.
 
 
See [[SoC2007]] and [[SoC2010]] for our previous ideas and accepted students who worked on gnucash projects in the GSoC 2007.
 
  
 
== Timeline ==
 
== Timeline ==
See http://google-opensource.blogspot.com/2011/02/mentoring-organization-applications-now.html . The timeline as copied from [http://www.google-melange.com/document/show/gsoc_program/google/gsoc2011/timeline here]:
+
The timeline as copied from [http://www.google-melange.com/document/show/gsoc_program/google/gsoc2011/timeline here]:
* March 11: Mentoring [[GSoC2011/OrgApplication| organization application]] deadline.
 
 
* March 18: List of accepted mentoring organizations published
 
* March 18: List of accepted mentoring organizations published
 
* April 8: Student application deadline.
 
* April 8: Student application deadline.
Line 13: Line 10:
 
* May 23 - August 22: Students work on their GSoC projects.
 
* May 23 - August 22: Students work on their GSoC projects.
  
== Proposed Projects 2010 ==
+
== Proposed Projects ==
  
Here we collect projects which are proposed for students interested in the 2010 GSoC.
+
Here we collect projects which are proposed for students interested in the 2011 GSoC.
  
Other lists of proposed features are here:
+
Other lists of feature proposals are here:
* http://gnucash.uservoice.com/
+
* 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
* [[Wishlist]]
 
  
=== Migrate Reports into HTML templates ===
+
In particular, the GnuCash developers think the following ideas would make good GSoC projects:
 +
 
 +
=== Data model unit testing ===
 +
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.
 +
 
 +
'''Prerequisites''': Software engineering knowledge; C coding on Linux; probably UML
 +
 
 +
'''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 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.
 +
 
 +
'''Mentor''': John Ralls and others
 +
 
 +
=== 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 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
  
?????? Currently, almost all reports in gnucash are generated from files in a scripting language (here: Scheme) which writes HTML to the output.  As a result, it is rather difficult to change the resulting HTML into custom requirements.  As a new alternative, the "eguile" generator will use a HTML template with integrated scheme statements as input, and generate the HTML output from there. This is similar to PHP scripts on a webserver, which seem to fit well this kind of applications.
+
'''Mentor''': Geert Janssens and others
  
This project would try to migrate as many reports as possible from the old, script-driven approach, to the new, eguile-generator approach.  Along the way, parts which are still missing might be discovered, and those will have to be implemented as well. On the other hand at least one eguile-Report is already existing, so most of the infrastructure is probably already finished.
+
=== Python reporting and scripting engine ===
  
* '''Student:'''
+
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.
* '''Mentor:''' [[User:Jsled|jsled]]
+
 
* '''Backup mentor:'''
+
'''Prerequisites''': C coding on Linux; Python coding
 +
 
 +
'''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''': Christian Stimming and others
 +
 
 +
'''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.
  
 
=== [[Cutecash]]: An alternative GUI ===
 
=== [[Cutecash]]: An alternative GUI ===
  
???????? Recently, an experiment was started to re-write the GUI with a different language and toolkit: C++, Qt4, CMake. Can be developed either on Linux/gcc or on Windows/mingw or maybe even Windows MS Visual Studio. See [[Cutecash]] for the vision of that project and on how to get involved.
+
Recently, an experiment was started to re-write the GUI with a different language and toolkit: C++, Qt4, CMake. Can be developed either on Linux/gcc or on Windows/mingw or maybe even Windows MS Visual Studio. See [[Cutecash]] for the vision of that project and on how to get involved.
 +
 
 +
'''Prerequisites''': C coding on Linux or Windows (mingw or Visual Studio)
 +
 
 +
'''You will learn''': You will have the time to get to know the Qt C++ GUI toolkit, but this is rather easy to learn.
 +
 
 +
'''You can achieve''': You can pick the most exiting GUI features and implement those first. Then, you will need to listen to the user's priorities to hear which features are now efficiently possible because of the new toolkit, and implement those.
 +
 
 +
'''Mentor''': Christian Stimming and others
  
* '''Student:'''
+
'''What to do next''': Read [http://lists.gnucash.org/pipermail/gnucash-devel/2011-March/031503.html 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.
* '''Mentor:''' [[User:Cstim|Cstim]]
 
* '''Backup Mentor:'''
 
  
=== Delimited file importer ===
+
=== 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]]
  
???????? (copied from 2007, still relevant) A ''CSV importer'' is the more direct way to say this, but general delimited file support would be best; think of the "Import text file" dialog in Gnumeric, and in fact try to leverage that same code, if possible. Supporting the core transaction profile is a good start, but "extended" import options (Invoices, time-spent, &c.) would be nice too.
+
'''Prerequisites''': C coding on Linux; an online bank account with HBCI (in Germany) or OFX DirectConnect (U.S.?) is also a recommended prerequisite in order to test those features
  
There exists already a wizard-like GUI for accomplishing this task, but it is not yet finished and works only in very easy cases. The student working on this task can use the existing code as a starting point, which means there will already be some features to demonstrate and test. Eventually this feature should work with all sorts of CSV input files and extract the right portions of data, while communicating with the user in a reasonable way about the part of the data which cannot be recognized and imported. Ideally, each required decision should have a reasonably guessed suggestion, and additionally there should be a "preview" of what the user's decision will result in.
+
'''You will learn''': Integrating features into today's Linux desktops so that users are happy. This involves setting correct URI protocols, mime types, etc.
  
* '''Student:'''
+
'''You can achieve''': GnuCash will then have its own "Donate Now" button, both inside the program and on other websites.
* '''Mentor:'''
 
** [[User:Cstim|Cstim]] willing
 
* '''Backup mentor:'''
 
  
=== Register Rewrite ===
+
'''Mentor''': Christian Stimming, or Manfred Usselmann, and others
  
?????? (copied from 2007, still relevant) Finish the re-write of the GnuCash register to use the GtkTreeView. Make sure all the interfaces that use the Register (Transaction Register, SX Register, Invoice Register) can use the new UI.
+
'''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.
  
* '''Student:'''
+
=== Others ===
* '''Mentor:''' ?
+
If you have other ideas yourself, do not hesitate to propose them on the <tt>gnucash-devel</tt> [[Mailing Lists|mailing list]]. We have several mentors available which could mentor projects proposed by yourself as well.
* '''Backup Mentor:'''
+
 
 +
However, first please read [http://lists.gnucash.org/pipermail/gnucash-devel/2011-March/031503.html 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 ==
 
== Student Participants Application ==
Line 68: Line 97:
 
  -----------------
 
  -----------------
 
  Student name:
 
  Student name:
  Location (Home town, state, country):
+
  Location (Country, state, Home town, state):
+
  Email:
Contact Information
 
-------------------
 
  Email:  
 
 
  Instant messaging contact details (Skype or similar):
 
  Instant messaging contact details (Skype or similar):
Phone number (our mentors will ask for a few phone conversations, especially in the beginning):
 
 
   
 
   
 
  Background/Programming Information
 
  Background/Programming Information
  -----------------------------------
+
  ----------------------------------
  What programming experience do you have so far?
+
Have you ever built GnuCash from source? Please do so before applying (see
Have you worked on programming project(s) before, and which one(s)?
+
http://wiki.gnucash.org/wiki/Building), otherwise your application will not be considered!
 +
 +
  What programming experience do you have so far (languages, operating systems, compilers)?
 +
 
  What project in GnuCash would you like to work on?
 
  What project in GnuCash would you like to work on?
 +
 +
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")?
 +
 
  How do you propose to solve the problem(s) posed in the project you'd like to work on?
 
  How do you propose to solve the problem(s) posed in the project you'd like to work on?
Have you ever built an open source package from source?
 
Have you ever built GnuCash from source?
 
  
 
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.
 
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.
 +
 +
 +
== Student Summaries ==
 +
Here are the brief summaries of selected students who worked on their projects in 2011.
 +
 +
=== Cutecash ===
 +
 +
A new user interface for Gnucash core using Qt/C++ was started by one of the Gnucash developers in 2010. [1] The idea is to create a lightweight user friendly UI, reusing the backend core API of Gnucash. During the project, I created a widget to allow a user to add two split transaction to/from different accounts. After that I worked on adding an overview widget showing a list of recent transactions entered. It consists of two report views containing income and expense. This view also called as First Person Overview provides an easy to browse list of transactions. The idea is to integrate common handy features with these views. The present view lists four entries for each transaction: date of the transaction, transaction description, split account name and split amount. Each of the entries are inside their own QWidget, so as to allow interactive features to be coded on each of the entries.
 +
 +
The already existing code had some C++ wrappers to convert the return values of C functions to Qt data types. I made use of them whenever possible. And at some parts of the code I used the C functions directly where it made things easier for me. The FPO consists of one or more viewlets. A viewlet is nothing but a list of transactions, a slightly minified version of General Journal, to easily browse transactions sorted by date. The viewlet generator function works such that there is no date entry or account name entry, if it is the same as the previous (above) one. This information is then used by ViewletView to generate the UI part. To make the views visually appealing and readable, QStyleSheets are used which distinguishes the various types of entries in the viewlet.
 +
 +
Overall, it was a rewarding experience, I learned a lot of new things, common pitfalls, handy tips and tricks, and a better understanding of the Gnucash core API . The project was observed only by myself and my mentor. During the course I also generated windows builds for two of my friends who were interested to have a look at the features implemented. I received positive feedback from them and couple of feature requests from them. Working on this project within GSoC was a rewarding experience. I thank my mentor Christian Stimming for guiding me along and giving very helpful advices and hints during the summer. I definitely would like to continue contributing to Gnucash community in future.
 +
 +
[1] http://wiki.gnucash.org/wiki/Cutecash
 +
 +
Nitish
 +
 +
 +
== Previous Years ==
 +
 +
See [[SoC2007]] and [[SoC2010]] for our previous ideas and accepted students who worked on gnucash projects in the GSoC 2007. Our 2011 Mentoring [[GSoC2011/OrgApplication| organization application]] was successful.

Latest revision as of 18:28, 26 August 2011

Google Summer of Code 2011

GnuCash participates as a mentoring organization in the 2011 Google Summer of Code (GSoC) program. 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 List gnucash-devel@gnucash.org to discuss your ideas, then follow the link above and apply at Google.

Timeline

The timeline as copied from here:

  • March 18: List of accepted mentoring organizations published
  • April 8: Student application deadline.
  • April 25: Accepted student proposals published
  • May 23 - August 22: Students work on their GSoC projects.

Proposed Projects

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

Other lists of feature proposals are here:

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

Data model unit testing

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.

Prerequisites: Software engineering knowledge; C coding on Linux; probably UML

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 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.

Mentor: John Ralls and others

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 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: Geert Janssens and others

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 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: Christian Stimming and others

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.

Cutecash: An alternative GUI

Recently, an experiment was started to re-write the GUI with a different language and toolkit: C++, Qt4, CMake. Can be developed either on Linux/gcc or on Windows/mingw or maybe even Windows MS Visual Studio. See Cutecash for the vision of that project and on how to get involved.

Prerequisites: C coding on Linux or Windows (mingw or Visual Studio)

You will learn: You will have the time to get to know the Qt C++ GUI toolkit, but this is rather easy to learn.

You can achieve: You can pick the most exiting GUI features and implement those first. Then, you will need to listen to the user's priorities to hear which features are now efficiently possible because of the new toolkit, and implement those.

Mentor: Christian Stimming and others

What to do next: 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.

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 recommended 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: Christian Stimming, or Manfred Usselmann, and others

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.

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 the following template for student proposals:
Basic Information
-----------------
Student name:
Location (Country, state, Home town, state):
Email:
Instant messaging contact details (Skype or similar):

Background/Programming Information
----------------------------------
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 programming experience do you have so far (languages, operating systems, compilers)?

What project in GnuCash would you like to work on?

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")?

How do you propose to solve the problem(s) posed in the project you'd like to work on?

If you're accepted we will also be asking for your proposed username and SSH public key for access to the subversion server. If you need assistance with those steps, don't hesitate to ask on the mailing list gnucash-devel as well.


Student Summaries

Here are the brief summaries of selected students who worked on their projects in 2011.

Cutecash

A new user interface for Gnucash core using Qt/C++ was started by one of the Gnucash developers in 2010. [1] The idea is to create a lightweight user friendly UI, reusing the backend core API of Gnucash. During the project, I created a widget to allow a user to add two split transaction to/from different accounts. After that I worked on adding an overview widget showing a list of recent transactions entered. It consists of two report views containing income and expense. This view also called as First Person Overview provides an easy to browse list of transactions. The idea is to integrate common handy features with these views. The present view lists four entries for each transaction: date of the transaction, transaction description, split account name and split amount. Each of the entries are inside their own QWidget, so as to allow interactive features to be coded on each of the entries.

The already existing code had some C++ wrappers to convert the return values of C functions to Qt data types. I made use of them whenever possible. And at some parts of the code I used the C functions directly where it made things easier for me. The FPO consists of one or more viewlets. A viewlet is nothing but a list of transactions, a slightly minified version of General Journal, to easily browse transactions sorted by date. The viewlet generator function works such that there is no date entry or account name entry, if it is the same as the previous (above) one. This information is then used by ViewletView to generate the UI part. To make the views visually appealing and readable, QStyleSheets are used which distinguishes the various types of entries in the viewlet.

Overall, it was a rewarding experience, I learned a lot of new things, common pitfalls, handy tips and tricks, and a better understanding of the Gnucash core API . The project was observed only by myself and my mentor. During the course I also generated windows builds for two of my friends who were interested to have a look at the features implemented. I received positive feedback from them and couple of feature requests from them. Working on this project within GSoC was a rewarding experience. I thank my mentor Christian Stimming for guiding me along and giving very helpful advices and hints during the summer. I definitely would like to continue contributing to Gnucash community in future.

[1] http://wiki.gnucash.org/wiki/Cutecash

Nitish


Previous Years

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