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 SILC 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

TBD

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.

Camaelon Difficulty: starstarstarstarstar

Collaborate with GNUstep on improving Camaelon (the Étoilé/GNUstep theme engine) or merging it with GNUstep themeing efforts.

Time to Complete Task
TBD

TBD

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

Fix the stack/unstack operations in EtoileUI, which allow setting a temporary layout on a particular group of items. They can be used to give an "exploded" view of a group which might normally be drawn as an opaque folder icon, giving a very generic implementation of stacks in Aperture.

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 (including EtoileSerialise) 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 student's interests.

Time to Complete Task
TBD

TBD

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

Rewrite AddressKit and BookmarkKit to use CoreObject Difficulty: starstarstarstarstar

Both contacts and bookmarks are concrete domains that map readily to the semi-structured data model of CoreObject. This task will involve rewriting AddressKit and BookmarkKits as thin layers above CoreObject. Compatibility with Apple’s AddressBook framework will need to be maintained in case of AddressKit. In both cases, the code must include a simple test suite.

Time to Complete Task
1 Month

Implement ABPerson as a COObject subclass, then ABGroup and ABAdressBook as COGroup subclasses. ABRecord won't be their superclass but the inherited methods can be added directly to ABPerson, ABGroup and ABAddressBook. Alternatively ABRecord can be implemented and used as a mixin.

1 Week

Implement ABMultiValue and ABMutableMultiValue as an NSArray of ETKeyValuePair.

1 Week

Implement ABSearchElement and record matching with NSPredicate.

3 Weeks

Create a people picker view with EtoileUI and write an ETCompositeLayout subclass that encapsulates the item tree that represents the UI. You can also reimplement ABPeoplePickerView around the UI built with EtoileUI.

1 Week

Rewrite BKBookmark as a COObject subclass. Remove BKGroup and use COGroup instead. Remove BKBookmarkStore. Remove BKBookmarkQuery and BKBookmarkSearchResult; NSPredicate will be used instead.

2 Weeks

Remove BKBookmarkView and implement a bookmark manager UI with EtoileUI. Write an ETCompositeLayout subclass that encapsulates the item tree that represents this UI.

CalendarStore on top of CoreObject Difficulty: starstarstarstarstar

The Calendar Store API that Apple introduced with 10.5 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

Io Difficulty: starstarstarstarstar

Reimplement Io on top of LanguageKit. The existing Io bridge is no longer supported.

Time to Complete Task
TBD

TBD