Navigation
Personal tools
 

SoC Project Ideas


Summer of Code Project Ideas

The Enlightenment Project is dedicated to providing advanced graphical libraries, tools, and environments. Currently, the project is made up of three different components: Enlightenment DR16, Enlightenment DR17, and the Enlightenment Foundation Libraries. While we are best known for the Enlightenment Window Manager itself there is a long history of providing advanced libraries and tools to support the window manager and other applications, such as Imlib, Imlib2, and FNLib which extend far beyond the window manager itself in scope. We are please to offer the following proposed ideas for students wishing to participate in the Google Summer of Code 2008.

If you are interested in a project below and have questions or comments, please feel free to join us in #e on FreeNode.

It was our intention to provide some sample applications so that students new to the SoC could have an idea of what a well put together application might look like. However, our friends at Wesnoth have beat us to the punch. So, with their permission, here is a link to some of the applications submitted to their project. Note that such elaborate applications are not required. But there are certainly elements to many of them that are quite beneficial. For example, a list of deliverables, a timeline, mockup images if applicable, etc. All these types of things might go into a well thought out application.

Please Note: Student applicants are not limited to the ideas on this page. If you think you have a suitable idea, by all means, please propose it.

Contents

Enlightenment WM

Module: Compositing Expose (Difficult)

Implement exposé effect and OpenGL compositing
Mentor(s): Undetermined
The idea here is to implement an Expose like window switching feature. This feature request is complicated by the fact that there is no native compositing manager for Enlightenment. There have been efforts to create compositing managers (Bang, Bling) which have met with limited success. Those modules can be used as references... but the suitability of using them as a base should be determined by the student/mentor pair.
Skills Required:
  1. Strong C background.
  2. Experience with OpenGL.
  3. fundamental understanding of how a compositing engine works.

Module: Screenshot (Medium)

Upload shots on Flickr, Picasa, Deviantart, etc
Mentor(s): Christopher (devilhorns) Michael, Eric (ravenlock) Schuele
Allow user to upload shot to online sharing services
Skills Required:
  1. Strong C background
  2. Experience with sharing services API's

Module: Systray (Medium)

freedesktop.org provides a systray specification, we should implement it at least, and possible present a working implementation of raster's ideas of how it should work.
Medium: Let's remember that although it's standard, there are some variations like KDE's and possible other applications, so it's desired that real applications are tested, including KDE and Gnome flagships.
Mentor(s): Gustavo Barbieri, Ulisses Furquim
Skills Required:
  1. Strong C background
  2. Basic understanding of X11 (event loop, atoms, windows)

XRandR 1.2 (Medium)

New version of (The X Resize, Rotate and Reflect Extension - XRandR) provides the flexibility X11 always required, making it possible to do lots of reconfigurations without restarting it or dealing with xorg.conf, however applications and window managers will have to support its new protocol, also providing a nice GUI to handle these options.
This project will require implementing the protocol bits in ecore_x and using them in E17, also providing applets (gadgets) to change settings quickly and dialogs to configure more complex setups, like multi-screen layouts.
Mentor(s): Gustavo Barbieri, Ulisses Furquim
Skills Required:
  1. Strong C background
  2. Understanding of X11 (event loop, atoms, windows)
  3. Understanding XRandR 1.2 spec.

EFL

Object Layout Library (Medium)

Most of real-world user interface have to layout objects on screen given some constraints, like put these objects side by side, but since they have different heights, they should be aligned to the top or put these objects side by side, but make this object the same height as the largest. These are also the base of most widgets toolkits, as they produce scalable interfaces. Edje somehow satisfy basic needs of applications that have fixed amount of widgets that are known at conception time, to more advanced needs one need to use either ETK, EWL or E17 own implementation.
Writing an object layout library would help to avoid code duplication and make it easier to integrate different toolkits, actually removing the need of such toolkits for some applications like Rage.
Mentor(s): Gustavo Barbieri
Skill Required:
  1. Strong C background
  2. Fundamental understanding of toolkit layout concepts

More Introduction-Level Code/Examples (Easy)

Most frameworks need great step-by-step code examples with associated documentation so new users can try these simple applications to feel how it works, also serving as cookbook.
The basic set of libraries is already well documented API-wise, including function examples, however one willing to enter this whole new world is faced with a big problem: how to start a real application? We have some sparse introduction texts and some examples, but putting together in a wiki or book, with a repository of basic, step-by-step, examples would be of great help.
Andres Blanc is doing a great work on Edje (see EDC Reference and his book) and other basic documentation, so it's not a start from scratch, but actually learning and helping writing professional documentation.
We should keep the text and examples in CVS so developers could keep them up to date with API changes.
Mentor: Gustavo Barbieri
Skills Required:
  1. Some C background or
  2. Some Python background
  3. Good English writing skills

More Python bindings (Easy)

There are already Python bindings for EFL basics, including most of Evas, Edje, basic Ecore, some of Ecore_X, ETK and Epsilon, but there are still lots of great code missing bindings, like Efreet, Ecore_Con, Epdf, Edvi, Egs, Eet and Edb. Another important missing binding is E17 (window manager) API (gadcon and others) so we could write gadgets in Python, using the multitude of libraries, providing feeds/rss display, stock monitoring, system resources graphs and so on. Python already proved as an excellent tool to write such things, as we could see in projects like SuperKaramba and nowadays KDE's Plasma.
Interesting bindings:
  • E17 API (Gadcon, widgets)
  • Ecore_{Con,File,IPC,Job,Txt,FB,DirectFB,SDL,Win32} (complete or write these)
  • Eet (would be excellent to integrate with Python's pickle and even provide eetimport, see zipimport)
  • ETK (mostly done, already have a code generator)
  • EWL (big library, huge effort)
Mentor(s): Gustavo Barbieri, cmarcelo, Ulisses Furquim
Skills Required:
  1. Good Python background
  2. Some C background
  3. Basic understanding of bindings, see Extending and Embedding the Python Interpreter

Finish the Win32 port (Difficult)

The aim is to have the Ewl and Etk toolkits work on Windows
Mentor: Vincent vtorri Torri
Several parts of the EFL will need to be looked at
  • Optimizing the direct3d engine (optionnal) (Challenging)
  • Finishing ecore_win32 (shapes, Drag and Drop, selection) and ecore_evas (Difficult)
  • Fix efreet for icons (for ewl) (Easy)
  • Fix ewl and porting etk (Challenging)
Skills Required:
  1. Strong C background
  2. Strong understanding of the Win32 API
  3. Good understanding of Direct3D
  4. Little understanding of the EFL
  5. Little understanding of compilation with MSYS / MinGW

Create a new library to manage RSS/ATOM feed (Easy)

Get online contents in easy way
Mentor(s): Undetermined
It is very nice to have a feed parsing library to share between application. E already provide utilities to asynchronously retrieve remote content (e_con_url) and parse xml (exml), we just need to provide some utilities around those to deliver easy of use.
Skill Required:
  1. Strong C background
  2. Good understanding of XML and RSS/ATOM specifications

Create a new library that follow GHNS specs from FDO

Download/upload/vote online stuffs in easy way
Mentor(s): Undetermined
Download/upload/vote online stuffs (themes, wallpapers, icons, etc) in easy way
Skill Required:
  1. Strong C background
  2. Good understanding of GHNS specs
  3. Good understanding of XML, SOAP and webservices

Epsilon: Port Epsilon to Evas (Easy)

Use evas instead of imlib2
Mentor(s): Cedric (cedric) BAIL, Gustavo Barbieri
Description: Epsilon is a library to generate easily thumbnails following the [www.freedesktop.org fdo-specs]. Currently Epsilon uses imlib2 to scale down the images to thumbnail size. This dependence should be drop in favor of Evas.
The API interface should be improved to provide more scaling option.
It should be possible to store the resulting thumbnails inside not just PNG file like the fdo-specs told us, but also inside eet file. Attributes and images should be stored inside the eet file. The resulting file should provide an improved thumbnails load time.
Result: should provide a working replacement for enlightenment e_thumb. Possibly, a new proposal for Freedesktop thumbnail solution based on eet file format, at least format independent solution to be negotiated by applications. (Today FDO is PNG only).
Skills Required:
  1. Strong C background
  2. Good quality code, with focus on details
  3. Basic knowledge of client/server stuff.

Eagle backend using EFL (Demanding)

Eagle is an abstraction layer atop Graphical Toolkits to make GUI programming as easy as possible. Eagle reaches this by narrowing what's possible to do and providing high level components with easy to use API. It's designed much like Python's DBAPI is for databases, Eagle handles the UI. But currently Eagle just support GTK, it would be amazing to use Evas and Edje to provide similar features.
Eagle is a great solution to help automation of simple tasks, things very useful in embedded and mobile worlds, where one can't type commands easily, so it provides a big opportunity for simple applications for OpenMoko, Maemo and like systems.
Evas and Edje can provide unique look and feel for Eagle, also being very light on resources, which is fundamental for such systems.
Demanding: Candidates are not expected to know Eagle or EFL, code is quite trivial, but it is quite big task. However basic widget set is easy to do and is very helpful already.
Mentor(s): Gustavo Barbieri
Skill Required:
  1. Strong Python background

Edje

Add support of codec in Edje (Hard)

Instead of having a bunch of images to create animations (which take place), use a video codec (theora of dirac).
Mentor: Vincent vtorri Torri
Adding video support in Edje will need three parts
  • Add streaming support in Eet (Challenging)
  • Add an Evas loader for it (Hard)
  • Manage the decoding of frames in Edje (Challenging)
Skills Required:
  1. Strong C background
  2. Good understanding of the EFL
  3. Little understanding of video codecs and containers

Refactor Edje internals to make more extensible (Challenging)

Edje is the most complex known Evas smart object and does great already, but it started without clear requirements and code evolved as requirements were discovered. Now that requirements are known and almost all are implemented, it could use a refactor to make code simpler and more extensible, allow more control from programming side, as done lately by Dave Andreoli for his edje_editor.
Among desired extensions, we could name dynamic parts and state creation, easier and more flexible ways to specify complex transitions, user defined transition paths (ie: Bézier curves, user function in C or Embryo).
Mentor(s): Gustavo Barbieri, cmarcelo, Ulisses Furquim, Artur Souza
Skills Required:
  1. Strong C background
  2. Strong Object Oriented Programming concepts
  3. Good quality code, with focus on details

Evas

Design and Implement Filter Objects (Difficult)

Evas was designed and implemented to be the fastest raster graphics around, this led to secondary features as rotation and general purpose filters to be postponed. But now it's a good time to add these features and we think that providing them as "filter objects" is the best option.
Filter objects would act like today's clips in the sense that they could be chained to provide the desired effect. Implementation of such will be a bit complex in order to achieve maximum performance, since we'd need to keep current performance for non-filtered objects and provide the correct filter pipeline to render filtered objects.
Render pipelines should be optimized as much as possible by means of hardware acceleration (ie: OpenGL's shaders). Filters should work in Software and Hardware engines - software will need to possibly play tricks to get speed, but in the end the principle is the same. You need buffers per filter object to render to, but design is flexible. In the end there should be global canvas controls to enable to disable filter objects for a canvas (even though they are there) or ask them to take shortcuts etc. Also, there is a promising project called Gallium3D that plans to provide optimizations for both hardware and software, so let's "believe" it will work as planned.
This work will require hacking into canvas core, mainly on the render part, probably requiring extensions to engine's API
Difficult: Evas is quite complex and this will require changing its internals, this might be very difficult. Candidates should have real experience with C and OpenGL and good knowledge of rendering pipelines if they don't know Evas already, so it's just one stack to learn.
Mentor(s): Gustavo Barbieri
Skills Required:
  1. Strong C background
  2. Strong computer graphics background
  3. Knowledge of OpenGL and other acceleration engines

More Engines (Medium)

Evas is very extensible and already runs on various systems, including framebuffer, X11/XRender (both xlib and xcb), OpenGL, SDL and Windows (Direct3d, DirectDraw). Some engines were written but have lagged behind and could be updated while some new could be written.
Interesting engines:
  • DirectFB demand from embedded systems, mainly set top boxes since most hardware manufactures just provide acceleration for it.
  • OpenGL/ES really interesting due huge demand on embedded systems (phones, game consoles, mid/umpc/tablets), could be based on existing OpenGL.
  • OpenVG also interesting on embedded systems, mainly for future systems as still just few devices provide proper acceleration for it.
  • Cairo exists in CVS, but it's outdated. Should be easy to do.
  • Qt4/Arthur
  • Qtopia exists in CVS, but requires update to Qtopia4 and also Evas api changes.
  • MacOSX/Quartz
  • Clutter does it worth or OpenGL is enough?
PS: although this is listed under Evas, adding Ecore_Evas support would be desired as well.


Mentor(s): Gustavo Barbieri, Cedric (cedric) BAIL
Skills Required:
  1. Strong C background
  2. Basic knowledge of computer graphics
  3. Basic knowledge of desired output engine

EWL

Complete migration of Evas and Edje to engines (Medium)

Mentor(s): Nathan (RbdPngn) Ingersoll, dan (dj2) sinclair
We are in the process of slowly abstracting the display layer of EWL into a series of engine plugins. This allows for greater portability to new display systems and defines clear interfaces for drawing system interaction.
There are currently two display systems that are used directly in the main library which need splitting into an engine interface. These are Evas (for drawing the display) and Edje (which describes the theme layout, provides image data, and additional theme meta-information).
Required skills: C

Implement an optimized tree view for the list widget (Medium)

Mentor(s): Nathan (RbdPngn) Ingersoll, dan (dj2) sinclair
The tree view in EWL is implemented using a Model View Controller (MVC) style API. This gives us a great amount of flexibility in the actual implementation of the view as it is abstracted from the data. Unfortunately, we currently only provide a very heavy view that errs on the side of correctness.
This task would require the implementation of a more optimized view, which can make more assumptions about the presentation of the data. For instance, displaying fixed size rows within the tree.
Required skills: C

Optimization of tree code (Difficult)

Mentor(s): Nathan (RbdPngn) Ingersoll, dan (dj2) sinclair
This is related to the previous task, but more targeted at the existing view code. This code has been developed to provide a flexible display system and err on correctness, but there are certainly ways that this could be improved.
This task would require the profiling of the existing tree view, identification of key optimization points, and implementation of these optimizations.
Required skills: C

Addition of tutorials for the missing widgets (Easy)

Mentor(s): Nathan (RbdPngn) Ingersoll, dan (dj2) sinclair
In an effort to provide a useful environment to our end users, we have written tutorials for many of the widgets that have been developed. Unfortunately, these tutorials currently cover less than 50% of the total widgets available.
A student taking on this task would develop thorough tutorials describing the API usage and best-practices for the remaining widget. In addition, they would be responsible for reviewing the existing tutorials for correctness and for possible improvements.
Required skills: C, Technical writing

Additional documented examples (Easy)

Mentor(s): Nathan (RbdPngn) Ingersoll, dan (dj2) sinclair
Similar to the previously entioned tutorial task, we are also in need of thoroughly documented example applications. This is an expansion on the tutorials as they only cover small sub-sets of the API. These examples would provide full applications with common widget use cases.
The primary goal would be to develop one or more applications which demonstrates the use of 50% or more of the existing widgets. In addition, the code must be thoroughly commented to provide reasoning, implications and recommendations when using the API.
Required skills: C, Technical writing

Implementation of obstacles in Ewl_Text (Very Difficult)

Mentor(s): Nathan (RbdPngn) Ingersoll, dan (dj2) sinclair
There is currently no way to set obstacles into Ewl_Text. This task would be for the implementation of obstacles, other widgets, in the Ewl_Text object.
This task would necessitate adding obstacles to Evas_Textblock before they can be added to Ewl_Text.
Required skills: C

Apps

Eterm

Implement UTF-8 support
Mentor(s): Michael (KainX) Jennings
Enlightenment's world renown terminal application needs YOU! We're looking for a brave student to implement UTF-8 support.
Skills Required:
  1. Strong C background
  2. Experience with multibyte character sets

Presentation tool (Easy)

Create a presentation tool using Edje
Mentor(s): Cedric (cedric) BAIL, Gustavo Barbieri, Artur Souza
Description: Write a program that, from a text file, create a presentation tool (a bit like Beamer does with LaTeX). The syntax of the text file should be very simple (no xml). The theme of the tool must be described by an edje file. Application can be written either in Python or C. This application should use the power of edje for all transition effect and text placements.
Result: give a tool to demonstrate the power of the EFL. Make any presentation done with this tool end with people just saying woow ! :-)
Skills Required:
  1. Strong C background or
  2. Strong Python background
  3. Good knowledge of Edje
  4. Some presentation skills.

Evince-like program (Challenging)

Evince-like program in full edje, using Epdf, Edvi and Egs
Mentor: Vincent vtorri Torri
Description: Write a program that can display PDF, DVI or Postscript documents. The rendering is done in an Evas obbject with the (existing) libraries Epdf, Edvi and Egs. The difference with Evince will be the GUI, which should be written in full Edje, to have fantastic effects, animations, etc...
Skills Required:
  1. Strong C background

Virtual Keyboard (Medium)

Design and implement one or more virtual keyboard system. These could be regular "full sized" that loads a map like QWERTY or innovative solutions that use dictionaries and statistics to provide faster typing while minimizing clicks and visual/interaction area.
EFL is being considered by lots of embedded and mobile systems provider, from phones (like OpenMoko) to internet tables (like Nokia/Maemo and Intel/Ubuntu) to TV-connected set top boxes. All of these require input without using a physical keyboard, either by use of remote control or touchscreen, so providing a virtual keyboard is a must. Our graphics infrastructure provide enough power to bring eye candy, what we (and almost everyone else) lack is a innovative, efficient solution.
Ideas range from phone's T9 enhanced by touchscreen capabilities to concentric circles of options, click based, drag based, dictionary assisted.
Mentor(s): Gustavo Barbieri, Andre Moreira Magalhaes
Skills Required:
  1. C or Python programming language
  2. Basic knowledge of Ecore, Evas and Edje
  3. Basic understanding of usability

Exhibit (Medium)

Allow users to share images
Mentor(s): Christopher (devilhorns) Michael
Description: Exhibit is an EFL/ETK based image viewer. Similar in nature to gqview. This project will be to provide users the ability to upload images to online sharing services such as Flickr, Picasa, DeviantArt
Skills Required:
  1. Strong C background
  2. Good understanding of sharing services API's
  3. GTK experience helpful (as ETK is similar)

E website

Webservices

Implements server-side part of GHNS specs
Mentor(s): Undetermined
Description: Integrating in E website the server-side (uploads, downloads, catalogation, versioning and data processing) part of GHNS specs
Skills Required:
  1. Strong PHP background
  2. Good understanding of GHNS specs