Development

Open Projects

If you are interested helping out with Étoilé, there is still a lot of work to be done that we would be glad to have help with. This section contains a few project ideas. If you want to know more about any of these then come and visit our IRC room or send a message to our mailing lists, etoile-discuss or etoile-dev.

All projects will require some basic knowledge of the Objective-C Cocoa/OpenStep API's. If Étoilé sounds like the project for you but you aren't familiar with these technologies, we will be happy to help you get comfortable. See First Steps into Étoilé and GNUstep Programming for some starting points.

EtoileUI Difficulty: starstarstarstarstar

EtoileUI is a reflective UI framework based on a uniform tree of UI objects, it implements many Étoilé high-level UI features like Pick & Drop, Pluggable Layouts, Composite Document etc. This is a broad project which will involve working with Quentin on finishing the design and implementation of EtoileUI.

Time to Complete Task
TBD

For a task list, see the TODO document.

Opal Difficulty: starstarstarstarstar

Opal is the CoreGraphics implementation in Étoilé subversion.

Time to Complete Task
4 Months

Finish the text-related functions in Opal and build a CoreText implementation on top (probably using Pango for most of the layout). This is a large task and probably should only be attempted by someone already familiar with Apple's Quartz and Cairo.

Theming Difficulty: starstarstarstarstar

Finish existing Étoilé themes, and collaborate with GNUstep on the theme engine.

Time to Complete Task
2 Months

Polish GNUstep theme engine.

1 Month

Finish Narcissus.

2 Weeks

Finish Nesedah.

1 Month

Finish the Aristo port.

OMeta Implementation Difficulty: starstarstarstarstar

OMeta is a object-oriented pattern-matching language. It allows implementing parsers that can easily be extended by subclassing. Étoilé already has a work-in-progress implementation of the parsing side written in Smalltalk.

Time to Complete Task
TBD

Finish the present OMeta implementation.

Reimplement the present lemon-based Smalltalk parser using OMeta.

TermX Difficulty: starstarstarstarstar

Finish the terminal application TermX (add colour support and other missing features)

Time to Complete Task
TBD

TBD

SystemConfig Difficulty: starstarstarstarstar

Write the missing parts of SystemConfig, test it on more platforms and implement missing components and write a dæmon which coordinates the access to the system, monitors the system and sends distributed notifications.

Time to Complete Task
TBD

TBD

XMPPKit Difficulty: starstarstarstarstar

XMPPKit is an Objective-C implementation of the Extensible Messaging and Presence Protocol (XMPP) that can be used to write Jabber-enabled applications.

Time to Complete Task
TBD

Add Jingle support to XMPPKit. The Jingle protocol is a large collection of XEPs, so this can be done in an incremental fashion.

TBD

Add file transfer support to XMPPKit. Since the latest file transfer protocols are based around Jingle, this could be combined with adding Jingle support.

TBD

Implement shared shelf using PubSub (includes implementing PubSub - XEP-0060). The publish-subscribe protocol is very large, but only a subset needs to be implemented. The scale of this project can vary depending on the student.

TBD

Implement serverless messaging (XEP-0174). This will require some changes to the connection handling code in StepChat (which is badly in need of rewriting) and the abstraction of the presence handling code to allow presence stanzas to be delivered over ZeroConf.

PhotoManager Difficulty: starstarstarstarstar

PhotoManager is a simple application for managing photographs, written in Smalltalk using EtoileUI and CoreObject.

Time to Complete Task
2 Weeks

Implement stack/unstack operations similar to Aperture. They would give an "exploded" view of a group, by switching the layout set on it. For the "exploded" view, the layout would a either ETFlowLayout or a new ETSpreadStackLayout (based on ETComputedLayout).

1 Week

Add a full-screen layout to EtoileUI to support viewing a slideshow of the images.

2 Weeks

Add support for importing images from a digital camera, using the gPhoto library. Write both a simple Objective-C wrapper around gPhoto, and a CoreObject subclass which presents the photographs on the camera as a CoreObject group.

1 Month

Support reading image metadata, likely by writing a wrapper around an existing metadata reading library (support EXIF and IPTC, and possibly XMP).

Garnet-style Constraint Support for EtoileUI Difficulty: starstarstarstarstar

TBD

Time to Complete Task
TBD

TBD

Melodie Difficulty: starstarstarstarstar

Melodie is the Etoile music player/manager. This project will involve various improvements to the application to bring it to a more usable state.

Time to Complete Task
1 Month

Finish writing parsers for various playlist formats (M3U, SMIL, XSPF)

1 Month

Finish the album cover support. This will involve working with EtoileUI to support asynchronous loading of images.

1 Month

Integration with Last.FM, or possibly other web services.

1 Month

Support for iPod and other digital audio players.

1 Month

Investigate adding the capability to CoreObject to coordinate transcoding between different audio formats

CoreObject Difficulty: starstarstarstarstar

CoreObject is a framework for managing persistence, versioning, and metadata on documents/objects. This project could cover a wide variety of work on CoreObject depending on the contributor's interests.

Time to Complete Task
TBD

For task list, see the TODO document

Metadata and CoreObject Difficulty: starstarstarstarstar

Investigate a unified way of handling metadata extraction, linking with UTI's (Uniform Type Identifiers). We have some basic code for reading audio file metadata in Mélodie, and will want to support reading metadata for other file types (video, photographs, etc.). We may want to support Adobe's XMP metadata format.

Time to Complete Task
TBD

TBD

EventKit on top of CoreObject Difficulty: starstarstarstarstar

The EventKit API that Apple introduced with 10.8 is very simple, and now that we have declared properties working with clang it would be pretty simple to implement it on top of CoreObject. Parsing iCalendar files is pretty simple (they're like vCards; trivial key- value pairs, you can parse them with NSScanner). Leave the remote calendar source stuff for now, and let people provide plugins for things like CalDAV / MS Exchange calendars if they're sufficiently motivated.

Time to Complete Task
TBD

TBD

EScript Difficulty: starstarstarstarstar

Work on EScript, an ECMAScript-like language implemented on top of LanguageKit.

Time to Complete Task
TBD

TBD