Difference between revisions of "GSoC/2019/Project Ideas"
(Update links to Ignite's teaser tasks for posterity.) |
|||
(17 intermediate revisions by 7 users not shown) | |||
Line 8: | Line 8: | ||
More information about [[GSoC/2019 | XMPP and the XSF at GSOC 2019 can be found here]]. | More information about [[GSoC/2019 | XMPP and the XSF at GSOC 2019 can be found here]]. | ||
Please not that the student's final project proposals may, but are not required to, be for projects on the ideas list. Students with their own GSoC project ideas are encouraged to talk to the respective project contact persons about the feasibility of their idea. | |||
= How to add your project idea = | = How to add your project idea = | ||
If you do not have already an account on this wiki, then ask someone in the jdev@ | If you do not have already an account on this wiki, then ask someone in the jdev@muc.xmpp.org chatroom for help (sorry, we don't allow open registration because we're trying to avoid the spammers). | ||
Next, copy the template below to create a new entry and fill out all the required information. | Next, copy the template below to create a new entry and fill out all the required information. | ||
Line 17: | Line 19: | ||
== Example Project Template == | == Example Project Template == | ||
''Website:'' https:// | ''Website:'' https://domain.tld/<br/> | ||
''Source Code:'' https:// | ''Source Code:'' https://domain.tld/source<br/> | ||
''Description:'': This is just an example project which can be used as template.<br/> | ''Description:'': This is just an example project which can be used as template.<br/> | ||
''Project Contact Person:'' John Doe [mailto:john.doe@ | ''Project Contact Person:'' John Doe [mailto:john.doe@domain.tld <john.doe@domain.tld>]<br/> | ||
''List of Teaser Tasks:'' https:// | ''List of Teaser Tasks:'' https://domain.tld/issues?tag=gsoc-teaser | ||
''Contact chat:'' chat@muc. | ''Contact chat:'' chat@muc.domain.tld | ||
''Contact forum:'' https://discuss. | ''Contact forum:'' https://discuss.domain.tld/ | ||
=== Idea A === | === Idea A === | ||
Line 37: | Line 39: | ||
''Involved Technologies:'' Smalltalk, FORTRAN77, COBOL<br/> | ''Involved Technologies:'' Smalltalk, FORTRAN77, COBOL<br/> | ||
''Mentor(s):'' Foo Bar (TheBatz) [mailto:foo.bar@ | ''Mentor(s):'' Foo Bar (TheBatz) [mailto:foo.bar@domain.tld <foo.bar@domain.tld>]<br/> | ||
''Deliverables / Expected Results:''<br/> | ''Deliverables / Expected Results:''<br/> | ||
Line 57: | Line 59: | ||
''Involved Technologies:'' Smalltalk, FORTRAN77, COBOL<br/> | ''Involved Technologies:'' Smalltalk, FORTRAN77, COBOL<br/> | ||
''Mentor(s):'' Foo Bar (TheBatz) [mailto:foo.bar@ | ''Mentor(s):'' Foo Bar (TheBatz) [mailto:foo.bar@domain.tld <foo.bar@domain.tld>]<br/> | ||
''Deliverables / Expected Results:''<br/> | ''Deliverables / Expected Results:''<br/> | ||
Line 75: | Line 77: | ||
== Ignite Realtime's Smack == | == Ignite Realtime's Smack == | ||
''Website:'' https://igniterealtime.org/projects/smack/ | ''Website:'' https://igniterealtime.org/projects/smack/<br/> | ||
''Source Code:'' https://github.com/igniterealtime/Smack/<br/> | ''Source Code:'' https://github.com/igniterealtime/Smack/<br/> | ||
Line 83: | Line 85: | ||
''Project Contact Person:'' Florian Schmaus [mailto:flo@geekplace.eu <flo@geekplace.eu>]<br/> | ''Project Contact Person:'' Florian Schmaus [mailto:flo@geekplace.eu <flo@geekplace.eu>]<br/> | ||
''List of Teaser Tasks:'' [https:// | ''List of Teaser Tasks:'' [https://igniterealtime.atlassian.net/issues/?filter=10003 Smack Teaser Tasks]<br/> | ||
''Contact chat:'' [xmpp:open_chat@conference.igniterealtime.org?join open_chat@conference.igniterealtime.org]<br/> | ''Contact chat:'' [xmpp:open_chat@conference.igniterealtime.org?join open_chat@conference.igniterealtime.org]<br/> | ||
Line 99: | Line 101: | ||
''Deliverables / Expected Results:''<br/> | ''Deliverables / Expected Results:''<br/> | ||
* Being able to connect to XMPP services via WebSocket. | * Being able to connect to XMPP services via WebSocket. | ||
* Definition of a WebSocket interface on top of the used WebSocket libraries, allowing for different WebSocket implementations. | * Definition of a WebSocket interface on top of the used WebSocket libraries, allowing for different WebSocket implementations (one implementation must be OkHttp for Android support). | ||
''Milestones:''<br/> | |||
# Design and implement WebSocket interface to use by XmppWebsocketconnection | |||
# Implement automatic XMPP client to server transport discovery (Implicit TLS, TCP, WebSocket, BOSH) | |||
# Interoperability tests against a different implementation | |||
# Plug Smack with WebSocket into Spark, our FOSS XMPP client | |||
Currently Smack can establish connections via TCP/IP and HTTP via BOSH. WebSockets are yet another way to connect to a server. | Currently Smack can establish connections via TCP/IP and HTTP via BOSH. WebSockets are yet another way to connect to a server. | ||
Line 105: | Line 113: | ||
== Prosody IM == | == Prosody IM == | ||
'Website:'' https://prosody.im/<br/> | ''Website:'' https://prosody.im/<br/> | ||
''Source Code:'' https://hg.prosody.im/<br/> | ''Source Code:'' https://hg.prosody.im/<br/> | ||
Line 115: | Line 123: | ||
''List of Teaser Tasks:'' https://issues.prosody.im/?q=state%3Dopen+difficulty%3Deasy | ''List of Teaser Tasks:'' https://issues.prosody.im/?q=state%3Dopen+difficulty%3Deasy | ||
''Contact chat:'' [xmpp:prosody@conference.prosody.im prosody@conference.prosody.im] | ''Contact chat:'' [xmpp:prosody@conference.prosody.im prosody@conference.prosody.im] [https://chat.prosody.im/ web client] | ||
=== Standalone mod_firewall === | === Standalone mod_firewall === | ||
Line 144: | Line 152: | ||
The project would include: | The project would include: | ||
* Protocol design: develop and document (in XEP form) a protocol whereby a server may submit a stanza to the standalone mod_firewall and receive a decision. | |||
* Coding (Lua): adapt mod_firewall's core code to run standalone, and connect to servers as a component implementing this protocol. | |||
* Coding: Additionally add support for the new protocol to an XMPP server of your choice. | |||
=== Prosody plugin installer === | === Prosody plugin installer === | ||
Line 195: | Line 203: | ||
== Poezio == | == Poezio == | ||
''Website'': https://poez.io | |||
''Source Code'': https://lab.louiz.org/poezio/poezio | |||
''Description'': poezio is a free console XMPP client, written in Python 3 using the ncurses library. | |||
''Project Contact Person'': Emmanuel Gil “Link Mauve” Peyrot [mailto:linkmauve@linkmauve.fr <linkmauve@linkmauve.fr>], Maxime “pep” Buquet [mailto:pep@bouah.net <pep@bouah.net>] | |||
''List of Teaser Tasks'': https://lab.louiz.org/poezio/poezio/issues?label_name=Easy | |||
''Contact chat'': [xmpp:poezio@muc.poez.io?join poezio@muc.poez.io] | |||
=== Multi-account === | === Multi-account === | ||
Brief explanation: Implement multi-account support in poezio (https://lab.louiz.org/poezio/poezio/issues/3456) | ''Brief explanation'': Implement multi-account support in poezio (https://lab.louiz.org/poezio/poezio/issues/3456) | ||
Involved technologies: | |||
Mentors: Emmanuel Gil “Link Mauve” Peyrot, Maxime “pep” Buquet | ''Involved technologies'': Python 3, XMPP | ||
Deliverables / Expected results: | |||
''Mentors'': Emmanuel Gil “Link Mauve” Peyrot, Maxime “pep” Buquet | |||
''Deliverables / Expected results'': | |||
* Poezio with multi-account support | * Poezio with multi-account support | ||
* Being able to switch from one account to another (a la irssi, ^X ?) | * Being able to switch from one account to another (a la irssi, ^X ?) | ||
* Adapt UI/UX where necessary | * Adapt UI/UX where necessary | ||
* Tests for the added/rewritten parts | * Tests for the added/rewritten parts | ||
Milestones: | |||
''Milestones'': | |||
# Get familiar with slixmpp’s stream handling and poezio’s internals. | |||
# Break down the <code>core</code> module further, to make it more testable and easier to integrate changes | |||
# Allow <code>core</code> to use multiple streams | |||
# Integrate these changes in the UI | |||
=== Infinite scrolling using MAM === | === Infinite scrolling using MAM === | ||
''Brief explanation'': Implement infinite scroll using MAM in poezio | |||
''Involved technologies'': Python3, XMPP | |||
''Mentors'': Emmanuel Gil “Link Mauve” Peyrot, Maxime “pep” Buquet | |||
''Deliverables / Expected results'': | |||
* Infinite scroll in Tabs (https://lab.louiz.org/poezio/poezio/issues/3052) | |||
* Tests for the added/rewritten parts | |||
''Milestones'': | |||
# Get familiar with slixmpp’s xep_0313 plugin and poezio’s Tabs (MucTab, ConversationTab, etc.) | |||
# Display a bunch of mock messages on scroll | |||
# Integrate MAM fetching during this scroll | |||
=== PubSub browser / management === | === PubSub browser / management === | ||
Line 219: | Line 256: | ||
''Brief explanation'': Add a new tab to poezio to let the user manage PubSub nodes. | ''Brief explanation'': Add a new tab to poezio to let the user manage PubSub nodes. | ||
''Involved technologies'': | ''Involved technologies'': Python 3, XMPP, ncurses | ||
''Mentors'': Emmanuel Gil “Link Mauve” Peyrot, Maxime “pep” Buquet | ''Mentors'': Emmanuel Gil “Link Mauve” Peyrot, Maxime “pep” Buquet | ||
Line 235: | Line 272: | ||
# Write some views displaying mock data in a new poezio tab | # Write some views displaying mock data in a new poezio tab | ||
# Wire up the views to the data provided by slixmpp | # Wire up the views to the data provided by slixmpp | ||
== Dino == | |||
''Website:'' https://dino.im/<br/> | |||
''Source Code:'' https://github.com/dino/dino<br/> | |||
''Description:'': Dino is a modern open-source chat client for the desktop. It focuses on providing a clean and reliable Jabber/XMPP experience while having your privacy in mind.<br/> | |||
''Project Contact Persons:'' fiaxh and larma [mailto:team@dino.im <team@dino.im>]<br/> | |||
''List of Teaser Tasks:'' https://github.com/dino/dino/issues | |||
''Contact chat:'' [xmpp:chat@dino.im chat@dino.im] | |||
=== Jingle File Transfer === | |||
''Brief explanation'': The XMPP protocol includes a signaling system to set-up peer-to-peer connections, dubbed Jingle. One usecase for Jingle is to transfer files without an intermediary. This project idea is about adding support for file transfers using Jingle, fully integrated with current Dino features. | |||
''Involved technologies'': XMPP, Jingle/WebRTC, Vala, Networking | |||
''Mentors'': Marvin W (larma), fiaxh | |||
''Deliverables / Expected results'': | |||
* Support for sending and receiving Jingle file transfers | |||
* Automatically detect when peer-to-peer file transfer usage makes sense instead of http file uploads | |||
* Support for WebRTC-based Jingle transport for compatibility with web-based clients | |||
* Implement OpenPGP and OMEMO encrypted file transfers | |||
=== Inline link preview === | |||
''Brief explanation'': When sharing links using chat messages, it is often hard to see what is behind the link. Many clients thus provide previews of the linked content. We'd like to add this functionality and give a preview or embed for all kind of links, for example by parsing the Open Graph protocol, similar metadata or heuristic approaches. We also want to explore ways to send preview information with the message to reduce workload for the receiving devices. | |||
''Involved technologies'': XMPP, Vala, GTK+, Web, OpenGraph | |||
''Mentors'': Marvin W (larma), fiaxh | |||
''Deliverables / Expected results'': | |||
* User interface widget to display metadata, suitable for preview image, title, abstract and the original url/domain. | |||
* Automatic generation of metadata, working with major websites. This should be done in a generic fassion, not targeting a specific website | |||
* Design or reuse a specification for sending metadata with XMPP messages |
Latest revision as of 08:13, 5 January 2024
Introduction
This wiki page lists all GSoC project ideas and their related software projects under the umbrella of the XSF.
Please note that to assess students applying to GSoC for XSF projects we want them to have submitted some small patches to one of the XMPP projects in advance, as this gives us an idea of their general ability to interact with the projects and submit patches. These should only be a day or two's work, and shouldn't be onerous!
A list of teaser tasks is given in the projects section, but please join the chat rooms for the respective projects and discuss them there, where mentors will be able to help you and know what you're up to. There are different teasers for different codebases, and more projects with new teasers will be appearing here over the next few days.
More information about XMPP and the XSF at GSOC 2019 can be found here.
Please not that the student's final project proposals may, but are not required to, be for projects on the ideas list. Students with their own GSoC project ideas are encouraged to talk to the respective project contact persons about the feasibility of their idea.
How to add your project idea
If you do not have already an account on this wiki, then ask someone in the jdev@muc.xmpp.org chatroom for help (sorry, we don't allow open registration because we're trying to avoid the spammers).
Next, copy the template below to create a new entry and fill out all the required information.
Example Project Template
Website: https://domain.tld/
Source Code: https://domain.tld/source
Description:: This is just an example project which can be used as template.
Project Contact Person: John Doe <john.doe@domain.tld>
List of Teaser Tasks: https://domain.tld/issues?tag=gsoc-teaser
Contact chat: chat@muc.domain.tld
Contact forum: https://discuss.domain.tld/
Idea A
Brief explanation: Add support for A to example project.
Involved Technologies: Smalltalk, FORTRAN77, COBOL
Mentor(s): Foo Bar (TheBatz) <foo.bar@domain.tld>
Deliverables / Expected Results:
- Foo
- Bar
- Baz
Milestones:
- Implement parser and unit tests for parsing
- Implement protocol logic
- Interoperability tests against a different implementation
A is a promising new XMPP protocol extension. Its specification includes a ton of buzzwords ranging from blockchain to machine learning. But since it is very young protocol, there are no existing implementations. The goal of this project is to change that situation.
Idea B
Brief explanation: Add support for A to example project.
Involved Technologies: Smalltalk, FORTRAN77, COBOL
Mentor(s): Foo Bar (TheBatz) <foo.bar@domain.tld>
Deliverables / Expected Results:
- Foo
- Bar
- Baz
Milestones:
- Implement parser and unit tests for parsing
- Implement protocol logic
- Interoperability tests against a different implementation
A is a promising new XMPP protocol extension. Its specification includes a ton of buzzwords ranging from blockchain to machine learning. But since it is very young protocol, there are no existing implementations. The goal of this project is to change that situation.
List of Project Ideas
Ignite Realtime's Smack
Website: https://igniterealtime.org/projects/smack/
Source Code: https://github.com/igniterealtime/Smack/
Description:: Ignite Realtime creates free and open source software with and around the XMPP ecosystem. Smack is an XMPP client library for Java/Android applications.
Project Contact Person: Florian Schmaus <flo@geekplace.eu>
List of Teaser Tasks: Smack Teaser Tasks
Contact chat: open_chat@conference.igniterealtime.org
Contact forum: https://discourse.igniterealtime.org/c/smack
WebSocket support
Brief explanation: Add support for XMPP over WebSocket (RFC 7395) to the XMPP Client Library Smack.
Involved Technologies: Android compatible Java 8, WebSockets
Mentor(s): Paul Schaub (vanitasvitae) <vanitasvitae@fsfe.org>
Deliverables / Expected Results:
- Being able to connect to XMPP services via WebSocket.
- Definition of a WebSocket interface on top of the used WebSocket libraries, allowing for different WebSocket implementations (one implementation must be OkHttp for Android support).
Milestones:
- Design and implement WebSocket interface to use by XmppWebsocketconnection
- Implement automatic XMPP client to server transport discovery (Implicit TLS, TCP, WebSocket, BOSH)
- Interoperability tests against a different implementation
- Plug Smack with WebSocket into Spark, our FOSS XMPP client
Currently Smack can establish connections via TCP/IP and HTTP via BOSH. WebSockets are yet another way to connect to a server.
Prosody IM
Website: https://prosody.im/
Source Code: https://hg.prosody.im/
Description:: Prosody is a lightweight XMPP server that aims to be easy to set up and configure, and efficient with system resources.
Project Contact Person: Matthew Wild <mwild1@gmail.com>
List of Teaser Tasks: https://issues.prosody.im/?q=state%3Dopen+difficulty%3Deasy
Contact chat: prosody@conference.prosody.im web client
Standalone mod_firewall
Brief explanation: This project would produce a version of mod_firewall that runs standalone and can be connected
with any XEP-0114 compliant server.
Involved Technologies: Lua, XMPP
Mentor(s): Matthew Wild (MattJ) <mwild1@gmail.com>, Kim Alvefur (Zash)
Deliverables / Expected Results:
- Standalone server-independent mod_firewall
- Server-side implementation that uses external mod_firewall for determining whether/how to to route a stanza.
Milestones:
- Design and document server-independent protocol for communicating with external mod_firewall.
- Develop standalone mod_firewall process that connects to a XEP-0114 compliant server and implements above protocol.
- Develop server-side code to communicate with external mod_firewall and allow it to filter stanzas.
Prosody's mod_firewall is a rule-based XMPP-layer firewall that is useful for security and anti-spam purposes. However it currently only works with Prosody, and needs to be loaded into the main process.
This project would produce a version of mod_firewall that runs standalone and can be connected with any XEP-0114 compliant server.
The project would include:
- Protocol design: develop and document (in XEP form) a protocol whereby a server may submit a stanza to the standalone mod_firewall and receive a decision.
- Coding (Lua): adapt mod_firewall's core code to run standalone, and connect to servers as a component implementing this protocol.
- Coding: Additionally add support for the new protocol to an XMPP server of your choice.
Prosody plugin installer
Brief explanation: This project would produce an easy way to install and manage plugins for the Prosody server.
Involved Technologies: Lua
Mentor(s): Matthew Wild (MattJ) <mwild1@gmail.com>, Kim Alvefur (Zash)
Deliverables / Expected Results:
- Commands to install, update, remove and list installed plugins.
- Scripts to build and manage a repository of plugins.
Milestones:
- Implement command to install a plugin from a repository
- Implement commands to remove and update installed plugins
- Develop scripts to build a plugin repository.
Prosody has hundreds of community modules that provide additional features and extensions to the core server. Currently installing these is a manual process that currently involves a number of manual steps.
The goal of this project would be to produce simple commands to install, update and remove community modules. Rather than inventing a new package manager, the project would ideally build on top of the luarocks project.
Implement MIX
Brief explanation: This project would add support for the MIX suite of XEPs to Prosody
Involved Technologies: Lua, XMPP
Mentor(s): Matthew Wild (MattJ) <mwild1@gmail.com>, Kim Alvefur (Zash)
Deliverables / Expected Results:
- A server with support for creating and joining MIX channels.
- A suite of Scansion tests for testing correct MIX behaviour
Milestones:
- Implement support for creating, joining and exchanging messages with MIX rooms.
- Implement channel administration (XEP-406)
MIX is a new protocol for group chats in XMPP that provides a modern alternative to the existing MUC protocol. It is not currently widely implemented, but this project would provide a server-side implementation against which clients can be built and tested.
Basic support may be found in experimental branches of Conversations, but it is expected that this implementation may be tested through use of Scansion and/or other client-side testing tools and libraries.
Poezio
Website: https://poez.io
Source Code: https://lab.louiz.org/poezio/poezio
Description: poezio is a free console XMPP client, written in Python 3 using the ncurses library.
Project Contact Person: Emmanuel Gil “Link Mauve” Peyrot <linkmauve@linkmauve.fr>, Maxime “pep” Buquet <pep@bouah.net>
List of Teaser Tasks: https://lab.louiz.org/poezio/poezio/issues?label_name=Easy
Contact chat: poezio@muc.poez.io
Multi-account
Brief explanation: Implement multi-account support in poezio (https://lab.louiz.org/poezio/poezio/issues/3456)
Involved technologies: Python 3, XMPP
Mentors: Emmanuel Gil “Link Mauve” Peyrot, Maxime “pep” Buquet
Deliverables / Expected results:
- Poezio with multi-account support
- Being able to switch from one account to another (a la irssi, ^X ?)
- Adapt UI/UX where necessary
- Tests for the added/rewritten parts
Milestones:
- Get familiar with slixmpp’s stream handling and poezio’s internals.
- Break down the
core
module further, to make it more testable and easier to integrate changes - Allow
core
to use multiple streams - Integrate these changes in the UI
Infinite scrolling using MAM
Brief explanation: Implement infinite scroll using MAM in poezio
Involved technologies: Python3, XMPP
Mentors: Emmanuel Gil “Link Mauve” Peyrot, Maxime “pep” Buquet
Deliverables / Expected results:
- Infinite scroll in Tabs (https://lab.louiz.org/poezio/poezio/issues/3052)
- Tests for the added/rewritten parts
Milestones:
- Get familiar with slixmpp’s xep_0313 plugin and poezio’s Tabs (MucTab, ConversationTab, etc.)
- Display a bunch of mock messages on scroll
- Integrate MAM fetching during this scroll
PubSub browser / management
Brief explanation: Add a new tab to poezio to let the user manage PubSub nodes.
Involved technologies: Python 3, XMPP, ncurses
Mentors: Emmanuel Gil “Link Mauve” Peyrot, Maxime “pep” Buquet
Deliverables / Expected results:
- List the nodes present on a service
- Display the metadata of a node
- Display the configuration of a node
- Allow the user to change the configuration of a node
- List the items present on a node
- Let the user publish a new item, or edit an existing one
Milestones:
- Get familiar with slixmpp’s xep_0060 plugin and poezio’s internals
- Write some views displaying mock data in a new poezio tab
- Wire up the views to the data provided by slixmpp
Dino
Website: https://dino.im/
Source Code: https://github.com/dino/dino
Description:: Dino is a modern open-source chat client for the desktop. It focuses on providing a clean and reliable Jabber/XMPP experience while having your privacy in mind.
Project Contact Persons: fiaxh and larma <team@dino.im>
List of Teaser Tasks: https://github.com/dino/dino/issues
Contact chat: chat@dino.im
Jingle File Transfer
Brief explanation: The XMPP protocol includes a signaling system to set-up peer-to-peer connections, dubbed Jingle. One usecase for Jingle is to transfer files without an intermediary. This project idea is about adding support for file transfers using Jingle, fully integrated with current Dino features.
Involved technologies: XMPP, Jingle/WebRTC, Vala, Networking
Mentors: Marvin W (larma), fiaxh
Deliverables / Expected results:
- Support for sending and receiving Jingle file transfers
- Automatically detect when peer-to-peer file transfer usage makes sense instead of http file uploads
- Support for WebRTC-based Jingle transport for compatibility with web-based clients
- Implement OpenPGP and OMEMO encrypted file transfers
Inline link preview
Brief explanation: When sharing links using chat messages, it is often hard to see what is behind the link. Many clients thus provide previews of the linked content. We'd like to add this functionality and give a preview or embed for all kind of links, for example by parsing the Open Graph protocol, similar metadata or heuristic approaches. We also want to explore ways to send preview information with the message to reduce workload for the receiving devices.
Involved technologies: XMPP, Vala, GTK+, Web, OpenGraph
Mentors: Marvin W (larma), fiaxh
Deliverables / Expected results:
- User interface widget to display metadata, suitable for preview image, title, abstract and the original url/domain.
- Automatic generation of metadata, working with major websites. This should be done in a generic fassion, not targeting a specific website
- Design or reuse a specification for sending metadata with XMPP messages