Difference between revisions of "Summer of Code 2012"

Jump to navigation Jump to search
2,288 bytes added ,  08:39, 21 March 2012
→‎Swift: Fleshing out some points, adding whiteboarding text.
m (→‎buddycloud: Bringing the formatting in line with all the other projects, corrected a couple of typos.)
(→‎Swift: Fleshing out some points, adding whiteboarding text.)
Line 46: Line 46:
[http://swift.im Swift]'s goal is to provide an IM client that does things 'right' with a good user interface, solid quality, and standards-compliance. This year there are again several opportunities for working on new functionality in Swift. This page lists some of the high priority tasks the Swift development team has. If you're interested in any of these (or other) Swift ideas, please jump into the [xmpp:swift@rooms.swift.im?join swift@rooms.swift.im] room and chat it over with Remko and Kev. Swift is a C++ project, so C++ proficiency is required, with either knowledge of or willingness to learn about unit testing (and ideally test-driven development).
[http://swift.im Swift]'s goal is to provide an IM client that does things 'right' with a good user interface, solid quality, and standards-compliance. This year there are again several opportunities for working on new functionality in Swift. This page lists some of the high priority tasks the Swift development team has. If you're interested in any of these (or other) Swift ideas, please jump into the [xmpp:swift@rooms.swift.im?join swift@rooms.swift.im] room and chat it over with Remko and Kev. Swift is a C++ project, so C++ proficiency is required, with either knowledge of or willingness to learn about unit testing (and ideally test-driven development).


We also have a brief introduction to the project and some ideas for tasks to test the water available at [http://swift.im/gsoc.html].
We also have a brief introduction to the project and some ideas for tasks to test the water available at [http://swift.im/gsoc.html http://swift.im/gsoc.html].


=== Conversation History ===
=== Conversation History ===
* '''Summary''': Implement all aspects of keeping conversation history, both local and remote.
* '''Summary''': Implement all aspects of keeping conversation history, both local and remote.
* '''Difficulty''': Easy-Medium
* '''Difficulty''': Easy-Medium
* '''Details''': Swift doesn't currently store any transcripts. A student would likely start by producing a prototype user interface for accessing chat history, then write the library code to access a remote archive, and plug these together and finally work on a local archive. This is likely to be a very satisfying project, with enough challenge to be interesting, but not so much that it's frustrating - plus it's a very popular feature request.
* '''Details''': Swift doesn't currently store any transcripts. A student would likely start by producing a prototype user interface for accessing chat history, then write the library code to access a remote archive, and plug these together and finally work on a local archive. This is likely to be a very satisfying project, with enough challenge to be interesting, but not so much that it's frustrating - plus it should be satisfying as it's one of Swift's most popular feature requests.
* '''Skills (to have)'''
** Ability to code in C++
* '''Skills (to have or to learn)'''
** Ability to work with Qt GUIs and create feature-full UIs
** Git version control
** Understanding of XMPP server-side history technology
 


=== VoIP Support ===
=== VoIP Support ===
Line 61: Line 68:
** Implement real-time-protocol (using standard RTP)
** Implement real-time-protocol (using standard RTP)
** Investigate frameworks for hardware interaction & media encoding/decoding.
** Investigate frameworks for hardware interaction & media encoding/decoding.
* '''Skills (to have)'''
** Ability to code in C++
* '''Skills (to have or to learn)'''
** Ability to work with and create simple Qt GUIs
** Git version control
** Platform audio hardware interaction
** Media streaming
** Understanding of XMPP 'Jingle' technologies


=== Constrained Swift ===
=== Constrained Swift ===
Line 66: Line 82:
* '''Difficulty''': Medium
* '''Difficulty''': Medium
* '''Details''': XMPP provides protocols for dealing with 'constrained' environments: session resumption and incremental roster retrieval for bandwidth-constrained situations, BOSH for places where keeping a long-lived connection is hard, SIFT for limiting the amount of incoming traffic, Link-local for serverless locations, ... Support for these protocols is not only interesting when XMPP software is used in these particular situations, it also makes the client faster and more reliable in general. In this project, you will study the protocols that can improve Swift in these situations (Session Management, BOSH, SIFT, Link-local, ...), and extend Swift (and the underlying Swiften XMPP library) to support these use cases.
* '''Details''': XMPP provides protocols for dealing with 'constrained' environments: session resumption and incremental roster retrieval for bandwidth-constrained situations, BOSH for places where keeping a long-lived connection is hard, SIFT for limiting the amount of incoming traffic, Link-local for serverless locations, ... Support for these protocols is not only interesting when XMPP software is used in these particular situations, it also makes the client faster and more reliable in general. In this project, you will study the protocols that can improve Swift in these situations (Session Management, BOSH, SIFT, Link-local, ...), and extend Swift (and the underlying Swiften XMPP library) to support these use cases.
* '''Skills (to have)'''
** Ability to code in C++
* '''Skills (to have or to learn)'''
** Ability to work with Qt GUIs
** Git version control
** An understanding of a range of XMPP technologies.


=== Multi-account Support ===
=== Multi-account Support ===
Line 71: Line 93:
* ''Difficulty'': Medium
* ''Difficulty'': Medium
* '''Details''': Swift currently only supports one account at a time. Supporting multiple accounts is one of the most requested features for Swift. Although this is technically not hard to implement, it involves quite some design decisions on providing a clear and easy-to-understand user interface. This project is about designing a good user interface for multiple account support.
* '''Details''': Swift currently only supports one account at a time. Supporting multiple accounts is one of the most requested features for Swift. Although this is technically not hard to implement, it involves quite some design decisions on providing a clear and easy-to-understand user interface. This project is about designing a good user interface for multiple account support.
* '''Skills (to have)'''
** Ability to code in C++
* '''Skills (to have or to learn)'''
** Ability to work with Qt GUIs, creating potentially complex UIs
** Git version control


=== Multi-resource support ===
=== Multi-resource support ===
Line 76: Line 104:
* '''Difficulty''': Medium
* '''Difficulty''': Medium
* '''Details''': Although XMPP has supported multiple simultaneously connected clients from the start, the user experience is in practice seldom what a user would expect. This has not been a big problem up until recently, since most people tend to connect with only one client at the same time. These days, however, people are constantly going back and forth between their always-on mobile IM client and their desktop. Enabling a good user experience for this requires new protocols and techniques for transferring conversations between devices, ... This project is about implementing these protocols to streamline the use case of multiple resources
* '''Details''': Although XMPP has supported multiple simultaneously connected clients from the start, the user experience is in practice seldom what a user would expect. This has not been a big problem up until recently, since most people tend to connect with only one client at the same time. These days, however, people are constantly going back and forth between their always-on mobile IM client and their desktop. Enabling a good user experience for this requires new protocols and techniques for transferring conversations between devices, ... This project is about implementing these protocols to streamline the use case of multiple resources
* '''Skills (to have)'''
** Ability to code in C++
* '''Skills (to have or to learn)'''
** Ability to work with Qt GUIs
** Git version control
** An understanding of a range of XMPP technologies.


=== User activity/profile ===
=== User activity/profile ===
Line 81: Line 115:
* '''Difficulty''': Easy
* '''Difficulty''': Easy
* '''Details''': XMPP (Through the PEP offerings) supports many social-ish data structures, including a user's location, their mood and their current activity. A student working on this project would add support for these protocols to Swiften, and build a 'user profile' UI around these data to give a view on a contact's state that goes beyond the usual 'Name, address, telephone number' profile. A nice touch would be adding map overlays to the location data, so you could see where all your friends were on a map together, and the suchlike.
* '''Details''': XMPP (Through the PEP offerings) supports many social-ish data structures, including a user's location, their mood and their current activity. A student working on this project would add support for these protocols to Swiften, and build a 'user profile' UI around these data to give a view on a contact's state that goes beyond the usual 'Name, address, telephone number' profile. A nice touch would be adding map overlays to the location data, so you could see where all your friends were on a map together, and the suchlike.
* '''Skills (to have)'''
** Ability to code in C++
* '''Skills (to have or to learn)'''
** Ability to work with non-trivial Qt GUIs
** Git version control
** An understanding of the "PEP" range of XMPP technologies.


=== Screen sharing ===
=== Screen sharing ===
Line 86: Line 126:
* '''Difficulty''': Medium
* '''Difficulty''': Medium
* '''Details''': Create a Jingle profile protocol for negotiating screen sharing. Investigate alternatives for implementing the screen sharing part on various operating systems. Implement the protocol and screen sharing, using Swiften's already present Jingle code for negotiation, and reliable transports.
* '''Details''': Create a Jingle profile protocol for negotiating screen sharing. Investigate alternatives for implementing the screen sharing part on various operating systems. Implement the protocol and screen sharing, using Swiften's already present Jingle code for negotiation, and reliable transports.
* '''Skills (to have)'''
** Ability to code in C++
* '''Skills (to have or to learn)'''
** Ability to work with Qt GUIs
** Git version control
** An understanding of the Jingle range of XMPP technologies.
** An understanding of screen sharing technology, such as VNC.


=== Whiteboarding ===
=== Whiteboarding ===
* '''Summary''': Implement shared whiteboard drawing
* '''Summary''': Implement shared whiteboard drawing
* '''Difficulty''': Medium
* '''Difficulty''': Medium
* '''Details''':
* '''Details''': The aim of this project is to initially create an excellent UI for whiteboard sharing, with the simplest possible XMPP implementation (not necessarily standards-based). After this first section of the project is complete, the aim is to investigate the current standard in XMPP (which has gained little implementation traction) and other more recent approaches from elsewhere and to either implement the existing standard or (in consultation with your mentor and the community) prototype a better protocol implementation.
* '''Skills (to have)'''
** Ability to code in C++
* '''Skills (to have or to learn)'''
** Ability to work with complex Qt GUIs
** Git version control


== Spectrum ==
== Spectrum ==

Navigation menu