GSoC/2010/Ideas: Difference between revisions

From KDE Community Wiki
< GSoC‎ | 2010
(Created page with '== Guidelines == ===Information for Students=== These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposa...')
 
m (added category: mentoring)
 
(174 intermediate revisions by 59 users not shown)
Line 1: Line 1:
== Guidelines ==
[[Category:Mentoring]]
===Information for Students===
== Guidelines ==
 
=== Information for Students ===


These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.  
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.  


Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. Simply copying and pasting an idea here will not work. On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.
Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. Simply copying and pasting an idea here will not work. On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.
 
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!
 
If there is no specific contact given you can ask questions on the general KDE development list [email protected]. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.  


When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!
=== Adding a Proposal ===


If there is no specific contact given you can ask questions on the general KDE development list [email protected]. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.
When adding an idea to this section, please try to include the following data:  


===Adding a Proposal===
:*if the application is not widely known, a description of what it does and where its code lives  
When adding an idea to this section, please try to include the following data:
:*a brief explanation  
:* if the application is not widely known, a description of what it does and where its code lives
:*the expected results  
:* a brief explanation
:*pre-requisites for working on your project  
:* the expected results
:*if applicable, links to more information or discussions  
:* pre-requisites for working on your project
:*mailing list or IRC channel for your application/library/module  
:* if applicable, links to more information or discussions
:*your name and email address for contact (if you're willing to be a mentor)
:* mailing list or IRC channel for your application/library/module
:* your name and email address for contact (if you're willing to be a mentor)


If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.


==Ideas==
== Ideas ==
===Plasma===
 
[http://plasma.kde.org Website] - [https://mail.kde.org/mailman/listinfo/panel-dev Mailing list] - IRC channel: #plasma on Freenode.
=== Amarok  ===
 
Amarok is a powerful KDE based music player for Linux and Unix, MacOS X and Windows with an intuitive interface. It makes playing the music you love and discovering new music easier than ever before - and it looks good doing it!
 
<br> [http://amarok.kde.org Website] - [https://mail.kde.org/mailman/listinfo/amarok Mailing list] - IRC channel: #amarok on Freenode.  
 
==== Project: Playdar integration  ====
 
'''Brief explanation:''' Integrate playdar into Amarok, both as a collection backend, and as a searchable/playable context applet.
 
'''Expected results:''' Playdar is a new "music content resolver" service (http://www.playdar.org/), started by RJ of Last.Fm fame. Its task is to find how to play any song that it is given, using a number of pluggable backends. Please see the website for more information, as well as http://www.playgrub.com/ for an app example. By integrating playdar into Amarok, you will allow users to explore and play tracks from any of the resolvers that playdar has available. Imagine dynamic playlists that can pull tracks from mp3tunes, amazon full track previews, napster, soundcloud, local LAN computers, and more. Imagine browsing the local network and seeing what tracks are seamlessly available for you to play and organize. An implementation would both supply a collection backend, for browsing, and a context applet, for doing a simple search in the context view.
 
There would be some work required also on the playdar side of things---although it is planned to support browsing collections, it is not implemented yet. Playdar is written in Erlang, so this is also a perfect opportunity to get your feet wet doing functional programming.
 
'''Knowledge Prerequisite:''' Knowledge of C++ and Qt is a requirement. Knowledge of Erlang a plus, but pretty rare. Enthusiasm for trying new things and pushing the future of social music forward a requirement.
 
'''Mentor:''' Leo Franchi &lt;[email protected]&gt; or another Amarok developer.
 
==== Project: Dynamic Playlists Overhaul  ====
 
'''Brief explanation:''' Throw out the old dynamic playlist code, and integrate existing backend code for generating user-specified dynamic playlists as well as design a smashing new intuitive UI for controlling them.
 
'''Detailed explanation:''' The current dynamic playlist system is merely decent at best. It fails a lot of expected use-cases, and the UI misleads the user by lying about what it can do. There is already a new advanced playlist generation framework designed by a developer (Soren Harward) that is sitting in a git branch, ready to be merged. However, the UI is severly lacking, and needs to be redesigned. Designing the UI for such a complex piece of functionality will be a significant UI design / HCI challenge, and the main thrust of this project. While there are some mockups already available, most of the design will need to be drawn up by the student.
 
'''Knowledge Prerequisite:''' Knowledge of C++ and Qt is a requirement. Interest in usability and HCI a plus. Interest in UI design is also important.
 
'''Mentor:''' Leo Franchi &lt;[email protected]&gt; or another Amarok developer.
 
==== Project: On the Fly Transcoding  ====
 
'''Brief explanation:''' Allow media to be seamlessly transcoded to another format whenever it is copied from one collection to another.
 
'''Expected results:''' Amaroks concept of collections allows media to be easily moved and copied around. In many cases however, the format you want in one collection is not the same as you might want it to be in when copying it to another collection. A common example is having your entire local collection in lossless FLAC, but wanting to copy songs to a mobile device that only supports mp3 (or even if the device supports open formats, you might want to transcode it to ogg to save space). On completion of this project, an option to enable transcodeing should be integrated into the "Move/Copy to collection" flow in a way that it is available whenever this is used between 2 collections. A big part of this project will be to determine the most suited library or application to use as the backend of the transcoding engine.
 
'''Knowledge Prerequisite:''' Knowledge of C++ and Qt is a requirement. Knowledge of media formats and the different available apps and libraries for transcoding them is a bug plus.
 
'''Mentor:''' Nikolaj Hald Nielsen &lt;[email protected]&gt; or another Amarok developer.
 
==== Project: Distributed Collections  ====
 
'''Brief explanation:''' Allow several instances of Amarok on a network, each with their own distinct local collection, to seamlessly search, browse music from each other.
 
'''Expected results:''' On completion of the project, it should be possible to allow other instances of Amarok to access your local collection, as well as have access to the collection of other instances of Amarok, if their users allow it. A protocol for searching, browsing and streaming music should be in place, either developed from scratch or based on an existing standard (if a suitable one can be found). Issues such as authentication and auto discovery must be considered and a solution found.
 
'''Knowledge Prerequisite:''' Knowledge of C++ and Qt is required. Knowledge of XML, JSON or other data exchange schemes will be a big benefit, As there are many open question in this project, the student is also required to be capable of independently coming up with ideas for solutions to many issues, so a high degree of creativity and independence is required.
 
'''Mentor:''' Nikolaj Hald Nielsen &lt;[email protected]&gt; or another Amarok developer.
 
==== Project: Amarok &amp; KDE UPnP integration  ====


'''Brief explanation:''' UPnP is a network auto-discovery and services protocol that among other things allows serving media to connected devices in the local network.


====Project: ====
By creating a UPnP KIO slave and supporting infrastructure it becomes possible to access this media directly from any KDE application. In Amarok some extra integration is needed to make the UPnP MediaServer a full Collection. This includes indexing the contents locally when the server has no, or limited support for search.
'''Brief explanation:'''
 
'''Expected results:'''  


'''Expected results:'''
*A UPnP KIO slave based on an already existing or in development framework for UPnP.
*An Amarok Collection implementation including a functional QueryMaker using UPnP-search or MemoryQueryMaker.
*Optionally a PlaylistProvider implementation for UPnP-native playlists and playlist files found on the server.


'''Knowledge prerequisite:'''
'''Knowledge Prerequisite:''' C++ and UPnP. KIO-slave or Amarok experience is recommended.


'''Mentor:'''
'''Mentor:''' Bart Cerneels


=== digiKam  ===


===Amarok===
Photo Management program
A KDE music manager and player.


[http://amarok.kde.org Website] - [https://mail.kde.org/mailman/listinfo/amarok Mailing list] - IRC channel: #amarok on Freenode.
[http://www.digikam.org digiKam project web site] - [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist] - IRC channel: #digikam on Freenode.  


====Project: ====
==== Project: Non-Destructive Editing  ====
'''Brief explanation:'''


'''Expected results:'''
'''Brief explanation:''' Non-destructive means that the original image is not overwritten when editing. Instead, the applied changes are stored and a new version of that image is created. Version history can be accessed.


'''Knowledge Prerequisite:'''
'''Expected results:'''  


'''Mentor:'''
*Define a format to store editing operations - research existing standards or similar free software approaches, or come up with a home-made XML format.
*Adapt the existing image plugins to read and write their settings from this XML format and to re-apply a described operation to a given image (this is a laborious but relatively easy task)
*work together with your mentor on storing version history in digikam's database and the image's metadata. (this is needed to finish the project, but it's not the core of the student's work). Set up a simple file naming scheme to store the original and derived files.
*Implement the user interface changes: No more Save/Save As in the image editor. Instead, saving as current version, forking a new version, or exporting. Stacks of images (original/current version) in the album icon view.
*Build a widget to display version history. Optionally this is a really nice widget, a tree view with buttons to show information. Optionally there is also support to take a set of applied changes, store it and apply it to a different image.


'''Knowledge Prerequisite:''' C++ and Qt. Some interest in image editing.


===Phonon===
'''Mentor:''' Marcel Wiesweg &lt;marcel dot wiesweg at gmx dot de&gt;
Abstraction library for sound and video support. Used by KDE notifications, Amarok, Dragon Player and Qt Software.


[http://phonon.kde.org Website] - [https://mail.kde.org/mailman/listinfo/phonon-backends Mailing list] - IRC channel: #phonon on Freenode.
<br>


====Project: Analyzer Support====
==== Project: Face Recognition ====
'''Brief explanation:'''
Applications such as Amarok and Dragon Player cannot have an analyzer or visualizations since they use Phonon which does not yet have the functionality to do it. The analyzer is the little bar graph thing which bounces around while music is playing. Users like it as its pretty and gives them a visual indication of their music playing.


'''Expected results:'''
'''Brief explanation:''' Digikam shall be able to detect faces in photos, identify the person depicted and automatically tag the region on the photo with the person's name.
As this project is working on extending a library, it has three parts: the Phonon library itself, a Phonon backend, and an application. The Phonon library would need the new API calls. At least phonon-xine and preferably 1 or 2 other Phonon backends must then implement the new API. An application like Amarok or Dragon Player should be used to demonstrate the use of the new API.


'''Knowledge Prerequisite:''' C++ and Qt. Experience with Xine or GStreamer is probably useful.
'''Expected results:'''  
* Face Detection: Refine classifiers provided by OpenCV
* Face Recognition: Improve existing Eigenfaces implementation. Implement Fisherfaces recognition, work with GNU science library to implement the needed QZ algorithm.
* round up this underlying technology in a small library with some test cases
* work on a basic UI integration in digikam. There is an existing UI solution for Nepomuk already.
* optionally, define the format to store tags on regions of images (currently it's only possible to tag an image as a whole) in metadata and database. You will get support here from the digikam core developers.
* optionally, design some user interface solutions for the training tasks involved (telling the classifier what's right and what's wrong)


'''Mentor:''' Ian Monroe (contact on the [https://mail.kde.org/mailman/listinfo/amarok Amarok mailing list]) or possibly another Amarok or Phonon developer.
'''Knowledge Prerequisite:''' C++ and Qt. Knowledge of matrices and working with them. Some idea of clustering algorithms and previous OpenCV experience would be useful.
----


'''Mentor:''' Alex Jironkin for face detection part, one of the digikam core developers for the UI part (contact: Marcel Wiesweg &lt;marcel dot wiesweg at gmx dot de&gt;)


===Marble===
'''Hints:'''
A desktop globe and map application. Also provides a map Qt Widget.
* Nepomuk could be used to link faces to contacts in Akonadi


[http://edu.kde.org/marble/ Website] - [https://mail.kde.org/mailman/listinfo/marble-devel Mailing list]
<br>


====Project: Satellite navigation====
==== Project: Reverse Geocoding and Improved Map Search ====
'''Brief explanation:'''
Satellite navigation devices have become widely used and the quality of openstreetmap data is becoming high, with some cities completely mapped already. Providing satellite navigation would be a useful desktop app for many as well as adding appeal for the use of KDE in embedded devices.


It also opens the possibility to bringing many of the free software ideals to interaction with the real world such as collaborative/social POIs.
'''Brief explanation:''' Using the Google Maps or geonames.org reverse
geocoding services, location names can be added as tags to images which
already have GPS-coordinates.


'''Expected results:'''
'''Expected results:'''  
The project would aim at getting a basic satellite navigation application running. The most basic features required would be getting the current location from a GPS device and providing route calculation to a destination.
* Design a GUI to allow the user to choose which parts of the reverse
geocoding (town, country, street) should be added as tags to the images.
* Implement backends for Google Maps and geonames.org to retrieve the
descriptions of the places.
* Modify the map search in digikam to show all
images in the database on the map, via a model that requests the number
of images in a certain region from the database.


The AndNav project (http://andnav.org) has already achieved something similar for Android so it could be a point of reference for how to use OpenStreetMap data to achieve this. A possible approach would be to use [http://developers.cloudmade.com/projects/show/vector-tiles vector tiles from Cloudmade].
'''Knowledge Prerequisite:''' C++ and Qt. Google Maps reverse geocoding
requires some JavaScript knowledge, but should be doable without prior
knowledge.


'''Knowledge Prerequisite:''' C++ and Qt. Experience with GPS devices under linux would be beneficial. Knowing java may also be of benefit in order to study the AndNav implementation.
'''Mentor:''' Michael G. Hansen <mike at mghansen dot de> and another digikam developer (contact: Marcel Wiesweg &lt;marcel dot wiesweg at gmx dot de&gt;)


'''Mentor:''' I (Alan Jones, skyphyr using gmail) am willing to mentor, but not having any GPS or Marble experience there is most likely somebody far more suited to undertake this role.
<br>


Comment from a Marble Project guy: Alan, please get in touch with the Marble Project. Our mailing list is [email protected]. We'd like to support this project if a student is willing to do it.
=== KDE Edu  ===


----
Sabine Emmy Eller suggested the development of a “general conversion tool” for tables to various xml formats and from one xml to another xml format etc. where one can add further formats over time would be great. If this is a good idea we can actually start to think about more detailed specifications for what we need.


====Project: Add Time support to Marble====
==== Project: Time Support for Marble ====
'''Brief explanation:'''
Wouldn't it be great to be able to see the world at different times in Marble? Like having a slider which would give you the ability to browse through the time? Marble's internal datastructure is modelled after KML. But support for time-related tags is missing.


'''Brief explanation:''' Wouldn't it be great to be able to see the world at different times in Marble? Like having a slider which would give you the ability to browse through the time? Marble's internal datastructure is modelled after KML. But support for time-related tags is missing.


'''Expected results:'''
'''Expected results:'''
Line 104: Line 173:
* Having a central "internal" clock which the current view would be based on.
* Having a central "internal" clock which the current view would be based on.
* Porting existing features (like the starry sky and the sun shading) over to the new class design.
* Porting existing features (like the starry sky and the sun shading) over to the new class design.
* Using the new time support in Marbles Online Service plugins.


'''Knowledge Prerequisite:''' C++ and Qt. Knowledge about KML is not necessary but would be appreciated.
'''Knowledge Prerequisite:''' C++ and Qt. Knowledge about KML is not necessary but would be appreciated.


'''Mentor:''' Torsten Rahn / Patrick Spendrin.
'''Mentor:''' Bastian Holst &lt;bastianholst AT gmx DOT de&gt;
 
==== Project: More online plugins for Marble  ====
 
'''Brief explanation:''' Find some online services that provide position data and write online plugins for it
 
'''Expected results:''' A set of online plugins (showing webcams, opendesktop data, twitter messages, etc.) on the marble map. This could also include animations on the marble map and general optimizations of the online services structure.
An addition could be including for example earthquake kml data as an online plugin. This would also extend on Marble's Time Support (see "Project: Time Support for Marble").
And finally there would be the idea of an opendesktop plugin: OpenDesktop.org (sister site of kde-apps.org and kde-look.org) has got a Geo API which would allow to visualize e.g. Free Software / KDE users on the globe. So this would allow to turn Marble into a social network tool!
 
'''Knowledge Prerequisite:''' C++. Familiarity with Qt and XML parsing will help.  
 
'''Mentor:''' Bastian Holst &lt;bastianholst AT gmx DOT de&gt;


----
==== Project: Enhanced KML support for Marble  ====


====Project: Add Panorama support to Marble====
'''Brief explanation:''' Write support for more KML tags to get a more complete KML support for Marble.
'''Brief explanation:'''
 
These days there are several freely available 360deg panorama photos available on the internet. For other planets (like Mars) there are several panorama photos available for the numerous landing sites.
'''Expected results:''' Marble has a more complete KML support than now. Marble will be able to display some of the KML files one can find on the Internet.
 
'''Knowledge Prerequisite:''' C++. Familiarity with Qt and XML parsing will help.
 
'''Mentor:''' Bastian Holst &lt;bastianholst AT gmx DOT de&gt;
 
==== Project: Marble To Go (Navigation Mode)  ====
 
'''Brief explanation:''' Turn Marble into a navigation device.
 
'''Expected results:''' Marble already supports GPS devices and downloading routes from openrouteservice.org. Bring both worlds together! Let the user switch to navigation mode: The map center follows the current GPS position, route instructions fade in when appropriate.
The user interface should be prepared for small devices. Marble's existing offline mode should be extended for (optional) precaching tiles along the route. More features are possible (e.g. gpx/kml import/export).
 
'''Knowledge Prerequisite:''' C++. Familiarity with Qt will help.
 
'''Mentor:''' Dennis Nienhüser &lt;earthwings AT gentoo DOT org&gt;
 
==== Project: Panoramic Picture Support in Marble ("StreetView")  ====
 
'''Brief explanation:''' Allow Marble to display georeferenced panoramic pictures similar to [http://0pointer.de/blog/photos/amazon.html this] one. 
 
'''Expected results:''' The position on the globe should be displayed as a placemark and the panoramic picture displayed once the placemark is clicked. The Marble Widget itself would be used to display the panorama picture. Preferred way to store the properties of the panorama image would be extended KML support for Marble (see the PhotoOverlay documentation of the [http://code.google.com/intl/de-DE/apis/kml/documentation/kmlreference.html#photooverlay KML-Reference].
 
'''Knowledge Prerequisite:''' C++. Familiarity with Qt will help.  


Some of them are geo-referenced already. So it would be nice if it would be possible to add placemarks to Marble which get associated with the Panorama picture.
'''Mentor:''' Torsten Rahn &lt;rahn AT kde DOT org&gt;
Another "trimmed down" MarbleWidget instance could be used as a Panorama picture viewer: it would show these panorama photos either in equirectangular or spherical projection depending on the type of panorama photo.


'''Expected results:'''
==== Project: Community Integration for KStars  ====
* Locations of panorama photos get fed as a KML file and appear on the Marble Widget.
* The user can click on such Panorama placemarks
* The photo gets downloaded in the background
* A new modal dialog appears which technically shows another instance of a MarbleWidget that displays the Panorama photo. The Settings of the MarbleWidget would need to default to some configuration that doesn't show all the planet-specific floatitems and properties (like the graticule, etc.)
* The user is able to navigate inside this window (up, down, left, right, zoom in/out).
* The user is able to close the panorama viewer and returns to the Marble application.


'''Knowledge Prerequisite:''' C++ and Qt. Knowledge about KML is not necessary but would be appreciated.
'''Brief explanation:''' This feature is expected to be of use to amateur (hobby) astronomers. The idea is that there are aspects of amateur astronomy which are collaborative. For instance, one might want to view observations by other amateur astronomers around the world before making an observation of an object. Again, one would like to share their own observations with everyone else. There are more possibilities, and the student is encouraged to come up with them.  


'''Mentor:''' Torsten Rahn / Patrick Spendrin.
KStars produces observation logs in an XML format that is expected to adhere to the OAL 2.0 schema. The project will involve extending the existing implementation of the [http://groups.google.com/group/openastronomylog OAL 2.x schema] and ensuring that it is fully compatible with the schema.  


----
A very user friendly GUI has to be implemented for viewing imported
logs [And a good SQL backend for accessing the information from them
efficiently], it must be able to handle objects in the logs which are not there in the current KStars database.


====Project: Add Weather support to Marble====
The user must be able to retrive logs from the internet (and other sources) on a filter based query. [Filter could be anything like, object name or location
'''Brief explanation:'''
or observer name]
There are several sources for freely available weather data on the internet. It should also be possible to display these weather information in Marble as little sun icons and temperature information in the map. Additionally it could be possible to display forecasts based on the Marble time support.


'''Expected results:'''
The user should also be able to (eventually) submit his own logs to a server.  
* Weather information gets fed from the weather service.
* The weather information, such as temperature and cloud status, are displayed in the marble map.
* The user can click on the icons to get further information like air pressure.
* The shown weather information depends on the time that is currently shown by Marble.
* Perhaps it could be possible to show also historical values.
* Perhaps it is possible to build a weather plasmoid based on this feature.


'''Knowledge Prerequisite:''' C++ and Qt.
'''Expected results:''' Better OAL 2.x compliance in KStars, Ability to retrieve observation logs from the internet, Ability to export one's own observations in XML format to a server.  


'''Mentor:''' Torsten Rahn / Patrick Spendrin
'''Knowledge Prerequisite:''' C++. Familiarity with Qt and XML parsing will help.


----
'''Mentor:''' Prakash Mohan &lt;prakash DOT mohan AT kdemail DOT net&gt; / Akarsh Simha &lt;akarsh DOT simha AT kdemail DOT net&gt;


====Project: Improve GPS support====
<br>
'''Brief explanation:'''
Marble already has got GPS support. However it would be nice if it would get improved.


'''Expected results:'''
==== Project: OpenGL support for KStars  ====
Here are a few possible things one can focus on
* Port GPX-Import over to the geodata framework and extend it.
* GeoClue-integration.
* Improved UI
* Support for GeoCaching
* Basic integration with OpenStreetMap (?)


'''Knowledge Prerequisite:''' C++ and Qt. Knowledge about KML/GPS/GPX is not necessary but would be appreciated.
'''Brief explanation:''' KStars currently renders graphics using QPainter. To provide a realistic and aesthetic representation of the night-sky, GL functionalities like texture-mapping will be beneficial. The aim of this project would be to use the Qt OpenGL module to render graphics in KStars.  


'''Mentor:''' Torsten Rahn / Patrick Spendrin.
'''Expected results:''' More realistic simulation of the night-sky, better aesthetic appeal.  


=== KStars ===
'''Knowledge Prerequisite:''' C++. Knowledge of Qt and OpenGL will greatly help.  
KStars is a Desktop Planetarium for KDE. It displays a map of the sky and provides a lot of tools to learn astronomy, or to calculate and predict astronomical phenomena. See [[http://edu.kde.org/kstars The KStars Homepage]] for more information.


==== Project: Community Integration for KStars ====
'''Mentor:''' Akarsh Simha &lt;akarsh DOT simha AT kdemail DOT net&gt;
'''Project Information:''' KStars is a desktop planetarium program for KDE.


'''Brief explanation:''' Amateur Astronomy (which is one of the important use-cases of KStars) is typically done in groups. KStars permits users to save their own observing logs. It would be nicer if the user could share his observing logs with other users and see other observers' logs within KStars. It would also be nice if KStars had a map (using MarbleWidget) to display various Astronomy-related establishments (like amateur associations, observatories, research institutes). Another possible idea could be an observing report generator that would generate a report based on observing logs, and at the user's will, share it / post it on the internet.
<br>


The first step in this project would probably be evaluating existing XML-based formats for interchange of observing logs like the [[http://observation.sourceforge.net/en/download.html COMAST XML Schema]]. If nothing fits our purpose (which is unlikely), we might need to create a new format. The next step would be to make a user interface to store one's own log and retrieve other users' logs in this format. Then, you could proceed with an observing report generator or something. Further development of these ideas is left to the student.
==== Project: Additional Catalogs in KStars  ====


'''Expected results:''' Implement some features that will make it easier for users of KStars and amateur astronomers to collaborate, as suggested above.
'''Brief explanation:''' KStars currently knows about deep-sky objects from the NGC and IC catalogs and stars from the Henry-Draper catalog. Popular objects from many other catalogs are not listed [eg: Collinder] and multiple designations for the same object are not supported. The aim of this project is to implement support for objects from SAO, UGC, PGC, MCG, PK and Saguaro Astronomy Club catalogs. This might involve revamping the way data is stored and accessed in KStars&nbsp;:-).  


'''Knowledge Pre-Requisite:''' Required: C++. Prior knowledge of KIO_HTTP will help. Ability to grasp XML specifications from documentation will help too.
'''Expected results:''' Support for multiple designations, Many more catalogs in KStars.  


'''Mentor:''' Akarsh Simha <akarsh DOT simha AT kdemail DOT net>
'''Knowledge Prerequisite:''' Database handling will help.


==== Project: KStars: Prettyfication ====
'''Mentor:''' Akarsh Simha &lt;akarsh DOT simha AT kdemail DOT net&gt;
'''Project Information:''' KStars is a desktop planetarium program for KDE. The display is interactive, but it could be made more beautiful.


'''Brief explanation:''' We often get good suggestions for making KStars look better. Choose any of the following ideas: realistic rendering of asteroids and comets (including tails!); texture-mapping of the sky (this would mostly allow a photorealistic Milky Way); texture-mapping of planets; realistic sky-lighting effects (i.e., sky is blue in the daytime, gets gradually darker and colorful at sunset). One could also think of using Qt-GL rendering optionally.
<br>


'''Expected results:''' Successful implementation of any of these ideas to make KStars more beautiful.
==== Project: Integration of KmPlot into KAlgebra ====


'''Knowledge Pre-Requisite:''' Required: C++.
'''Brief explanation:''' Allow to KAlgebra to draw the same kind of functions of KmPlot through reusing code of KmPlot and improved plotting capabilities of KAlgebra.


'''Mentor:''' Akarsh Simha <akarsh DOT simha AT kdemail DOT net>
'''Expected results:''' KAlgebra already draws explicit curves in 2D and explicit surfaces in 3D, the new KAlgebra should draw, additionally, implicit curves in 2D, parametric curves in 2D, differential plots and explicit surfaces in spherical and cylindrical coordinates.


==== Project: Printable star charts ====
'''Knowledge Prerequisite:''' C++, Qt, KDE, OpenGL, Eigen, GSL
'''Project Information:''' KStars is a desktop planetarium program for KDE. It already has a print feature, but the printed chart could be much better.


'''Brief explanation:''' A printed star chart should at least include a legend explaining the symbols, and provide some information on the location of the user, the time and date, etc. The user would ideally be able to annotate the chart in various ways.
'''Mentor:''' Antonio Larrosa


'''Expected results:''' Significant improvements to the printed star charts in KStars.
<br>


'''Knowledge Pre-Requisite:''' Basic programming skills, ability to quickly learn QPainter API.
==== Project: Rocs - Graph File Formats and Teacher Mode  ====


'''Mentor:''' Akarsh Simha <akarsh DOT simha AT kdemail DOT net>
Rocs is a Graph Theory IDE to study and learn Graph Theory.


==== Project: Support many catalogs ====
'''Brief explanation:''' Rocs lacks graphs formats. it currently supports one internally and GML by the amazing work that Wagner is doing on it's plugin system. but we do need more: dot, gml, umbrello files, anything graph - like should be openable by rocs. Also, teacher mode is a mode with various graph scripts ( coloring, smaller path, bigger path, etc. all of the algorithms studied in Graph Theory + a few more )
'''Project Information:''' KStars is a Desktop Planetarium for KDE. Currently KStars loads some star catalogs that are made available in a KStars native format.


'''Brief Explanation:''' KStars currently loads Tycho-2 and parts of USNO NOMAD catalog of stars. These catalogs are required to be in KStars' native format which uses the Hirearcheal Triangular Mesh to index regions in the sky. Popular star catalogs like USNO A organize stars and divide the sky into regions differently. Most users of astronomy software typically have one of these popular catalogs downloaded, and it would be great if KStars could support them somehow. While ability to read the non-native catalogs straight off is desirable, tools to convert these catalogs into KStars' native format would also help.
'''Expected results:''' Rocs should be able to open almost all of the graph files around, and also in teacher mode, the student could test if his algorithm is correct by comparing the results with the one in the teacher mode.  


'''Expected Results:''' Implement support for at least the most popular catalogs like USNO-A2.0, Stellarium's Extra catalog, Cartes du Ciel's Tycho and Tycho-2 catalogs.
'''Knowledge Prerequisite:''' Qt - C++ - Javascript are prerequisites. all the rest is optional, but being in a Graph Theory class at university could be cool&nbsp;;)


'''Knowledge Pre-Requisite:''' Required: C++. Ability to read documentation and quickly understand the existing code and ability to deal with binary files will help.
'''Mentor:''' Tomaz Canabrava


==== Project: Make kstars fast(er) ====
<br>
'''Project Information:''' KStars is a Desktop Planetarium for KDE. Currently KStars does not explicitely use vector instructions or thread.


'''Brief Explanation:''' To load catalogs, calculate the position of the celestial bodies, etc. KStars currently treats each object one after the other. With the increasing presence of vector units in modern CPU and the advent of CPU having multiple cores, KStars underexploits them. KStars could be made faster using vector instructions (by the way of Eigen 2 for instance for good performance and easy maintainability) and threads (using Threadweaver). This project complements the “Prettyfication” project that would use OpenGL to render the sky.
==== Project: Cantor: Add a new Backend  ====


'''Expected Results:''' KStars is faster to load, add catalogs, can display more stars simultaneously while still being smooth.
'''Brief explanation:''' Write a new Backend to Cantor, to bring your favourite Mathematical Software, (e.g. Octave, SciLab, XCas or whatever you prefer) to Cantor. Implement needed features in Cantor, to expose the whole potential of the Backend to the user. Implement assistant dialogs for the most commonly used functionalities


'''Knowledge Pre-Requisite:''' Required: C++. Familiarity with threads, code optimization.  
'''Expected results:''' The user should be able to use the Math package from within Cantor, without (or with very few) limitations, compared to using the standard interface (every important feature should be exposed).  


'''Knowledge Prerequisite:''' Qt, C++, KDE, are needed to code for Cantor. You should also be familiar with the Math Software you want to write a backend for.


=== Kalzium ===
'''Mentor:''' Alexander Rieder


==== Project: Strigi integration ====
==== Project: Cantor: improve R backend ====


'''Project Information:'''
'''Brief explanation:''' Currently the R backend of Cantor is very basic. Goal of this Project is to heavily improve it and implement all the features it is missing, to make Cantor a nice GUI for R.
The goal of this project is to integrate Strigi as backend behind the periodic table and the glossary (and possible other elements).


'''Brief explanation:'''
'''Expected results:''' Cantor should be turned into a suitable GUI for R, with Syntax Highlighting, Tab Completion and more.
The idea here is to have a GUI element that shows Strigi search results based on the element selected from the periodic table, or the item from the glossary, found on the users desktop. For element, this would include the elements name, and possible even the element symbol, if integration with last years Strigi-Chemistry GSoC project is achieved. For glossary items, a simple text search would suffice.


Another idea is to make it possible to querry like this: "Give me all molecules with a molecularweigth of 123u and at least one Carbon atom". For this we can use the [http://chem-file.sourceforge.net/ Chemical File Database] (or of course every other database, even those for [http://www.rcsb.org/pdb/home/home.do proteins].
'''Knowledge Prerequisite:''' Qt, C++, KDE, are needed to code for Cantor. Familiar with the use of R


'''Expected results:'''
'''Mentor:''' Alexander Rieder
* provide GUI for Strigi search results for an element selected in the periodic table
* provide GUI for Strigi search results for an glossary item


'''Knowledge Pre-Requisite:''' Required: C++, DBUS. Could be useful: Qt.
==== Project: KHangMan  ====


'''Mentor:''' Undecided.
'''Brief explanation:''' Improve GUI and code refactoring. About the GUI, start with a usability study to redesign the GUI. The menus are to be redone (having an Open Recent Files action for example) and maybe suppress the Categories and Languages menus. Allow an easier management of themes as well, maybe have a GHNS theme manager.
For code: refactor the way files are loaded. Allow to start with no file. Separate the data code (about the letters) from the GUI.


----
'''Expected results:''' Makes it visually more attractive for children, give better feedback on result, make the program workflow better


==== Project: Kalzium beautification ====
'''Knowledge Prerequisite:''' Qt, C++, KDE


'''Project Information:'''
'''Mentor:''' Anne-Marie Mahfouf
Many parts of [http://edu.kde.org/kalzium Kalzium] could need a fresh up of the interface. For example, the main table should be written using Qt Model/View technique and for example use SVGs as a background. A first (uncomplete but working) code is already existing.


At the same time, many dialogs are not as beautiful as they could be. This project could also include the creation of a "simplified Kalzium" mode in which some parts of the feature set are hidden; this would be good for schools.
=== KDE Games  ===


A third idea is to make more use of Plasma, for example improve the already written Plasmoids and/or extent Kalzium so that a Plasmoid could open a information dialog using Kalzium.
==== Project: KHighscore2 library  ====


'''Expected results:'''
'''Brief explanation:''' The KDE Games module features the libkdegames library, which provides common components for games, such as network access and standard UI elements. Among these classes is the highscore system KHighscore, which is starting to show its age. We want you to write a successor based on Qt's model/view framework.  
Depending on the chosen project for example a cleaned up codebase with an improved interface.


'''Knowledge Pre-Requisite:''' Required: C++, Qt, possible Plasma, Debug.  
'''Expected results:''' The coding work itself should not be too hard, but you need to create a future-proof object-oriented design. The games in the KDE games module have very different requirements for a highscore system, we expect you to evaluate these and come up with a concept that fits most requirements. Backwards compatibility to existing highscore records is desired. When the library is finished, you should port as many of our games to the new classes.  


'''Mentor:''' Carsten Niehaus
'''Knowledge Prerequisite:''' C++ and Qt. Profound experience with Qt's model/view framework.


==== Project: Molecular calculator ====
'''Mentor:''' none at the moment (contact [email protected] mailing list for further questions)


'''Project Information:'''
<br>
Kalzium already has a basic mass calculator for molecules (in the sidebar). The goal of this project would be to add full-blown widget that allows users to calculate masses of molecules, do calculations with them, calculate concentrations (mol/l, g/l..) of solutions...
ChemicalDataObject already has the needed data to achieve this, there's a parser for molecule formulas, so the project's goal is to make a nice GUI and of course write code that uses that data in the good way.


'''Expected results:'''
==== Project: New AI for KsirK  ====
An easy-to-use (multi-tabbed?) window, where users can enter what they know (molecule name and number of grams...), pick what they want to know (number of mols).


'''Knowledge Pre-Requisite:''' Required: C++, Qt, basic knowledge of chemistry.
'''Brief explanation:''' KsirK is a strategy game inside the kdegames module where you must conquer the world country by country. You can also have specific goals. Its current AI, taken from another old implementation of the same game is really no efficient and should be replaced by better one, with a scalable power.  


'''Expected results:''' You will need to study the theory of AI design for strategy games and the other Free Software implementations of the same game (like TEG for example). You will then develop and integrate the new AI for a release with the next KDE SC version.


'''Mentor:''' Undecided.
'''Knowledge Prerequisite:''' C++ and Qt. An experience with strategy games AI would be useful.


=== Rocs ===
'''Mentor:''' none at the moment (contact [email protected] or kde-games-devel@kde.org mailing list for further questions)
Rocs is a Graph Algorithm Testbed for universities. It aims to give the students a place to visualize the results of the algorithms, so it doesn`t provide any, instead there`s a place for the studant to write them down and see what happened.


<br>


==== Project: Kross support====
==== Project: Gluon Player Plasmoid ====
Rocs only supports QtScript at the moment, and in a really not-smart way, with kross it could use more languages, and have more usecases.


==== Project: Automate support====
'''Brief explanation:''' Gluon is a game creation and distribution system, and a Gluon Player is an application which is able to fetch and play these games. Plasmoids are, of course, the widgets on the Plasma desktop. A Gluon Player Plasmoid is thus a plasmoid which fetches Gluon games and plays them.
Since in a ultimate look, automates are graph, it would be nice to have an automate support for it.


----
'''Expected results:''' A working plasmoid able to fetch games from the Gluon distribution site, and furthermore run the fetched games. Extra features which would make the plasmoid more useful would be the ability to perform donations to game authors and take part in the larger community efforts that other Gluon Player applications would be able to. Please also see [http://leinir.dk/gluon/gluon-game-client.pdf Gluon Player for Maemo/MeeGo (pdf, 2.0MiB)] for inspiration.
===KDevelop===
----
KDE-based Integrated Development Environment, specializing in c++ support, but including a powerful generic framework (definition use chain) which makes it possible to relatively easily support multiple different languages.


[http://www.kdevelop.org Website] - [http://www.kdevelop.org/index.html?filename=mailinglist.html Mailing list] - IRC channel: #kdevelop on Freenode.
'''Knowledge Prerequisite:''' C++ and Qt. knowledge of Open Collaboration Services  and Plasmoid production would be good but not required. Gluon experience not required.


====Project: C++ Refactoring Support====
'''Mentor:''' Dan Leinir Turthra Jensen (admin@leinir.dk) (email kde-games-devel@kde.org mailing list for further questions)
'''Brief explanation:'''
C++ support in KDevelop is already highly advanced, often equalling or surpassing what the user and compiler understand about the code. A few refactoring tools have been developed already, but they have been constructed in a crude fashion, generating code via string concatenation.


This project would aim to create a new system to implement refactoring tools, and to create, test and deploy several advanced refactoring tools for c++.
<br>


'''Expected results:'''
=== KDevelop ===
A library would be created to enable refactoring based on the c++ AST (abstract syntax tree). A reverse parser (AST to code) already exists, but classes would be created to allow programatic manipulation of an AST.  Optionally this library would also cover a generic framework based on the duchain which would be re-usable by other languages and make refactoring plugins easier to develop and partially shareable between languages.


See the [http://api.kde.org/4.x-api/kdevplatform-apidocs/language/codegen/html/index.html Code Generation Design] documents for the initial plan for this project.
KDE-based Integrated Development Environment, specializing in c++ support, but including a powerful generic framework (definition use chain) which makes it possible to relatively easily support multiple different languages.  


'''Knowledge Prerequisite:''' C++ and Qt. Experience with parsers would be a bonus.
[http://www.kdevelop.org Website] - [http://www.kdevelop.org/index.html?filename=mailinglist.html Mailing list] - IRC channel: #kdevelop on Freenode.  


'''Mentor:''' Hamish Rodda (Definition-Use chain code creator) rodda at kde dot org
==== Project: Quanta+ 4  ====


====Project: Code Visualisation====
'''Brief explanation:''' Quanta+ 4
'''Brief explanation:'''
KDevelop has a fairly comprehensive model of the user's codebase, however at this point it has not been fully exposed to the user.  In order to visualize the code, the user currently has to use the code browser, which can only show one context/declaration at a time.


This project would aim to create a graphical visualization of the code structure, and allow much more powerful navigation of the code.
'''Expected results:''' Revive the Quanta+ brand for KDE 4 and provide a usable IDE for webdevelopment. Take advantage of the KDevelop framework and reuse it's plugins and adapt them to give the user a good experience while programming PHP, CSS, HTML and JavaScript.  


'''Expected results:'''
'''Knowledge Prerequisite:''' KDE, Qt, KDevplatform/KDevelop
Using graphicsview, a widget would be created which shows the code browser's current context or declaration, in a [http://en.wikipedia.org/wiki/Control_flow_graph control flow graph]. It would be able to zoom out, pan, etc... loading data as required from the definition-use chain in a separate thread. There could also have a separate view to show code structure.  Refactoring and other tools would be made more accessible using this widget.


Other ideas for utility of the widget include linking with the debugger and/or callgrind tools to show how the program has/is being executed, which areas need optimization, etc.
'''Mentor:''' Niko Sams


Investigation could be performed into reuse of code from the Umbrello project, if suitable to kdevelop's design.
==== Project: Community Integration  ====


See the [http://api.kde.org/4.x-api/kdevplatform-apidocs/language/duchain/html/index.html Definition Use Chain] documents for the api which contains the information about the code structure.
'''Brief explanation:''' Integrate community related workflow, e.g. VCS support, in KDevelop.  


'''Knowledge Prerequisite:''' C++ and Qt. Experience with graphics technologies would be a bonus.
'''Expected results:''' Integrate a proper VCS support for SVN and Git into KDevelop and see what other aspects of a community related workflow could be integrated.  


'''Mentor:''' Hamish Rodda (Definition-Use chain code creator) rodda at kde dot org
'''Knowledge Prerequisite:''' KDE, Qt, KDevplatform/KDevelop


====Project: Java Language Support====
'''Mentor:''' Andreas Pakulat
'''Brief explanation:'''
KDevelop's libraries are ready to support integration of languages other than C++.  Java support already in place includes the lexer, parser, and definition-use chain creator.


This project would aim to make KDevelop a viable alternative IDE for Java development.
==== Project: OBS (openSUSE Build Service) Integration  ====


'''Expected results:'''
'''Brief explanation:''' [http://en.opensuse.org/Build_Service openSUSE build service] allows developers to create and release open source software for openSUSE and other Linux distributions easily on different hardware architectures.
The [http://websvn.kde.org/trunk/playground/devtools/kdevelop4-extra-plugins/java/ Java support plugin] needs the following work, the project may incorporate some or all areas:
* Fixing of parse job execution order such that all types and declarations are properly resolved for the definition-use chain (probably fairly trivial)
* Implementation of an expression visitor, so that uses and types can be calculated
* Major work on the code completion feature such that the completion list is accurate for the context in which it is executed (integrate the expression visitor)
* Integration of Java documentation
* General Java support bug fixing
* Java build system(s) support
* Refactoring and/or code generation support


'''Knowledge Prerequisite:''' C++ and Qt. Experience with Java and/or parsers would be a bonus.
'''Expected results:''' A plugin for KDevelop that would allow a developer to easily check-in source, build, and get OBS status from within a KDevelop project. In other words, it would allow for seamless development to deployment.  


'''Mentor:''' Hamish Rodda (Definition-Use chain code creator) rodda at kde dot org
'''Knowledge Prerequisite:''' KDE, Qt, KDevplatform/KDevelop


====Project: C# Language Support====
'''Mentor:'''&nbsp;?
'''Brief explanation:'''
KDevelop's libraries are ready to support integration of languages other than C++.  C# support already in place includes the lexer, preprocessor, parser, and basic definition-use chain creator.


This project would aim to make KDevelop a viable alternative IDE for C# development.
=== KDE PIM  ===


'''Expected results:'''
KDE PIM is the interest group working on applications related to personal information management, e.g. contacts, calendar, mails, etc.
The [http://websvn.kde.org/trunk/playground/devtools/kdevelop4-extra-plugins/csharp/ C# support plugin] needs the following work, the project may incorporate some or all areas:
* Locate and parse inbuilt language api and linked libraries.
* Implementation of an expression visitor, so that uses and types can be calculated
* Implement code completion (based on existing KDevelop code completion api) such that the completion list is accurate for the context in which it is executed (integrate the expression visitor)
* Integration of documentation
* General c# support bug fixing
* c# build system(s) support, if required
* Refactoring and/or code generation support


'''Knowledge Prerequisite:''' C++ and Qt. Experience with C# / Mono and/or parsers would be a bonus.
One of the current challenges is utilizing the new cross-desktop PIM infrastructure called [http://www.akonadi-project.org/ Akonadi].  


'''Mentor:''' Hamish Rodda (Definition-Use chain code creator) rodda at kde dot org
There are interesting projects on all levels of the software stack: libraries, application porting, new applications, access to online resources, etc.
----
=== KOffice ===
-----


'''Project:''' support for versioned OpenDocument files.
[http://pim.kde.org/ Website] - [http://techbase.kde.org/Projects/PIM Project Wiki] - [https://mail.kde.org/mailman/listinfo/kde-pim Mailing list] - IRC channel: #kontact and #akonadi on Freenode.  


'''Explanation:''' The OpenDocument specification doesn't include support for multiple versions of the same document in a single file. But that feature is supported by OpenOffice.org. The objective for this Summer of Code is to add support for that versioning system in KOffice. Since KOffice shares the OpenDocument loading/saving code, it should be possible to add this support in every KOffice application in one Summer of Code.
For a list of ideas that are not yet fully spelled out, see [http://community.kde.org/KDE_PIM/Meetings/Osnabrueck_8#Summer_of_Code_brainstorming the brainstorming list of Summer of Code ideas of the last PIM meeting].  


'''Expected results:''' Being able to load a specific version of a file, and create/manage versions
==== Project: New Kontact summary based on Plasma  ====


'''Knowledge Pre-Requisite:''' C++, excellent english reading skills.
'''Brief explanation:''' Create a new summary for Kontact that is based on Plasma.  
-----


'''Project:''' Add support for e-book formats to KOffice.
'''Expected results:''' The new Kontact summary should be based on Plasma and have every feature that the old summary had. The summary should look nice and have lots of bling. It should be possible to place single components of the summary on the desktop as well, as plasmoids.  


'''Brief explanation:''' Add a new export for one or more formats that are specifically tuned for e-book devices.
'''Knowledge Prerequisite:''' C++ and Qt knowledge is needed, Plasma experience would be welcome.  


With the increased popularity of ebook readers there is going to be a need for tools to create ebook content. While most e-book devices can display PDF there are in fact a lot more formats in use. One such format is .epub, which allows reflowable content (unlike PDF). The format itself is based on XML and uses style sheets (CSS) to format content. There are few free software tools that can generate and manipulate this format and those that exist are restricted to command line.
'''Mentor:''' Contact the [https://mail.kde.org/mailman/listinfo/kde-pim KDEPIM Mailing list]


Since most people creating content will most likely want to use an office suite or word processor to make documents it makes sense to add an export option for this format to KOffice.
==== Project: PIM integrated Clock applet ====


'''Knowledge requisites:'''
'''Brief explanation:''' Extend the clock applet to show PIM information via Akonadi
* C++
* XML
* CSS


==== Flake ====
'''Expected results:''' Be able to show tasks and appointments in the clock applet's popup.  Mark dates in the calendar widget that have tasks/appointments associated.  Consider the performance costs of starting Akonadi and querying for data.  For best code reuse, find a way to use existing plasma widgets (see above Kontact Summary project) inside the clock popup, rather than implementing new widgets.  Close https://bugs.kde.org/show_bug.cgi?id=46262 .
-----


'''Project:''' support missing ODF drawing shape feature
'''Knowledge Prerequisite:''' C++ and Qt knowledge is needed, Plasma experience would be welcome.  Design skills would be helpful.


'''Explanation:''' KOffice can already load and save most of the shapes that ODF defines. Still a few features are missing especially text on shapes, but also caption, title, description and the measure shape.
'''Mentor:''' Contact the [https://mail.kde.org/mailman/listinfo/kde-pim KDEPIM Mailing list]


'''Expected results:''' The project should implement the mentioned features and it should be possible to load, save and easily edit them
==== Project: Improved HTML support for KMail's composer  ====


'''Knowledge Pre-Requisite:''' C++
'''Brief explanation:''' The HTML support for KMail's composer is currently limited. This should be improved: Replying and forwarding should (optionally) preserve the HTML format. The composer should use WebKit editing so that all HTML is fully supported.


==== KWord ====
'''Expected results:''' Replying and forwarding HTML mails should be fully supported. The QTextEdit-based widget in the composer should be replaced by a WebKit-based widget, to support all HTML instead of a small subset.  
-----
'''Project:''' Rich Tag Cloud support for Kword.


'''Explenation:''' The modern way of a summary is a tag cloud/concordance graph a la Wordle.net. This to a document in many cases makes way more sense than a table of content or index - its like an instant summary based on the actual text. It is used in so many web content systems that it is really weird there is no Office suite that offers it for regular office documents. The SoC project would work on an interface to control tag clouds in documents it a little better than in web apps - say by setting the amount of cloud items you want, have a user-editable list of words you want to keep out (or add), add icons/image alternates, change the weight of things you want to be more visible, drag and drop reordering of cloud text,  font and styling preferences.
'''Knowledge Prerequisite:''' C++ and Qt


==== KPresenter ====
'''Mentor:''' Thomas McGuire
-----


'''Project:''' Powerpoint import.
==== Project: Improved theming support for the message viewer  ====


'''Explanation:''' From some years ago another gSoc project implemented the basis for powerpoint import, but it was never finished. So there is a good basis to start from. From a quick look it seems like styles support is the thing missing most to complete the work, however a thorough analysis of what is there and what is not needs to be done. And then the actual work needs to be done too, obviously
'''Brief explanation:''' In KMail, it is currently possible to chose between different header styles, such as 'fancy' or 'brief'. These header styles currently have to be written in C++.  


==== Krita ====
The goal of this project is to use the [http://www.gitorious.org/grantlee/pages/Home Grantlee library] to provide better and easier theming support.


-----
'''Expected results:''' The viewers of KMail, KNode and Akregator should all be ported to Grantlee. Some defaults themes should be provided, at least replacing the existing 'fancy' and 'standard' themes.


'''Project:''' New tile engine for Krita
Optionally, [http://techbase.kde.org/Development/Tutorials/Introduction_to_Get_Hot_New_Stuff Get Hot New Stuff] should be used so that the user can easily download new themes.


'''Project information:''' Krita's current tile engine suffers from some limitations, like extensive locking. A new tile engine should offer some compelling features, like mipmapping, tile aging, in-memory compression, lock-free access of tiles, as efficient as possible undo information, pluggable backends (like png or tiff). See for a short summary http://wiki.koffice.org/index.php?title=Krita/Akademy_2007_Meeting#tile_backend.
Optionally, the user should have some sort of control over which header fields of the mail are displayed, see [http://bugs.kde.org/show_bug.cgi?id=16270 Wish 16270].  
'''Expected Results:''' an production-ready implementation having these features.


'''Knowledge Prerequisite:''' This is a difficult, ambitious project. Applicants should have a good knowledge of C++, data structures and be aware of existing literature on this subject and have a knowledge of graphics applications.
'''Knowledge Prerequisite:''' C++ and Qt


'''Mentor:''' Thomas McGuire, Stephan Kelly(?)


'''Project:''' Sketch-pad interface for Krita
<br>


'''Project Information:''' Krita is a large and complex application built around a sophisticated painting engine. The goal of this project is to create a new interface around the Krita engine, specialized for quick sketching.
==== Project: Improving google data akonadi resource ====


'''Expected results:''' This project should implement a new interface around Krita, presenting the user a single-layer plus tracing paper interface with a single freehand sketching tool. Easy to use and graphic color and paint operation (brush, pencil, eraser etc.) interface elements must be designed and implemented.
'''Brief explanation:''' Currently kdepim can use the gdata resources
(contacts and gcalendar) to sync with a google account. The idea
is to implement some missing features.


'''Knowledge Pre-Requisite:''' C++
'''Expected results:''' Implement more features in contacts resource
(e.g. birthday field, IM fields, etc) and calendar (e.g. multiple
calendar, recurrent events, etc) in both libgcal and akonadi
resources. Another idea would be to port libgcal to Qt (currently it
uses libcurl and libxml).


-----
'''Knowledge Prerequisite:''' C++ and Qt (for the akonadi resource) and
ANSI C for the google data library (libgcal). Networking programming
is a plus.


'''Project:''' Shader filters and generators for Krita
'''Mentor:''' Adenilson Cavalcanti a.k.a. Savago


'''Project Information:''' Some initial work has already been done to make it possible to write filters in the OpenGL shading language. This project should take that initial code as a basis and implement a fully functioning plugin for Krita that allows filters and shaders to be executed on images in any colorspace.


'''Expected results:''' The plugin should have a finished user interface and make it possible to experiment with shader filters in an interactive way. Example filters must be implemented.


'''Knowledge Pre-Requisite:''' C++, OpenGL.
==== Project: Easy Import and Export of all PIM data in Kontact  ====


-----
'''Brief explanation:''' There should be an easy way to import and export all PIM data including the configuration data, to make it easy to exchange data and to move the Kontact data to another installation.


'''Project:''' Animation support
'''Expected results:''' There should be a central way in Kontact to import and export all data. Right now, some individual applications have their own ways to import and export data, and this should be unified. The new import and export tool should be able to deal with the following


'''Project Information:''' There is no support at all in Krita for animated images such as GIF or MNG or for working with images in an animation context, such as textures or backgrounds in applications like Blender. The applicant should first investigate user needs and use cases and then implement support in the user interface and in the import/export filters.
*Configuration data, such as applications settings and account settings
*The actual data, such as mails, feeds, contacts and calendar entries
*Metadata, such as Nepomuk tags and annotations or Akonadi item flags
*Cached data, such as the cache of an IMAP account, to avoid re-downloading the mails


'''Expected results:''' A user-friendly way of working with animated images (i.e., not by making each frame a layer), but e.g. a docker that shows the the animation running in thumbnail format. Import/export filters for relevant file formats.
It should be possible for the user to have a fine-grained selection of the above so that the user can decide what to export or import.  


'''Knowledge Pre-Requisite:''' C++
Ideally, it should be possible to export all this to a single archive file which can be later re-imported.


-----
There are several bug reports on [bugs.kde.org the KDE bugtracker] that request something like this, you might get additional ideas from them.


'''Project:''' PSD and Gimp plugins
'''Knowledge Prerequisite:''' C++ and Qt


'''Project Information:''' Krita is powerful enough to handle nearly all that the Gimp and Photoshop are capable of saving. This project is about creating dedicated file import/export filters that can handle as much of these file formats as possible, possibly through the use of existing libraries.
'''Mentor:''' Contact the [https://mail.kde.org/mailman/listinfo/kde-pim KDEPIM Mailing list]


'''Expected results:''' 4 plugins: psd import/export and xcf import/export. These plugins should be able to handle complex files in all supported colorspaces. Ideally the project would also deliver a library to convert PSD/XF to/from Open Raster files.
==== Project: Unified account wizard for Kontact  ====


'''Knowledge Pre-Requisite:''' C++
'''Brief explanation: ''' Provide a nice wizard that can set up all of Kontact in one go and is easily extensible to support new configuration templates. The wizard should set up accounts/resources for all Kontact components.


-----
As an example, let's say the user has a Google account: That includes Google Mail, Google Calendar, Google Contacts and Google Reader. The wizard should only ask for the username and password of the Google account of the user, and then set up Akonadi resources for mail, calendar, contacts and feeds automatically.


'''Project:''' Workspaces
This should of course not be limited to Google: The system should be based on configuration templates so that many popular providers can be supported. Writing such configuration templates should require no coding so that many people write them, leading to a broader support of providers in the wizard


'''Project Information:''' A workspace is a loadable package of settings that finetune Krita for a particular purpose. A workspace could contain additional plugins (like an image browser plugin for batch operations) and a subset of resources. Example workspaces could be batch-editing of images, editing of animation sequences or painting or sketching.
'''Expected results:''' Contact the [https://mail.kde.org/mailman/listinfo/kde-pim KDEPIM Mailing list]


'''Expected results:''' the user interface and framework to make packages of plugins and resources that users can switch between. Also extra plugins to extend krita in areas like batch processing that do not exist yet.
*Write and integrate a usable wizard for Kontact that combines setting up accounts/resources for mail, calendar, contacts and maybe more.
*Make it easy to use: The user should only need to input the bare minimum of information, and the wizard auto-detects all the correct settings, based on configuration templates
*Provide as many sample configuration templates for popular services as possible, for example for Google, AOL and other popular providers
*Optionally, integrate [http://techbase.kde.org/Development/Tutorials/Introduction_to_Get_Hot_New_Stuff Get Hot New Stuff] so that it is possible to download new configuration templates.


'''Knowledge Pre-Requisite:''' C++, artistic workflow
'''Knowledge Prerequisite:''' C++ and Qt


-----
'''Mentor:''' Contact the [https://mail.kde.org/mailman/listinfo/kde-pim KDEPIM Mailing list]


'''Project:''' Kipi and digikam plugins compatibility
==== Project: More Nepomuk Integration in Kontact  ====


'''Project Information:''' Kipi and digikam provide lots of interesting plugins for working with 8 and 16 bit RGBA images. It would be great to be able to re-use those plugins from within Krita.
'''Brief explanation:''' Nepomuk provides wide possibilities of doing cool new things. The goal of this project is to come up with interesting ideas on how Nepomuk could improve Kontact, and implement the ideas.  


'''Expected results:''' Two plugins that load kipi and digikam filters into two new menus in the filter menu. Code to convert Krita layers to the digikam image representation and back, taking care of icc profiles and other niceties.
Some possibilities:  


'''Knowledge Pre-Requisite:''' C++, artistic workflow
*Activity Journal for Kontact
*Project-Centric Views
*Person-Centric Views


==== Kivio ====
'''Expected results:'''
-----


'''Project:''' support for basic flowchart editing
'''Knowledge Prerequisite:''' C++ and Qt


'''Project Information:''' In KOffice 1.6 Kivio provided tools and stencils for editing flowcharts. Flake already provides the the building blocks: shapes, glue points and a connector shape. Goal of the project is to recreate old functionality based on flake.
'''Mentor:''' Contact the [https://mail.kde.org/mailman/listinfo/kde-pim KDEPIM Mailing list]


'''Expected results:''' Import of the Kivio stencil format. A docker that allows to handle collections of stencils. Implementation of a connector tool, that can easily connect different shapes.
==== Project: Personalized email addresses for each contact  ====


'''Knowledge Pre-Requisite:''' C++
'''Brief explanation:'''Facilitate usage of a different email address for each contact.


===KDE PIM===
'''Expected results:''' For instance, if the user owns the domain mickeymouse.com then when he is communicating with [email protected] he would use the personalized address [email protected], and when he is communicating with goofy@yahoo.com he would use the address bar@mickeymouse.com. The Thunderbird email client supports this with the Virtual Identity extension. See bugs https://bugs.kde.org/show_bug.cgi?id=72926 and https://bugs.kde.org/show_bug.cgi?id=159251
KDE PIM is the interest group working on applications related to personal information management, e.g. contacts, calendar, mails, etc.


One of the current challenges is utilizing the new cross-desktop PIM infrastructure called [http://www.akonadi-project.org/ Akonadi].
'''Knowledge Prerequisite:'''


There are interesting projects on all levels of the software stack: libraries, application porting, new applications, access to online resources, etc.
'''Mentor:''' Contact the [https://mail.kde.org/mailman/listinfo/kde-pim KDEPIM Mailing list]


[http://pim.kde.org/ Website] - [http://techbase.kde.org/Projects/PIM Project Wiki] -  [https://mail.kde.org/mailman/listinfo/kde-pim Mailing list] - IRC channel: #kontact and #akonadi on Freenode.
'''Note:''' This entry was not added by KDEPIM developers. It is not enough for a complete Summer of Code project, and should be extended in case this idea is used as a project proposal.  


====Project: Akonadi Janitor Agent====
==== Project: KMail filter on Thread  ====
'''Brief explanation:'''
An [[Development/Architecture/KDE4/Akonadi#Akonadi_Agents|Akonadi Agent]] is a service process for performing tasks on data provided through the Akonadi server.


The task of a Janitor agent would be to keep the user's PIM data neatly organized, for example deleting news feed items which are above a certain age and not flagged, moving last week's mail to an archive, etc.
'''Brief explanation: '''Facility in Kmail filter to move messages to folders based on thread


'''Expected results:'''
'''Expected results: '''User can define filters based on the "In-Reply-to:" message-id of a new message (message A) matching the message-id of an existing message in an existing mail folder (message B).&nbsp; On match, option to move Message A to the folder that contains Message B.&nbsp; This will help in continuing threads in the same folder in which they were started.<br>
* An Akonadi Agent capable of managing actions on Akonadi collections triggered by various criteria
* At least fully working implementation of actions based on "Expire" criterias for mail, e.g. delete mail above certain age, move/copy to different collection, etc
* GUI for configuring actions and their trigger criteria.


'''Knowledge Prerequisite:''' C++ and Qt. Ideally would already have gone through the [[Development/Tutorials/Akonadi/Resources|Akonadi Resource Tutorial]] since Resources are a specialized form of agents and thus share some of the API and characteristics.
Please mail me if the problem statement or the requirement for this feature is not clear enough.&nbsp; Raj Mathur, raju at linux dash delhi dot org<br>


'''Mentor:''' Kevin Krammer (kevin dot krammer at gmx dot at)
'''Knowledge Prerequisite:''' Presumably, knowledge of KMail, understanding of the e-mail message RFC, C++.<br>
----
====Project: Alternative Akonadi Client Library====
'''Brief explanation:'''
Akonadi has a server/client like architecture where clients such as applications (but also resource) connect to a service and communicate with it through a suitable protocol.


Currently this is implemented for KDE in library called libakonadi-kde, however it is desirable to have additional implementations to be suitable for other library stacks, e.g. GLib/GObject based ones.
'''Mentor:''' Contact the [https://mail.kde.org/mailman/listinfo/kde-pim KDEPIM Mailing list]


'''Expected results:'''
'''Note:''' This entry was not added by KDEPIM developers. It is in general a nice idea. To make this work, threading has to be done independent from the message list. For example, an Akonadi agent could add attributes to the items that contain threading info. The filter and the message list would read these attributes. This requires a significant rewrite of the message list, and writing a threading agent. Also, this potentially requires fixing the Akonadi filtering framework, which is not yet integrated in KMail 2. All of the above certainly makes this enough for a complete Summer of Code project. Having filters that can read threading information would only be a side effect of all those changes. 
* A non-KDE based, preferably GLib/GObject based, Akonadi client library which
** can connect to a running Akonadi server
** fetch Akonadi collections
** fetch Akonadi items
** receive Akonadi change notifications (D-Bus based)


* A set of demo programs using the library which can
=== KOffice  ===
** recursively list (id and content MIME types) collections
** list (id and MIME type)oif items in a collection
** get the raw payload of an item


'''Knowledge Prerequisite:''' Depends on the chosen language and toolstack, e.g. C/Vala and GLib/GObject knowledge for a GLib/GObject based implementation.
==== KPresenter: Create animation effects and tidy our framework, ui  ====


'''Mentor:'''
'''Brief explanation:''' KPresenter has just gained an animation framework but we need lots of implementations for many kinds of effects. And we need a userinterface to manipulate it.  
----
====Project: Akonadi Consistency Checker====
'''Brief explanation:'''
Akonadi provides a structure of collections and items, similar to folders and files of a filesystem. Similarly the internal structures have to follow certain constraints which must not be violated. Nevertheless, this can happen as result of bugs, hardware failures, power loss and a million other reasons.


Filesystem checks exist to detect and possibly fix such situations. Such functionality would also be desirable for Akonadi.
First step would be to implement loading and showing of about 20 different animation effects. That is actually a simple and contained task which should get you into the basic workings. Next step is to create a user interface.  


'''Expected results:'''
'''Expected results:''' About 20 effects to be implemented. Extend and adapt the animation framework as needed to fulfill that. A user interface for creating and manipulating animations.  
* A consistency checker (built into the Akonadi server or stand-alone) that performs an extensible set of checks on the internal data structures of the Akonadi server, such as:
** items belong to existing collections
** collections are child collections of existing collections
** the collection tree is non-cyclic
** every collections is owned by an existing resource
** collection sub-trees are owned by the same resource
** every item payload part belongs to an existing item
** content type constraints of collections are not violated
** ...
* each check should be accompanied with recovery code, such as moving orphaned items into a lost+found folder
* integration into Akonadiconsole
* integration into unit-tests


'''Knowledge Prerequisite:''' C++ and Qt mandatory, SQL/database knowledge would be useful.
'''Knowledge Prerequisite:''' basic XML knowledge, C++ and Qt-knowledge, being able to understand complex code.  


'''Mentor:''' Volker Krause <vkrause@kde.org>
'''Mentor:''' Thorsten Zachmann, C. Boemann
----
====Project: Akonadi Resource for KMail local folders====


'''Most of this will probably be done as part of an NLnet project, see [http://thread.gmane.org/gmane.comp.kde.devel.pim/23895 this announcement].'''
==== KSpread: Improve saving to ODF  ====


'''Brief explanation:''' ODF is the native fileformat of KSpread. As such one of the most important aspects of KSpread is to be able to load and save OpenDocument Spreadsheet files (ODS). While we are working hard on improving the support for loading, saving is not that well tested yet. The goal would be to change that, to improve the saving to ODF as much as possible. This should be done by adding unittests for loading and saving of ODF documents and fixing bugs where they show up.


'''Brief explanation:'''
First step would be to test different cases and to identify problems. As a starting point a look on the wo rk done on the [http://wiki.koffice.org/index.php?title=Schedules Schedules], the [http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=office Specs] and the [http://websvn.kde.org/trunk/koffice/kspread Code] may help.  
KMail stores its mail in a folder hierachy where each folder can contain mails '''and''' further sub folders.


While mails are stored either as mbox or maildir, additional index files are used to speed up message listing and to store message status and flags.
'''Expected results:''' Loading, saving and reopening a document should introduce as less unwanted changes as possible. Saving should work as good as loading does already.  


The already existing Akonadi MailDir resource can handle the maildir aspects but cannot handle either mbox based folders nor the additional information stored in the index files.
'''Knowledge Prerequisite:''' ODF specs, Qt-knowledge, being able to understand complex code.  


'''Expected results:'''
'''Mentor:''' Sebastian Sauer
* a set of classes, probably as a library, capable of
** recursively listing the KMail folder tree given a base directory
** reading mails from the mbox and maildir folders in the KMail folder tree
** reading KMail index files
* an Akonadi resource using these classes to provide read-only access to all mails currently handled by KMail. The resource should also be able to transfer the flags stored in KMail's index file to Akonadi.
* Writing a migrator, similar to the current KResource->Akonadi migrator, that automatically reads the KMail config file and creates a Akonadi resource out of it. Optionally, depending on the overall progress, the migrator would also convert some of KMail's folder settings, like the folder icon or the expiry settings, to Akonadi collection attributes.


'''Knowledge Prerequisite:''' C++ and Qt mandatory, code analysis skills would be helpful regarding the handling of index files, refactoring skills if KMail's classes are to be extracted from KMail's code base (not required).
==== KSpread: Add support for pivot tables  ====


'''Mentor:''' Thomas McGuire <mcguire at kde dot org>
'''Brief explanation:''' Many spreadsheet applications support so called pivot tables/data pilot tables. KSpread currently has no such support, but this would be very nice to have, as ODF does contain support for this.
----


====Project: Improvments in KMail's HTML support====
'''Expected results:''' It should be possible to insert pivot tables in kspread documents. Being able to save, load and update pivot tables loaded from ods documents would also be very nice.
'''Brief explanation:''' Improve the HTML support in KMail, especially making it possible to preserve the HTML format when replying or inline forwarding.


While KMail's HTML support has been constantly improving, it still has some important bits missing and some minor bugs. The goal of this project would be to implement the missing features and do general bugfixing in the HTML support.
'''Knowledge Prerequisite:''' Qt, C++, some experience with pivot tables in other applications would be nice.


One of the biggest missing features, with over 1500 votes on [https://bugs.kde.org/show_bug.cgi?id=86423 bugzilla], is the ability to preserve the HTML format when replying or forwarding, which is often an essential requirement in some enterprises.
'''Mentor:''' Marijn Kruisselbrink


[http://websvn.kde.org/?view=rev&revision=911149 Recently], support for inline HTML images was added to KMail. This support needs a few improvements, like being able to put images in the signature or resizing the images.
==== Create an exciting new content type (flake shape)  ====


Currently, KMail relies on [http://doc.trolltech.com/4.4/qtextedit.html#html-prop QTextEdit::toHtml()] to generate the HTML source. This however is very weak, as QTextEdit has some bugs and generally produces HTML that is only equaled by MS Word in its ugliness. Stephen Kelly has started some work to make this output nicer, and to produce other forms of markup, like text/enriched. This is achived by creating so-called [http://websvn.kde.org:80/trunk/KDE/kdepimlibs/kpimidentities/richtextbuilders/ rich-text builders]. One goal would be to finish this work and integrate it into KMail.
'''Brief explanation:''' KOffice allows developers to create so called flake shapes as plugins. Examples of this are the formula editor, the video player and the music notation shape. We invite the GSoC developer to come up with a content type of his / her own choosing and implement that as a plugin for KOffice.  


Comment by Thomas; QTextEdit html generation is not optimal due to html simply not supporting all QTextEdit features. Qt45 choose to export to ODF instead. Maybe KMail should try to leverage this instead?
'''Expected results:''' Loading, saving and reopening a document with the shape in it should just work. There should be at least a simple way to edit the content inside the KOffice applications (mouse/keyboard handling, some dialogs).  


Other nice points would be to support the text/enriched format for reading or composing mails, and to support the text/flowed format when composing. Although this is not strictly HTML related, it would improve the experience for many people.
The project is very flexible and we can have many different ones running at the same time, please feel free to submit more than one if you must. A google search for the musicflake will give you the project from a couple of years back. Further quick examples of shape types may be; knitting patterns, graphs &amp; maths, tagclouds, etc. And naturally its possible to continue working on the existing ones. Like the formula shape and the music shape.  


Of course, your own ideas are very welcome as well
'''Knowledge requisites:'''


'''Another idea, which invalidates most of this, is to use a Webkit-based editor, like described in [http://labs.trolltech.com/blogs/2009/03/12/wysiwyg-html-editor/ this blog post].'''
*C++
*Qt


'''Expected results:'''
==== Add support for e-book formats to KOffice ====
* Option to preserve the HTML format when replying or forwarding
* Support inline images also in signatures
* Improve inline image support by allowing to scale the images
* Nicer HTML generation by completing and integrating the HTML builder from Stephen Kelly
* Various bugfixes in the HTML support
* Optionally, also support text/enriched as alternative to HTML (both reading and composing). See [http://www.faqs.org/rfcs/rfc1896.html RFC 1896]. Composing support can also be based on Stephen's builders.
* Optionally, support text/flowed format for non-HTML mail ([http://www.faqs.org/rfcs/rfc3676.html RFC 3676])


'''Knowledge Prerequisite:''' Moderate C++ and basic Qt knowledge mandatory
'''Brief explanation:''' Add a new export for one or more formats that are specifically tuned for e-book devices.


'''Mentor:''' Thomas McGuire <mcguire at kde dot org>
With the increased popularity of ebook readers there is going to be a need for tools to create ebook content. While most e-book devices can display PDF there are in fact a lot more formats in use. One such format is .epub, which allows reflowable content (unlike PDF). The format itself is based on XML and uses style sheets (CSS) to format content. There are few free software tools that can generate and manipulate this format and those that exist are restricted to command line.
----


====Project: import/export for filtering rules in Sieve format in KMail====
Since most people creating content will most likely want to use an office suite or word processor to make documents it makes sense to add an export option for this format to KOffice.  
'''Brief explanation''' Add functionality to import/export of mail filtering rules in Sieve format in KMail.


Sieve is a language for declaring mail filter rules on a mail server. It was developed as part of the Cyrus IMAP server, but was quickly spin off and turned into a standard (http://tools.ietf.org/html/rfc5228). There are quite a few servers that have support for Sieve, in various degrees of completeness. It is quickly gaining support. Clients that support it are KMail and Thunderbird.
'''Knowledge requisites:'''


KMail already has support for talking to Sieve enabled servers and also has support for client side filters. These two rule sets seem to be separate. It would be nice if you could dump the rules you have in one client and able to either install them on a server, or load them into another client, if you want to access your mail from different machines, but don't want to reconfigure your mail clients over and over again, or to quickly reconfigure clients if you don't have a Sieve enabled server.
*C++
*XML
*CSS


'''Expected results:'''
=== KDE General ===
Successful import and export of a (subset) of mail filtering rules between various KMail instances.


'''Knowledge requisites'''
==== Analyzing and improving KDE startup time ====
* C++
* knowledge of how mail works


===KDE on Windows===
====Solid API backend====
'''Brief explanation:'''
'''Brief explanation:'''
The porting efforts to make KDE available across platforms do need some backends for system dependent tasks. One of the KDE libraries that bundles this is Solid.
The time needed from the moment KDM is left till the KDE plasma desktop is visible and till someone is able to start work is long compared with other systems, especially closed-source systems. The first step would be to analyze what causes KDE startup to take so long. In the second phase patches would be implemented withj the goal to address the identified problems and to decrease the overall startup time.


'''Expected results:'''
'''Expected results:'''
You implement a backend for the [http://solid.kde.org Solid API] using WINAPI.
* A document that describes the work done (analyzing, findings, improvements, etc) and that allows to reproduce the analyzing at a later time. The goal here is to have a document that provides long-term results by making future investigations and improvements easier.
It has to work with both MinGW and MSVC compilers. Not every function is required, but the basic functionality (network access, removable drives/harddisks and power) should be implemented.
* Patches that let KDE startup faster. This is the direct visible result that should result in a faster KDE startup as soon as possible.


'''Knowledge Prerequisite:''' Windows API and C++/Qt. You should be able to set up the [http://techbase.kde.org/Getting_Started/Build/KDE4/Windows development environment] yourself and be familiar with it.
'''Knowledge Prerequisite:'''
* C++
* independent and organized working style


'''Mentor:''' Carlo Segato (brandon dot ml at gmail dot com) or Patrick Spendrin (ps_ml at gmx dot de)
'''References:'''
----
* my [http://kross.dipe.org/kde4startup/bootchart.png bootchart] shows that we can optimize different areas to save some seconds. In the bootchart the ksplashx is the splash screen that is displayed from the moment the displaymanager kdm is left till the moment the KDE plasma desktop is visible and can be used.
* [http://kross.dipe.org/kde4startup/callgraph.txt oprofile] or sysprof or valgrind to analyze the startup process to know where optimization makes sense.
* probably interesting files related to the startup sequence are in the KDE svn at kdebase/workspace/startkde.cmake, kdelibs/kinit/kinit.cpp, kdelibs/kded/kded.cpp (and kdelibs/kded/kbuildsycoca.cpp), kdebase/workspace/ksmserver/startup.cpp, kdebase/workspace/kwin/main.cpp and kdebase/workspace/plasma/desktop/shell/plasmaapp.cpp


===KDE on Mac OS X===
'''Workflow:'''
====Some Ideas====
* Solid Backend for Mac OS X using IO-Kit
* Strigi (and may be also Nepomuk) backend using Mac OS X's Spotlight
* Package creation using CPack
Please ask on kde-mac at kde dot org
----


===KDE Games===
1. Setup KDE development environment ([http://techbase.kde.org/Getting_Started/Sources/Using_Subversion_with_KDE Subversion] and [http://techbase.kde.org/Getting_Started/Build/KDE4 Building])
====Project: Mancala game====
 
'''Brief explanation:'''
2. Analyzing the startup using our self compiled KDE. We could use bootchart, sysprof, oprofile, etc. to have an idea what KDE does during startup.
Mancala is a family of board games played around the world, sometimes called "sowing" games, or "count-and-capture" games, which describes the game-play. Mancala games play a role in many African and some Asian societies comparable to that of chess in the West. The list of mancala games best known in the Western world includes Kalah and Oware. Other games are Congkak, Omweso, Ünee tugaluulakh, Bao, Sungka and Igisoro.
 
3. Get familar with the code that is responsible for the startup.


The word mancala comes from the Arabic word naqala meaning literally "to move." There is no one game with the name mancala; instead mancala is a type, or designation, of game. This word is used in Syria, Lebanon, and Egypt, but is not consistently applied to any one game.
4. Change the code that is responsible for the startup to improve the overall startup time.


In the USA, however, "mancala" is often used as a synonym for the game Kalah.
'''Examples:'''


'''Expected results:'''
* [http://reviewboard.kde.org/r/3331/ Delay initialization of PowerDevil and DeviceAutomounter] was resulting in a one second startup-time improvement
The aim of this project is developing Mancala game with lively interface that is changeable depend on the culture user chose to play. For example, if  user choose Africa Culture, the interface will be a board drew on sand with several stones plus sounds of jungle, wild-animals...
* [http://reviewboard.kde.org/r/2766/ Disable logout sound] was resulting in KDE 4.5 having a much shorter logout song compared to previous versions.
* [http://reviewboard.kde.org/r/2034/ Don't wait for kwin or kcm's in ksmserver] was discarded but we probably like to look at it again + test if it really improves the startup-time + look if it can be done another/better way + etc.
* [http://reviewboard.kde.org/r/3076/ Remove obsolete kbuildsycoca run on startup] does not really improve the startup-time (at least not notable) but removed obsolete code and made it possible again to be able to manually disable the kbuildsycoca (cache database that contains informations that are in the *.desktop files, so KDE's plugin system) run on startup.


'''Mentor:'''
'''Mentor:'''
currently there is no mentor for this project, please go to kde mailing list and find one !!
Sebastian Sauer
 
==== Creating a KDE performance testcase  ====


====Project: Kolf 2 landscape object====
'''Brief explanation:'''
'''Brief explanation:'''
Kolf 2 is the second incarnation of KDE's minigolf game. We are currently rewriting it from scratch to take advantage of the powerful technologies provided by Qt 4 and KDE 4.
KDE workspace and applications often have a reputation of having extensive resource requirements, but there are rarely reliable numbers or tests that could be reproduced. As such there are almost no reliable public data on KDE's performance, nor is there a reasonably simple way to check the status.


'''Expected results:'''
'''Expected results:'''
The task in this project is to create an object (or multiple objects) that provide(s) landscape textures, slopes, puddles and sand bunkers.
A set of tools, scripts and/or documents on how to measure KDE performance in important areas in a realiable and reproducible way. Using the testcase it should be possible for example to compare how different KDE SC releases change over the time and help identify problematic spots. In other words, the expected result in not improving any specific KDE area, but creating means for helping with it.
 
'''Knowledge Prerequisite:'''
* C++, scripting (required)
* experience with benchmarking (recommended)


If you finish this task before the end of the summer, you can fill the remaining time by porting as much game objects from Kolf 1 to Kolf 2 as possible (e.g. windmills, floating blocks, signs or bumpers).
'''References:'''
* [http://ktown.kde.org/~seli/memory/ http://ktown.kde.org/~seli/memory/]
* [http://www.berthels.co.uk/exmap/ http://www.berthels.co.uk/exmap/]
* Performance-related entries in [http://kdedevelopers.org/blog/280 http://kdedevelopers.org/blog/280]


'''Knowledge Prerequisite:''' C++/Qt. Experiences in graphics programming with Qt will definitely help, as you are expected to implement 2D rendering for the landscape object.
'''Mentor:'''
Lubos Lunak


'''Mentor:''' Stefan Majewsky (majewsky at gmx dot net) &ndash; Please contact me to let me help you to improve your proposal.
==== CMake/CDash Testing Improvements: Subprojects ====


====Project: Kolf 2 editor interface====
'''Brief explanation:'''
'''Brief explanation:'''
The minigolf game Kolf provided an editor interface from the beginning, to allow the users to create custom courses. For Kolf 2, we are rewriting the game engine and can therefore not use the old editor code.
Most KDE modules are big, which can cause issues of information overload when all developers in a module are emailed about any regressions. Alex has done a considerable amount of work getting nightly KDE CDash submissions (see http://my.cdash.org/), but dividing the modules up into subprojects would improve the granularity of feedback. CMake 2.8 has subproject support, but it still requires a lot of manual work. Working on the KDE CMake build system, and CMake directly, to improve labeling of subprojects and submission to CDash.


'''Expected results:'''
'''Expected results:'''
Your task would be to create an editor interface (may be embedded in the game, or a standalone application). A few basic parts are available, and the Kolf 2 engine supports generic methods to provide data to editor interfaces, and display editor overlays on the game view.
* A document that describes the work done (using subprojects, submitting module builds broken up into subprojects).
* Patches to the KDE build system to support subprojects.
* Patches to CMake to improve support of subprojects in KDE.
* Working with KDE modules to deploy subpprojects in those modules.
 
'''Knowledge Prerequisite:'''
* C++, CMake, CDash
 
'''Mentor:'''
Marcus Hanwell and Alexander Neundorf
 
=== KDE on Windows  ===
 
==== DrKonqi on Windows  ====
 
'''Brief explanation:'''
DrKonqi, together with the crash handling classes need to be fully ported to Windows. Currently, DrKonqi can run on windows, but it cannot generate a valid backtrace. So, the next step is to investigate on how to produce valid backtraces, probably using the dbghelp API and libbfd from mingw binutils and how to change the current installation process to support debug packages. On the first part, there should be implementations for a debugger which will give valid results for both compilers (mingw/msvc).
 
'''Expected results:'''
The student should investigate & document how to produce valid backtraces with dbghelp API and libbfd. Based on these findings, a debugger should be written which will generate those backtraces.
 
'''Knowledge Prerequisite:'''
* C++ (required)
* win32 API (strong recommendation!)
* Qt (recommended)
 
'''Mentor:'''
Patrick Spendrin / George Kiagiadakis
 
=== KWin  ===
 
KDE's window manager
 
[http://techbase.kde.org/Projects/KWin Techbase page] - [https://mail.kde.org/mailman/listinfo/kwin Mailinglist] - IRC channel: #kwin on Freenode.  
 
==== KWin scripting support  ====
 
'''Brief explanation:'''
 
KWin is customizable, but only using GUI options, which limits the possibilities. Adding scripting support would make the possibilities for customization virtually unlimited. See also [http://www.kdedevelopers.org/node/3336 http://www.kdedevelopers.org/node/3336].
 
'''Expected results:'''
 
Wrapping KWin internals in a suitable API and adding scripting using standard KDE/Qt scripting support. It should be possible to control various aspects of windows, query window management data, react on various events and write desktop effects in a usable way (sufficient performance and convenience). Scripting usage should be similar to other places in KDE such as Plasma, as reasonable.
 
'''Knowledge Prerequisite:'''
 
*C++, Qt, scripting language (required)
*X11 (nice to have, but not required)
 
'''Mentor:''' Lubos Lunak
 
<br>
 
==== KWin or Mobile / MeeGo  ====
 
'''Brief explanation:''' Get KWin working on devices such as the N900 or other small devices so that KDE Plasma Mobile can provide the full UI stack with proper integration between plasma-mobile and kwin.  
 
'''Expected results:''' Completed OpenGL ES support in KWin for effects, an "expose" effect that is appropriate to mobile systems triggerable by a D-Bus interface


If you finish the editor interface before the end of the summer, you can fill the remaining time by porting as much game objects from Kolf 1 to Kolf 2 as possible (e.g. windmills, floating blocks, signs or bumpers), or using your editor to put together some cool courses.
'''Knowledge prerequisite:''' OpenGL, window management a plus


'''Knowledge Prerequisite:''' C++/Qt. Experiences in model/view programming with Qt will be of good use.
'''Mentor:''' Martin Gräßlin


'''Mentor:''' Stefan Majewsky (majewsky at gmx dot net) &ndash; Please contact me to let me help you to improve your proposal.
==== Improved effects configuration ====
'''Brief explanation:''' Provide a better user interface for managing KWin effects, so that a user can see which effects are mutual exclusive, which work together and which hardware is required for an effect.


====Project: Parsek – advanced galaxy conquest client====
'''Expected results:''' A new compositing configuration module supporting use cases like "effect for minimizing" and "effect for closing window" should be implemented. Furthermore the window rules should be extendes so that effects can be enabled/disabled for special windows.


[http://www.thousandparsec.net/wiki/Parsek Parsek] is a client for playing [http://en.wikipedia.org/wiki/4X 4X] (explore, expand, exploit and exterminate) galaxy conquest strategy games, which are created using [http://www.thousandparsec.net/ Thousand Parsec] framework. You can think of it as an advanced version of [http://games.kde.org/game.php?game=konquest Konquest].
'''Knowledge prerequisite:''' C++, basics of window management, usability experience


'''Brief explanation:''' Parsek uses the existing [http://www.thousandparsec.net/tp/dev/documents/libtpproto-cpp/html/ C++ Thousand Parsec protocol library] to create a KDE 4 graphical game client. The client is then used to connect to any game server running any game created using Thousand Parsec framework. Some code (you can find it in [http://websvn.kde.org/trunk/playground/games/parsek/ playground/games/parsek]) is already written (to get object of the universe and messages) but you can't play the games yet. The student's task will be to bring Parsek at least to a state so that people would be able to play games with it.
'''Mentor:''' Martin Gräßlin


'''Expected results:''' To be able to play games some features must be added: displaying a star-map, displaying object info in a nice way, displaying messages in a nice way, getting and displaying object orders, creating new orders. If there is some time left after before mentioned required features are implemented the student will work on additional optional features, for example: automatic discovery and display of game servers (on local network and/or from meta-server), game servers accounts manager, plug-in for game server administration, Plasma widget with overview and quick access to the games someone is playing, single-player wizard (to easily setup local server and AI clients)...
=== Nepomuk  ===


'''Prerequisites:''' C++/Qt (experience with [http://doc.trolltech.com/4.5/model-view-programming.html model/view] and [http://doc.trolltech.com/4.5/graphicsview.html graphics view] programming is a plus), experience with similar 4X games (Stars!, Galactic Civilizations, Master of Orion, Space Empires, Spore, ...)
[http://nepomuk.kde.org Website]- [http://techbase.kde.org/Development/Tutorials#Nepomuk Documentation/Howtos] - [http://www.semanticdesktop.org/ontologies/ Ontologies] - [https://mail.kde.org/mailman/listinfo/nepomuk Mailing list] - IRC channel: #nepomuk-kde on Freenode.  


'''Mentor:''' Jure Repinc ([mailto:jlp_at_holodeck1_dot_com jlp at holodeck1 dot com]). Contact also on [irc://chat.freenode.net/#kdegames #kdegames]/[irc://chat.freenode.net/#tp #tp] channels on freenode.net (nickname JLP) and [https://mail.kde.org/mailman/listinfo/kde-games-devel kde-games-devel]/[http://www.thousandparsec.net/tp/mailman.php/listinfo/tp-devel tp-devel] mailing lists.
(Also see the [http://techbase.kde.org/Projects/Nepomuk Nepomuk techbase page] for a long list of Nepomuk-related ToDos and ideas.)


====Project: Robots Game ====
==== Web Metadata Extractor Framework and Service  ====


[http://techbase.kde.org/Projects/Games/Proposed_Games#Robot_Battle_.28Programming_Game.29 Based on this idea] the robots game would be a cross between games and edu, a game where users would also learn some programming basics while they are building their robots for the competition.
'''Brief explanation:'''


'''Brief explanation:''' The idea is to develop a simple game loosely based on Robocode, where computer programmed robots created by the player can fight among themselves.
Currently, the only metadata for files available is extracted by libstreamanalyzer and obviously it's limited to the metadata already present in files. However, there's a lot more metadata that can be mined from web resources such as lyrics, movie plots and bibliographic data.  


'''Expected results:''' A fully playable game which is also an opportunity for learning programming basics and provide infinite replayability.
We need a plugin-based service, which would slowly crawl indexed files in background and let plugins extract additional metadata based on existing metadata. There must be a way to configure the service and plugins.  


'''Prerequisites:''' Strong C++/Qt skills
The project includes writing a number of useful plugins to "field test" the design to make sure it's viable, serve as examples for other plugin writers and provide a visible benefit to users.


'''Mentor:''' To be picked among kdegames and kdeedu community
'''Expected results:'''  


----
Music: lyrics, extra album metadata(year, track count, trivia), artist/band metadata(birth date, gender).


===kdelibs===
Video: IMDB data
==== Project: DOM3 XPath Level 1 and/or DOM selectors API support in KHTML ====
 
'''Brief explanation:'''
A convenient interface to configure and enable/disable plugins(say, user might want lyrics but doesn't care about artists), configure the service(such as frequency of recrawling to see if new metadata is available)
Because JavaScript frameworks have popularized access to parts of documents using various query languages, direct browser support for such queries
has become fairly common. This project is about adding support for one (or two) of such languages to KHTML. Basic implementation of each is expected to be simple, but there may be some interesting optimization opportunities to explore.


'''Expected results:'''
Mentor satisfied that plugins can be written to use the service for other purposes.  
Implementations of XPath 1 or DOM selectors API at DOM level with appropriate JavaScript bindings that are standard-compliant, written in simple & maintainable fashion, and perform reasonably well.


'''Knowledge Prerequisite:''' C++, and some comfort with working with large codebases.
'''Knowledge Prerequisite:'''  


'''Mentor:''' Maks Orlovich (maksim at kde dot org)
*C++
*Qt
*SPARQL and Nepomuk or any other semantic background would help


===Solid===
'''Mentor:'''  
====Project: UPnP support through Jolie====
'''Brief explanation:'''
Adding UPnP support to Solid would mean offering transparent UPnP support to every KDE application using the Solid API, keeping them clean from every UPnP implementation aspect.
At the present, the [http://www.jolie-lang.org/ Jolie language] is being integrated with Plasma by means of the [http://websvn.kde.org/branches/work/~ervin/sodep/ QtSodep] library, soon to offer higher levels of abstraction.


The aim of this project would be to implement a UPnP protocol for Jolie, so that Solid could re-use the integration being made with QtSodep and gain UPnP support without having to worry about implementation details. Having a UPnP protocol implementation in Jolie would have other considerable consequences, like the possibility to act easily as a UPnP server or to compose and export existing UPnP services.
Sebastian Trueg or Eveny Egorochkin


'''Expected results:'''
==== Dedicated Desktop Search GUI ====
*The creation of a "upnp" protocol in Jolie, supporting at least the Internet Gateway Device (IGD) and MediaServer profiles.
'''Brief Explanation:''' While we have powerful search tools in KDE/Nepomuk the representation is still not perfect. Especially non-file results are shown in an unintuitive way. The goal is to have a search GUI (reusable in several applications if possible) that presents search results in a nice manner. File results are simple (but could include snippets), but also contacts and emails (in KDE 4.5) and other results like tasks or projects needs proper display.
*The creation of a UPnP Jolie service for UPnP service discovery and monitoring.
*Extending libsolid to expose UPnP devices found on the network.


'''Material Prerequisite:''' Having UPnP devices or software applications to test with. Most home routers support IGD, and there exists free software supporting the MediaServer profile ([http://mediatomb.cc/ mediatomb]).
A generic approach would in theory be best but is probably impractical in the scope of GSoC. Thus, a GUI handling the mentioned special cases would already be a nice result.


'''Knowledge Prerequisite:''' Understanding of the UPnP specifications, Java (for the development of the Jolie UPnP protocol) and basic knowledge of the Jolie language.
'''Knowledge Prerequisite:'''  


'''Mentors:''' ervin (ervin at kde dot org) fmontesi (famontesi at gmail dot com)
*C++
----
*(Qt /KDE)
* SPARQL and Nepomuk or any other semantic background would help


===KWin===
'''Mentor:''' Sebastian Trueg


KDE's window manager


[http://techbase.kde.org/Projects/KWin Techbase page] - [https://mail.kde.org/mailman/listinfo/kwin Mailinglist] - IRC channel: #kwin on Freenode.
==== Sub folders in Nepomuk search KIO slave ====
'''Brief Explanation:''' With the nepomuksearch and nepomuk KIO slaves we have powerful search tools at our hands (compare project above). One thing is missing though: subfolders to further restrict a query.
Since these can hardly be created automatically the idea would be to have the user create them through a slick GUI. Then they can use and share this manually created hierarchy of queries.


====Project: Window tabbing====
A good example could be music files: define folders for "artists", "albums", "genres", "years", and so on. Then maybe in the "artist" folder we could have another folder "all tracks" and one for each album.


'''Brief explanation:'''
But there could be other hierarchies as well: filter by projects and then by persons related to the things. Or by tasks or both. Or have one subfolder pulling in everything that contains the name of the project.
Window tabbing is a feature that allows you to group multiple application windows together to cover the same space. It is identical to what is already available in any modern web browser except it applies the the window as a whole. Window managers that have this feature available include Fluxbox and Ion. This feature was [http://bugs.kde.org/show_bug.cgi?id=42023 originally requested] in 2002.


'''Knowledge Prerequisite:''' C++ and Qt. Understanding of the X window system and Xlib is a benefit but not required.
There are many possibilities.


'''Mentors:''' Lucas Murray (lmurray undefinedfire com)
'''Expected Results:'''  
* A GUI to create hierarchies of queries with the possibility to upload them to opendesktop.org or get new ones from there.
* Integration of the hierarchy into the KIO slaves. Either with a new KIO slave which makes use of the existing ones or with a extension to the existing ones.
* A description format for the hierarchies (could be XML for example)
* A set of default hierarchies the user can choose from to get started.


====Project: Window tiling====
'''Knowledge Prerequisite:'''


'''Brief explanation:'''
*C++
Window tiling is a technique of displaying application windows side-by-side without overlap. The position, size and layout of the windows can either be specified by the user or determined automatically to best fit the screen. Examples of existing tiling window managers include Awesome, XMonad, Ion and Ratpoison. One of the main advantages of tiling is that is makes application windows easy to navigate solely by the keyboard. This feature was [http://bugs.kde.org/show_bug.cgi?id=59338 originally requested] in 2003.
*(Qt /KDE)
* SPARQL and Nepomuk or any other semantic background would help


'''Expected results:'''
'''Mentor:''' Sebastian Trueg
* Users should be able tile existing floating windows on-the-fly with simple keyboard shortcuts or mouse gestures.
* It should also be possible to run the entire desktop environment entirely in tiled mode (Enabled by configuration settings). In this mode new window would be added to the tiling grid by default yet can be removed by the user if required.
* The final tiling system should not interfere in any way with the existing floating window management.


'''Knowledge Prerequisite:''' C++ and Qt. Understanding of the X window system and Xlib is a benefit but not required.
==== Stream Analyzer based on Data Structure Descriptions  ====
'''Brief explanation:'''  


'''Mentors:''' Lucas Murray (lmurray undefinedfire com)
The analyzers in libstreamanalyzer (part of Strigi) are all written in C++. This gives a lot of flexibility but could be improved. The best way to describe a file format and the data formats used in the file is to write a grammar for it. Ideally, there would be a stream analyzer that takes the data structure descriptions and a mapping to extract from the certain files to metadata triples.


----
A helper program would convert the data structure description and a mapping description and compile it to a stream analyzer. A simple example using the header for a PNG file. A PNG files starts with 8 bytes of magic, then 4 bytes with the chunk size, then 4 bytes unsigned big endian for the width and 4 bytes unsigned big endian for the height. A simple grammar could say:
magic: 8*Byte
chunksize: BigEndianUInt32
width: BigEndianUInt32
height: BigEndianUInt32
Then a separate mapping could be written to convert this information to triples:
width -> http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#width
height -> http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#height


=== digiKam ===
This way, one could easily write stream analyzers without knowledge of C++. Also one would be able to develop faster analyzers independently from the actual file formats by writing a better code generator.


Photo Management program
Other analyzer projects could benefit too, since the format description and mapping is language-independent.


[http://www.digikam.org digiKam project web site] - [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist] - IRC channel: #digikam on Freenode.
'''Expected results:'''


====Project: High Dynamic Range (HDR) plugin====
Look for a grammar language or a subset, such as BNF, antlr or the one used in msoscheme, that could describe a wide range of file formats and that is simple enough that one can write a parser for it. The generated code should give an implementation of a Strigi::StreamEventAnalyzer for each structure description plus mapping.


'''Project Information:''' digiKam is an advanced digital photo management application for KDE, which makes importing and organizing digital photos a "snap". The photos are organized in albums which can be sorted chronologically, by folder layout or by custom collections. digiKam has an Image Editor which has its own plugin subsystem with some common tools e.g. red eye correction or Gamma correction. Additional plugins are provided with the main application to process advanced corrections on image like color management, noise reduction, or special effects. digiKam image editor support 16 bits color depth image internally. The goal of this project is to create a new plugin dedicated to create [http://en.wikipedia.org/wiki/High_dynamic_range_imaging HDR image].
'''Knowledge Prerequisite:'''  


'''Expected results:''' This project should implement an HDR tool will mix two or more (nearly) identical images having different exposure into a new image representing a wider dynamic range, which is closer to human perception of a photographic scene. [http://en.wikipedia.org/wiki/Tone_mapping Tone-mapping method] must be used to create HDR images. An open-source implementation is already available at [http://zynaddsubfx.sourceforge.net/other/tonemapping this url] and can be re-used as well. There is an old [https://bugs.kde.org/show_bug.cgi?id=144593 feature request].
*C++
*Experience with code generation and data format grammars
*SPARQL and Nepomuk or any other semantic background would help


'''Knowledge Pre-Requisite:''' C++/Qt.
'''Mentor:'''
Jos van den Oever


'''Mentors:''' Gilles Caulier (caulier dot gilles at gmail dot com)
'''IRC channel:'''
#strigi on Freenode


====Project: Face Recognition====
==== See Also... ====


'''Project Information:''' Digikam is a photograph collection manager able to collect, organize and send pictures to some major web gallery services, like Picasa Web or Flickr. Face recognition is useful for it's purpose as it makes tagging people on photos really easy and painless. People with thousands of photos in their library would get much of the work needed to catalog them done by digikam right in the process of acquisition from media.
In this very list:
* [[GSoC/2010/Ideas#Project:_More_Nepomuk_Integration_in_Kontact|More Nepomuk Integration in Kontact]]
* [[GSoC/2010/Ideas#Project:_Integrate_Nepomuk_in_bookmarks|Integrate Nepomuk in bookmarks]]
* [[GSoC/2010/Ideas#Project:_Financial_information_in_Nepomuk|Financial information in Nepomuk]]


'''Expected results:''' The scope of this project is to implement in digikam a face recognition component (using Principal component analysis - PCA) which automatically tags faces when new photos are inserted. This is one of the highest priority feature request: wish 146288.
And more Nepomuk ideas:
* [http://techbase.kde.org/projects/Nepomuk Nepomuk Project Ideas page]
* [https://bugs.kde.org/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=nepomuk&long_desc_type=substring&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&keywords_type=allwords&keywords=&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_severity=wishlist&emailassigned_to1=1&emailtype1=substring&email1=&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= Nepomuk Wishes in the KDE bug db]


This component should be able to keep a little database of known faces and apply the related tags for them. When a face is not recognized in those present in the database, the face should however be selected and tagged manually by the user.
=== Plasma  ===


'''Knowledge Pre-Requisite:''' C++/Qt, OpenCV
[http://plasma.kde.org Website] - [https://mail.kde.org/mailman/listinfo/panel-dev Mailing list] - IRC channel: #plasma on Freenode.


'''Hints:''' Tutorial on facerecognition using OpenCV [http://www.cognotics.com/opencv/servo_2007_series/index.html]
<br>


'''Mentors:''' To be assigned (Gilles Caulier?)
==== Plasma Library Unit Tests ====
'''Brief explanation:''' A set of unit tests regarding Plasma library contents (like widgets, dataengines, animations, and such) which basically helps developers know when a certain modification on the code would generate a regression bug or unexpected behavior. This idea is similar to the Javascript API Test Suite one but with a different goal, which is the Plasma core library itself.


----
'''Expected results:''' A set of unit tests (using QTestLib framework preferably) divided by group and handled by the build-system using CTest. GCOV/LCOV/GENHTML shall be used to generate proper coverage report data (with a coverage threshold at least >=90%). The tests in general will cover signal/slots behaviors and object states (actual data from object class members) given a certain procedure (i.e. clicking on a button). Bonus points for more complex tests which involves graphical behavior aspects of widgets and animations.


===KDE Telepathy Integration===
'''Knowledge prerequisite:''' C++, Qt (including QTestLib), Plasma and code coverage report tools.
The [http://telepathy.freedesktop.org Telepathy Framework] is a desktop independent framework for real-time communication, such as VoIP and Instant Messaging. The projects below are some ideas for integrating telepathy into KDE.


If you want to know any more about Telepathy and KDE, drop by the irc channel #decibel and talk to '''grundleborg''', or use the mailing list decibel AT kde DOT org.
'''Mentor:''' Bruno Abinader


====Project: Message Logging====
==== Javascript API Test Suite  ====


'''Project Information:''' The Telepathy Framework allows for components which can watch channels whilst a user is interacting with them through another application. A program could be created to log the content of text instant messages into an Akonadi collection.
'''Brief explanation:''' A test suite system for ensuring quality of the various JS APIs including Javascript Plasmoids, DataEngines, Runners and the plasma-desktop scripting console. Due to the dynamic nature of Javascript, it is prone to errors in the bindings and changes in behavior.


'''Expected results:''' This project should result in a telepathy watcher which is capable of logging the contents of text chats into an Akonadi collection. It should be possible to go off-the-record in a particular conversation from telepathy user interfaces and the logger should not save any messages in this situation. This project might also include modifying the Kopete logging plugin to use the same akonadi collection for logs, and making a migration tool from Kopete's old logging format to the new Akonadi collection.
'''Expected results:''' A test harness (could link into QTest perhaps?) to run the scripts, a reporting tool (or integration with an existing one) that can show current results and compare against past releases and 90%+ coverage of existing API via JS scripts runnable by the harness. Bonus points for autogenerating tests from the QMetaObjects of the bound classes in kdelibs/plasma/ such as the widgets.


'''Knowledge Pre-Requisite:''' C++/Qt, some basic knowledge of the Telepathy Framework is an advantage, but not necessary if you have an interest in real-time communcation and are prepared to learn fast.
'''Knowledge prerequisite:''' Javascript and C++, Qt and Plasma a bonus


'''Mentors:''' George Goldberg (grundleborg at gmail dot com) IRC: grundleborg
'''Mentor:''' Aaron Seigo


====Project: Telepathy Integration to any KDE application====
==== Grid and Grouping Containments  ====


'''Project Information:''' Provide some collaborative feature or instant messaging integration for your favourite KDE application.
'''Brief explanation:''' Containments that do widget grouping and gridding


'''Expected results:''' This project should result in a collaborative feature  or instant messaging integration being added to the chosen KDE application. It should be complete enough to provide at least basic functionality to end users, with the possibility of further improvement after the summer of code period ends.
'''Expected results:''' A desktop and a panel containment which allow widgets to be grouped or put into grids.  


'''Knowledge Pre-Requisite:''' C++/Qt, some basic knowledge of the Telepathy Framework is an advantage, but not necessary if you have an interest in real-time communcation and are prepared to learn fast.
'''Knowledge prerequisite:''' C++, Qt and Plasma a bonus


'''Mentors:''' George Goldberg (grundleborg at gmail dot com) IRC: grundleborg. You should also discuss your idea with the development team of the application in which you would like to provide a Telepathy feature.
'''Mentor:''' Aaron Seigo


====Project: Telepathy Plasma Integration====
==== Plasmoid Data Caching  ====


'''Project Information:''' Provide integration of presence and buddy information into plasma.
'''Brief explanation:''' Right now when Plasma Netbook does not have a network connection, Plasmoids such as the news/rss, microblogging, etc. plasmoids tend to show nothing in the interfaces. A simple caching system would allow widgets to show the data that was available when networking was last available.  


'''Expected results:''' You should provide multiple points of integration between presence and contact information and plasma. Plasmoids allowing the display and manipulation of your own presence information should be made available, building on the plasma applets and datengines already in existance for presence information. Plasma activities could also be made aware of presence, and the contacts plasmoid could be made aware of your buddies from Telepathy instant messaging accounts.
'''Expected results:''' Plasmoids / DataEngines relying on network access should cache data for when networking is not available and refresh when networking becomes available.  


'''Knowledge Pre-Requisite:''' C++/Qt
'''Knowledge prerequisite:''' C++  


'''Mentors:''' George Goldberg (grundleborg at gmail dot com) IRC: grundleborg. You should also discuss your ideas with the plasma development team before making a proposal.
'''Mentor:''' Marco Martin, Bruno Abinader


----
==== Mobile Status Bar  ====


===Nepomuk===
'''Brief explanation:''' Take the system tray used in plasma-desktop and plasma-netbook and make it work properly on mobile devices such as the N900.  
[http://nepomuk.kde.org Website]- [http://techbase.kde.org/Development/Tutorials#Nepomuk Documentation/Howtos] - [http://www.semanticdesktop.org/ontologies/ Ontologies] - [http://lists.semanticdesktop.org/mailman/listinfo/nepomuk-kde Mailing list] - IRC channel: #nepomuk-kde on Freenode.


'''Expected results:''' A functional system tray with battery, networking, etc. plasmoids working along with ability to configure the entries in it.


'''Knowledge prerequisite:''' C++, Qt


====Project: A Context Sidebar====
'''Mentor:''' Alexis Menard
'''Brief Explanation''':
The ideas is to have a sidebar on the desktop (see Plasma project above for example) which shows information about the resource in the current context. Examples include files or important emails from a specific person that sent the email I am currently reading. Or related information on a webpage I am currently browsing. Or the author information on a pdf I am reading. And so on.
The sidebar should pick up DBus signals that can be sent out by any application to change the current resource (this is just an idea).


'''Expected Results''':
==== Global Menu Bar  ====
Creation of the sidebar and integration into at least two applications (like KMail or Okular) which will then update the resource in focus. It might also be good if the sidebar could monitor if the application that set the resource looses focus or is closed.


'''Knowledge Pre-Requisite:''' C++/Qt/KDE/Plasma
'''Brief explanation:''' A Plasma panel containment that provides a MacOS-style menu bar


'''Mentor''': Sebastian Trueg (trueg at kde dot org)
'''Expected results:''' The menu bar containment should support showing the application menu and work with Qt/KDE apps as well as Gtk+ apps. See http://frinring.wordpress.com/2009/01/29/mac-style-menubar-for-kde-4-and-others/


'''Knowledge prerequisite:''' C++, Qt


====Project: Saving and Loading of Documents via Meta-data====
'''Mentor:''' Aaron Seigo
'''Brief Explanation''':
Today we still save and load our documents using a file browser. We navigate through folder structures that we created and try to find the best spot for the document. Another way would be to store a document by specifying meta-data about it. We could for example set the type (not the mimetype but the actual type like it is a letter or an invoice or a holiday picture and so on) or set properties on the document like related projects, related persons, tags, and so on. The system would then store the document someplace (we don't care about that). Loading the document would work the same way: filter documents according to type, date, persons or any other property we might have chosen to describe it.
In KDE applications today can predefine the file extension. How about letting the application predefine a set of meta-data properties.


'''Expected Results''':
==== Plasma Media Center - Media Browser backends and API  ====
A prototype for saving and loading documents via meta-data and at least one use case which is demoable.


'''Knowledge Pre-Requisite:''' C++/Qt/KDE, knowledge on ontologies and RDF are very helpful
'''Brief explanation:''' Low level layer to allow browsing media content from web services directly from the media browser applet.


'''Hints''':
'''Expected results:''' Continue what is already there about the media browser backends and dataengine backends and make them cooperate in order to correctly retrieve media contents from web services like YouTube, Flickr, Picasa...  
One might think of a plugin system here that allows to suggest annotations to the user. Compare the annotation system already in [http://websvn.kde.org/trunk/playground/base/nepomuk-kde/annotationplugins/ playground] based on [http://websvn.kde.org/trunk/playground/base/nepomuk-kde/annotationplugins/annotation.h?revision=915514&view=markup Nepomuk::Annotation].


'''Mentor''': Sebastian Trueg (trueg at kde dot org)
'''Knowledge prerequisite:''' C++, Qt, Plasma API is a relevant bonus


'''Mentors:''' Alessandro Diaferia, Marco Martin


====Project: Improved Virtual Folders====
==== Plasma Media Center - Ui re-styling  ====
'''Brief Explanation''': KDE 4.2 contains a KIO slave which uses Nepomuk to provide virtual folders (nepomuksearch:/). It has not been deeply integrated into KDE yet (such as the file dialog or Dolphin). The project would change this situation and allow to browse virtual folders in addition to simply use it as a search client. Ideas include subfolders which sort by result type or allow to refine the search. Also interesting is the saving of virtual folders and a graphical interface to define searches (folders).


'''Expected Results''': An improved version of the virtual folders which is highly usable without prior knowledge (such as the nepomuksearch:/ scheme). The possibilities are vast.
'''Brief explanation:''' A re-design of the Media Center Ui in order to guarantee a great user experience.  


'''Knowledge Pre-Requisite:''' C++/Qt/KDE
'''Expected results:''' Taking advantage of the QtDeclarativeUi framework the aim is to provide an excellent user experience in accessing local and remote media contents through Plasma.


'''Mentor''': Sebastian Trueg (trueg at kde dot org)
'''Knowledge prerequisite:''' C++, Qt [,Plasma API, QtDeclarativeUi]


'''Further information:'''
'''Mentors:''' Marco Martin, Artur Souza, Alessandro Diaferia
* [http://www.kdedevelopers.org/node/3274 Fetch, Nepomuk, fetch! ]
* [http://www.kdedevelopers.org/node/3443 Nepomuk Virtual Folders - The Next Level]
* [http://www.kdedevelopers.org/node/3566 Nepomuk Virtual Folders Part III]


<br>


====Project: Konqueror Bookmarks using Virtual Folders====
=== Phonon  ===
'''Brief Explanation''': A bookmark plugin for konqueror, that creates a bookmark folder structure on the fly, out of the tags that are assigned to each bookmark-item.
A bookmark could be a local or remote file, of any kind: html/pdf/video/…
The tags could either be assigned by the user(with a very simple/quick interface), or just indexed automatically.


'''Expected Results''': A virtual folder structure that would replace or supplement the current bookmarks toolbar. E.g. one could find the digikam web page either like:
Abstraction library for sound and video support. Used by KDE notifications, Amarok, Dragon Player and Qt Software.  
Linux->KDE->multimedia->[digikam], or Photography->Programs->[digikam].
Because the bookmark has all these tags: Linux,KDE,multimedia,Photography,Programs.
An initial database could be created by importing the current bookmarks.xml file, using the directories as tags.


'''Knowledge Pre-Requisite:''' C++/Qt/KDE
[http://phonon.kde.org Website] - [https://mail.kde.org/mailman/listinfo/phonon-backends Mailing list] - IRC channel: #phonon on Freenode.


'''Mentor''': Sebastian Trueg (trueg at kde dot org)
This year Phonon projects are going to be hosted under the VideoLAN banner. See [http://wiki.videolan.org/SoC_2010#Phonon_Webcam_Support their webpage] for ideas.


'''Further Information:'''
==== High-Level Capture API for Phonon (read: Webcam Support) ====
* [http://trueg.wordpress.com/2009/02/25/nepomuk-in-the-google-summer-of-code-2009/#comment-73 Blog Comment by Yiannis who proposed this]
* [http://trueg.wordpress.com/2009/03/05/nepomuk-and-the-google-summer-of-code-second-try-i-want-your-ideas/#comment-123 Stefan's blog comment mentioning the full text indexing of bookmarked web pages] (compare the [http://websvn.kde.org/trunk/playground/base/nepomuk-kde/konqueror/menuplugin/nepomukmenuplugin.cpp?revision=916851&view=markup tagging plugin for Konqueror] which already does this for tagged pages.)


====Project: Nepomuk metadata Backup service====
[http://wiki.videolan.org/SoC_2010#High-Level_Capture_API_for_Phonon_.28read:_Webcam_Support.29 High Level Capture API for Phonon]
'''Brief Explanation''': Using Nepomuk the user can create a lot of metadata such as tags and comments and in the future way more. All this data is important to the user and needs the same attention any other data gets. This includes backups and migration of data.


'''Expected Results''': A [http://api.kde.org/4.x-api/kdelibs-apidocs/nepomuk/html/classNepomuk_1_1Service.html Nepomuk service] or application which provides a backup service for Nepomuk data. It would allow to manually backup and restore data, as well as automated ones. The service should not just backup everything but only that data which cannot be recreated easily (the latter includes data extracted by strigi).
==== Project: Project:&nbsp;Phonon-VLC improvements and test ====


'''Knowledge Pre-Requisite:''' C++/Qt/KDE, RDF/Ontology knowledge very helpful
[http://wiki.videolan.org/SoC_2010#Phonon-VLC_improvements_and_test Phonon-VLC]


'''Mentor''': Sebastian Trueg (trueg at kde dot org)
==== Project: Phonon API for low-level PCM I/O ====


'''Further Information:''' This could also be integrated with the [http://trueg.wordpress.com/2009/03/05/nepomuk-and-the-google-summer-of-code-second-try-i-want-your-ideas/#comment-115 idea from Martin about exporting/importing metadata].
[http://wiki.videolan.org/SoC_2010#Phonon_API_for_low-level_PCM_I.2FO Phonon API for low level PCM]  


====Project: Visual Query Builder====
==== Project: Phonon API for implementing effects in applications ====
'''Brief Explanation''': Semantic queries can be very complex and having a user type in SPARQL or even something simpler can scare them away very easily. Thus, a visual query builder which can be reused by multiple applications and looks nice would help a lot.


'''Expected Results''': A library which provides a nice GUI for users to define semantic Nepomuk queries.
[http://wiki.videolan.org/SoC_2010#Phonon_API_for_implementing_effects_in_applications Phonon API for Effects in Apps]


'''Knowledge Pre-Requisite:''' C++/Qt/KDE, RDF/Ontology knowledge very helpful
=== Kate  ===


'''Mentor''': Sebastian Trueg (trueg at kde dot org)
Kate is a powerful programmer's editor.


'''Further information:'''
<br> [http://www.kate-editor.org Website] - [https://mail.kde.org/mailman/listinfo/kwrite-devel Mailing list] - IRC channel: #kate on Freenode.  
* [http://trueg.wordpress.com/2009/03/05/nepomuk-and-the-google-summer-of-code-second-try-i-want-your-ideas/#comment-97 Original Blog Comment by Kevin Krammer]
* [https://bugs.kde.org/show_bug.cgi?id=184183 Wish report by Kjetil Kjernsmo]


====Project: Annotate new files====
==== Project: Vim-like Swap File  ====
'''Brief Explanation''': We get new files from different sources all the time. This includes downloads, email attachments, pictures from a camera, but also files we create ourselves with applications like word processors or the like. It would be very helpful if the system supported the user in deciding how to categorize or annotate the new files. Based on source or application or storage folder or previously used annotations a non-intrusive dialog could propose certain annotations to the user.


'''Expected Results''': A system which monitors for new files, decides if this is an interesting file (ignore log files and the like) and then proposes possible annotations to the user. This could include tags but also resource types (PIMO) or relations to other resources (such as projects or persons).
'''Brief explanation:''' Add swap file support, like vim has, to limit the effects of crashes.  


'''Knowledge Pre-Requisite:''' C++/Qt/KDE, RDF/Ontology knowledge very helpful
'''Expected results:''' Kate, KWrite, etc. should be able to recover (most of) what was written after last save in case of a crash or power failure.


'''Mentor''': Sebastian Trueg (trueg at kde dot org)
:IMHO the dialog presented to the user for recovery could be a bit better than vim's, too: for example, if the file hasn't been modified it doesn't make sense to offer to restore it. A "view diff" option would be extra awesome. --[[User:Chani|Chani]] 13:44, 28 February 2010 (UTC)


===KDE Financial Data Sharing (Fids)===
'''Knowledge Prerequisite:''' Knowledge of C++ and Qt is a requirement.  
[http://sourceforge.net/mailarchive/forum.php?forum_name=kmymoney2-developer KMyMoney Mailing list] - [http://sourceforge.net/mailarchive/forum.php?forum_name=kraft-user Kraft Mailing list]


[http://kmymoney2.sf.net KMyMoney] and [http://kraft.sf.net Kraft] are applications in the area of personal finance management: While KMyMoney is a full featured personal finance manager, Kraft is a tool for invoicing and more
'''Mentor:''' Christoph Cullmann &lt;cullmann@kde.org&gt;
for small enterprises.  


Both applications deal with users financial data and integrate well in the KDE desktop for the benefit of the user.
==== Project: Kobby (Collaborative editing)  ====


'''Brief explanation:''' Document uploading support, allow KTextEditor parts to control undo/redo, infinote server start/stop ability, connection history/management, other UI improvements.


====Project: Share Financial Data between KDE applications====
Proposals can feature multiple of these ideas, and are open to ideas not listed here.
'''Brief Explanation''':
With the concrete example of [http://kmymoney2.sf.net KMyMoney] and
[http://kraft.sf.net Kraft] a KDE global service should be developed which exchange financial information between these and possibly other applications on the KDE desktop.


[http://kmymoney2.sf.net KMyMoney] helps the user to keep overview about his money dealing with all kinds of financial accounts and transactions. [http://kraft.sf.net Kraft] is an applicaton where invoices can be created. Once an invoice is sent out, a payment is expected. That is information KMyMoney should be aware of and list an expected payment. When KMyMoney gets knowledge of the payment (i.e. through online banking) the information should
'''Project Page:''' http://kobby.greghaynes.net/
go back to Kraft to mark the invoice as paid. For that a semi automatic identifier matching between incoming and expected payments must be implemented.


Other data should be shared through Fids like the users account information hold by KMyMoney. A desktop global unique number service for documents help the user to create correctly numbered documents through various applications like Kraft. The most challenging thing would be to provide country dependent tax information through Fids.
'''Technical Details:''' Technical details for some of the ideas can be found on http://kobby.greghaynes.net/documentation/gsoc-2010-ideas


The financial transaction data might be best handled in an '''Akonadi''' plugin.
'''Knowledge Prerequisite:''' C++, Qt


'''Expected Results:'''
'''Mentor Knowledge Prerequisite:''' (Preferred but not required) KTextEditor development and or usability experience.


KMyMoney and Kraft share information about sent out invoices which result in expected payments. If the money comes in Kraft needs a notification. For that a generic infrastructure, maybe based on Akonadi, must exist. The solution must not be limited to KMyMoney and Kraft but provide a generic solution for all KDE apps interested in financial data.
'''Mentor:''' Needed.


'''Knowledge Prerequisite:''' C++ and Qt. KMyMoney, Kraft and Akonadi knowledge could be useful.
=== Konqueror  ===


'''Mentors:''' Klaas Freitag (freitag at kde org) and members of the KMyMoney
Mailing-list: https://mail.kde.org/mailman/listinfo/kfm-devel/ https://mail.kde.org/mailman/listinfo/kfm-devel/
team.


===Okular (Document viewer)===
Project Page: http://www.konqueror.org/  
[http://okular.kde.org/ Okular] is KDE's document viewer. It is often used for PDF documents, but can handle many other document types.


====Record presentation====
==== Project: Integrate Nepomuk in bookmarks  ====
[https://bugs.kde.org/show_bug.cgi?id=169511 Wishlist item 169511] discusses why it might be useful to record presentations. It is fairly easy to extract the timings from a recording, however it might also be useful to package up the complete presentation (slides, timing and audio).


An interesting idea is to make these into an Ogg container, using Ogg/Speex or Ogg/Vorbis for the audio, and Ogg/Kate for the slides. A proof-of-concept implementation of the timing + Ogg/Kate output is available in a [http://websvn.kde.org/branches/work/okular-record-presentation/ branch]. You'd need to find a way to record the presentation audio (e.g. extend Solid to detect audio input sources and Phonon to record)
'''Brief explanation:''' Make a taggable bookmark system like that of Firefox, taggable and with searching for these tags in the location bar. This should integrate with the KDE semantic system Nepomuk.  


This project could also add other "Save As" functionality - see [https://bugs.kde.org/show_bug.cgi?id=103568 Wishlist item 103568].
'''Expected results:'''
Prerequisites for working on this are a sound understanding of C and C++. Experience with Solid, Phonon, and the various Ogg-related libraries would be a strong advantage.


You may wish to discuss this further on the Okular mailing list (https://mail.kde.org/mailman/listinfo/okular-devel), or the Okular IRC channel (#okular on Freenode).
'''Knowledge Prerequisite:'''


Possible mentor: Brad Hards ([email protected])
'''Mentor:''' ask in the mailinglist kfm-devel


===KEduca (kde-edu tool)===
==== Project: Akonadi-Integration, Syncing bookmarks and history over Internet  ====
http://edu.kde.org/keduca/
====Project: Templates for math exercises====
'''A brief explanation''': When teaching math (e.g. basic algebra or fractions) user has to type values manualy to each exercise. Using templates it would be much easier.
Math teacher could express an exercise of simple adding as:
:* Take 2 random, integer values (e.g.: x, y)
:* Both has to be between 1 and 15
:* Correct answer is a x+y
:* Let KEduca random some answers but only one can be correct


Suggestion: It would be good to make two types of templates: static, and dynamic. In dynamic one each time user open an exam variable's values are taken randomly. In static one: Values are written to exam file once.
'''Brief explanation:''' write an Akonadi-modul that enables syncing of konqueror bookmarks from pc to laptop for instance


Templates will be written in kind of pseudocode. It has to be As Easy As Possible in use.
'''Expected results:'''


'''Knowledge Pre-Requisite''': C++, experience with parsers, Qt is a plus
'''Knowledge Prerequisite:'''  


'''Expected results''': Teacher can prepare exams in math without any effort. Teacher can be sure that each student will recieve unique set of exercises.
'''Mentor:''' ask in mailinglist kfm-devel


:* Written pseudo scripting language for templates (other solutions are welcome)
==== Project: Mozilla Weave  ====
:* KEduca's file format can manage with templates
:* KEduca's exams builder supports templates


====Project: Sets of question====
'''Brief explanation:''' [https://mozillalabs.com/weave/ Weave] is a new Mozilla project / Firefox addon that allows one to synchronize browser tabs, history, bookmarks, passwords &amp; preferences between different computers via a publicly available server. The communications is encrypted and also all data gets encrypted on the client before transferring to the server so privacy is protected. Further it is completely open source so everyone is able to host ones own server, get &amp; modify the code and so on.  
'''A brief explanation''': Teacher would like to create a geography test. Five questions will be about flags (set 1), five about language (set 2) and another five about culture (set 3). Teacher has more than 5 questions in each issue and he would like to each student answer to randomly taken 5 question from each issue, but general structure of test has to be 5 (flags) - 5 (language) - 5 (culture).


All the questions has to be stored in exam file.
'''Expected results:'''


'''Knowledge Pre-Requisite''': C++
'''Knowledge Prerequisite:'''  


'''Expected results''': Teacher can create some sets of questions and determine of how many questions in the every issue test will be built. Some questions may not belong to a any set (or belong to set called e.g. "general") so each student will answer to these.
'''Mentor:''' ask in mailinglist kfm-devel


=== Step ===
==== Project: Web scripts  ====


[http://edu.kde.org/step Step] is an interactive physical simulator for KDE.
'''Brief explanation:''' Implement support for modifying web page javascript and css like firefox greasemonkey and stylish, respectively. It should
ideally support greasmonkey and stylish scripts as-is.


====Project: 3d mode====
'''Expected results:'''


'''Brief explanation:'''
'''Knowledge Prerequisite:'''  
Implement physical simulation in 3d. This involves:
* convert all classes in StepCore to templates with dimension as a template parameter, implement specialized versions where required, modify meta-object system to handle it
* implement 3d mode in GUI: viewing and editing


'''Expected results:'''
'''Mentor:''' ask in mailinglist kfm-devel
Ability to create, edit and view 3d simulations in Step with the same set of objects as in 2d.


'''Knowledge Pre-Requisite:''' Required: C++, basic OpenGL, basic physics (mechanics). Could be useful: Qt.
=== Krita  ===


'''Mentor:''' Vladimir Kuznetsov <ks dot vladimir at gmail dot com>
Krita is a KDE program for sketching and painting, offering an end–to–end solution for creating digital painting files from scratch by masters.


====Project: fast water and gas simulation====
Mailing-list: https://mail.kde.org/mailman/listinfo/kimageshop/
Project Page: http://www.krita.org/
Irc channel: #koffice on irc.freenode.net
Forums: http://forum.kde.org/viewforum.php?f=136


'''Brief explanation:'''
==== Project: transform tool for Krita ====
Currently Step has molecular dynamics based simulation of gas and water (that is a gas is simulated as a collection of particles). This is very usefull for demonstrating microscopical properties of the gas as well as its connection with macroscopical quantities like temperature. But this is far from optimal to demonstrate things like a boat floating in the water, water flowing from a glass, etc. This project involves:
* investigate fast methods of simulating water and gas: ranging from molecular dynamics but with simplified potentials, various optimizations, coarse graining methods, to lattice Boltzmann methods; investigate existing libraries for water simulation (for example take a look at [http://elbeem.sourceforge.net/ elbeem] library from Blender)
* implement selected method of simulation or incorporate selected library in StepCore
* implement GUI in Step for creating and modifying macroscopical quantities of gas and watter


'''Expected results:'''
'''Brief explanation:''' While Krita already has two transform tools, neither is sufficient for the needs of digital artists working on concept art, comics or textures. We need a transformation tool that can rotate, scale, shear and freeform transform. This project entails a careful design specification stage in consultation with the Krita developers: the student should contact the krita developers beforehand. The implementation will likely be challenging both from a user interface and from an algorithm point of view.
Ability to easily simulate in Step experiments like a boat floating in the water, water flowing from a glass, etc.


'''Knowledge Pre-Requisite:''' Required: C++, physics, good knowledge of numerical methods. Could be useful: Qt.
'''Expected results:''' a working, polished transform tool


'''Mentor:''' Vladimir Kuznetsov <ks dot vladimir at gmail dot com>
'''Knowledge Prerequisite:''' C++, Qt, digital art, image manipulation algorithms.


====Project: (other ideas)====
'''Mentor:'''
'''Brief explanation:'''
These are a list of smaller ideas related to Step. You can use them as a tips for building your own project.
* use KAlgebra library for parsing user-supplied expressions in PropertiesBrowser; allow value in Meter, x- and y-values in Graph to be arbitrary expression; implement ParametricForce object that will apply a force given by user-supplied expression; implement a series of ParametricJoint objects that will allow creation of various parametric constraints (like fixed particle trajectory)
* scripting for Step using either QtScript or Kross
* multi-threaded calculations in StepCore (knowledge pre-requisite: multi-threaded programming)
* correctly handle stiff problems in StepCore (knowledge pre-requisite: numerical methods)
* calculation of gravitational and electromagnetic force between non-point objects by integrating (knowledge pre-requisite: numerical methods)
* make StepCore compilable without Qt
* improve soft-body support: implement automatic creation of arbitrary-shaped  soft bodies, better soft-body border handling, investigate better (more accurate) methods of modeling soft bodies (knowledge pre-requisite: physics)
* support for non-convex polygons (probably by implementing triangulation)
* optimize collision detection (AABB trees, etc.)
* finish friction and bounceness implementation in StepCore.
* collision callbacks in StepCore.
* framework for dynamic object creation/destruction in order to allow implementing particle emitters
* statistical models (for example prey/predator model)
If you have other ideas please feel free to propose them !


'''Mentor:''' Vladimir Kuznetsov <ks dot vladimir at gmail dot com>
==== Project: Tagging and management for Krita resources ====


===Kopete (IM Client)===
'''Brief explanation:''' Krita comes with a rich selection of resources: patterns, gradients, brushes, brush presets, soon materials for texture painting. These resources need to be managed: added, deleted, changes and tagged. Existing tagging specifications exist for Gimp and for Viaduct, and Krita should be compatible here. Integration with Get Hot New Stuff and Nepomuk are important aspects of this project. There will be data structures and gui work.
http://kopete.kde.org
====Project: Chat Room improvements====
'''A brief explanation''': Kopete has a great interface when it comes to one-to-one conversation. But chat room has a different workflow, and the current interface is not that much suitable. Additionally, the support of group chat in some protocol is quite poor or unfinished.


The goal is to improve the user interface for this special usage. This include a special mode for the chatwindow (ability to choose a different style). Suitable notifications mechanism. Good presentation in the contactlist for bookmarks or auto-join.
'''Expected results:''' A functioning implementation of resource management and tagging.


It may also include improving support in one protocol such as IRC or Jabber MUC
'''Knowledge Prerequisite:''' C++, Qt, digital art.


'''Expected results''': Kopete need to be usable in chat room with at least one protocol, with a polished interface. As great to use as any client designed for group chat.
'''Mentor:'''


'''Knowledge Pre-Requisite''': C++, Qt is a plus


'''Mentor:''' Olivier Goffart <ogoffart at kde dot org>
==== Project: Guided Painting ====


===Other===
'''Brief explanation:''' Krita has the beginning of a guided painting system, with guides, levels of magnetism and plugins for guide types. This project is about finishing the implementation of this system: guide management, guide selection, new guide types. The guides are intended replace the geometric tools, so their usability must be very good. Both algorithm and gui work.


====Project: Ultracopier====
'''Expected results:''' A polished guided painting system.
'''Brief explanation:'''
Ultracopier is advanced copier, but it is written in Qt. The target is convert Qt part in KDE part and optimize it, while keep the Qt part for no KDE platform. The target is too found the best way for possibility of integrate ultracopier as on demand copier.


'''Knowledge prerequisite:'''
'''Knowledge Prerequisite:''' C++, Qt, digital art.
Knowledge of C++ and some familiarity with Qt, KDE and especially KIO and konqueror/dolphin plugin system.


'''Mentor:'''
'''Mentor:'''
BRULE Herman (alpha.super-one at laposte.net). You can contact my as instant messager: ICQ: 367926760 or msn: alpha_one_x86 at hotmail.fr


====Project: Social Desktop====
==== Project: Color Selectors/dialogs ====
'''Brief explanation:'''
 
Bits and pieces needed to implement basic functionality of the Social Desktop


'''Expected results:'''
'''Brief explanation:''' Krita has only very basic color selectors. Two things are needed: a full-blown color selection dialog that makes use of the colorspaces provide by the pigment library and that can shown out-of-gamut colors, and a collection of innovative, polished color selectors geared towards the way painters work. The selectors should be availabe as dockers, but also be pluggable into the quick selection palette. In order to write a proposal, the student will have to study available literature on color selection, as well as give an overview of selectors implemented in other applications like mypaint, gimp, scribus and others.
A couple of applets integrate information from OpenDesktop with information
about contacts that is already available on your local machine and on the web
(blogs, microblogs, maybe content from social networking sites such as facebook).
A contact applet collates IM presence, addressbook data, and activity data
from opendesktop.
A clear concept of a Contact is needed, an ontology in Nepomuk will be created
for this. All information about a contact should be easily queriable via Nepomuk.


http://techbase.kde.org/Projects/Social-Desktop
'''Expected results:''' A new set of color selectors.
http://websvn.kde.org/trunk/playground/base/attica/


'''Knowledge prerequisite:'''
'''Knowledge Prerequisite:''' C++, Qt
Knowledge of C++


'''Mentor:'''
'''Mentor:'''
Sebastian Kügler. Contact at [email protected] or #plasma on freenode.
===KDE Multimedia===
====KMID====
=====Port to KDE-4=====
This is simple, it hasn't been ported to KDE-4 yet.
=====KDE-4/Qt-4 front end for TiMidity=====
Currently TiMidity has front ends for several GUI toolkits but there isn't one for KDE-4 or Qt-4.  This front end should be able to run as standalone with Qt-4 or be part of KMID with KDE-4.


===KDE Network===
=== KDE Finance ===
 
KDE Finance is an emerging group of applications dedicated to financial topics, such as Personal Finances Management, Invoices Management, Point of Sales...
 
==== Plasma Dashboard in Skrooge  ====
 
[http://skrooge.org Skrooge] is a Personal Finances Manager, a part of [http://extragear.kde.org KDE extragear].
 
'''Brief explanation:''' Skrooge currently has a module called Dashboard that contains several widgets showing various information about your financial situation. However we are reinventing the plasma wheel in many areas, so we'd like to switch it to plasma. The dashboard could become a generic componenet that would also be used by other applications (kontact&nbsp;?)
 
'''Expected results:'''
 
*implement a newspaper view that will receive skroogoids (linked with [[#Grid_and_Grouping_Containments | this other GSOC project]]).
*write a dataengine providing data from the current skrooge file (which is in fact an SQLite database).
*create some skroogoids that should be displayed in the newspaper view. Ability to display them on the desktop, without skrooge being opened is something to be discussed (a skrooge file may be password protected using QCA, no idea how this could be handled).
*save the dashboard config inside the Skrooge file (currently not supported by plasma, IIRC)
 
'''Knowledge Prerequisite:''' C++, SQLite, optionnally a scripting language supported by plasma
 
'''Mentor:''' [mailto:[email protected] Guillaume DE BURE], + someone from plasma team (?)
 
====Project: Financial information in Nepomuk====
 
'''Brief explanation:''' The finance applications generate a lot of data and information that could be included into Nepomuk and then leveraged with other information. This project is about creating a connector that can be used by these applications and work with the apps developer to create the taxonomies and other necessary elements to store this information in Nepomuk and to update it when necessary.
 
'''Expected results:''' Have a library to be included by finance apps to feed contacts and transaction data into Nepomuk.
 
'''Knowledge Prerequisite:''' C++, Qt
 
'''Mentor:''' [mailto:[email protected] Alvaro Soliverez] + probably someone from Nepomuk
 
 
 
=== Rekonq ===
 
rekonq is a web browser for KDE that aims to be lightweight, fast. And cool :)
 
 
====Project: Rekonq with WebKit 2====


==== KGet ====
'''Brief explanation:''' Rekonq currently use the regular WebKit model where user input and rendering are done synchronously in response to events of the event loop. A research project of WebKit aim a using asynchronous API between the user agent and the engine, this is called WebKit 2. This project is about improving WebKit 2 to support the use cases of Rekonq, and prototype a version of Rekonq based on WebKit 2.


=====Multiple Improvements to KGet=====
'''Expected results:''' A branch of Rekonq based on WebKit 2.


[http://mail.kde.org/pipermail/kget/ Mailing list] - IRC channel: #kget on Freenode.
'''Knowledge Prerequisite:''' C++, Qt


'''Project:''' Multiple Improvements to KGet
'''Mentor:''' [mailto:[email protected] Benjamin Poulain] + hopefully some help from Andrea


'''Brief explanation:''' This project is made up of multiple small projects that will make KGet easier to use and function similar to other download managers.


''' Expected results:'''  (1) A right-click menu to change file download properties (filename, destination directory, URL), (2) Allow users the option of adding new download sources to a multithreaded transfer manually, (3) Pass metadata about downloaded files to Nepomuk for semantic desktop, (4) Pass digital signatures to KGpg, (5) Add support for repairing downloads via Metalinks with chunk checksums, (6) GUI to create Metalinks, (7) Integration of BitTorrent/FTP/HTTP multi-source downloads.
====Project: Adblock improvements & elements manipulation====


''' Knowledge Prerequisites:''' C++ is essential, knowledge of Qt KDE and web technologies like HTML and JavaScript would be helpful.
'''Brief explanation:''' Rekonq currently has an initial implementation of an ads blocking mechanism. This project aims to expand it providing the feature parity with AdBlockPlus and implement a sort of HTML elements manipulation  system (enable it, and then click on the page on the elements you want to hide. When you're ok, save your changes, reset them or leave them just for this time).


''' Resources:''' Existing transfer plugins, KGet developers
'''Expected results:''' An improvements in the adblock rules handling, some (new) tests to check adblock behavior and performance, the elements manipulation feature with (possibly) the ability to save and remember applied changes.


''' Mentor:''' Urs Wolfer <uwolfer at kde dot org> or KGet developers. Contact at [email protected] or #kget on freenode.
'''Knowledge Prerequisite:''' C++, Qt


====KRDC====
'''Mentor:''' [mailto:[email protected] Andrea Diamantini] + hopefully some help from Benjamin :)


=====Finish and polish NX support for KRDC=====
=== ownCloud  ===


-----
An open personal cloud which runs on your personal server. It enables accessing your data from all of your devices. Sharing with other people is also possible. It support automatic backups, versioning and encryption.
'''Project:''' NX support in KRDC.


'''Brief explanation:'''
<br> [http://ownCloud.org Website] - [https://mail.kde.org/mailman/listinfo/owncloud Mailing list] - IRC channel: #owncloud on Freenode.
KRDC lacks NX support, which is gaining momentum in the free software world. Build upon the work done by George Wright in the 2006 SoC and the work done by Urs Wolfer in the 2007 SoC to create a top quality NX client for KDE. There has been a SoC in 2008 which has added basic NX support, but unfortunately the project is not finished yet. This project should build up on that work. The current work needs to be updated to the current state of the external libs, and everything needs to be polished after NX support is basically working.
 
 
==== Project: Syncing client  ====
 
'''Brief explanation:''' Build a client to sync your ownCloud files with your local disc to enable offline use.
 
'''Expected results:''' Development of an application you run on your local PC. This applications syncs local folders with folders on your personal ownCloud server everytime you are online. This applications needs a GUI written in KDE/Qt to configure the ownCloud url, folders, login and password. The applications sits in the systray and informs the user about the syncing progress or sync conflicts. The idea is that the clients mounts the ownCloud folders via WebDAV into a "hidden" directory and syncs the folders via rsync or an own syncing script. Errors should be reported to the user.
 
'''Knowledge Prerequisite:'''  Python, Ruby, PHP or C++ and KDE/Qt depending on the technology you choose for the desktop syncing client. Enthusiasm for Cloud/Desktop integration and trying new things.
 
'''Mentor:''' Frank Karlitschek &lt;[email protected]&gt;.
 
 
==== Project: Photo gallery  ====
 
'''Brief explanation:''' Build a photo gallery plugin for ownCloud
 
'''Expected results:''' Development a photo gallery plugins which reads the photos from a photo folder in you ownCloud file storage and automatically creates different beautiful photo galleries. The idea is that you just save you photos with your KDE application in you ownCloud photo folder via webdav and you automatically get a photo gallery which you can show to your friends. You don´t need to upload you photos to an online photo service. You can present your photos to the world directly without the need to use non free online services.
 
'''Knowledge Prerequisite:''' Knowledge PHP, HTML, CSS and MySQL. Enthusiasm for Cloud/Desktop integration and trying new things.
 
'''Mentor:''' Frank Karlitschek &lt;[email protected]&gt;.
 
=== KDE SDK ===
==== Project: Umbrello QGraphicsView  ====
 
'''Brief explanation:''' Finish the QGraphicsView port of Umbrello
 
'''Expected results:''' A working Umbrello using QGraphicsView and all features in the current QCanvas version
 
'''Knowledge Prerequisite:''' c++, Qt, QGraphicsView
 
'''Mentor:''' Jonathan Riddell &lt;[email protected]&gt;.
 
<br>
 
==== Project: KDE Git front-end and KPart  ====
 
'''Brief explanation:''' Considering the increasing use of Git in KDE, the usual hard learning curve mainly for newbies, and the need for Git integration
in SDK tools it would be useful to implement a KDE-based user-friend front-end
for Git. Such tool could provide a graph about repository cloning dependency,
features for automating the pull/push and merge requests. In addition, a KPart could be provided to make these features available for use in other SDK tools like KDevelop and Plasmate. The KPart should be flexible enough to meet demands from general visualization to fine-grained operations like pull/push, conflict resolution, and merge requests.


'''Expected results:'''
'''Expected results:''' A KDE Git front-end tool which automate the basic Git operations and make them available in an intuitive and user-friend way. Furthermore, the implementation should use a KPart developed as part of the project which provides a flexible enough API for use in other SDK tools.
Fully working NX integration for KRDC, including support for advanced NX features such as sound, VNC/RDP tunnelling etc. Feature parity with the commercial NX client shouldn't be necessary, but aiming for that isn't a bad idea. All NX connection handling code should be in the cross-platform client library nxcl (C++/STL/autotools), and all GUI specific code should be in KRDC.
Also part of the task is a documentation of external dependencies as help for distributions. At the moment there is not much documentation available.


'''Knowledge Prerequisites:''' Knowledge of the NX protocol (see http://www.gwright.org.uk/protocol.pdf for an older version of the protocol), C++/STL/Qt/KDE coding and cross platform coding.
'''Knowledge Prerequisite:''' Qt - C++. Previous KDE development experience and Git use knowledge is desirable.


'''Resources:''' http://freenx.berlios.de , http://blog.gwright.org.uk/articles/category/nx , http://nomachine.com/ , http://svn.berlios.de/wsvn/freenx
'''Mentor:''' Sandro Andrade &lt;sandroandrade@kde.org&gt;


'''Mentor:''' Urs Wolfer <uwolfer at kde dot org>
<br>  


===KRunner===
=== KDE Language Bindings ===
==== Project: Documentation Extractor  ====


====Create Scipting Interface For KRunner====
'''Brief explanation:''' Write a plugin for the 'smokegen' tool that will parse headers and source files, extract documentation comments and convert them to a suitable format for using with languages such as Ruby, Perl, PHP, C# or JavaScript. Convert any embedded code snippets to the target language.


-----
'''Expected results:''' Documentation produced for one or more of the languages above (the more the better!), and possibly documentation viewer tools too.
'''Project:''' Scipting Interface For KRunner


'''Brief explanation:'''
'''Knowledge Prerequisite:''' C++, parsers, Qt
KRunner has the potential to be awesome in its functionality as an interface for quick access to a wealth of information.  However, in its current form, the only way to add functionality from the point of view of the user base is to write plugins, which requires a knowledge of C++ and the KDE framework.  The project would be to create a scripting interface through a plugin, that uses Kross.


'''Expected results:'''
'''Mentor:''' Richard Dale &lt;richard.[email protected]&gt;.
A plugin for KRunner that give access to the scripting interfaces provides by Kross, allowing users to simply drop a script in /usr/lib/kde4/ to behave like a normal compiled plugin. Also, a suite of scripts demonstrating the use of this new feature and greatly extending KRunner's functionality as a quick-use information-grabber.


'''Knowledge Prerequisites:''' C++, Qt, and the KDE Framework; experience with KRunner plugin API helpful
=== Solid ===
==== Project: Network Device Detection & Desktop Integration for UPnP ====


'''Resources:''' http://websvn.kde.org/trunk/KDE/kdebase/workspace/plasma/runners/
'''Bried explanation:''' Universal Plug and Play is a set of technologies for the digital home. Network transparancy has always been a core concept in KDE with the KIO slave technology. Solid is gaining support for network device detection and enumeration as well as multiple backends.
-----
=== Network Management ===
==== Integrate Mobile Broadband Connection Assistant into Network Management====
libmbca/mobile-broadband-provider info is a database of connection parameters and supporting library for mobile broadband (cellular networking). This makes it easy for people to setup their datacard or phone to provide an Internet connection. This idea suggests integrating this database into the Network Management tool for KDE 4.


'''Expected results:'''
'''Expected results:''' The goal of this project is to develop and stabilize a UPnP backend using an existing library, framework or daemon. To proof the usefullness of these new solid features example integration of UPnP in existing KDE SC applications is expected.
* UI components to access the provider info database
* Integration with the configuration module for Network Management
* Unit tests to ensure that Network Management is robust if the provider info database is corrupted.


'''Knowledge Prerequisites:''' C++, Qt, and the KDE Framework
'''Knowledge Prerequisite:''' Solid, KIO, UPnP


'''Resources:'''  
'''Mentor:''' Kévin Ottens, Fredrich Kossebau
http://svn.gnome.org/viewvc/libmbca
http://svn.gnome.org/viewvc/mobile-broadband-provider-info
http://websvn.kde.org/trunk/playground/base/plasma/applets/networkmanager

Latest revision as of 09:21, 30 March 2013

Guidelines

Information for Students

These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.

Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. Simply copying and pasting an idea here will not work. On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.

When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!

If there is no specific contact given you can ask questions on the general KDE development list [email protected]. See the KDE mailing lists page for information on available mailing lists and how to subscribe.

Adding a Proposal

When adding an idea to this section, please try to include the following data:

  • if the application is not widely known, a description of what it does and where its code lives
  • a brief explanation
  • the expected results
  • pre-requisites for working on your project
  • if applicable, links to more information or discussions
  • mailing list or IRC channel for your application/library/module
  • your name and email address for contact (if you're willing to be a mentor)

If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.

Ideas

Amarok

Amarok is a powerful KDE based music player for Linux and Unix, MacOS X and Windows with an intuitive interface. It makes playing the music you love and discovering new music easier than ever before - and it looks good doing it!


Website - Mailing list - IRC channel: #amarok on Freenode.

Project: Playdar integration

Brief explanation: Integrate playdar into Amarok, both as a collection backend, and as a searchable/playable context applet.

Expected results: Playdar is a new "music content resolver" service (http://www.playdar.org/), started by RJ of Last.Fm fame. Its task is to find how to play any song that it is given, using a number of pluggable backends. Please see the website for more information, as well as http://www.playgrub.com/ for an app example. By integrating playdar into Amarok, you will allow users to explore and play tracks from any of the resolvers that playdar has available. Imagine dynamic playlists that can pull tracks from mp3tunes, amazon full track previews, napster, soundcloud, local LAN computers, and more. Imagine browsing the local network and seeing what tracks are seamlessly available for you to play and organize. An implementation would both supply a collection backend, for browsing, and a context applet, for doing a simple search in the context view.

There would be some work required also on the playdar side of things---although it is planned to support browsing collections, it is not implemented yet. Playdar is written in Erlang, so this is also a perfect opportunity to get your feet wet doing functional programming.

Knowledge Prerequisite: Knowledge of C++ and Qt is a requirement. Knowledge of Erlang a plus, but pretty rare. Enthusiasm for trying new things and pushing the future of social music forward a requirement.

Mentor: Leo Franchi <[email protected]> or another Amarok developer.

Project: Dynamic Playlists Overhaul

Brief explanation: Throw out the old dynamic playlist code, and integrate existing backend code for generating user-specified dynamic playlists as well as design a smashing new intuitive UI for controlling them.

Detailed explanation: The current dynamic playlist system is merely decent at best. It fails a lot of expected use-cases, and the UI misleads the user by lying about what it can do. There is already a new advanced playlist generation framework designed by a developer (Soren Harward) that is sitting in a git branch, ready to be merged. However, the UI is severly lacking, and needs to be redesigned. Designing the UI for such a complex piece of functionality will be a significant UI design / HCI challenge, and the main thrust of this project. While there are some mockups already available, most of the design will need to be drawn up by the student.

Knowledge Prerequisite: Knowledge of C++ and Qt is a requirement. Interest in usability and HCI a plus. Interest in UI design is also important.

Mentor: Leo Franchi <[email protected]> or another Amarok developer.

Project: On the Fly Transcoding

Brief explanation: Allow media to be seamlessly transcoded to another format whenever it is copied from one collection to another.

Expected results: Amaroks concept of collections allows media to be easily moved and copied around. In many cases however, the format you want in one collection is not the same as you might want it to be in when copying it to another collection. A common example is having your entire local collection in lossless FLAC, but wanting to copy songs to a mobile device that only supports mp3 (or even if the device supports open formats, you might want to transcode it to ogg to save space). On completion of this project, an option to enable transcodeing should be integrated into the "Move/Copy to collection" flow in a way that it is available whenever this is used between 2 collections. A big part of this project will be to determine the most suited library or application to use as the backend of the transcoding engine.

Knowledge Prerequisite: Knowledge of C++ and Qt is a requirement. Knowledge of media formats and the different available apps and libraries for transcoding them is a bug plus.

Mentor: Nikolaj Hald Nielsen <[email protected]> or another Amarok developer.

Project: Distributed Collections

Brief explanation: Allow several instances of Amarok on a network, each with their own distinct local collection, to seamlessly search, browse music from each other.

Expected results: On completion of the project, it should be possible to allow other instances of Amarok to access your local collection, as well as have access to the collection of other instances of Amarok, if their users allow it. A protocol for searching, browsing and streaming music should be in place, either developed from scratch or based on an existing standard (if a suitable one can be found). Issues such as authentication and auto discovery must be considered and a solution found.

Knowledge Prerequisite: Knowledge of C++ and Qt is required. Knowledge of XML, JSON or other data exchange schemes will be a big benefit, As there are many open question in this project, the student is also required to be capable of independently coming up with ideas for solutions to many issues, so a high degree of creativity and independence is required.

Mentor: Nikolaj Hald Nielsen <[email protected]> or another Amarok developer.

Project: Amarok & KDE UPnP integration

Brief explanation: UPnP is a network auto-discovery and services protocol that among other things allows serving media to connected devices in the local network.

By creating a UPnP KIO slave and supporting infrastructure it becomes possible to access this media directly from any KDE application. In Amarok some extra integration is needed to make the UPnP MediaServer a full Collection. This includes indexing the contents locally when the server has no, or limited support for search.

Expected results:

  • A UPnP KIO slave based on an already existing or in development framework for UPnP.
  • An Amarok Collection implementation including a functional QueryMaker using UPnP-search or MemoryQueryMaker.
  • Optionally a PlaylistProvider implementation for UPnP-native playlists and playlist files found on the server.

Knowledge Prerequisite: C++ and UPnP. KIO-slave or Amarok experience is recommended.

Mentor: Bart Cerneels

digiKam

Photo Management program

digiKam project web site - Mailinglist - IRC channel: #digikam on Freenode.

Project: Non-Destructive Editing

Brief explanation: Non-destructive means that the original image is not overwritten when editing. Instead, the applied changes are stored and a new version of that image is created. Version history can be accessed.

Expected results:

  • Define a format to store editing operations - research existing standards or similar free software approaches, or come up with a home-made XML format.
  • Adapt the existing image plugins to read and write their settings from this XML format and to re-apply a described operation to a given image (this is a laborious but relatively easy task)
  • work together with your mentor on storing version history in digikam's database and the image's metadata. (this is needed to finish the project, but it's not the core of the student's work). Set up a simple file naming scheme to store the original and derived files.
  • Implement the user interface changes: No more Save/Save As in the image editor. Instead, saving as current version, forking a new version, or exporting. Stacks of images (original/current version) in the album icon view.
  • Build a widget to display version history. Optionally this is a really nice widget, a tree view with buttons to show information. Optionally there is also support to take a set of applied changes, store it and apply it to a different image.

Knowledge Prerequisite: C++ and Qt. Some interest in image editing.

Mentor: Marcel Wiesweg <marcel dot wiesweg at gmx dot de>


Project: Face Recognition

Brief explanation: Digikam shall be able to detect faces in photos, identify the person depicted and automatically tag the region on the photo with the person's name.

Expected results:

  • Face Detection: Refine classifiers provided by OpenCV
  • Face Recognition: Improve existing Eigenfaces implementation. Implement Fisherfaces recognition, work with GNU science library to implement the needed QZ algorithm.
  • round up this underlying technology in a small library with some test cases
  • work on a basic UI integration in digikam. There is an existing UI solution for Nepomuk already.
  • optionally, define the format to store tags on regions of images (currently it's only possible to tag an image as a whole) in metadata and database. You will get support here from the digikam core developers.
  • optionally, design some user interface solutions for the training tasks involved (telling the classifier what's right and what's wrong)

Knowledge Prerequisite: C++ and Qt. Knowledge of matrices and working with them. Some idea of clustering algorithms and previous OpenCV experience would be useful.

Mentor: Alex Jironkin for face detection part, one of the digikam core developers for the UI part (contact: Marcel Wiesweg <marcel dot wiesweg at gmx dot de>)

Hints:

  • Nepomuk could be used to link faces to contacts in Akonadi


Project: Reverse Geocoding and Improved Map Search

Brief explanation: Using the Google Maps or geonames.org reverse geocoding services, location names can be added as tags to images which already have GPS-coordinates.

Expected results:

  • Design a GUI to allow the user to choose which parts of the reverse

geocoding (town, country, street) should be added as tags to the images.

  • Implement backends for Google Maps and geonames.org to retrieve the

descriptions of the places.

  • Modify the map search in digikam to show all

images in the database on the map, via a model that requests the number of images in a certain region from the database.

Knowledge Prerequisite: C++ and Qt. Google Maps reverse geocoding requires some JavaScript knowledge, but should be doable without prior knowledge.

Mentor: Michael G. Hansen <mike at mghansen dot de> and another digikam developer (contact: Marcel Wiesweg <marcel dot wiesweg at gmx dot de>)


KDE Edu

Sabine Emmy Eller suggested the development of a “general conversion tool” for tables to various xml formats and from one xml to another xml format etc. where one can add further formats over time would be great. If this is a good idea we can actually start to think about more detailed specifications for what we need.

Project: Time Support for Marble

Brief explanation: Wouldn't it be great to be able to see the world at different times in Marble? Like having a slider which would give you the ability to browse through the time? Marble's internal datastructure is modelled after KML. But support for time-related tags is missing.

Expected results:

  • Having a GUI on the map and as a QWidget based dialog which allows people to "slide" through time.
  • Implementation of the KML <TimePrimitive> and <TimeSpan> tag: Creating the KML-handler and needed data classes for the GeoData parser.
  • Having a central "internal" clock which the current view would be based on.
  • Porting existing features (like the starry sky and the sun shading) over to the new class design.
  • Using the new time support in Marbles Online Service plugins.

Knowledge Prerequisite: C++ and Qt. Knowledge about KML is not necessary but would be appreciated.

Mentor: Bastian Holst <bastianholst AT gmx DOT de>

Project: More online plugins for Marble

Brief explanation: Find some online services that provide position data and write online plugins for it

Expected results: A set of online plugins (showing webcams, opendesktop data, twitter messages, etc.) on the marble map. This could also include animations on the marble map and general optimizations of the online services structure. An addition could be including for example earthquake kml data as an online plugin. This would also extend on Marble's Time Support (see "Project: Time Support for Marble"). And finally there would be the idea of an opendesktop plugin: OpenDesktop.org (sister site of kde-apps.org and kde-look.org) has got a Geo API which would allow to visualize e.g. Free Software / KDE users on the globe. So this would allow to turn Marble into a social network tool!

Knowledge Prerequisite: C++. Familiarity with Qt and XML parsing will help.

Mentor: Bastian Holst <bastianholst AT gmx DOT de>

Project: Enhanced KML support for Marble

Brief explanation: Write support for more KML tags to get a more complete KML support for Marble.

Expected results: Marble has a more complete KML support than now. Marble will be able to display some of the KML files one can find on the Internet.

Knowledge Prerequisite: C++. Familiarity with Qt and XML parsing will help.

Mentor: Bastian Holst <bastianholst AT gmx DOT de>

Project: Marble To Go (Navigation Mode)

Brief explanation: Turn Marble into a navigation device.

Expected results: Marble already supports GPS devices and downloading routes from openrouteservice.org. Bring both worlds together! Let the user switch to navigation mode: The map center follows the current GPS position, route instructions fade in when appropriate. The user interface should be prepared for small devices. Marble's existing offline mode should be extended for (optional) precaching tiles along the route. More features are possible (e.g. gpx/kml import/export).

Knowledge Prerequisite: C++. Familiarity with Qt will help.

Mentor: Dennis Nienhüser <earthwings AT gentoo DOT org>

Project: Panoramic Picture Support in Marble ("StreetView")

Brief explanation: Allow Marble to display georeferenced panoramic pictures similar to this one.

Expected results: The position on the globe should be displayed as a placemark and the panoramic picture displayed once the placemark is clicked. The Marble Widget itself would be used to display the panorama picture. Preferred way to store the properties of the panorama image would be extended KML support for Marble (see the PhotoOverlay documentation of the KML-Reference.

Knowledge Prerequisite: C++. Familiarity with Qt will help.

Mentor: Torsten Rahn <rahn AT kde DOT org>

Project: Community Integration for KStars

Brief explanation: This feature is expected to be of use to amateur (hobby) astronomers. The idea is that there are aspects of amateur astronomy which are collaborative. For instance, one might want to view observations by other amateur astronomers around the world before making an observation of an object. Again, one would like to share their own observations with everyone else. There are more possibilities, and the student is encouraged to come up with them.

KStars produces observation logs in an XML format that is expected to adhere to the OAL 2.0 schema. The project will involve extending the existing implementation of the OAL 2.x schema and ensuring that it is fully compatible with the schema.

A very user friendly GUI has to be implemented for viewing imported logs [And a good SQL backend for accessing the information from them efficiently], it must be able to handle objects in the logs which are not there in the current KStars database.

The user must be able to retrive logs from the internet (and other sources) on a filter based query. [Filter could be anything like, object name or location or observer name]

The user should also be able to (eventually) submit his own logs to a server.

Expected results: Better OAL 2.x compliance in KStars, Ability to retrieve observation logs from the internet, Ability to export one's own observations in XML format to a server.

Knowledge Prerequisite: C++. Familiarity with Qt and XML parsing will help.

Mentor: Prakash Mohan <prakash DOT mohan AT kdemail DOT net> / Akarsh Simha <akarsh DOT simha AT kdemail DOT net>


Project: OpenGL support for KStars

Brief explanation: KStars currently renders graphics using QPainter. To provide a realistic and aesthetic representation of the night-sky, GL functionalities like texture-mapping will be beneficial. The aim of this project would be to use the Qt OpenGL module to render graphics in KStars.

Expected results: More realistic simulation of the night-sky, better aesthetic appeal.

Knowledge Prerequisite: C++. Knowledge of Qt and OpenGL will greatly help.

Mentor: Akarsh Simha <akarsh DOT simha AT kdemail DOT net>


Project: Additional Catalogs in KStars

Brief explanation: KStars currently knows about deep-sky objects from the NGC and IC catalogs and stars from the Henry-Draper catalog. Popular objects from many other catalogs are not listed [eg: Collinder] and multiple designations for the same object are not supported. The aim of this project is to implement support for objects from SAO, UGC, PGC, MCG, PK and Saguaro Astronomy Club catalogs. This might involve revamping the way data is stored and accessed in KStars :-).

Expected results: Support for multiple designations, Many more catalogs in KStars.

Knowledge Prerequisite: Database handling will help.

Mentor: Akarsh Simha <akarsh DOT simha AT kdemail DOT net>


Project: Integration of KmPlot into KAlgebra

Brief explanation: Allow to KAlgebra to draw the same kind of functions of KmPlot through reusing code of KmPlot and improved plotting capabilities of KAlgebra.

Expected results: KAlgebra already draws explicit curves in 2D and explicit surfaces in 3D, the new KAlgebra should draw, additionally, implicit curves in 2D, parametric curves in 2D, differential plots and explicit surfaces in spherical and cylindrical coordinates.

Knowledge Prerequisite: C++, Qt, KDE, OpenGL, Eigen, GSL

Mentor: Antonio Larrosa


Project: Rocs - Graph File Formats and Teacher Mode

Rocs is a Graph Theory IDE to study and learn Graph Theory.

Brief explanation: Rocs lacks graphs formats. it currently supports one internally and GML by the amazing work that Wagner is doing on it's plugin system. but we do need more: dot, gml, umbrello files, anything graph - like should be openable by rocs. Also, teacher mode is a mode with various graph scripts ( coloring, smaller path, bigger path, etc. all of the algorithms studied in Graph Theory + a few more )

Expected results: Rocs should be able to open almost all of the graph files around, and also in teacher mode, the student could test if his algorithm is correct by comparing the results with the one in the teacher mode.

Knowledge Prerequisite: Qt - C++ - Javascript are prerequisites. all the rest is optional, but being in a Graph Theory class at university could be cool ;)

Mentor: Tomaz Canabrava


Project: Cantor: Add a new Backend

Brief explanation: Write a new Backend to Cantor, to bring your favourite Mathematical Software, (e.g. Octave, SciLab, XCas or whatever you prefer) to Cantor. Implement needed features in Cantor, to expose the whole potential of the Backend to the user. Implement assistant dialogs for the most commonly used functionalities

Expected results: The user should be able to use the Math package from within Cantor, without (or with very few) limitations, compared to using the standard interface (every important feature should be exposed).

Knowledge Prerequisite: Qt, C++, KDE, are needed to code for Cantor. You should also be familiar with the Math Software you want to write a backend for.

Mentor: Alexander Rieder

Project: Cantor: improve R backend

Brief explanation: Currently the R backend of Cantor is very basic. Goal of this Project is to heavily improve it and implement all the features it is missing, to make Cantor a nice GUI for R.

Expected results: Cantor should be turned into a suitable GUI for R, with Syntax Highlighting, Tab Completion and more.

Knowledge Prerequisite: Qt, C++, KDE, are needed to code for Cantor. Familiar with the use of R

Mentor: Alexander Rieder

Project: KHangMan

Brief explanation: Improve GUI and code refactoring. About the GUI, start with a usability study to redesign the GUI. The menus are to be redone (having an Open Recent Files action for example) and maybe suppress the Categories and Languages menus. Allow an easier management of themes as well, maybe have a GHNS theme manager. For code: refactor the way files are loaded. Allow to start with no file. Separate the data code (about the letters) from the GUI.

Expected results: Makes it visually more attractive for children, give better feedback on result, make the program workflow better

Knowledge Prerequisite: Qt, C++, KDE

Mentor: Anne-Marie Mahfouf

KDE Games

Project: KHighscore2 library

Brief explanation: The KDE Games module features the libkdegames library, which provides common components for games, such as network access and standard UI elements. Among these classes is the highscore system KHighscore, which is starting to show its age. We want you to write a successor based on Qt's model/view framework.

Expected results: The coding work itself should not be too hard, but you need to create a future-proof object-oriented design. The games in the KDE games module have very different requirements for a highscore system, we expect you to evaluate these and come up with a concept that fits most requirements. Backwards compatibility to existing highscore records is desired. When the library is finished, you should port as many of our games to the new classes.

Knowledge Prerequisite: C++ and Qt. Profound experience with Qt's model/view framework.

Mentor: none at the moment (contact [email protected] mailing list for further questions)


Project: New AI for KsirK

Brief explanation: KsirK is a strategy game inside the kdegames module where you must conquer the world country by country. You can also have specific goals. Its current AI, taken from another old implementation of the same game is really no efficient and should be replaced by better one, with a scalable power.

Expected results: You will need to study the theory of AI design for strategy games and the other Free Software implementations of the same game (like TEG for example). You will then develop and integrate the new AI for a release with the next KDE SC version.

Knowledge Prerequisite: C++ and Qt. An experience with strategy games AI would be useful.

Mentor: none at the moment (contact [email protected] or [email protected] mailing list for further questions)


Project: Gluon Player Plasmoid

Brief explanation: Gluon is a game creation and distribution system, and a Gluon Player is an application which is able to fetch and play these games. Plasmoids are, of course, the widgets on the Plasma desktop. A Gluon Player Plasmoid is thus a plasmoid which fetches Gluon games and plays them.

Expected results: A working plasmoid able to fetch games from the Gluon distribution site, and furthermore run the fetched games. Extra features which would make the plasmoid more useful would be the ability to perform donations to game authors and take part in the larger community efforts that other Gluon Player applications would be able to. Please also see Gluon Player for Maemo/MeeGo (pdf, 2.0MiB) for inspiration.

Knowledge Prerequisite: C++ and Qt. knowledge of Open Collaboration Services and Plasmoid production would be good but not required. Gluon experience not required.

Mentor: Dan Leinir Turthra Jensen ([email protected]) (email [email protected] mailing list for further questions)


KDevelop

KDE-based Integrated Development Environment, specializing in c++ support, but including a powerful generic framework (definition use chain) which makes it possible to relatively easily support multiple different languages.

Website - Mailing list - IRC channel: #kdevelop on Freenode.

Project: Quanta+ 4

Brief explanation: Quanta+ 4

Expected results: Revive the Quanta+ brand for KDE 4 and provide a usable IDE for webdevelopment. Take advantage of the KDevelop framework and reuse it's plugins and adapt them to give the user a good experience while programming PHP, CSS, HTML and JavaScript.

Knowledge Prerequisite: KDE, Qt, KDevplatform/KDevelop

Mentor: Niko Sams

Project: Community Integration

Brief explanation: Integrate community related workflow, e.g. VCS support, in KDevelop.

Expected results: Integrate a proper VCS support for SVN and Git into KDevelop and see what other aspects of a community related workflow could be integrated.

Knowledge Prerequisite: KDE, Qt, KDevplatform/KDevelop

Mentor: Andreas Pakulat

Project: OBS (openSUSE Build Service) Integration

Brief explanation: openSUSE build service allows developers to create and release open source software for openSUSE and other Linux distributions easily on different hardware architectures.

Expected results: A plugin for KDevelop that would allow a developer to easily check-in source, build, and get OBS status from within a KDevelop project. In other words, it would allow for seamless development to deployment.

Knowledge Prerequisite: KDE, Qt, KDevplatform/KDevelop

Mentor: ?

KDE PIM

KDE PIM is the interest group working on applications related to personal information management, e.g. contacts, calendar, mails, etc.

One of the current challenges is utilizing the new cross-desktop PIM infrastructure called Akonadi.

There are interesting projects on all levels of the software stack: libraries, application porting, new applications, access to online resources, etc.

Website - Project Wiki - Mailing list - IRC channel: #kontact and #akonadi on Freenode.

For a list of ideas that are not yet fully spelled out, see the brainstorming list of Summer of Code ideas of the last PIM meeting.

Project: New Kontact summary based on Plasma

Brief explanation: Create a new summary for Kontact that is based on Plasma.

Expected results: The new Kontact summary should be based on Plasma and have every feature that the old summary had. The summary should look nice and have lots of bling. It should be possible to place single components of the summary on the desktop as well, as plasmoids.

Knowledge Prerequisite: C++ and Qt knowledge is needed, Plasma experience would be welcome.

Mentor: Contact the KDEPIM Mailing list

Project: PIM integrated Clock applet

Brief explanation: Extend the clock applet to show PIM information via Akonadi

Expected results: Be able to show tasks and appointments in the clock applet's popup. Mark dates in the calendar widget that have tasks/appointments associated. Consider the performance costs of starting Akonadi and querying for data. For best code reuse, find a way to use existing plasma widgets (see above Kontact Summary project) inside the clock popup, rather than implementing new widgets. Close https://bugs.kde.org/show_bug.cgi?id=46262 .

Knowledge Prerequisite: C++ and Qt knowledge is needed, Plasma experience would be welcome. Design skills would be helpful.

Mentor: Contact the KDEPIM Mailing list

Project: Improved HTML support for KMail's composer

Brief explanation: The HTML support for KMail's composer is currently limited. This should be improved: Replying and forwarding should (optionally) preserve the HTML format. The composer should use WebKit editing so that all HTML is fully supported.

Expected results: Replying and forwarding HTML mails should be fully supported. The QTextEdit-based widget in the composer should be replaced by a WebKit-based widget, to support all HTML instead of a small subset.

Knowledge Prerequisite: C++ and Qt

Mentor: Thomas McGuire

Project: Improved theming support for the message viewer

Brief explanation: In KMail, it is currently possible to chose between different header styles, such as 'fancy' or 'brief'. These header styles currently have to be written in C++.

The goal of this project is to use the Grantlee library to provide better and easier theming support.

Expected results: The viewers of KMail, KNode and Akregator should all be ported to Grantlee. Some defaults themes should be provided, at least replacing the existing 'fancy' and 'standard' themes.

Optionally, Get Hot New Stuff should be used so that the user can easily download new themes.

Optionally, the user should have some sort of control over which header fields of the mail are displayed, see Wish 16270.

Knowledge Prerequisite: C++ and Qt

Mentor: Thomas McGuire, Stephan Kelly(?)


Project: Improving google data akonadi resource

Brief explanation: Currently kdepim can use the gdata resources (contacts and gcalendar) to sync with a google account. The idea is to implement some missing features.

Expected results: Implement more features in contacts resource (e.g. birthday field, IM fields, etc) and calendar (e.g. multiple calendar, recurrent events, etc) in both libgcal and akonadi resources. Another idea would be to port libgcal to Qt (currently it uses libcurl and libxml).

Knowledge Prerequisite: C++ and Qt (for the akonadi resource) and ANSI C for the google data library (libgcal). Networking programming is a plus.

Mentor: Adenilson Cavalcanti a.k.a. Savago


Project: Easy Import and Export of all PIM data in Kontact

Brief explanation: There should be an easy way to import and export all PIM data including the configuration data, to make it easy to exchange data and to move the Kontact data to another installation.

Expected results: There should be a central way in Kontact to import and export all data. Right now, some individual applications have their own ways to import and export data, and this should be unified. The new import and export tool should be able to deal with the following

  • Configuration data, such as applications settings and account settings
  • The actual data, such as mails, feeds, contacts and calendar entries
  • Metadata, such as Nepomuk tags and annotations or Akonadi item flags
  • Cached data, such as the cache of an IMAP account, to avoid re-downloading the mails

It should be possible for the user to have a fine-grained selection of the above so that the user can decide what to export or import.

Ideally, it should be possible to export all this to a single archive file which can be later re-imported.

There are several bug reports on [bugs.kde.org the KDE bugtracker] that request something like this, you might get additional ideas from them.

Knowledge Prerequisite: C++ and Qt

Mentor: Contact the KDEPIM Mailing list

Project: Unified account wizard for Kontact

Brief explanation: Provide a nice wizard that can set up all of Kontact in one go and is easily extensible to support new configuration templates. The wizard should set up accounts/resources for all Kontact components.

As an example, let's say the user has a Google account: That includes Google Mail, Google Calendar, Google Contacts and Google Reader. The wizard should only ask for the username and password of the Google account of the user, and then set up Akonadi resources for mail, calendar, contacts and feeds automatically.

This should of course not be limited to Google: The system should be based on configuration templates so that many popular providers can be supported. Writing such configuration templates should require no coding so that many people write them, leading to a broader support of providers in the wizard

Expected results: Contact the KDEPIM Mailing list

  • Write and integrate a usable wizard for Kontact that combines setting up accounts/resources for mail, calendar, contacts and maybe more.
  • Make it easy to use: The user should only need to input the bare minimum of information, and the wizard auto-detects all the correct settings, based on configuration templates
  • Provide as many sample configuration templates for popular services as possible, for example for Google, AOL and other popular providers
  • Optionally, integrate Get Hot New Stuff so that it is possible to download new configuration templates.

Knowledge Prerequisite: C++ and Qt

Mentor: Contact the KDEPIM Mailing list

Project: More Nepomuk Integration in Kontact

Brief explanation: Nepomuk provides wide possibilities of doing cool new things. The goal of this project is to come up with interesting ideas on how Nepomuk could improve Kontact, and implement the ideas.

Some possibilities:

  • Activity Journal for Kontact
  • Project-Centric Views
  • Person-Centric Views

Expected results:

Knowledge Prerequisite: C++ and Qt

Mentor: Contact the KDEPIM Mailing list

Project: Personalized email addresses for each contact

Brief explanation:Facilitate usage of a different email address for each contact.

Expected results: For instance, if the user owns the domain mickeymouse.com then when he is communicating with [email protected] he would use the personalized address [email protected], and when he is communicating with [email protected] he would use the address [email protected]. The Thunderbird email client supports this with the Virtual Identity extension. See bugs https://bugs.kde.org/show_bug.cgi?id=72926 and https://bugs.kde.org/show_bug.cgi?id=159251

Knowledge Prerequisite:

Mentor: Contact the KDEPIM Mailing list

Note: This entry was not added by KDEPIM developers. It is not enough for a complete Summer of Code project, and should be extended in case this idea is used as a project proposal.

Project: KMail filter on Thread

Brief explanation: Facility in Kmail filter to move messages to folders based on thread

Expected results: User can define filters based on the "In-Reply-to:" message-id of a new message (message A) matching the message-id of an existing message in an existing mail folder (message B).  On match, option to move Message A to the folder that contains Message B.  This will help in continuing threads in the same folder in which they were started.

Please mail me if the problem statement or the requirement for this feature is not clear enough.  Raj Mathur, raju at linux dash delhi dot org

Knowledge Prerequisite: Presumably, knowledge of KMail, understanding of the e-mail message RFC, C++.

Mentor: Contact the KDEPIM Mailing list

Note: This entry was not added by KDEPIM developers. It is in general a nice idea. To make this work, threading has to be done independent from the message list. For example, an Akonadi agent could add attributes to the items that contain threading info. The filter and the message list would read these attributes. This requires a significant rewrite of the message list, and writing a threading agent. Also, this potentially requires fixing the Akonadi filtering framework, which is not yet integrated in KMail 2. All of the above certainly makes this enough for a complete Summer of Code project. Having filters that can read threading information would only be a side effect of all those changes.

KOffice

KPresenter: Create animation effects and tidy our framework, ui

Brief explanation: KPresenter has just gained an animation framework but we need lots of implementations for many kinds of effects. And we need a userinterface to manipulate it.

First step would be to implement loading and showing of about 20 different animation effects. That is actually a simple and contained task which should get you into the basic workings. Next step is to create a user interface.

Expected results: About 20 effects to be implemented. Extend and adapt the animation framework as needed to fulfill that. A user interface for creating and manipulating animations.

Knowledge Prerequisite: basic XML knowledge, C++ and Qt-knowledge, being able to understand complex code.

Mentor: Thorsten Zachmann, C. Boemann

KSpread: Improve saving to ODF

Brief explanation: ODF is the native fileformat of KSpread. As such one of the most important aspects of KSpread is to be able to load and save OpenDocument Spreadsheet files (ODS). While we are working hard on improving the support for loading, saving is not that well tested yet. The goal would be to change that, to improve the saving to ODF as much as possible. This should be done by adding unittests for loading and saving of ODF documents and fixing bugs where they show up.

First step would be to test different cases and to identify problems. As a starting point a look on the wo rk done on the Schedules, the Specs and the Code may help.

Expected results: Loading, saving and reopening a document should introduce as less unwanted changes as possible. Saving should work as good as loading does already.

Knowledge Prerequisite: ODF specs, Qt-knowledge, being able to understand complex code.

Mentor: Sebastian Sauer

KSpread: Add support for pivot tables

Brief explanation: Many spreadsheet applications support so called pivot tables/data pilot tables. KSpread currently has no such support, but this would be very nice to have, as ODF does contain support for this.

Expected results: It should be possible to insert pivot tables in kspread documents. Being able to save, load and update pivot tables loaded from ods documents would also be very nice.

Knowledge Prerequisite: Qt, C++, some experience with pivot tables in other applications would be nice.

Mentor: Marijn Kruisselbrink

Create an exciting new content type (flake shape)

Brief explanation: KOffice allows developers to create so called flake shapes as plugins. Examples of this are the formula editor, the video player and the music notation shape. We invite the GSoC developer to come up with a content type of his / her own choosing and implement that as a plugin for KOffice.

Expected results: Loading, saving and reopening a document with the shape in it should just work. There should be at least a simple way to edit the content inside the KOffice applications (mouse/keyboard handling, some dialogs).

The project is very flexible and we can have many different ones running at the same time, please feel free to submit more than one if you must. A google search for the musicflake will give you the project from a couple of years back. Further quick examples of shape types may be; knitting patterns, graphs & maths, tagclouds, etc. And naturally its possible to continue working on the existing ones. Like the formula shape and the music shape.

Knowledge requisites:

  • C++
  • Qt

Add support for e-book formats to KOffice

Brief explanation: Add a new export for one or more formats that are specifically tuned for e-book devices.

With the increased popularity of ebook readers there is going to be a need for tools to create ebook content. While most e-book devices can display PDF there are in fact a lot more formats in use. One such format is .epub, which allows reflowable content (unlike PDF). The format itself is based on XML and uses style sheets (CSS) to format content. There are few free software tools that can generate and manipulate this format and those that exist are restricted to command line.

Since most people creating content will most likely want to use an office suite or word processor to make documents it makes sense to add an export option for this format to KOffice.

Knowledge requisites:

  • C++
  • XML
  • CSS

KDE General

Analyzing and improving KDE startup time

Brief explanation: The time needed from the moment KDM is left till the KDE plasma desktop is visible and till someone is able to start work is long compared with other systems, especially closed-source systems. The first step would be to analyze what causes KDE startup to take so long. In the second phase patches would be implemented withj the goal to address the identified problems and to decrease the overall startup time.

Expected results:

  • A document that describes the work done (analyzing, findings, improvements, etc) and that allows to reproduce the analyzing at a later time. The goal here is to have a document that provides long-term results by making future investigations and improvements easier.
  • Patches that let KDE startup faster. This is the direct visible result that should result in a faster KDE startup as soon as possible.

Knowledge Prerequisite:

  • C++
  • independent and organized working style

References:

  • my bootchart shows that we can optimize different areas to save some seconds. In the bootchart the ksplashx is the splash screen that is displayed from the moment the displaymanager kdm is left till the moment the KDE plasma desktop is visible and can be used.
  • oprofile or sysprof or valgrind to analyze the startup process to know where optimization makes sense.
  • probably interesting files related to the startup sequence are in the KDE svn at kdebase/workspace/startkde.cmake, kdelibs/kinit/kinit.cpp, kdelibs/kded/kded.cpp (and kdelibs/kded/kbuildsycoca.cpp), kdebase/workspace/ksmserver/startup.cpp, kdebase/workspace/kwin/main.cpp and kdebase/workspace/plasma/desktop/shell/plasmaapp.cpp

Workflow:

1. Setup KDE development environment (Subversion and Building)

2. Analyzing the startup using our self compiled KDE. We could use bootchart, sysprof, oprofile, etc. to have an idea what KDE does during startup.

3. Get familar with the code that is responsible for the startup.

4. Change the code that is responsible for the startup to improve the overall startup time.

Examples:

Mentor: Sebastian Sauer

Creating a KDE performance testcase

Brief explanation: KDE workspace and applications often have a reputation of having extensive resource requirements, but there are rarely reliable numbers or tests that could be reproduced. As such there are almost no reliable public data on KDE's performance, nor is there a reasonably simple way to check the status.

Expected results: A set of tools, scripts and/or documents on how to measure KDE performance in important areas in a realiable and reproducible way. Using the testcase it should be possible for example to compare how different KDE SC releases change over the time and help identify problematic spots. In other words, the expected result in not improving any specific KDE area, but creating means for helping with it.

Knowledge Prerequisite:

  • C++, scripting (required)
  • experience with benchmarking (recommended)

References:

Mentor: Lubos Lunak

CMake/CDash Testing Improvements: Subprojects

Brief explanation: Most KDE modules are big, which can cause issues of information overload when all developers in a module are emailed about any regressions. Alex has done a considerable amount of work getting nightly KDE CDash submissions (see http://my.cdash.org/), but dividing the modules up into subprojects would improve the granularity of feedback. CMake 2.8 has subproject support, but it still requires a lot of manual work. Working on the KDE CMake build system, and CMake directly, to improve labeling of subprojects and submission to CDash.

Expected results:

  • A document that describes the work done (using subprojects, submitting module builds broken up into subprojects).
  • Patches to the KDE build system to support subprojects.
  • Patches to CMake to improve support of subprojects in KDE.
  • Working with KDE modules to deploy subpprojects in those modules.

Knowledge Prerequisite:

  • C++, CMake, CDash

Mentor: Marcus Hanwell and Alexander Neundorf

KDE on Windows

DrKonqi on Windows

Brief explanation: DrKonqi, together with the crash handling classes need to be fully ported to Windows. Currently, DrKonqi can run on windows, but it cannot generate a valid backtrace. So, the next step is to investigate on how to produce valid backtraces, probably using the dbghelp API and libbfd from mingw binutils and how to change the current installation process to support debug packages. On the first part, there should be implementations for a debugger which will give valid results for both compilers (mingw/msvc).

Expected results: The student should investigate & document how to produce valid backtraces with dbghelp API and libbfd. Based on these findings, a debugger should be written which will generate those backtraces.

Knowledge Prerequisite:

  • C++ (required)
  • win32 API (strong recommendation!)
  • Qt (recommended)

Mentor: Patrick Spendrin / George Kiagiadakis

KWin

KDE's window manager

Techbase page - Mailinglist - IRC channel: #kwin on Freenode.

KWin scripting support

Brief explanation:

KWin is customizable, but only using GUI options, which limits the possibilities. Adding scripting support would make the possibilities for customization virtually unlimited. See also http://www.kdedevelopers.org/node/3336.

Expected results:

Wrapping KWin internals in a suitable API and adding scripting using standard KDE/Qt scripting support. It should be possible to control various aspects of windows, query window management data, react on various events and write desktop effects in a usable way (sufficient performance and convenience). Scripting usage should be similar to other places in KDE such as Plasma, as reasonable.

Knowledge Prerequisite:

  • C++, Qt, scripting language (required)
  • X11 (nice to have, but not required)

Mentor: Lubos Lunak


KWin or Mobile / MeeGo

Brief explanation: Get KWin working on devices such as the N900 or other small devices so that KDE Plasma Mobile can provide the full UI stack with proper integration between plasma-mobile and kwin.

Expected results: Completed OpenGL ES support in KWin for effects, an "expose" effect that is appropriate to mobile systems triggerable by a D-Bus interface

Knowledge prerequisite: OpenGL, window management a plus

Mentor: Martin Gräßlin

Improved effects configuration

Brief explanation: Provide a better user interface for managing KWin effects, so that a user can see which effects are mutual exclusive, which work together and which hardware is required for an effect.

Expected results: A new compositing configuration module supporting use cases like "effect for minimizing" and "effect for closing window" should be implemented. Furthermore the window rules should be extendes so that effects can be enabled/disabled for special windows.

Knowledge prerequisite: C++, basics of window management, usability experience

Mentor: Martin Gräßlin

Nepomuk

Website- Documentation/Howtos - Ontologies - Mailing list - IRC channel: #nepomuk-kde on Freenode.

(Also see the Nepomuk techbase page for a long list of Nepomuk-related ToDos and ideas.)

Web Metadata Extractor Framework and Service

Brief explanation:

Currently, the only metadata for files available is extracted by libstreamanalyzer and obviously it's limited to the metadata already present in files. However, there's a lot more metadata that can be mined from web resources such as lyrics, movie plots and bibliographic data.

We need a plugin-based service, which would slowly crawl indexed files in background and let plugins extract additional metadata based on existing metadata. There must be a way to configure the service and plugins.

The project includes writing a number of useful plugins to "field test" the design to make sure it's viable, serve as examples for other plugin writers and provide a visible benefit to users.

Expected results:

Music: lyrics, extra album metadata(year, track count, trivia), artist/band metadata(birth date, gender).

Video: IMDB data

A convenient interface to configure and enable/disable plugins(say, user might want lyrics but doesn't care about artists), configure the service(such as frequency of recrawling to see if new metadata is available)

Mentor satisfied that plugins can be written to use the service for other purposes.

Knowledge Prerequisite:

  • C++
  • Qt
  • SPARQL and Nepomuk or any other semantic background would help

Mentor:

Sebastian Trueg or Eveny Egorochkin

Dedicated Desktop Search GUI

Brief Explanation: While we have powerful search tools in KDE/Nepomuk the representation is still not perfect. Especially non-file results are shown in an unintuitive way. The goal is to have a search GUI (reusable in several applications if possible) that presents search results in a nice manner. File results are simple (but could include snippets), but also contacts and emails (in KDE 4.5) and other results like tasks or projects needs proper display.

A generic approach would in theory be best but is probably impractical in the scope of GSoC. Thus, a GUI handling the mentioned special cases would already be a nice result.

Knowledge Prerequisite:

  • C++
  • (Qt /KDE)
  • SPARQL and Nepomuk or any other semantic background would help

Mentor: Sebastian Trueg


Sub folders in Nepomuk search KIO slave

Brief Explanation: With the nepomuksearch and nepomuk KIO slaves we have powerful search tools at our hands (compare project above). One thing is missing though: subfolders to further restrict a query. Since these can hardly be created automatically the idea would be to have the user create them through a slick GUI. Then they can use and share this manually created hierarchy of queries.

A good example could be music files: define folders for "artists", "albums", "genres", "years", and so on. Then maybe in the "artist" folder we could have another folder "all tracks" and one for each album.

But there could be other hierarchies as well: filter by projects and then by persons related to the things. Or by tasks or both. Or have one subfolder pulling in everything that contains the name of the project.

There are many possibilities.

Expected Results:

  • A GUI to create hierarchies of queries with the possibility to upload them to opendesktop.org or get new ones from there.
  • Integration of the hierarchy into the KIO slaves. Either with a new KIO slave which makes use of the existing ones or with a extension to the existing ones.
  • A description format for the hierarchies (could be XML for example)
  • A set of default hierarchies the user can choose from to get started.

Knowledge Prerequisite:

  • C++
  • (Qt /KDE)
  • SPARQL and Nepomuk or any other semantic background would help

Mentor: Sebastian Trueg

Stream Analyzer based on Data Structure Descriptions

Brief explanation:

The analyzers in libstreamanalyzer (part of Strigi) are all written in C++. This gives a lot of flexibility but could be improved. The best way to describe a file format and the data formats used in the file is to write a grammar for it. Ideally, there would be a stream analyzer that takes the data structure descriptions and a mapping to extract from the certain files to metadata triples.

A helper program would convert the data structure description and a mapping description and compile it to a stream analyzer. A simple example using the header for a PNG file. A PNG files starts with 8 bytes of magic, then 4 bytes with the chunk size, then 4 bytes unsigned big endian for the width and 4 bytes unsigned big endian for the height. A simple grammar could say:

magic: 8*Byte
chunksize: BigEndianUInt32
width: BigEndianUInt32
height: BigEndianUInt32

Then a separate mapping could be written to convert this information to triples:

width -> http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#width
height -> http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#height

This way, one could easily write stream analyzers without knowledge of C++. Also one would be able to develop faster analyzers independently from the actual file formats by writing a better code generator.

Other analyzer projects could benefit too, since the format description and mapping is language-independent.

Expected results:

Look for a grammar language or a subset, such as BNF, antlr or the one used in msoscheme, that could describe a wide range of file formats and that is simple enough that one can write a parser for it. The generated code should give an implementation of a Strigi::StreamEventAnalyzer for each structure description plus mapping.

Knowledge Prerequisite:

  • C++
  • Experience with code generation and data format grammars
  • SPARQL and Nepomuk or any other semantic background would help

Mentor: Jos van den Oever

IRC channel:

#strigi on Freenode

See Also...

In this very list:

And more Nepomuk ideas:

Plasma

Website - Mailing list - IRC channel: #plasma on Freenode.


Plasma Library Unit Tests

Brief explanation: A set of unit tests regarding Plasma library contents (like widgets, dataengines, animations, and such) which basically helps developers know when a certain modification on the code would generate a regression bug or unexpected behavior. This idea is similar to the Javascript API Test Suite one but with a different goal, which is the Plasma core library itself.

Expected results: A set of unit tests (using QTestLib framework preferably) divided by group and handled by the build-system using CTest. GCOV/LCOV/GENHTML shall be used to generate proper coverage report data (with a coverage threshold at least >=90%). The tests in general will cover signal/slots behaviors and object states (actual data from object class members) given a certain procedure (i.e. clicking on a button). Bonus points for more complex tests which involves graphical behavior aspects of widgets and animations.

Knowledge prerequisite: C++, Qt (including QTestLib), Plasma and code coverage report tools.

Mentor: Bruno Abinader

Javascript API Test Suite

Brief explanation: A test suite system for ensuring quality of the various JS APIs including Javascript Plasmoids, DataEngines, Runners and the plasma-desktop scripting console. Due to the dynamic nature of Javascript, it is prone to errors in the bindings and changes in behavior.

Expected results: A test harness (could link into QTest perhaps?) to run the scripts, a reporting tool (or integration with an existing one) that can show current results and compare against past releases and 90%+ coverage of existing API via JS scripts runnable by the harness. Bonus points for autogenerating tests from the QMetaObjects of the bound classes in kdelibs/plasma/ such as the widgets.

Knowledge prerequisite: Javascript and C++, Qt and Plasma a bonus

Mentor: Aaron Seigo

Grid and Grouping Containments

Brief explanation: Containments that do widget grouping and gridding

Expected results: A desktop and a panel containment which allow widgets to be grouped or put into grids.

Knowledge prerequisite: C++, Qt and Plasma a bonus

Mentor: Aaron Seigo

Plasmoid Data Caching

Brief explanation: Right now when Plasma Netbook does not have a network connection, Plasmoids such as the news/rss, microblogging, etc. plasmoids tend to show nothing in the interfaces. A simple caching system would allow widgets to show the data that was available when networking was last available.

Expected results: Plasmoids / DataEngines relying on network access should cache data for when networking is not available and refresh when networking becomes available.

Knowledge prerequisite: C++

Mentor: Marco Martin, Bruno Abinader

Mobile Status Bar

Brief explanation: Take the system tray used in plasma-desktop and plasma-netbook and make it work properly on mobile devices such as the N900.

Expected results: A functional system tray with battery, networking, etc. plasmoids working along with ability to configure the entries in it.

Knowledge prerequisite: C++, Qt

Mentor: Alexis Menard

Global Menu Bar

Brief explanation: A Plasma panel containment that provides a MacOS-style menu bar

Expected results: The menu bar containment should support showing the application menu and work with Qt/KDE apps as well as Gtk+ apps. See http://frinring.wordpress.com/2009/01/29/mac-style-menubar-for-kde-4-and-others/

Knowledge prerequisite: C++, Qt

Mentor: Aaron Seigo

Plasma Media Center - Media Browser backends and API

Brief explanation: Low level layer to allow browsing media content from web services directly from the media browser applet.

Expected results: Continue what is already there about the media browser backends and dataengine backends and make them cooperate in order to correctly retrieve media contents from web services like YouTube, Flickr, Picasa...

Knowledge prerequisite: C++, Qt, Plasma API is a relevant bonus

Mentors: Alessandro Diaferia, Marco Martin

Plasma Media Center - Ui re-styling

Brief explanation: A re-design of the Media Center Ui in order to guarantee a great user experience.

Expected results: Taking advantage of the QtDeclarativeUi framework the aim is to provide an excellent user experience in accessing local and remote media contents through Plasma.

Knowledge prerequisite: C++, Qt [,Plasma API, QtDeclarativeUi]

Mentors: Marco Martin, Artur Souza, Alessandro Diaferia


Phonon

Abstraction library for sound and video support. Used by KDE notifications, Amarok, Dragon Player and Qt Software.

Website - Mailing list - IRC channel: #phonon on Freenode.

This year Phonon projects are going to be hosted under the VideoLAN banner. See their webpage for ideas.

High-Level Capture API for Phonon (read: Webcam Support)

High Level Capture API for Phonon

Project: Project: Phonon-VLC improvements and test

Phonon-VLC

Project: Phonon API for low-level PCM I/O

Phonon API for low level PCM

Project: Phonon API for implementing effects in applications

Phonon API for Effects in Apps

Kate

Kate is a powerful programmer's editor.


Website - Mailing list - IRC channel: #kate on Freenode.

Project: Vim-like Swap File

Brief explanation: Add swap file support, like vim has, to limit the effects of crashes.

Expected results: Kate, KWrite, etc. should be able to recover (most of) what was written after last save in case of a crash or power failure.

IMHO the dialog presented to the user for recovery could be a bit better than vim's, too: for example, if the file hasn't been modified it doesn't make sense to offer to restore it. A "view diff" option would be extra awesome. --Chani 13:44, 28 February 2010 (UTC)

Knowledge Prerequisite: Knowledge of C++ and Qt is a requirement.

Mentor: Christoph Cullmann <[email protected]>

Project: Kobby (Collaborative editing)

Brief explanation: Document uploading support, allow KTextEditor parts to control undo/redo, infinote server start/stop ability, connection history/management, other UI improvements.

Proposals can feature multiple of these ideas, and are open to ideas not listed here.

Project Page: http://kobby.greghaynes.net/

Technical Details: Technical details for some of the ideas can be found on http://kobby.greghaynes.net/documentation/gsoc-2010-ideas

Knowledge Prerequisite: C++, Qt

Mentor Knowledge Prerequisite: (Preferred but not required) KTextEditor development and or usability experience.

Mentor: Needed.

Konqueror

Mailing-list: https://mail.kde.org/mailman/listinfo/kfm-devel/ https://mail.kde.org/mailman/listinfo/kfm-devel/

Project Page: http://www.konqueror.org/

Project: Integrate Nepomuk in bookmarks

Brief explanation: Make a taggable bookmark system like that of Firefox, taggable and with searching for these tags in the location bar. This should integrate with the KDE semantic system Nepomuk.

Expected results:

Knowledge Prerequisite:

Mentor: ask in the mailinglist kfm-devel

Project: Akonadi-Integration, Syncing bookmarks and history over Internet

Brief explanation: write an Akonadi-modul that enables syncing of konqueror bookmarks from pc to laptop for instance

Expected results:

Knowledge Prerequisite:

Mentor: ask in mailinglist kfm-devel

Project: Mozilla Weave

Brief explanation: Weave is a new Mozilla project / Firefox addon that allows one to synchronize browser tabs, history, bookmarks, passwords & preferences between different computers via a publicly available server. The communications is encrypted and also all data gets encrypted on the client before transferring to the server so privacy is protected. Further it is completely open source so everyone is able to host ones own server, get & modify the code and so on.

Expected results:

Knowledge Prerequisite:

Mentor: ask in mailinglist kfm-devel

Project: Web scripts

Brief explanation: Implement support for modifying web page javascript and css like firefox greasemonkey and stylish, respectively. It should ideally support greasmonkey and stylish scripts as-is.

Expected results:

Knowledge Prerequisite:

Mentor: ask in mailinglist kfm-devel

Krita

Krita is a KDE program for sketching and painting, offering an end–to–end solution for creating digital painting files from scratch by masters.

Mailing-list: https://mail.kde.org/mailman/listinfo/kimageshop/ Project Page: http://www.krita.org/ Irc channel: #koffice on irc.freenode.net Forums: http://forum.kde.org/viewforum.php?f=136

Project: transform tool for Krita

Brief explanation: While Krita already has two transform tools, neither is sufficient for the needs of digital artists working on concept art, comics or textures. We need a transformation tool that can rotate, scale, shear and freeform transform. This project entails a careful design specification stage in consultation with the Krita developers: the student should contact the krita developers beforehand. The implementation will likely be challenging both from a user interface and from an algorithm point of view.

Expected results: a working, polished transform tool

Knowledge Prerequisite: C++, Qt, digital art, image manipulation algorithms.

Mentor:

Project: Tagging and management for Krita resources

Brief explanation: Krita comes with a rich selection of resources: patterns, gradients, brushes, brush presets, soon materials for texture painting. These resources need to be managed: added, deleted, changes and tagged. Existing tagging specifications exist for Gimp and for Viaduct, and Krita should be compatible here. Integration with Get Hot New Stuff and Nepomuk are important aspects of this project. There will be data structures and gui work.

Expected results: A functioning implementation of resource management and tagging.

Knowledge Prerequisite: C++, Qt, digital art.

Mentor:


Project: Guided Painting

Brief explanation: Krita has the beginning of a guided painting system, with guides, levels of magnetism and plugins for guide types. This project is about finishing the implementation of this system: guide management, guide selection, new guide types. The guides are intended replace the geometric tools, so their usability must be very good. Both algorithm and gui work.

Expected results: A polished guided painting system.

Knowledge Prerequisite: C++, Qt, digital art.

Mentor:

Project: Color Selectors/dialogs

Brief explanation: Krita has only very basic color selectors. Two things are needed: a full-blown color selection dialog that makes use of the colorspaces provide by the pigment library and that can shown out-of-gamut colors, and a collection of innovative, polished color selectors geared towards the way painters work. The selectors should be availabe as dockers, but also be pluggable into the quick selection palette. In order to write a proposal, the student will have to study available literature on color selection, as well as give an overview of selectors implemented in other applications like mypaint, gimp, scribus and others.

Expected results: A new set of color selectors.

Knowledge Prerequisite: C++, Qt

Mentor:

KDE Finance

KDE Finance is an emerging group of applications dedicated to financial topics, such as Personal Finances Management, Invoices Management, Point of Sales...

Plasma Dashboard in Skrooge

Skrooge is a Personal Finances Manager, a part of KDE extragear.

Brief explanation: Skrooge currently has a module called Dashboard that contains several widgets showing various information about your financial situation. However we are reinventing the plasma wheel in many areas, so we'd like to switch it to plasma. The dashboard could become a generic componenet that would also be used by other applications (kontact ?)

Expected results:

  • implement a newspaper view that will receive skroogoids (linked with this other GSOC project).
  • write a dataengine providing data from the current skrooge file (which is in fact an SQLite database).
  • create some skroogoids that should be displayed in the newspaper view. Ability to display them on the desktop, without skrooge being opened is something to be discussed (a skrooge file may be password protected using QCA, no idea how this could be handled).
  • save the dashboard config inside the Skrooge file (currently not supported by plasma, IIRC)

Knowledge Prerequisite: C++, SQLite, optionnally a scripting language supported by plasma

Mentor: Guillaume DE BURE, + someone from plasma team (?)

Project: Financial information in Nepomuk

Brief explanation: The finance applications generate a lot of data and information that could be included into Nepomuk and then leveraged with other information. This project is about creating a connector that can be used by these applications and work with the apps developer to create the taxonomies and other necessary elements to store this information in Nepomuk and to update it when necessary.

Expected results: Have a library to be included by finance apps to feed contacts and transaction data into Nepomuk.

Knowledge Prerequisite: C++, Qt

Mentor: Alvaro Soliverez + probably someone from Nepomuk


Rekonq

rekonq is a web browser for KDE that aims to be lightweight, fast. And cool :)


Project: Rekonq with WebKit 2

Brief explanation: Rekonq currently use the regular WebKit model where user input and rendering are done synchronously in response to events of the event loop. A research project of WebKit aim a using asynchronous API between the user agent and the engine, this is called WebKit 2. This project is about improving WebKit 2 to support the use cases of Rekonq, and prototype a version of Rekonq based on WebKit 2.

Expected results: A branch of Rekonq based on WebKit 2.

Knowledge Prerequisite: C++, Qt

Mentor: Benjamin Poulain + hopefully some help from Andrea


Project: Adblock improvements & elements manipulation

Brief explanation: Rekonq currently has an initial implementation of an ads blocking mechanism. This project aims to expand it providing the feature parity with AdBlockPlus and implement a sort of HTML elements manipulation system (enable it, and then click on the page on the elements you want to hide. When you're ok, save your changes, reset them or leave them just for this time).

Expected results: An improvements in the adblock rules handling, some (new) tests to check adblock behavior and performance, the elements manipulation feature with (possibly) the ability to save and remember applied changes.

Knowledge Prerequisite: C++, Qt

Mentor: Andrea Diamantini + hopefully some help from Benjamin :)

ownCloud

An open personal cloud which runs on your personal server. It enables accessing your data from all of your devices. Sharing with other people is also possible. It support automatic backups, versioning and encryption.


Website - Mailing list - IRC channel: #owncloud on Freenode.


Project: Syncing client

Brief explanation: Build a client to sync your ownCloud files with your local disc to enable offline use.

Expected results: Development of an application you run on your local PC. This applications syncs local folders with folders on your personal ownCloud server everytime you are online. This applications needs a GUI written in KDE/Qt to configure the ownCloud url, folders, login and password. The applications sits in the systray and informs the user about the syncing progress or sync conflicts. The idea is that the clients mounts the ownCloud folders via WebDAV into a "hidden" directory and syncs the folders via rsync or an own syncing script. Errors should be reported to the user.

Knowledge Prerequisite: Python, Ruby, PHP or C++ and KDE/Qt depending on the technology you choose for the desktop syncing client. Enthusiasm for Cloud/Desktop integration and trying new things.

Mentor: Frank Karlitschek <[email protected]>.


Project: Photo gallery

Brief explanation: Build a photo gallery plugin for ownCloud

Expected results: Development a photo gallery plugins which reads the photos from a photo folder in you ownCloud file storage and automatically creates different beautiful photo galleries. The idea is that you just save you photos with your KDE application in you ownCloud photo folder via webdav and you automatically get a photo gallery which you can show to your friends. You don´t need to upload you photos to an online photo service. You can present your photos to the world directly without the need to use non free online services.

Knowledge Prerequisite: Knowledge PHP, HTML, CSS and MySQL. Enthusiasm for Cloud/Desktop integration and trying new things.

Mentor: Frank Karlitschek <[email protected]>.

KDE SDK

Project: Umbrello QGraphicsView

Brief explanation: Finish the QGraphicsView port of Umbrello

Expected results: A working Umbrello using QGraphicsView and all features in the current QCanvas version

Knowledge Prerequisite: c++, Qt, QGraphicsView

Mentor: Jonathan Riddell <[email protected]>.


Project: KDE Git front-end and KPart

Brief explanation: Considering the increasing use of Git in KDE, the usual hard learning curve mainly for newbies, and the need for Git integration in SDK tools it would be useful to implement a KDE-based user-friend front-end for Git. Such tool could provide a graph about repository cloning dependency, features for automating the pull/push and merge requests. In addition, a KPart could be provided to make these features available for use in other SDK tools like KDevelop and Plasmate. The KPart should be flexible enough to meet demands from general visualization to fine-grained operations like pull/push, conflict resolution, and merge requests.

Expected results: A KDE Git front-end tool which automate the basic Git operations and make them available in an intuitive and user-friend way. Furthermore, the implementation should use a KPart developed as part of the project which provides a flexible enough API for use in other SDK tools.

Knowledge Prerequisite: Qt - C++. Previous KDE development experience and Git use knowledge is desirable.

Mentor: Sandro Andrade <[email protected]>


KDE Language Bindings

Project: Documentation Extractor

Brief explanation: Write a plugin for the 'smokegen' tool that will parse headers and source files, extract documentation comments and convert them to a suitable format for using with languages such as Ruby, Perl, PHP, C# or JavaScript. Convert any embedded code snippets to the target language.

Expected results: Documentation produced for one or more of the languages above (the more the better!), and possibly documentation viewer tools too.

Knowledge Prerequisite: C++, parsers, Qt

Mentor: Richard Dale <[email protected]>.

Solid

Project: Network Device Detection & Desktop Integration for UPnP

Bried explanation: Universal Plug and Play is a set of technologies for the digital home. Network transparancy has always been a core concept in KDE with the KIO slave technology. Solid is gaining support for network device detection and enumeration as well as multiple backends.

Expected results: The goal of this project is to develop and stabilize a UPnP backend using an existing library, framework or daemon. To proof the usefullness of these new solid features example integration of UPnP in existing KDE SC applications is expected.

Knowledge Prerequisite: Solid, KIO, UPnP

Mentor: Kévin Ottens, Fredrich Kossebau