forked from moneya/siacs.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gsoc.html
331 lines (324 loc) · 24.2 KB
/
gsoc.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="IE=edge" http-equiv="X-UA-Compatible">
<meta content="width=device-width, initial-scale=1" name="viewport">
<title>Conversations.im Summer of Code 2018</title>
<link href="https://conversations.im/css/bootstrap.min.css" rel="stylesheet">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body style="padding-top: 20px">
<div class="container">
<h2>Conversations.im Summer of Code 2018</h2>
<p class="lead">Conversations started out as an easy to use Jabber client for the Android platform but quickly became an umbrella project for all sorts of UX improvements to the XMPP ecosystem.</p>
<h3>Getting involved</h3>
<p>Conversations puts a lot of focus on <em>user experience</em> so we encourage you to become a <em>user</em> of XMPP first.<br>To become a user you need to:</p>
<ol>
<li>Download an XMPP client (<a href="https://conversations.im">Conversations</a><sup><small>1</small></sup> on Android and <a href="https://gajim.org">Gajim</a> on Windows and Linux)</li>
<li>Create an account on an XMPP server. For startes we recommend creating an account on the <em>conversations.im</em> server. In both Gajim and Conversations you can tick the checkbox <em>Create new account</em> during initial setup.</li>
</ol>
<p>After downloading a client and creating an account please join the conversations group chat (MUC) under the address: <a href="xmpp:[email protected]?join">xmpp:[email protected]?join</a>.</p>
<p><sup><small>1</small></sup> Conversations is not available for free on the PlayStore. However we wouldn’t ask potential applicants to buy the application. Instead either sideload it from the Open Source App Store <a href="https://f-droid.org/repository/browse%20/?fdid=eu.siacs.conversations">F-Droid</a>, build it <a href="https://github.com/siacs/Conversations">from source</a> or join with a different client first and ask for a promo code in the GSoC group chat, that will allow you to install the app for free from the Google PlayStore.</p>
<h3>Project Ideas</h3>
<p class="lead">Keep in mind that the following project ideas are just <em>ideas</em>. In general we are interested in anything that has the ability to improve the UX for end users and newcomers to XMPP. This doesn’t necessarily have to involve client development but can also be about aiding the user to pick the right server or about contact discovery.</p>
<h4>Turn Compliance Tester into Webservice</h4>
<ul>
<li><strong>Software Project:</strong> XMPP Compliance Tester</li>
<li><strong>Software URL:</strong> <a href="https://conversations.im/compliance">conversations.im/compliance/</a></li>
<li><strong>Software VCS:</strong> <a href="https://github.com/iNPUTmice/ComplianceTester">github.com/iNPUTmice/ComplianceTester</a></li>
<li><strong>Software Description:</strong> A tool totest XMPP servers for compatibility with various compliance suites.</li>
<li><strong>Brief explanation:</strong> Adding a server to the compliance tester overview is a rather complicated task. A server admin (or interested user) has to download the Compliance Tester, run it, and submit the result as a pull request on github. Afterwards a series of hacked together scripts will evaluate those results and create the overview page. This Google Summer of Code project is to create a webservice that will run the test automatially in certain intervals, store the test results in a database and dynamically create the overview page from that database.</li>
<li><strong>Required skills: </strong> Java, HTML, Basic XMPP knowledge</li>
<li><strong>Implementation Language:</strong> Java 8, Babbler XMPP library</li>
<li><strong>Contact details:</strong> [email protected]</li>
</ul>
<h4>Implement client-side MIX in Conversations</h4>
<ul>
<li><strong>Software Project:</strong> Conversations</li>
<li><strong>Software URL:</strong> <a href="https://conversations.im">conversations.im</a></li>
<li><strong>Software VCS URL:</strong> <a href="https://github.com/siacs/Conversations">github.com/siacs/Conversations</a></li>
<li><strong>Software Description</strong> Conversations is a state of the art mobile instant messaging client for Android. It provides a modern user experience and is on top of the current developments in XMPP standards.</li>
<li><strong>Brief explanation:</strong> MIX is the upcoming standard in group chats. This project would be one of the first implementations of this standard.</li>
<li><strong>Expected results:</strong>
<ul>
<li>Allow users to subscribe to MIX channels</li>
<li>Display users in a channel</li>
<li>Implement UI to create new channels</li>
</ul>
</li>
<li><strong>Difficulty:</strong> Moderate</li>
<li><strong>Implementation Language:</strong> Java/Android</li>
<li><strong>Contact Details:</strong> MUC at <a href="xmpp:[email protected]?join">[email protected]</a></li>
</ul>
<h4>Jingle encrypted A/V calling</h4>
<ul>
<li><strong>Software Project:</strong> Conversations</li>
<li><strong>Software URL:</strong> <a href="https://conversations.im">conversations.im</a></li>
<li><strong>Software VCS URL:</strong> <a href="https://github.com/siacs/Conversations">github.com/siacs/Conversations</a></li>
<li><strong>Software Description</strong> Conversations is a state of the art mobile instant messaging client for Android. It provides a modern user experience and is on top of the current developments in XMPP standards.</li>
<li><strong>Brief explanation:</strong> The ability to make voice and video calls is by far the most requested feature for Conversations. With Jingle there is a standard extension in XMPP to negoitate P2P audio and video sessions. Implementing video calls faces many challanges. Not only network and bandwidth wise but also UX wise.<br>Quite frankly this is a rather challenging project. We aim to actually merge the code that comes out of GSoC and we can't merge the code if the UX is bad (either because of too many edge case where it simply doesn’t work or because it looks terrible.)</li>
<li><strong>Expected results:</strong>
<ul>
<li>Make libwebrtc build in Conversations</li>
<li>Setup some basic A/V calls between two Conversations clients</li>
<li>Translate the SDP output of libwrtc to Jingle syntax</li>
<li>(Re)negoitae the session on network switches or screen rotations</li>
<li>Implement a great accept call and call UI</li>
</ul>
</li>
<li><strong>Difficulty:</strong> Very hard</li>
<li><strong>Implementation Language:</strong> Java/Android</li>
<li><strong>Contact Details:</strong> MUC at <a href="xmpp:[email protected]?join">[email protected]</a></li>
</ul>
<h4>Add OMEMO support to Babbler</h4>
<ul>
<li><strong>Software Project:</strong> Babbler</li>
<li><strong>Software URL:</strong> <a href="https://sco0ter.bitbucket.io/babbler/?">sco0ter.bitbucket.io/babbler/?</a></li>
<li><strong>Software VCS URL:</strong> <a href="https://bitbucket.org/sco0ter/babbler/src">bitbucket.org/sco0ter/babbler/src</a></li>
<li><strong>Software Description</strong> Babbler is a young XMPP client library for Java SE 8 based on JAXB as XML processing technology.</li>
<li><strong>Brief explanation:</strong> Add support for the OMEMO encryption to Babbler</li>
<li><strong>Expected results:</strong>
<ul>
<li>Being able to send e2ee messages back and forth with other OMEMO implementations</li>
<li>Basic trust model. Ability to enable disable devices</li>
</ul>
</li>
<li><strong>Knowledge Prerequisite:</strong>
<ul><li>Java 8</li><li>JAXB</li><li>Ability to read and understand RFC’s and XEP’s</li><li>Awareness for security and crypto</li></ul>
</li>
<li><strong>Difficulty:</strong> Moderate</li>
<li><strong>Implementation Language:</strong> Java 8</li>
<li><strong>Teaser Task:</strong> Create a Babbler Extension that represents a OMEMO device list; Create a very minimal client that logs in, subscribes to the device list PEP node and prints the contents.</li>
<li><strong>Contact Details:</strong> MUC at <a href="xmpp:[email protected]?join">[email protected]</a></li>
</ul>
<h4>Add OMEMO support to Converse.js</h4>
<ul>
<li><strong>Software Project:</strong> Converse.js</li>
<li><strong>Software URL:</strong> <a href="https://conversejs.org/">conversejs.org</a></li>
<li><strong>Software VCS:</strong> <a href="https://github.com/jcbrand/converse.js">github.com/jcbrand/converse.js</a></li>
<li><strong>Software Description:</strong> Converse is an XMPP that runs in your browser written in pure JavaScript</li>
<li><strong>Brief explanation:</strong> Add support for the E2E encryption OMEMO. Can probably be based upon existing strophe <a href="https://github.com/Shokodemon/strophe-omemo">library</a></li>
<li><strong>Expected results:</strong>
<ul>
<li>Send and receive messages</li>
<li>Trust UI; Approve keys; Mark messages as trusted in UI</li>
</ul>
</li>
<li><strong>Knowledge Prerequisite:</strong>
<ul>
<li>JavaScript</li>
<li>Ability to read and understand RFCs and XEPs</li>
<li>Awareness for security and crypto</li>
</ul>
</li>
<li><strong>Contact Detail:</strong> MUC at <a href="xmpp:[email protected]?join">[email protected]</a></li>
</ul>
<h4>Add Audio/Video support to Converse.js</h4>
<ul>
<li><strong>Software Project:</strong> Converse.js</li>
<li><strong>Software URL:</strong> <a href="https://conversejs.org/">conversejs.org</a></li>
<li><strong>Software VCS:</strong> <a href="https://github.com/jcbrand/converse.js">github.com/jcbrand/converse.js</a></li>
<li><strong>Software Description:</strong> Converse is an XMPP that runs in your browser written in pure JavaScript</li>
<li><strong>Brief explanation:</strong> Add support for WebRTC-based Audio and Video calls. Can probably be based upon an existing strophe <a href="https://github.com/ESTOS/strophe.jingle">library</a></li>
<li><strong>Expected results:</strong>
<ul>
<li>Initiate Audio or Video calls within private and group chats</li>
</ul>
</li>
<li><strong>Knowledge Prerequisite:</strong>
<ul>
<li>JavaScript</li>
<li>Ability to read and understand RFCs and XEPs</li>
<li>Familiarity with WebRTC</li>
</ul>
</li>
<li><strong>Contact Detail:</strong> MUC at <a href="xmpp:[email protected]?join">[email protected]</a></li>
</ul>
<h4>Add OpenPGP for XMPP Instant Messaging support to Smack</h4>
<ul>
<li><strong>Software Project:</strong> Smack</li>
<li><strong>Software URL:</strong> <a href="https://igniterealtime.org/projects/smack/">https://igniterealtime.org/projects/smack/</a></li>
<li><strong>Software VCS URL:</strong> <a href="https://github.com/igniterealtime/Smack">https://github.com/igniterealtime/Smack</a></li>
<li><strong>Software Description</strong> Smack is a highly modular and portable open source XMPP client library written in Java for Android and Java (SE) VMs.</li>
<li><strong>Brief explanation:</strong> Add support for
the <a href="https://xmpp.org/extensions/xep-0374.html">OpenPGP for
XMPP Instant Messaging (XEP-0374)</a> encryption to Smack. This
includes the creation of a portable high-level OpenPGP library based
on existing low-level crytp libraries
like <a href="https://www.bouncycastle.org/">Bouncycastle</a>.</li>
<li><strong>Expected results:</strong>
<ul>
<li>Being able to send OpenPGP E2EE messages back and forth.</li>
<li>Basic trust models, including trust-on-first-use.</li>
</ul>
</li>
<li><strong>Difficulty:</strong> Hard</li>
<li><strong>Implementation Language:</strong> Android compatible Java 8</li>
<li><strong>Contact Details:</strong> MUC at <a href="xmpp:[email protected]?join">[email protected]</a></li>
</ul>
<h4>Add support for Entity Capabilities 2.0 to Smack</h4>
<!-- SMACK-792 -->
<ul>
<li><strong>Software Project:</strong> Smack</li>
<li><strong>Software URL:</strong> <a href="https://igniterealtime.org/projects/smack/">https://igniterealtime.org/projects/smack/</a></li>
<li><strong>Software VCS URL:</strong> <a href="https://github.com/igniterealtime/Smack">https://github.com/igniterealtime/Smack</a></li>
<li><strong>Software Description</strong> Smack is a highly modular and portable open source XMPP client library written in Java for Android and Java (SE) VMs.</li>
<li><strong>Brief
explanation:</strong> <a href="https://xmpp.org/extensions/xep-0390.html">Entity
Capabilities 2.0 (XEP-0390)</a> is an overhaul
of <a href="https://xmpp.org/extensions/xep-0115.html">Entity
Capabilities (XEP-0115)</a>, which provides an efficient way for
remote entities to signal their capabilities. This mechanism reduces
network traffic and speeds up most other protocols. In order to add
support for XEP-0390, the existing ServcieDiscoveryManger code must
be extended to support for plugable remote entity feature discovery
mechanisms.
<li><strong>Expected results:</strong>
<ul>
<li>Support for Entity Capabilities 2.0.</li>
<li>Extending the existing Service Discovery code to allow for plugable feature-cache mechanisms.</li>
</ul>
</li>
<li><strong>Difficulty:</strong> Moderate</li>
<li><strong>Implementation Language:</strong> Android compatible Java 8</li>
<li><strong>Contact Details:</strong> MUC at <a href="xmpp:[email protected]?join">[email protected]</a></li>
</ul>
<h4>Add support for XMPP over WebSocket to Smack</h4>
<ul>
<li><strong>Software Project:</strong> Smack</li>
<li><strong>Software URL:</strong> <a href="https://igniterealtime.org/projects/smack/">https://igniterealtime.org/projects/smack/</a></li>
<li><strong>Software VCS URL:</strong> <a href="https://github.com/igniterealtime/Smack">https://github.com/igniterealtime/Smack</a></li>
<li><strong>Software Description</strong> Smack is a highly modular and portable open source XMPP client library written in Java for Android and Java (SE) VMs.</li>
<li><strong>Brief explanation:</strong> WebSockets
(<a href="https://tools.ietf.org/html/rfc6455">RFC 6455</a>) are an
alternative way to establish a connection between a server and a
client. This project idea is about adding support
for <a href="https://tools.ietf.org/html/rfc7395">XMPP over
WebSocket (RFC 7395)</a> to Smack. The student needs to implement
a new `XMPPWebSocketConnection` which extends the existing
`XMPPConnection` interface. The resulting API must be compatible to
the existing Smack code and must also be usable on Android
devices.</li>
<li><strong>Expected results:</strong>
<ul>
<li>Being able to connect to XMPP services via WebSocket.</li>
<li>Definition of a WebSocket interface on top of the used
WebSocket libraries, allowing for differeet WebSocket
implementations.</li>
</ul>
</li>
<li><strong>Difficulty:</strong> Moderate</li>
<li><strong>Implementation Language:</strong> Android compatible Java 8</li>
<li><strong>Contact Details:</strong> MUC at <a href="xmpp:[email protected]?join">[email protected]</a></li>
</ul>
<h4>Dino: OMEMO improvements</h4>
<ul>
<li><strong>Software Project:</strong> Dino</li>
<li><strong>Software URL:</strong> <a href="https://dino.im">https://dino.im</a></li>
<li><strong>Software VCS URL:</strong> <a href="https://github.com/dino/dino">https://github.com/dino/dino</a></li>
<li><strong>Software Description</strong> Dino is a open-source chat client for the desktop. It aims to provide a clean user interface, reliable Jabber/XMPP experience and modern features while having the users privacy in mind.</li>
<li><strong>Brief explanation:</strong> The OMEMO encryption protocol allows to have forward-secret encrypted chats with multiple parties/devices on the XMPP network. Dino already includes a basic implementation of OMEMO, currently supporting simple encrypted two-person chats. However our OMEMO implementation lacks support for groupchats and still requires proper ways to verify keys of other users and manage trust in user keys. We'd like to use the "Blind trust before verification" model by default, with possibility to entirely disable blind trust for the paranoid.</li>
<li><strong>Relevant readings:</strong>
<ul>
<li><a href="https://xmpp.org/extensions/xep-0384.html">XEP-0384: OMEMO Encryption</a></li>
<li><a href="https://gultsch.de/trust.html">Blind Trust Before Verification</a></li>
</ul>
</li>
<li><strong>Expected results:</strong>
<ul>
<li>Allow to verify your own devices and keys of other users, maintain trust in local database.</li>
<li>Implement "Blind trust before Verification"</li>
<li>Notify the user about new own devices, asking for verification</li>
<li>Show message in conversation with user when they add a new device. Ask for verification if required.</li>
</ul>
</li>
<li><strong>Difficulty:</strong> Moderate</li>
<li><strong>Implementation Language:</strong> Vala</li>
<li><strong>Contact Details:</strong> MUC at <a href="xmpp:[email protected]?join">[email protected]</a></li>
</ul>
<h4>Dino: Message search</h4>
<ul>
<li><strong>Software Project:</strong> Dino</li>
<li><strong>Software URL:</strong> <a href="https://dino.im">https://dino.im</a></li>
<li><strong>Software VCS URL:</strong> <a href="https://github.com/dino/dino">https://github.com/dino/dino</a></li>
<li><strong>Software Description</strong> Dino is a open-source chat client for the desktop. It aims to provide a clean user interface, reliable Jabber/XMPP experience and modern features while having the users privacy in mind.</li>
<li><strong>Brief explanation:</strong> Dino displays messages as they come in and allows to go back in time as a user scrolls up. However, there is no way to search through messages. This project should add a UI to quickly and intuitively search through locally stored messages with the possibility to view the context of a result.</li>
<li><strong>Expected results:</strong>
<ul>
<li>Intuitive UI for searching through messages</li>
<li>Possibility to explore the context of a search result</li>
<li>Performant search</li>
</ul>
</li>
<li><strong>Difficulty:</strong> Moderate</li>
<li><strong>Implementation Language:</strong> Vala</li>
<li><strong>Contact Details:</strong> MUC at <a href="xmpp:[email protected]?join">[email protected]</a></li>
</ul>
<h4>Dino: On-boarding experience</h4>
<ul>
<li><strong>Software Project:</strong> Dino</li>
<li><strong>Software URL:</strong> <a href="https://dino.im">https://dino.im</a></li>
<li><strong>Software VCS URL:</strong> <a href="https://github.com/dino/dino">https://github.com/dino/dino</a></li>
<li><strong>Software Description</strong> Dino is a open-source chat client for the desktop. It aims to provide a clean user interface, reliable Jabber/XMPP experience and modern features while having the users privacy in mind.</li>
<li><strong>Brief explanation:</strong> When a user first starts Dino, they get to a screen informing them that there are no accounts, they can then get to a window that offers to add an account and then to a window where they can enter their JID and password. This procedure is neither fast, nor intuitive, nor does it handle errors or provide advanced options. The goal of this project is to rework the on-boarding experience. A student doing the project will have to design a viable user experience and decide about relevant features and how to present them. A student may extend this project by considering an XMPP easy-onboarding process.</li>
<li><strong>Relevant readings:</strong>
<ul>
<li><a href="https://xmpp.org/extensions/xep-0077.html">XEP-0077: In-Band Registration</a></li>
<li><a href="https://xmpp.org/extensions/xep-0389.html">XEP-0389: Extensible In-Band Registration</a></li>
<li><a href="https://wiki.xmpp.org/web/Easy_Onboarding">Easy onboarding</a></li>
<li><a href="https://xmpp.org/extensions/xep-0379.html">XEP-0379: Pre-Authenticated Roster Subscription</a></li>
</ul>
</li>
<li><strong>Expected results:</strong>
<ul>
<li>Account creation</li>
<li>Certificate error handling</li>
<li>Hostname and port configuration</li>
</ul>
</li>
<li><strong>Difficulty:</strong> Moderate</li>
<li><strong>Implementation Language:</strong> Vala</li>
<li><strong>Contact Details:</strong> MUC at <a href="xmpp:[email protected]?join">[email protected]</a></li>
</ul>
<h4>Dino: In-Band Real Time texting</h4>
<ul>
<li><strong>Software Project:</strong> Dino</li>
<li><strong>Software URL:</strong> <a href="https://dino.im">https://dino.im</a></li>
<li><strong>Software VCS URL:</strong> <a href="https://github.com/dino/dino">https://github.com/dino/dino</a></li>
<li><strong>Software Description</strong> Dino is a open-source chat client for the desktop. It aims to provide a clean user interface, reliable Jabber/XMPP experience and modern features while having the users privacy in mind.</li>
<li><strong>Brief explanation:</strong> Real-time text is text transmitted instantly while it is being typed or created. The recipient can immediately read the sender's text as it is written, without waiting. It allows text to be used as conversationally as a telephone conversation, including in situations where speech is not practical (e.g., environments that must be quiet, environments too noisy to hear, restrictions on phone use, situations where speaking is a privacy or security concern, and/or when participant(s) are deaf or hard of hearing).</li>
<li><strong>Relevant readings:</strong>
<ul>
<li><a href="https://xmpp.org/extensions/xep-0301.html">XEP-0301: In-Band Real Time Text</a></li>
</ul>
</li>
<li><strong>Expected results:</strong>
<ul>
<li>Allow users to exchange text as they type with other users and other compatible clients</li>
<li>Performant input and output (UI rendering wise and network wise)</li>
</ul>
</li>
<li><strong>Difficulty:</strong> Easy</li>
<li><strong>Implementation Language:</strong> Vala</li>
<li><strong>Contact Details:</strong> MUC at <a href="xmpp:[email protected]?join">[email protected]</a></li>
</ul>
<h3>Your application</h3>
<p class="lead">Thank you for your interest in participating in Google’s Summer of Code with conversations.im. Your application can be free form but should answer the following questions.</p>
<ul>
<li><strong>What made you choose <em>Conversations.im</em>?</strong></li>
<li><strong>What is your background?</strong> Have you been using XMPP before? Have you been involved with another open source community?</li>
<li><strong>Brief description of the project</strong></li>
<li><strong>Detailed description</strong> What do you expect to do over the summer? What are the deliverables?</li>
<li><strong>Why do you want to work on that project?</strong></li>
<li><strong>What inspires you?</strong> What other pieces of software do you look up to that can act as a inspiration for your project?</li>
<li><strong>How did you prepare for your project?</strong> What documents did you read? Did you do any prototypes that can prepare you for the project?</li>
<li><strong>What kind challanges do you expect?</strong> What potential problems do you expect to run into?</li>
<li><strong>How will you schedule your time?</strong> Give us a brief week-by-week summary of what you are planning to do</li>
<li><strong>Contact details</strong> What is your Jabber-ID? What is your email address?</li>
</ul>
</div>
</body>