Students: Please read the notes on the SummerOfCode2009 page to learn how to apply. |
Attention: This list is not exclusive. This means you're free to propose any project you think is worthy. |
Contents
1. General Info
It's important to note that this list is not exclusive: if you are a student and have an idea that is not listed in our pool of project ideas, don't hesitate to apply for your project. It's probably a good idea to ask people in the GNOME community if they think your idea is good, though. Also, if the development team is already working on something similar to your idea, they may be less likely to accept your proposal, so ask on the project's mailing list or IRC channel (lots of people lurk on IRC; don't be surprised if it takes an hour for your question to be answered, and don't just leave if nobody answers within five minutes!).
The ideas do not have to be only about modules that are in a GNOME suite. If it's a project on GNOME-related software that can benefit the GNOME community, it's also good to list it here.
When adding a project idea, please try to follow those guidelines:
- if you're interested in mentoring it, put your name. If not, then just leave it blank.
- do not list multiple idea with only one item. Use multiple items instead.
- briefly explain why this would be great for GNOME.
- do not write lots of text to explain your idea. If this is going to be long, maybe it's worth creating a page for it?
- make sure students who do not know much about all GNOME modules can understand the proposed idea.
please use this format, as it will be easier to get some information about tasks:
. '''task title''' (mentor: mentorname) * ''Benefits'': describe the benefits of your task * ''Requirements'': what should the student know already? * Note: one or multiple notes, links, whatever further information ----
Attention: This list was triaged by SandyArmstrong, AdamSchreiber, DanielSiegel, CosimoCecchi, ChristopheFergeau JasonClinton, JohanDahlin, JohannesSchmid on March 21. Some notes about the groups: Rock Stars has the ideas having the highest priority (but don't focus only on those ideas, since we'll get many applications for those ideas!); Alternatives has the ones which are considered useful/cool enough to be proposed; and Underground has the ideas which were considered not well explained, not worthy at this moment, too wide scoped, etc. Also note that we support applications for projects that are not strictly GNOME-related, see the Other ideas section. If you really want to discuss the priority of your new idea, please contact AdamSchreiber, DanielSiegel and/or SandyArmstrong. |
2. Rockstar Ideas
In no particular order.
Documentation: Implement API doc updates via library.gnome.org (mentor: StefanKost (ensonic))
Benefits: Better and more uptodate API documentation.
Requirements: Knowledge of website programming and maybe SCM integration
GNOME uses code comments for API documentation. There are several good reasons for doing it like that, but it raises the entry barrier for documentation contributions. Therefore it would be useful to implement API documentation updates via website. The most trivial approach would be to attach some kind of comment system to library.gnome.org like the PHP community does. A more sophisticated approach would allow direct editing of the docs and write those updates to some patch queue or to some separate SCM branch. See http://mail.gnome.org/archives/gtk-devel-list/2009-February/msg00080.html, GtkDocLiveEditing
Make Python bindings taking advantage of GObjectIntrospection (mentors: JohanDahlin, ColinWalters)
Benefits: Better Python platform integrating, improving binding generation.
Requirements: C and Python programming knowledge, GObject-system knowledge.
Description: This task will improve the PyGObject binding and the PyGObject code generator to take advantage of the GObjectIntrospection metadata and typelib. PyGObject should be able to load typelibs and create bindings automatically in runtime. It will also extend the code generator to use GIR metadata in additon to defs files, which will make it easier for current bindings to migrate to introspection.
gnome-shell: multiple monitors and multiple workspaces (mentor: OwenTaylor)
Benefits: an improved experience for users with multiple monitors
Requirements: C and JavaScript programming
Description: The current gnome-shell experience is designed to make multiple workspaces easy to use and convenient. However, the current idea of a single workspace for entire desktop doesn't really work for users with multiple monitors. The project here would be to design and implement a good experience for users with multiple monitors. Designs would likely involve a some concept of switching workspaces separately per monitor, so in addition to user interface and window management changes, freedesktop.org specifications would need updates to represent that concept.
Anjuta: Language support for JavaScript (mentor: JohannesSchmid)
Beneftis: Enable JavaScript developers to use the Anjuta IDE in a convenient way. JavaScript is becoming more popular on the Desktop as it's used by GnomeShell and other projects.
Requirements: C programming knowledge, GObject-system knowledge. You will need to fix some bugs in anjuta before to get accepted. Note that the plugin will be written in C and *not* in JavaScript. If interested, please contact us at anjuta-devel@lists.sf.net.
Description: Write an autocompletion and auto-indentation engine for JavaScript. You can use the symbol-database plugin to query symbol but you will need some kind of parser to know how to complete statements like object.member. In addition, create new project types for JavaScript and check if the automake integration works or if some work has to be done for it.
Brasero: Implement support for editing Videos to burn (mentor: LuisMedinas and PhilippeRouquier)
Benefits: Make the users be able to add chapters, create menus and add animations to video projects
Requirements: C/GTK coding and some Gstreamer knowledge
Description: This is a feature already used on some proprietary burning media software, this is will also bring some video editing features for the GNOME Desktop. Also could be interesting making some connection with Pitivi.
gnome-shell: Location awareness for the clock applet
Benefits: Lets users get the local time and the right timezone, automatically. Maybe also allow selection of locations from an interactive map. Should use libchamplain. This work should also probably be done in gnome-shell and not on the old clock applet. W/O working on Gnome Shell, the project would probably be too small in scope.
Requirements: Some experience with C and maybe dbus would be helpful
Jussi Kukkonen jku@o-hand.com has a basic implementation of this already, GSoC could be to clean it up and integrate.
Gnome Games: convert a (only one) game without a canvas renderer to the Clutter OpenGL canvas and add some animations (mentor: JasonClinton)
Benefits: Make dusty corners of Gnome sexy. The Gnome Games code-base, which is now more than ten years old, shows the historical lack of a good canvas library. Some of the games have their own canvas written from scratch; others brute-force and repaint the entire field for every frame of animation. Now that we have a good canvas library, Clutter, Gnometris and Aisleriot were recently converted. Same Gnome will be converted during the 2.27 cycle and a new game, Lights Off, which runs on Clutter, will be included in 2.27. There's is interest in converting more of the old games to a full canvas library and increasing the visual appeal of the games included with Gnome.
Requirements: The good candidates for conversion are: Four in a Row, Five or More, Klotski, Mines, Blackjack, Iagno, Nibbles, or Robots. The work should be done in C or JavaScript (via Seed or GJS). Vala, Java, C++ and Python will not be options. Should contact developers before decided on an approach: mailing list or #gnome-games on irc.gnome.org.
Nautilus and Epiphany: DBus interface for file and window operations (mentor: CosimoCecchi)
Benefits: Easily interact with the file manager from other desktop applications.
Requirements: C programming knowledge, GObject-system knowledge. At least a little experience with the Nautilus design/codebase is a big plus.
Description: Let Nautilus, the GNOME file manager, and Epiphany, the GNOME web browser, expose a DBus interface with some methods for common file and window operations (e.g. currently selected windows, currently selected files, open a new window, reveal a file, ...). You will have to register the file manager on the bus first, then decide with the Nautilus maintainers a list of methods and signals worth to be exposed and implement them.
Anjuta: Language support for Python (mentor: SebastienGranjoux)
Beneftis: Enable Python developers to use the Anjuta IDE in a convenient way
Requirements: C programming knowledge, GObject-system knowledge. You will need to fix some bugs in anjuta before to get accepted. Note that the plugin will be written in C and *not* in Python. If interested, please contact us at anjuta-devel@lists.sf.net.
Description: Write an autocompletion and auto-indentation engine for python. You can use the symbol-database plugin to query symbol but you will need some kind of parser to know how to complete statements like object.member.
Rhythmbox: Media Player Synchronization (mentor: ChristopheFergeau)
Benefits: Make handling of media players (iPod ,MTP, ...) easier from Rhythmbox
Requirements: C programming
- Currently, Rhythmbox can copy files from/to media players but there is no way to automatically keep in sync Rhythmbox library with a media player. Adding a way to keep both in sync would be really helpful. To achieve that goal, the UI to handle this needs to be designed. Rhythmbox also needs a way to be able to recognize "identical" songs and to figure out which songs are new/removed/...
Implement local map rendering in libchamplain (mentor: PierreLucBeaudoin)
Benefits: Rendering maps localy allow for more theming flexibility, detail selection and accessibility possibilities (by having the raw data)
Requirements: C knowledge
libchamplain could be improved by adding locally rendered maps. This functionality should make use of any existing code as much as possible, possibly using the already existing mapnik tile renderer. This task includes downloading relevent OpenStreetMap data and feeding it to the renderer.
Add support for more projections and rotations (mentor: PierreLucBeaudoin)
Benefits: More realistic size reprensentation
Requirements: C knowledge
- libchamplain could be improved by adding support for more map projections. The current code only implements the mercator projection, where Greenland is the size the South America. This would allow allow the usage of World Wind tiles. Adding rotation would allow the map to be rotated to keep the "North up" (or for any other reason :)). Adding an inclined view (à la car GPS), where the map is presented in a 3d view could also be part of this project if time if left.
Gnome-games + Telepathy: convert one (or many) of the Gnome Games to be playable with your contacts through Telepathy Tubes (mentor: any Collaboran)
Benefits: You can start playing a game with a friend by selecting them from the list.
Requirements: Knowledge of what are the games written in, knowledge of Telepathy a plus
- Network games are better enjoyed with your friends. Why not make it simpler to start a network game using Telepathy.
- The UI should be implemented via some kind of RPC like DBUS; not via embedding Empathy (for many reasons). For example, the UI for "join game" could obtain the list of contacts that have the game running and display only their names. Selecting a contact would initiate the link via telepathy.
JasonClinton adds: it should not replace the current network capability but add to it and build besides it.
ThomasAndersen adds: I would be happy to co-mentor this from gnome-games if needed
DavydMadeley adds: libempathy and libempathy-gtk provide a number of convenient classes and widgets that connect to Telepathy to implement this. This is not "embedding Empathy", so much as reusing Empathy widgets in another application. Most notable would be EmpathyContact and EmpathyContactSelector, plus some random support misc (e.g. EmpathyContactManager). These widgets are currently GPL'ed (is this a problem in GNOME Games?). Due to the lack of a tube dispatcher in current MissionControl, communication with Empathy is also required to broker new tubes.
If there is no way to do this without embedding Empathy, then any winning SoC project proposal needs to incorporate the addition of support for tube dispatch via MissionControl. Using Empathy widgets is not an option. -JasonClinton
Why wouldn't you share code with Empathy? -DavydMadeley
Rhythmbox: display contextual information about the artist/album of the song being currently played (mentor: ChristopheFergeau)
Benefits: makes background information about the song being listened too readily available, add some eyecandy (artist photos, ...)
Requirements: C programming
- Rhythmbox should integrate an HTML widget (Webkit?) to be able to display extra information (fetched from last.fm, wikipedia, ...) about the song that the user is currently listening to. This would make it easier to get more background about what is being listened to. The basic informations would be the wikipedia page for the artist/album, some photos of the band, ... Some advanced stuff might be to show some recommendations about similar artists, to use geolocalisation to indicate upcoming gigs by that band or similar band where the user is living, to add some stats (number of time this song was played, ..°
3. Alternative Ideas
Glade generated projects conform to the HIG by default (mentor: [[]])
Benefits: Currently, if you build an application UI in Glade the resulting UI isn't necessarily HIG compliant. This leads to lots of hunting down proper paddings and values after the fact.
Requirements: C
Integrate OpenGL effects from gst-plugins-gl into Cheese (mentor [[]])
Benefits: Complete the work started by FilippoArgiolas in latest Summer of Code to make Cheese even more shiny and sexy. Even if the effects are almost ready there is still some big work yet to be done to integrate them in Cheese. This task will involve creating a new effect selector able to display live previews making use of an hardware accelerated canvas library like Clutter, taking advantage of its animation api to provide Cheese with a better user experience.
Requirements: C knowledge (and some familiarity with Glib/GObject programming). Gstreamer, Clutter and OpenGL (GLSL to improve the effects) knowledge recommended. Some basic X knowledge can be useful too.
Documentation tool based on GObjectIntrospection metadata (mentors: JohanDahlin)
Benefits: Provide documentation for GObjectIntrospection based bindings
Requirements: GObject-system and Gtk+ knowledge
Description: This aims to write a documentation tool similar to devhelp/monodoc which reads GIR files instead of the gtk-doc generated .devhelp/.html files. Properly done this can provide documentation in a language agnostic way. This tool should have a graphical interface in Gtk+ and a command line tool suitable for IDE integration.
Brasero: Add express mode for burning media (mentor: LuisMedinas and PhilippeRouquier)
Benefits: Make burning faster and easier for users
Requirements: C/GTK coding
Description: Build wizards using dialogs to select what kind of media to burn and then select what to burn. This provides an easier experience for burning media.
Brasero: add multisession capabilities to Brasero Nautilus extension (mentor: LuisMedinas and PhilippeRouquier)
Benefits: Allow the user to use optical discs as if they were (almost) a normal hard drive
Requirements: C knowledge. Other useful stuff : GVFS, libisofs
Description: This work would expand recent work that has been done on GVFS where blank discs can now be mounted by GVFS and nautilus. When blank discs are mounted in nautilus the CD/DVD creator opens and allows to burn files. With this idea, the same could be done with appendable discs already containing data and it would allow to use them through nautilus interface and add additional data or edit what is already on the disc (mainly replace for most of current brasero backends). Additionally one of the backends of brasero (libisofs) allow a full edition (removal and renaming) of previously burnt session which means further work to integrate that with the upcoming libbbrasero-burn.
Pulse: Integration with bugzilla and other bug systems (mentor: ShaunMcCance)
Benefits: More complete information in Pulse, helping make Pulse a good starting point for hacking
Requirements: Solid knowledge of Python
- Pulse is a project tracker to help track modules, documentation, translations, and basically everything going on in a project.
A test instance is running at http://www.gnome.org/~shaunm/pulse/web/
- Other ideas for Pulse welcome.
YouTube plugin for Rygel (mentor: ZeeshanAli)
Benefits: Enable the user to easily browse and play her favorite videos on her UPnP control point/media player (think PS3) and also to be able to search and upload videos.
Requirements: C programming knowledge, GObject-system knowledge. Knowledge of Vala isn't required but it will be a big plus.
Description: You need to write a Rygel plugin that talks to youtube and exports a hierarchy of user's favorite videos on the UPnP network and implement searching and uploading for control points that support it. This will also be a good chance to add generic 'Search' and 'Upload' features/apis in Rygel since this plugin will be the first plugin to need it.
Using libgdata would be good
Ruby annotation support in Pango
Benefits: More support for east-asian languages.
Requirements: familiarity with the pango internals.
- Note: "Ruby" are short runs of text alongside the base text, typically used in East Asian documents to indicate pronunciation or to provide a short annotation. A standard implementation could benefit many applications which would otherwise have to implement it by themselves. A Ruby markup parser will be necessary. The pango markup API can be used as a reference. See:
Nautilus: Add support to Google docs
Benefits: Let users handle (copy, paste...) their Google Docs with nautilus. They would also be able to edit them with any word/spreadsheet/presentation processor.
Requirements: C programming, knowledge about Gobject and the GData API
Description: Continue working on the GVFS backend to support Google Docs which was started in last year's GSoC. Write code in Nautilus to add the possibility to connect to Google Docs thanks to the 'File -> Connect to Server' dialog box.
Using/Extending libgdata would be good
(G)UPnP backend for GVFS (mentors: ZeeshanAli and RossBurton)
Benefits: This will allow a generic access to all applications (not only media players) to contents on UPnP/DLNA Media Servers without them having to write any code. Many people (e.g Kilikali and Canonal2 authors) have already asked me if such a thing already exist.
Requirements: C programming knowledge, GObject-system knowledge.
Details: Contact Zeeshan for details if you are interested.
DLNA Digital Media Player (DMP) and Renderer (DMR) plugin(s) for Totem (mentors: ZeeshanAli and BastienNocera)
Benefits: This will allow a totem user to browse, search and play media from DLNA Digital Media Servers and also be able to remotely control Totem through a UPnP AV Control Point, which includes asking it to play arbitrary URIs that it can handle.
Requirements: C programming knowledge, GObject-system knowledge.
Description: This task will involve writing a a plugin for totem using GUPnP. There already exists a similar plugin based on coherence but it would be nice to have an implementation on top of a framework that is specifically meant for GNOME (Mobile) needs, GUPnP. Source(s) of existing coherence-based plugin could be used for learning purposes. Zeeshan will help/guide the developer on all (G)UPnP/DLNA related issues involved, while Bastien will help on any Totem-related issues. Student should specify how the UI would expose this.
Anti-Thief Software (mentor: TBD)
Benefits: Make sure that Gnome laptop owners have a way to prevent theft of their laptop, or have it back
Requirements: This Guardian article discusses the existing solutions for Windows and Mac. An idea would be to create a piece of software you could install in Gnome and that would have all of those features. Photo-taking using webcam, the computer shouting or displaying annoying messages, reporting in the background its location, possibly with the Use of Geoclue. Also investigate if gnome-screensaver can be used.
4. Underground Ideas
nautilus: Improve desktop icon management
Benefits: Unclutter desktop icons, especially when using external monitors/projectors as primary screen. Icon layout has many problems related to plugging in new drives etc. that could be improved.
Requirements: C/Gtk coding, this project is only moderately difficult IMO.
Info: See http://clarens.caltech.edu/wiki/2009/02/06/12.59 for a starting point and more info
Suggestion from JasonClinton: May want to be careful about wasting time on desktop rendering code that may need a major upgrade to support ARGB visuals with Gnome Shell (so we can have only one program rendering the desktop background and improve startup time.)
Super Fast Thumbnailing (mentor: TBD)
Benefits: Computers keep getting faster, but one area that always seems slow is the thumbnailing of folders of photos in Nautilus and gThumb. It would be nice if we could put some serious effort into really speeding this up! It would make gnome "feel" significantly faster.
Requirements: familiarity with matrix operations and linear algebra in C. Familiarity with tiff and jpeg file formats would be a bonus.
- Note: there are a few avenues of investigation here:
tiff loader: I believe that the tiff loader currently loads the entire image and then scales it. Most tiff files have data arranged in rows, which means that we could skip the loading of some rows when downscaling by a large factor. Some ideas here.
jpeg and tiff loader: Many images have an embedded thumbnail in the exif data. It could be used for fast thumbnailing. Some checks would have to be added for validity - for example, the loader should only use the embedded thumbnail if the aspect ratio is the same as the main image, and if the DateTime, DateTimeOriginal, and DateTimeDigitized tags were all identical (this is to detect alterations to the main image that have not been saved to the thumbnail by thumbnail-ignorant image editors, which are common). Care needs to be taken with orientation tags.
The existing gtk downscaling routines are dreadful for thumbnailing. There is ample room for large-downscaling-ratio improvment. See bug bug 80925 and bug 522803. This is where a matrix algebra guru could shine.
DVB Scheduled recording service for Rygel (mentors: ZeeshanAli and ZaheerMerali)
Benefits: Allow the user to be able to easily schedule recordings of TV programs without needing to care about which machine is the DVB cable connected to.
Requirements: C programming knowledge, GObject-system knowledge. Knowledge of Vala isn't required but it will be a big plus.
Description: At the moment user is only able to browse and watch live channels through DVBDaemon (which was mostly developed as part of last GSoC). Browsing of EPG data will be added soon as well. However, implementing scheduled recording is another story. Since UPnP ScheduledRecording service seems to be very similar to ContentDirectory service, it will be best to avoid code-duplication between these two implementations. Also adding UI to GUPnP Control Point (gupnp-av-cp) to allow the user to be able to schedule his recordings with a few mouse clicks will be part of this task. Zeeshan will guide/help the developer on (G)UPnP related issues and Zaheer will help on DVB(Daemon) related issues.
Add Geolocalized tasks (geoclue, libchamplain) in Getting Things Gnome (mentor: LionelDricot)
Benefits: Allow the user to set a specific localization for tasks so that he only see work related tasks when at work, home related tasks when at home and he can easily have the list of things to do in the city centrum when he plans some shopping.
Requirements: Python knowledge a must. Other useful stuff : Pygtk, writing C python binding, D-Bus, clutter.
- The user interface should be clearly specified and it should be clear that it would be an integration work. Some work on libchamplain bindings or on geoclue might be required. Existing solution should be prefered as much as possible.
5. Other Ideas
(These ideas are for GNOME-related projects. They have not been evaluated by the GNOME SoC Admins.)
. GNOME Zeitgeist separate UI from engine and implement D-Bus interface (mentor: SeifLotfy)
Benefits: Allow applications to push their activities into Zeitgeist, instead of writing loggers for each application. Also allow other applications to make use of the logged data and all its related information such as tags, history of activities and descriptions.
Requirements: Python is a must. Some C and D-Bus knowledge wouldn't hurt either.
Note: GNOME Zeitgeist
5.1. For GNOME-related projects
Unless otherwise noted, you may make proposals related to these projects with GNOME as your mentor organization. GNOME will seriously consider applications to work on projects that are relevant to GNOME since this will help improve the user experience.
Banshee click through for info and project ideas
AbiWord (the Abiword project would be the mentor organisation)
Beagle (The Beagle project would be your mentor organization, not GNOME)
BlueZ (the BlueZ project would be the mentor organisation)
Gnumeric (the Gnumeric project would be the mentor organisation)
OnTV (mentor: Johan Svedberg)
http://live.gnome.org/GObjectIntrospection (mentor: JohanDahlin and ColinWalters)
Mono (the Mono project would be the mentor organization)
Add Rectangular selection cut and paste to GtkTextView, see https://bugzilla.gnome.org/show_bug.cgi?id=96436