Projects/Summer of Code/2008/Ideas
This page is an open list for ideas for the 2008 edition of Google Summer of Code. This page is open for new ideas from anyone.
This list is not exhaustive. It is just a collection of some ideas. To get further ideas, please feel free to use any resources and past ideas.
Before proceeding, please read the participation instructions and the notes on editing this page. They are useful for students and developers alike.
Past ideas
You may want to take a look at the ideas page for 2006 and 2007. Many of the ideas there are still valid today.
Project ideas
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.
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.
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)
KDE Libs
KDE Core libraries
The KDE core libraries (kdecore, kdeui, kio, kparts) are the most basic libraries that all KDE applications depend upon.
Solid
Solid is the KDE hardware abstraction layer, that enables KDE programs to get consistent results when running on different platforms.
Phonon
Phonon is the KDE audio abstraction layer, that enables KDE programs to produce basic and medium-level multimedia functionality in any platform without platform-specific code.
KHTML
KHTML is the current KDE HTML engine, used by the Konqueror web-browser and other applications to display HTML in their interfaces.
KJS
KJS is the JavaScript engine used by KHTML and Kross to run JavaScript programs.
Sonnet
Sonnet is the KDE grammar, spell-checker and language-detection engine.
Kross
Kross is a modular scripting framework that provides a complete framework to embed scripting interpreters like Python, Ruby and KDE JavaScript transparently into native applications to bridge the static and dynamic worlds together.
Oxygen
Oxygen is the KDE 4's default look-and-feel. It comprises of the Oxygen icon set (including the palette and guidelines for icons), the Oxygen sound theme, the Oxygen wallpaper collection, the Oxygen window decoration and the Oxygen widget style. Note that for Summer of Code, you must produce code, so the window decoration and widget styles are your more likely candidates.
KDE-Print
- Implement an easy usable fineprint-like solution for collecting pages from different printing sources (browser, kword, krita...) and allow it to rearrange single pages (not printing jobs), delete pages, add blank pages. Information also in wish-list-item: 90989. I am the reporter of this wish, you can contact me there. I do not have the abilities to program, but I am willing to help testing an implementation and discuss how it should look like.
- WARNING! i'm doing exactly thos for my semester project at school (we are two students, so we can't apply for SoC with this).We are probably developing it in pure QT (the other student is a gnome user).You can get in contact with me: [email protected]
KDE Base applications
Konqueror
Konqueror is KDE's powerful web browser and file manager.
Project: Bookmark Wallet
Description: This isn't actually a project to be a part of Konqueror itself, but rather a separate application similar to KWallet. The application should provide a database for the storage of URL bookmarks. The database should be able to connect to remote storage, such as the google bookmarks service, for synchronization and backup. The URLs should be easily manageable, and include a concept of ratings for the URLs. A plugin should be written to allow Konqueror to easily interface into the system, or preferably Konqueror itself should be modified to use the storage system when it is available. The application should provide an interface which is easy to connect to from a browser plugin, so that plugins could be written for other browsers, such as Firefox, as well. There should also be a plugin interface into the database, to allow support for other remote storage backends, such as foxmarks, to be created. The application should handle multiple concurrent connections to the database without issues. Additionally, the application should provide an event interface to notify all connected browsers whenever a bookmark is added, changed or removed.
Comment: Rather than developing a separate application, interested students should have a look at the Akonadi resource localbookmarks
Comment: Would be great if this would include saving RSS-Feeds in as well, synchronising them with webbased feedreaders
Comment: a database of feeds would indeed be great. If implemented with a "feedtype" field, it would solve the problem of feeds containing news that's best read in a traditional aggregator, audio that's best heard in a music player, video that's best seen in a video player, etc. Apps could just open the query the feed DB for suitable feeds. Or perhaps they could query for feeds with particular enclosure mimetypes? Hmm. That raises the issue of pre-loading the feed, and integration with libsyndication.
Dolphin
Dolphin is KDE 4's default file manager application.
Konsole
Konsole is KDE's terminal application.
Kate and KWrite
Kate is KDE's Advanced Text Editor, both a full-featured text editor application and a KPart engine ready for embedding into other applications (like KDevelop, Quanta and Kile). KWrite is a simple text editor based on the KatePart engine and is KDE's default text editor.
Project: vi mode for the Kate editor
Project overview: Create a vi-like modal editing mode for the Kate editor part and improve the kate command line to a point where it can be used efficiently for vi commands in this mode.
Expected results: This project should implement a vi-like, modal editing mode for kate. This mode will be selectable by the user.
Mentor: Christoph Cullmann has agreed to mentor this project.
KDE Workspace
Plasma
Plasma is KDE 4's desktop and panel tool, replacing KDE 3's kicker and kdesktop. It's an advanced and powerful application with revolutionary ideas.
- Plasma Packages
- Plasma provides a simple packaging system for widget (plasmoids), SVG themes, wallpaper sets and indeed any type of application add-on data. It is not a replacement for apt, rpm, klick, etc. but rather is designed to help with the challenge of creating, sharing, installing and managing run time add-ons as have been made popular with KDE's Get Hot New Stuff framework.
- Project I: A GUI Creator For Packages: This project involves taking the already started user application "plasmagik" and refining it to be ready for production use. The application must take a plasma package description, display it in a user friendly way in the UI and allow the user of the application to add files to the various nodes in the structure (e.g. graphics to an "images" entry). In particular this project would consist of:
- Removing assumptions based on the plasmoid package structure and instead using the generic Plasma::PackageStructure class.
- Making the UI more user friendly
- Streamlining the upload support
- Writing a tutorial on KDE's TechBase on how to employ the application as an add-on creator.
- As the plasmagik application already has had a fair amount of work done it and an active community of developers interested in its future, the scope and support for this project should be within the limits and expectations of the SoC.
- Project II: Package Management: This project involves creating a small utility application consisting of a dialog and a control panel that uses it which allows the user to list, share and remove installed Plasma packages. As there are no dependencies, binary compatibility, etc issues usually associated with full package management applications, this would be well suited to a SoC project.
- Project I: A GUI Creator For Packages: This project involves taking the already started user application "plasmagik" and refining it to be ready for production use. The application must take a plasma package description, display it in a user friendly way in the UI and allow the user of the application to add files to the various nodes in the structure (e.g. graphics to an "images" entry). In particular this project would consist of:
- Plasma provides a simple packaging system for widget (plasmoids), SVG themes, wallpaper sets and indeed any type of application add-on data. It is not a replacement for apt, rpm, klick, etc. but rather is designed to help with the challenge of creating, sharing, installing and managing run time add-ons as have been made popular with KDE's Get Hot New Stuff framework.
- Zeroconf Integration: This project would involved adding a zeroconf announce and discovery feature to libplasma that would provide a Plasma::Applet with a simple API to find other Applets of the same type on the local network. A test plasmoid would be created to prove the working status of the zeroconf support. Remaining time would be spent adding zeroconf features to applicable existing plasmoids.
- DataEngine + Plasmoid for zeroconf services: Browser for zeroconf services available (perhaps doable with above project as well?)
- Physics Engine: Take an existing 2D physics engine and experiment with using it within a containment to emulate "natural" object interactions.
- Setting a video as desktop background
- Dynamic desktop background: A desktop background which displays different wallpapers according to information like time of the day, season, weather etc.
- Mobile device containment: Implement a Plasma::Containment that is appropriate in form factor and UI layout for a UMPC/tablet style device.
- Touchscreen profile: The use of UMPC form factors with a touch screen is increasing -- certainly in some business areas. Plasma is prepared for handling different form factors and for providing a user interface experience that adjusts to device characteristics. The touchscreen profile SoC project (touchscreen hardware will probably be arranged through the mentors) aims to identify where Plasma / KDE works well and where it doesn't on small (VGA or SXGA) screen sizes; then it will fix the bits where it doesn't work well and introduce a general mechanism for handling small screens. In addition, UMPC on-screen keyboards introduce new UI challenges; integrating these in a meaningful way with plasma is an extra part of this project (or possibly an extra project). Dialog and menu handling on small screens, with pagination of menus and (re)pagination of tabbed dialogs is another topic. Mentors: Adriaan de Groot and Armijn Hemel.
KRunner
KRunner manages the screen locking, run command dialog and provides a general natural language interface to applications, desktop services, network locations, files and data (e.g. math calculations, spell checking, word definitions, etc). It replaced the Run Command dialog in kdesktop from KDE3, is multithreaded and shares code with Plasma.
Some of the items below may take an entire SoC project, others may be better combined to flesh out an entire summer's worth of work.
- Ranking: Results are returned to KRunner by individual runners. These result must then be ordered for the user prior to display. This project would consist of improving the ranking of returned results by working on two related fronts:
- Tweaking individual runners to more accurately rate their own results.
- Improving the final ranking system employed by the host application.
- Abstracting runner management out of KRunner: The main pieces of using runners (SearchContext, SearchMatch and AbstractRunner) exist in a shared library (libplasma). However, much of the code for managing the actual runners at runtime is contained within the krunner application itself. Abstracting this code out would make it easier for other components and applications to user runners as well.
- Using runners in Kickoff: The kickoff menu has a search tab. Currently it does it's own internal search. It should, instead, be using AbstractRunners for this. This task would go well with the runner management task above.
- Xesam search runner: Write an AbstractRunner plugin that uses the Xesam query spec to forward user queries to a search store. The trick will be in making it performant as well as providing support for paging through requests.
- Write as many runners of your choice: one might call this a "marathon" (get it? runners? as many as you can? ahaha! *sigh*). I wrote [this blog entry] looking for ideas for runners and got many, many suggestions. I think it reasonable to expect that over the course of a summer's work one might be able to write 5-10 runners depending which ones were selected.
KWin
KWin is KDE's X11 Window Manager program, greatly improved when compared to its older brother in KDE 3.
KDM
KDM is KDE's Display Manager and login application.
KDE Runtime
KOffice
KWord
Project: Improve ISO OpenDocument support
Explanation: Improve loading and saving of the ISO OpenDocument format what includes 1) extend the current saving code, 2) extend the current loading code and 3) probably also extend the rendering engine aka the text flake-shape.
Expected results: be sure everything we are able to load, display and edit is also saved back correct using the default file format.
Mentor: Sebastian Sauer <[email protected]>
Project: Collaborative editing of documents over a network.
Explanation: Make it possible for two or more users to work at the same document in KWord at the same time over a network. Both users would open the same document, and changes made by each user are synchronized to the other user's editing session.
Project: Version control integration.
Explanation: Integrate version control system support with KWord to allow easy control over revisions of documents. It should be possible to connect with remote revision control systems, to allow collaborative work on projects, similarly to how software is developed. It should be easy for the user to browse through the history of document versions in the version control system, to see what has changed. CVS, Subversion and git should be supported.
Project: Improve legacy MS Office (2003) documents support
Explanation: Current MS Office formats support is kinda limited (especially write support). To decrease the barrier for adoption, better MS Office support is a way to do that.
KSpread
Kexi
Kexi is an integrated data management application for desktop users like Microsoft Access.
Project: Improve Kexi Data Import/Export
Brief explanation: Currently Kexi allows importing CSV files into an existing database, and converting MySQL/PostgreSQL/MS Access databases into Kexi databases.
The aim of this project is to provide plugin(s) that import from more database backends/formats.
You can select backend you want to implement migration for:
- HSQLDB - the OpenOffice.org Base's DB backend (ODB file format, very important to have)
- ODBC
- Paradox
- DBase (e.g. using Xbase)
- Firebird (note: pending licence checks if we want GPL-compliance)
For the ODBC driver, a migration plugin and a backend plugin should be provided. For Paradox, only a migration plugin is required, although this will require modifying the migration framework to allow more than one file to be selected as the source database (i.e. the database to be imported).
Both a migration plugin and a backend plugin could be provided for HSQLDB, which should be implemented using JNI to invoke JDBC methods in the HSQLDB library. To avoid Java and OO.org dependencies, a small tool could be developed in Java to export/import to/from a intermediate format, and then used from within a Kexi migration plugin.
In any case, migration plugins are simpler to implement than direct access plugins (drivers), so these can be developed first.
Expected results: HSQL support would enable OpenOffice.org Base format for KDE and KOffice itself, a good companion to already existing OpenDocument support. ODBC connectivity would add many new possibilities directly to KDE.
Knowledge Pre-Requisite: knowledge of C++, (knowledge of Qt and experience with a given database format/backend is recommended)
More info:
- "DBase Migration Plugin for Kexi" proposed by Jonathon Manning last year
- "Paradox & HSQL access for Kexi" proposed by Joseph Wenninger last year
Mentor: Jaroslaw Staniek <[email protected]>, Sebastian Sauer <[email protected]>
Mailing list: kexi at kde.org
Project: Kexi Web Forms
Brief explanation: Web Forms allow to read-only or read-write access to database projects created with Kexi. It is optional feature for uses where client has no Kexi installed for any reason. The fact that the Web Forms will use Web standards, adds another advantage over competitors like MS Access (which uses proprietary Windows-only ActiveX bindings).
Proposed solution is to develop a small standalone web server. It is probably already written in C++ or C by FOSS community. Good examples are lighttpd - http://www.lighttpd.net/ and (being already in KDEnetwork module) KPF - http://rikkus.info/kpf.html.
The web serwer would be dynamically linked to kexidb and thus can access Kexi databases via universal KexiDB API, and create HTML content on demand as an answer to HTTP requests.
For alternative solution see "Alternative solution for Kexi forms using PHP" below.
Expected results: Shortly, it is internet-enabler for KOffice/KDE data management.
Knowledge Pre-Requisite: knowledge of C++ and HTTP/web standards, (knowledge of Qt and experience with a given database format/backend is recommended)
More info: Solution proposed by Jacek Migdal last year
Mentor: Jaroslaw Staniek <[email protected]>
Mailing list: kexi at kde.org
Project: Alternative Solution for Kexi Forms Using PHP
Brief explanation: Create a Kexi plugin generating PHP code saving it directy to the filesystem. This will require Apache (or other PHP-compatible web server) to be present and configured, and also will require the plugin to be packaged with a script that will install appropriate tools that allow r/w accessing the Apache/php subdirs.
Expected results: The generated code could directly access MySQL or PostgreSQL servers at the backend, so users could immediately have a robust server-side solution without complex requirements.
Knowledge Pre-Requisite: knowledge of PHP, web standards and C++, (knowledge of Qt is recommended)
Mentor: Jaroslaw Staniek <[email protected]>
Mailing list: kexi at kde.org
Krita
Project: Sumi-e brush engine
Project Information: While there is already an attempt at a sumi-e brush engine in Krita, the current code is limited and uses an old-fashioned way of simulating brushes.
Expected results: This project should implement an anti-aliased, bidirectional ink-transfer simulation of a sumi-e brush, together with a user interface to define brushes. The brushes should react to pressure, tilt and rotation of the a tablet stylus. The results should be realistic. Loan hardware for use during the development phase is available.
Knowledge Pre-Requisite: Basic knowledge of basic 2d graphics principles. A list of relevant papers and books is available.
Mentor: Boudewijn Rempt <[email protected]> The mentor can help preparing the project proposal for submission to Google.
Project: Sketch-pad interface for Krita
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.
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.
Knowledge Pre-Requisite: C++
Mentor:
Project: Shader filters and generators for Krita
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.
Mentor:
Project: Animation support
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.
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.
Knowledge Pre-Requisite: C++
Mentor:
Project: RAW plugin
Project Information: Krita's current raw plugin is based on a shell exit to dcraw. This is not sufficient and needs to be re-implemented.
Expected results: A next generation plugin should implement loading of raw images either through libopenraw or libkdcraw; preferably designed in such a way that we can switch libraries when opportune. The plugin should allow the user to set conversion parameters in a way that is useful to photographers. An extension to this project could be the implementation of a bayer colorspace model: that is, a colormodel that allows us to load the raw images and edit them in the native raw format, without conversion.
Knowledge Pre-Requisite: C++
Mentor:
Project: PSD and Gimp plugins
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.
Expected results: 4 plugins: psd import/export and xcf import/export. These plugins should be able to handle complex files in all supported colorspaces.
Knowledge Pre-Requisite: C++
Mentor:
Project: Photoshop-compatible brush engine
Project Information: A paintop plugin that can load and handle current photoshop brushes. This entails reverse engineering of the Photoshop brush file format and implementing a procedural brush engine that matches the Photoshop brush engine.
Expected results: A procedural brush engine with settings dialog that can load and save current photoshop brush files.
Knowledge Pre-Requisite: C++
Mentor:
Project: Workspaces
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: 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.
Knowledge Pre-Requisite: C++, artistic workflow
Mentor:
Project: Kipi and digikam plugins compatibility
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.
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.
Knowledge Pre-Requisite: C++, artistic workflow
Mentor:
KDE SDK
Umbrello
Umbrello is the UML drawing and design tool in KDE.
Project: Add the capability to draw SysML diagrams (http://www.omg.org).
Project: Port Umbrello to QGraphicsView
KDE Edu
Marble
Project: Marble - Routing
Project Information: Marble is a generic geographical map widget and framework that is meant to be used by KDE4 applications. It is also distibuted as a standalone application in KDE4.
Brief explanation:
- Build on the inclusion of OpenStreetMap data in Marble.
- Implement routing algorithms, ex. A*
- implement a display of the route on the globe.
- Optionally, show a list of roads and turns to get to destination.
Expected results: Ability to chose start point, end point and type of transport (car, bike, foot etc.) and get a display of a route on the globe.
Knowledge Pre-Requisite: Required: C++. Could be useful: Qt, knowledge of OpenStreetMap.
Mentor:
Project: Marble - OSM Annotation
Brief exmplanation:
- With a UMPC (possibly with built-in GPS receiver), it is possible to go into the field and hold a "verification party" to check the accuracy of OSM data. However, making notes when the OSM data is inaccurate is somehow annoying.
- This project will implement on-screen annotation for OSM data overlaid on Marble, including mark and circle (i.e. drawing stuff on the map) and text annotation (taken together, it means you can draw a circle on the map and add a note saying what's wrong there).
- Integration with UMPC stylus and on-screen keyboard input methods is needed.
- Agressive caching of Marble / OSM data in order to display it in the field is needed as well (compare Google Earth on an iPod).
- Bonus points for optimizing for battery life.
Mentor: Adriaan de Groot and Armijn Hemel. Touchscreen hardware might be provided on loan through the mentors.
Parley
Project: Parley - Practice
Project Information: Parley is the vocabulary trainer that comes with KDE4. It is based on KVocTrain but has a much improved GUI. It allows to manage and exchage vocabulary collections that are stored in xml and provides advanced features, such as different practice modes.
Brief explanation: The library and the gui for editing vocabulary have been rewritten to a great extent. Now the thing that is still lacking is the most important part, the actual vocabulary practice. Based on QGraphicsView a nice practice dialog can be implemented, learning does not have to look boring.
Expected results: A working practice which supports different modes of practice, ranging from multiple choice and written tests to conjugation and other grammar practices. Support for themeing is desireable.
Knowledge Pre-Requisite: Required: C++. Could be useful: Qt, QGraphicsView, basic SVG knowledge.
Step
Project: Step: 3d mode
Project Information: Step is an interactive physical simulator for KDE. Currently it lives in playground but it will be included in kdeedu package for KDE 4.1.
Brief explanation: 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: 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.
Mentor: Vladimir Kuznetsov <ks dot vladimir at gmail dot com>
Project: Step: a game
Project Information: Step is an interactive physical simulator for KDE. Currently it lives in playground but it will be included in kdeedu package for KDE 4.1.
Brief explanation: The idea is to create a game based on physical simulation where the player have a fixed list of equipment (like springs, balls, cat and mice, teapot, etc.) and should use it to build a machine to achieve a given goal (for example put the ball in a basket, capture the mice, prepare a tea, etc.). The user places the equipment, than press Start button which starts physical simulation and if (in certain time limit) the goal is achieved the game is won. In the other case the user could try again. Similar projects: old game named "The Incredible Machine" and newer (but commercial) one named "Crazy Machines".
The game can be implemented as standalone application using StepCore or as special restricted 'game' mode for Step (probably with tweaked graphics).
Expected results: Playable game and several levels to test it.
Knowledge Pre-Requisite: Required: C++. Could be useful: Qt, basic physics (mechanics).
Mentor: Vladimir Kuznetsov <ks dot vladimir at gmail dot com>
Project: Step: simulation of chemical reactions
Project Information: Step is an interactive physical simulator for KDE. Currently it lives in playground but it will be included in kdeedu package for KDE 4.1. This project also relates to Kalzium.
Brief explanation: Simulate some basic chemical reactions using classical molecular dynamics methods with empirical potentials. At first initial settings for simulation should be prepared by hand (as XML file), if there will be enough time an editor could be implemented too. This project involves:
- convert required classes from StepCore to handle 3d simulations (you will need only several classes which are trivial to convert)
- implement required objects and potentials in StepCore
- implement GUI for observing the simulation (investigate the possibility to use avogadro library for visualization), GUI should also allow altering of some properties like masses and charges
- prepare demonstrations of several common reactions
Expected results: Chemical reaction viewer which could load predefined experiment, modify some basic properties and run the simulation. Prepared simulation for several common reactions.
Knowledge Pre-Requisite: Required: C++, physics, basic chemistry. Could be useful: Qt, basic quantum mechanics, knowledge of common molecular dynamics simulation technics and numerical methods.
Mentor: Vladimir Kuznetsov <ks dot vladimir at gmail dot com>
Project: Step: fast water and gas simulation
Project Information: Step is an interactive physical simulator for KDE. Currently it lives in playground but it will be included in kdeedu package for KDE 4.1.
Brief explanation: 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 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: 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, numerical methods. Could be useful: Qt.
Mentor: Vladimir Kuznetsov <ks dot vladimir at gmail dot com>
Project: Step: other ideas
Project Information: Step is an interactive physical simulator for KDE. Currently it lives in playground but it will be included in kdeedu package for KDE 4.1.
Brief explanation: These are smaller ideas related to Step. You can combine several of them to compose you 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, investigate better (more accurate) methods of modeling soft bodies (knowledge pre-requisite: physics)
- 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>
KDE PIM (Personal Information Management)
Kontact
KOrganizer
KPilot
KMail
Akonadi
Project: Akonadi backend for Microsoft Exchange Groupware server
Project Information: Akonadi (http://kdepim.kde.org/akonadi/) is the framework for groupware and other PIM applications for KDE4.1 and later. The proposed SoC task will implement an Akonadi backend to allow users to work with Microsoft Exchange servers and applications using compatible protocols (e.g. Outlook).
Brief explanation: The implementation will almost certainly need to use the OpenChange (http://www.openchange.org) libraries. A proof-of-concept implementation has been done (available in KDE's SVN archive), but has bit-rotted as the OpenChange libraries have evolved. It does not currently compile.
Expected results: A completed, and tested, backend that can operate with a current Microsoft Exchange server. Important capabilities include:
- ability to receive mail,
- ability to create and receive appointments, and to view the calendar,
- ability to access the address book, and
- ability to create and receive tasks.
Sending mail is outside the scope of Akonadi, and is a "growth" potential if the project is proceeding particularly well.
Knowledge Prerequisite: You need to have some familiarity with groupware applications (e.g. knowledge of how appointments and address books are used). C and C++ is pretty much essential, and at least passing knowledge of Qt. It would be useful (but not absolutely essential) if you had access to a Microsoft Exchange server you can use for testing - we may be able to arrange access.
Mentor: Optional, possibly Brad Hards <[email protected]>
KDE Games
KDE Development & Web Development
Kompare
Project Information: Kompare is a graphical difference viewer.
Project: Semantic diff
Brief explanation: Implement a plugin-based approach for different (potentially incomplete) diff-algorithms. Documents are not just lines of text, but have semantics, and these plugins should help to see changes made to the document.
Possible plugins are:
- File information diff: show date, size, last-modification, ...
- Programming language diff: detect changes like renamed variables, reindentation, namespace-changes, changes in comments, other refactorings ... (the more the better)
- XML-diff
- Latex-diff: whitespace is ignored.
- config-file diff: in many config-files the order does not matter.
- Image diff: at least show both images next to each other.
- Video diff: show both videos next to each other and link their time. Should be interesting for diffs after reencoding.
Expected Result: A native and Kross (for scripting) plugin-support for Kompare. Some of the above mentioned plugins.
Knowledge Pre-Requisite: Some knowledge of the Qt/KDE framework. Knowledge of C++.
Comment: I think one of the most obvious applications of this is in SVG: it would be possible to graphically show the original image + new_rect merged as new_image fairly easily. You could even make elements transparent, and show them in steps, with onion-skinning, almost animating from previous version to new version. I'd also really like to see this "semantic-diff" for ODF documents.
KLinkStatus
Project Information: KLinkStatus is a link checker, part of the kdewebdev module.
Project: Aided correction of broken links
Brief explanation: Currently, it is possible to find out broken links but it is not possible to fix them. It would be great if those links could also be corrected within KLinkStatus. The corrector should present the user with sugestions, like a spell checker does (it might be possible to reuse some of the KSpell heuristics). Possible errors are typos in domain and paths, absolute vs relative path, and wrong directories.
Expected results: Ability to fix broken links, being efectivly assisted with suggestions.
Knowledge Pre-Requisite: Some knowledge of the Qt/KDE framework. Language wise, this feature can be implemented using C++ or a script language like Python, Ruby or Javascript.
Mentor: Paulo Moura Guedes <moura at kdewebdev dot org>
Project: Site check automation
Brief explanation: KLinkStatus already provide a D-Bus interface that allows to check sites in the background based on a configuration file and then export the results to HTML. A system administrator can already automate check using cron jobs. However it would be nice to offer a nice frontend inside KLinkStatus (without the need of super user permissions). The results could then be exported into files and/or emailed to the site administrator.
Expected results: Easy site check automation and notification system.
Knowledge Pre-Requisite: Some knowledge of the Qt/KDE framework. Language wise, this feature can be implemented using C++ or a script language like Python, Ruby or Javascript.
Mentor: Paulo Moura Guedes <moura at kdewebdev dot org>
Project: HTML validation
Brief explanation: HTML validation is a very requested feature by users. KLinkStatus already have the infrastructure for this, using libtidy, but some work is still missing in order to actually correct the HTML documents.
Expected results: - Visual indication of which document have HTML validation problems - Ability to fix individual documents or several documents at a time - Ability to efectively preview, compare (perhaps using the Kompare kpart) and edit partial parts of a document - Configurable HTML validation parameters
Knowledge Pre-Requisite: Some knowledge of the Qt/KDE framework. Language wise, this feature can be implemented using C++ and, for some parts of it, a script language like Python, Ruby or Javascript.
Mentor: Paulo Moura Guedes <moura at kdewebdev dot org>
KDevelop
Quanta
KDE Network
KRDC
Add NX support to KRDC.
Project: NX support in KRDC.
Brief explanation: 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.
Expected results: 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.
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.
Resources: http://freenx.berlios.de , http://blog.gwright.org.uk/articles/category/nx , http://nomachine.com/ , http://svn.berlios.de/wsvn/freenx
Mentor: George Wright <gwright at kde dot org>
Decibel
Decibel is a realtime communication framework for KDE 4.x.
Project: KDE4 integration
Brief Explanation: Decibel should integrate well with the KDE 4 environment. This includes getting contact data from Akonadi and storing contact state there, storing account data in KWallet as well as integration with Nepomuk to store semantic information on connections made.
Expected Results: A working and tested implementation of integration components.
Knowledge Prerequisites: A good overview of the involved KDE 4 technologies is required.
Resources: http://decibel.kde.org/, Akonadi documentation
Mentor: Tobias Hunger <tobias at aquazul dot com>
Project: Filtering framework for text messageing
Brief Explanation: Text message that are passed to applications using the Decibel framework should get filtered. This includes processing steps (like processing of Off the record messages) as well as logging, etc. This filtering framework needs to be made more flexible as it currently is and some basic filters need to be written.
Expected Results: The filtering API of Decibel is improved and sample filters are developed and tested.
Knowledge Prerequisites: A good understanding of Decibel is required.
Resources: http://decibel.kde.org/
Mentor: Tobias Hunger <tobias at aquazul dot com>
Project: Improve Telephony features
Brief Explanation: Decibel currently has limited support for telephony features required for VoIP integration. This support needs to be improved and missing features (call forwarding, conferencing, etc.) should be implemented.
Expected Results: A VoIP backend based on the existing telepathy backend with the additional telephony features implemented.
Knowledge Prerequisites: A good understanding of Decibel is required. Familiarity with the telepathy spec and VoIP is helpful.
Resources: http://decibel.kde.org/, http://telepathy.freedesktop.org/spec.html
Mentor: Tobias Hunger <tobias at aquazul dot com>
Kopete
Project: Improve emoticons
Brief Explanation: In my opinion the 'emoticons grabbing' have to be implemented in kopete.
Expected Results: emoticons grabbing in kopete
Knowledge Prerequisites: A good understanding of the kopete emoticons system.
Resources: http://websvn.kde.org/trunk/KDE/kdenetwork/kopete/
Mentor: Fabio Locati <fabiolocati at gmail dot com>
Project: Fix File-Transfers (i.e. to/from other ICQ clients)
Project: UPNP-support
Brief explanation Add support for libupnp or MiniUPNP (http://miniupnp.free.fr/), so that Kopete will be able to open ports in the firewall of wireless routers, thus enabling file transfers and webcam communication. KTorrent uses MiniUPNP.
Knowledge Prerequisite: C++
Mentor:
Amarok
Consider these suggestions a starting point to create your own proposal. Some need more detail. Please contact us and let us help you with the proposal before submitting. Find us on IRC on irc.freenode.net amarok or email the public mailing list [email protected].
Project: Context View development and Applet writing
Brief Explanation: The Context View is one of the most visually evident features of the new Amarok 2. It takes up the middle part of the Amarok window and provides a view into the information about the song that a user is playing. As such, it is essential to Amarok that the Context View be functionally pleasing, polished, and pretty.
A project focused on the Context View would consist of mainly continuing development on the CV itself, completing features that are planned but have not yet been implemented, as well as writing new Applets and DataEngines to display further data.
Expected Results: A Context View that uses libplasma to provide an amarok-specific way of viewing current data in a beatiful and innovative form. The basic structure and architecture is already there, but it needs substantial work to complete.
Also, time permitting, the development of new applets and data engines for Amarok's CV.
Knowledge Prerequisite: Knowledge of C++ is required, but this is probably a less KDE project as others. Experience with Qt is nice but by no means required, as it can be learned relatively easily.
Mentor: Leo Franchi (lfranchi) is the original author of the Context View (in Soc 2007) and is willing to mentor any interested student. He can be contacted on #amarok at irc.freenode.net or (better) at lfranchi AT gmail DOT com.
Project: Nepomuk collection
Brief explanation: Amarok 2 has a plug-in system that allows it to access music metadata from various backends. A plug-in to read and write data to and from Nepomuk should be written in this project. Additionally, Amarok should be extended to make real use of Nepomuk's capabilities by re-adding labels support.
Expected results: A plugin to use Nepomuk as a metadata store from Amarok. Additionally, support for labels should be added to Amarok 2.
Knowledge Prerequisite: C++ is essential, knowledge of Qt and KDE would be helpful
Mentor: Potentially one of several. Contact the amarok mailing list or ask in our IRC channel #amarok
Project: UPnP Support
Brief explanation: Using the UPnP protocol users can, for example, share music from their Vista computer to a PS3. Amarok lacks any sort of UPnP support. Being able to act as a client (the PS3) or possibly a UPnP media server (Vista) would be useful. See libupnp for more information about UPnP's implementation in open source. The nature of how UPnP works would need to be researched a bit more, as the creator of this idea (Ian Monroe) has only seen it in use on friends computers. :)
Expected results:
- Using either Amarok's Internet Service framework or the straight Amarok collection framework, create a plugin which allows Amarok to browse and play music off of a UPnP share. Playing music may require the creation of a KIO for UPnP.
- Allow Amarok to share it's collection with other devices via UPnP. This is secondary priority and may not be feasible to accomplish during Summer of Code.
Material Prerequisite: Some UPnP devices or computers to test with.
Knowledge Prerequisite: C++ is essential, knowledge of Qt, KDE and networking would be helpful.
Mentor: Potentially one of several. Contact the amarok mailing list or ask in our IRC channel #amarok
Project: Amarok Scripting
Brief explanation: Starting with Amarok 1.2, Amarok has enabled scripting through a script manager and its DCOP interface. For Amarok 2 we have a straight port of the old DCOP API to DBus. The old API was created over time, and perhaps could be thought out better. Additionally KDE 4 has introduced technology like Kross that could allow true integration of scripts into Amarok, including GUIs. In-process scripting has its own issues though!
Expected results:
- This is a more open-ended idea. Contact the Amarok mailing list or on IRC to get help working out the proposal.
- Perhaps redesign the Amarok DBus API
- ..and/or add a Kross interface and then
- Create a script showcasing the technology.
Knowledge Prerequisite: C++ is essential, knowledge of Qt, KDE and Ruby would be helpful.
Mentor: Potentially one of several. Contact the amarok mailing list or ask in our IRC channel #amarok
Project: CD Ripping
Brief explanation: Amarok has never really felt a need for good CD ripping support. We always felt there were better programs suited for this task. This hasn't stopped folks from finding ways to use Amarok to rip their CDs though. ;)
Expected results:
- An excellent CD ripping solution integrated into Amarok.
- Cross-platform (Linux, Mac, Windows)
- This task is not too large, so there would be higher standards of polish.
Project: Mass-tagging
Brief explanation: Users sometimes have poorly tagged tracks. Amarok has always lacked an easy way to download information about tracks from FreeDB or Musicbrainz and then tag multiple tracks at once.
Expected Results:
- To bring the functionality of programs like EasyTag or PicardQt into Amarok.
- A creative UI to accomplish the goal
Project: Playlist and Playlist browser
Brief explanation: Amarok 2 has a snazzy new playlist, though its code could use some refactoring to take advantage of Qt 4.4 features. Also it is missing features from 1.4.
Expected Results:
- Mass inline tag-editing in the playlist (like in Amarok 1.4)
- Allow users to pick which fields are shown
- Dynamic playlist and smart playlist support
- Improve memory management for large playlists
Knowledge Prerequisite: C++ is essential and knowledge of Qt is nice, experience with Model/Views in Qt is a bonus
Mentor: Ian Monroe and other Amarok developers.
Project: Media Devices as Collection Provider
Brief explanation: Media device support is very important in a modern media player due to their widespread popularity. Media devices haven't found much love in Amarok 2 development. Amarok 2 has a flexible collection system, that was designed in part with media devices in mind. Whereas in Amarok 1.4 the collection was solely local files so the Collection Browser could only show local files. In Amarok 2 collections have been abstracted, allowing sources from the Internet and with this project media devices as well.
Expected Results:
- Integrate the media device framework into Amarok 2.
- Support at least one kind of media device, while having the framework available for others.
Material Requirements: A media device to test with.
Knowledge Prerequisite: C++, Qt, KDE.
Project: Mp3tunes.com service synchronization
Brief explanation:
Add support for uploading and downloading content from an mp3tunes locker. This will allow us to use Amarok 2 for managing the mp3tunes locker as well as provide a framework for backing up all local content.
Expected results: Being able to upload local content to an mp3tunes locker as well as downloading content from the lock er to the local collection. Optional support for automatic synchronization.
Knowledge Prerequisite: C++ is essential, knowledge of Qt and KDE helpful. Experience with web services might also come in handy
Mentor: Nikolaj Hald Nielsen (nhnFreespirit) wrote the service framework and the basic mp3tunes service . He can be contacted on #amarok at irc.freenode.net or (better) at nhnFreespirit AT gmail DOT com.
Project: Ampache service synchronization
Brief explanation: Add support for uploading and downloading content from an Ampache server. This will allow us to use Amarok 2 for managing the collection on the Ampache server. This will be a cross project task as the Ampache API used by Amarok 2 does currently not support uploading of content. There is great communication between the 2 projects, and the original Ampach eAPI was developed in collaboration with Amarok developers.
Expected results: Being able to upload local content to an Ampache server as well as download content from the server to the local collection. Optional support for automatic synchronization.
Knowledge Prerequisite: C++ is essential, knowledge of Qt and KDE helpful. Experience with web services might also come in handy
Mentor: Nikolaj Hald Nielsen (nhnFreespirit) wrote the service framework and the Ampache service. He can be contacted on #amarok at irc.freenode.net or (better) at nhnFreespirit AT gmail DOT com.
Project: Add new service
Brief explanation: Add support for a new online service to the Amarok 2 service framework. This is a project that requires a student that already has a good idea or contacts with an interested service. Getting added to Amarok will mean that the service will have itself and its contents made available to a potentially huge new audience, and Amarok user will enjoy having access to even more great content. Ideas for services ( just to throw something out there ) could be the internet archives collection of live recordings, remixes from ccmixter.org, or something similar
Expected results: Being able to play content from the service direclty within Amarok. Depending on the type of service, downloads or purchasing of content might also be possible, as migh other features unique to the service.
Knowledge Prerequisite: C++ is essential, knowledge of Qt and KDE helpful. Experience with web services might also come in handy
Mentor: Nikolaj Hald Nielsen (nhnFreespirit) wrote the service framework and many of the services. He can be contacted on #amarok at irc.freenode.net or (better) at nhnFreespirit AT gmail DOT com.
Okular
Project: Okular backend
Project Information: Okular has plug-in system that allow it read different documentation formats. It currently reads a range of formats, but there are several that might be able to be improved (e.g. XPS) or implemented.
Brief explanation: The project would need to identify a format that requires improvement (or implementation). Candidates that have been requested in the past include the Microsoft Word (.doc) format and the .lit e-book format. Given a suitable library, potentially any format could be considered. Consider:
- Microsoft Visio
- Microsoft Access snapshot (would require implementing a .emf file renderer - not simple, but could be useful in many other places in KDE).
Note that improving PDF requires changes to the poppler library, and you would need significant previous experience with PDF (and ideally with poppler) to make much progress.
Expected results: A working backend, capable of rendering most documents to a readable level.
Knowledge Prerequisite: C++ is pretty much essential, and at least passing knowledge of Qt. C programming experience may be useful for some libraries.
Mentor: Potentially one of several. Contact the okular mailing list.
Other applications
Application User Interface Test System
There are a couple of tools available for Qt / KDE that allow testing of applications - squish and kdexecutor. Both are binary only, and are specific to the systems that they are built on.
It would be useful to have an open source tool that allowed us to test applications in a scripted way. Similar open source tools include Dogtail and LDTP, which use the accessibility interfaces in Gnome.
There are arguments for and against using accessibility - it might be a lot more useful to implement a separate system, using some of the Qt4 specific features including QMetaObject. Qt4 has a nice set of hooks, and QTestLib shows how they can be implemented. However instead of requiring specific code in the application (as done by QTestLib), it would be more flexible to use LD_PRELOAD and a small interface library.
More discussion: Brad Hards <[email protected]>
Usability
The KDE Usability Project is willing to offer support mentoring to one or two projects (more if additional design mentors are available) which involve heavy UI development or UI redesign activities.
Infrastructure
KDE infrastructure tools, like Bugzilla, the Review Board, etc.
KDE dependencies and non-KDE projects
Depending on the relevance of the proposal, the KDE Project will accept student proposals on projects that are not part of KDE, but which are either KDE dependencies or relevant to KDE or the Free Software Desktop.
Qt Cryptographic Architecture
The Qt Cryptographic Architecture (QCA) isn't strictly part of KDE, however it is used in a range of KDE applications (and other applications). A range of projects are possible, in terms of adding security features to applications (e.g. SASL, encrypted content, client side puzzles).
A specific need is the provision of alternative backends, which are typically the interface between QCA and some underlying crypto library. We already have several, but only the OpenSSL one is fairly complete, and OpenSSL is pretty ugly. A new backend would require some previous crypto knowledge, and ability to program in C++ and C. No GUI experience required! We probably only need one good alternative on each platform.
- Alternative backend - GNU crypto libraries: We have a basic backend using libgcrypt, which is mostly working. However a lot of the more interesting capabilities are present in gsasl and GNUtls. Mentor: Brad Hards
- Alternative backend - Mozilla Network Security Services: The Mozilla project has a library that is separately packaged on most Linux systems. It offers a fairly complete alternative to OpenSSL. We have a basic skeleton for NSS, but it only offers a couple of basic crypto primitives. Mentor: Brad Hards
Strigi
Soprano & Nepomuk
Project: Full Featured Query API
Description: For powerful semantic queries on the desktop we need a powerful query API. At the moment we are restricted to SPARQL queries which are then parsed by the Soprano backend. It would be much more efficient and easy to use if we had a query API that allowed to represent queries (independant of any query language) using a class structure. Queries could then easily be created, manipulated, and translated. Application developers would not have to learn a specific query language but would create a query object and have Nepomuk/Soprano evaluate that.
This query API would become part of the official Soprano API and replace the simple Soprano::Model::executeQuery interface we have now.
References:
- Implementation of something similar in Java: http://sparql.sourceforge.net/
Mentor: Sebastian Trueg
D-Bus
- a named pipe or shared memory transport implementation for win32
- can QLocalSocket and QSharedMemory (in 4.4) be used?
Other Freedesktop.org initiatives
Notes on editing this page
Before making any modifications, please log in to Techbase. This will help us track who is contributing to the ideas. This page is protected, so you can't modify it without logging in anyways.
When making modifications to existing ideas, please consider whether you're changing it more fundamentally or just superficially. If your changes are substantial, you probably have an entirely new idea. Similarly, if your idea is modified and you feel it no longer reflects your original thought, please split the idea in two, restoring yours.
Please use the talk page if you want to discuss an idea.
Finally, do not delete ideas without a reason for doing so (like, for instance, being contrary to KDE ideals, being completely unrelated to KDE, being unfeasible, etc.) -- you may want to state in the talk page why you removed the idea.
Do not re-add ideas that were removed without discussing first with the developers of the target application.