Table of Contents

GSoC 2015 Ideas

See also: Information about GSoC, for our student expectations, proposals guidelines and more.

Ideas

Your Own Idea

Brief explanation: You have read this entire page, played a bit with Tox and thought of a super interesting Tox-related project idea that isn't on this page and on which you would like to work during this summer? Come to our IRC and tell it to us, we'll help you work out potential issues and help you improve your proposals. They might even be better than the ideas we've suggested here!

Expected results: To be determined.

Difficulty: You decide.

Mentor: You pick.

Tox Core

Project link.

Offline messaging

Brief explanation: While Tox comes along, a lot of minor issues requiring a good bit of work remain. Quite a few popular messaging programs like Skype and Hangouts implement real offline messaging, where 1 person can send a message while the other is offline and then go offline and the other friend will get it. These programs are able to do it because of central servers, but the nature of Tox being a distributed network means we lose this option.

Your task would be to figure out a safe and sane solution to doing real offline messaging in a decentralized way and implement it.

Expected results:

Knowledge Prerequisite: C, distributed networks, writing secure code

Difficulty: Hard (Be aware that while this may sound easy, the actual work required to get this in to action is substantial)

Mentor: irungentoo

Multiple device support

Brief explanation: Toxcore currently suffers from a number of serious issues when 2 Tox objects are used at once on the distributed network. Your task would be to research and implement secure ways of sharing data like secret keys, friends, and chats while making toxcore deal with the same peer having presence in multiple locations seamlessly.

Expected results: * Research ways of securely trading private data with peers (or whatever way of sharing identities you may have) * Implement a way of ensuring a peer can seamlessly appear in multiple locations without issue. * Implement a way of sharing data like friends and chat logs between either the same peer or multiple peers. (Based on step 1)

Difficulty: Medium

Mentor: irungentoo

QXR0YWNrIHRoZSBUb3ggTmV0d29yayAK

Brief explanation:

WW91ciBnb2FsIHdpbGwgYmUgdG8gdHJ5IHRvIGJyZWFrIHRoZSBUb3ggbmV0d29yayBieSB3cml0
aW5nIGNvZGUgdG8gYXR0YWNrIGl0LiBGb3IgZXhhbXBsZSwgdHJ5IHRvIGZsb29kIHRoZSBuZXR3
b3JrIHdpdGggYm9ndXMgcGFja2V0cywgYXR0ZW1wdCB0byBkaXNydXB0IHRoZSBuZXR3b3JrIGJ5
IGNyZWF0aW5nIGxhcmdlIGFtb3VudHMgb2YgZ2FyYmFnZSBwZWVycywgZXRjLiBZb3UgY2FuIGVp
dGhlciB0cnkgdG8gY29tZSB1cCB3aXRoIHlvdXIgb3duIHdheXMgdG8gYXR0YWNrIHRoZSBuZXR3
b3JrIG9yIGFzayB5b3VyIG1lbnRvciBmb3IgaWRlYXMuICAK

Expected results:

Difficulty: SGFyZCAK

Mentor: aXJ1bmdlbnRvbyAK

Tox4j

Project link.

Important: please register on the mailing list and send your questions to the GSoC address.

Also, please read the following section before submitting a proposal.

General expectations for Tox4j projects

Since every mentor for different projects may have different expectations, this section describes some of the expectations the Tox4j team has regarding applications directed at it. These are mostly guidelines, and not following them is not a death sentence to your proposal. We are open to discussion. If you feel any of these guidelines are unreasonable, please let us know on the mailing list or in a private email to the mentor.

We want to give every proposal a fair amount of thought, so please try and make our life easier; it can only benefit you.

Important:

Furthermore:

Criteria:

What we are (ideally) looking for in students.

Last but not least:

Stay tuned for changes to this wiki page. We regularly add new information here if we feel that it could benefit all students. We want to give everybody equal chances, so we do our best to share information widely.

High level client library

Brief explanation: Design and implement a high level library (HLAPI) based on tox4j targeting the JVM. The idea here is to create a fat layer of logic between the low level API and the concrete client implementation.

Among its responsibilities are:

Examples of what the library will NOT do:

Required:

Design/implementation guidelines (exceptions will be made for certain components that can't comply, but the majority of the code should follow them):

Optional:

Recommended reading:

Expected results:

Milestones:

  1. Design document (possible collaboration with Android client).
  2. User information setting/retrieval.
  3. Buddy list and message sending.
  4. Storage and database backends.
  5. File transfers.
  6. Simple Android or desktop GUI app.

Knowledge Prerequisite: Scala, Java (these are both easy to learn if you know other languages)

Difficulty: Medium

Mentor: iphy

New Android client

Brief explanation: Design and implement an Android client based on the above-listed high level API. This project is largely independent of the high level API project, but requires the two students to closely collaborate on the API design.

Since the “working” part of this project depends on the implementation of the HLAPI, this is not a strict requirement for the student to pass. However, the UI must function correctly, and must perform the right calls into the HLAPI. This project will not implement any of the things mentioned above in the HLAPI idea.

Required:

Optional:

Recommended reading:

Expected results:

Milestones:

  1. Design document (collaboration with HLAPI).
  2. UI mockup (any format permitted: can be PDF, HTML+CSS+JS, actual Android code, etc.).
  3. UI implementation (on Android).
  4. Data store and other platform specific APIs adapted for consumption by HLAPI.
  5. Buddy list, messaging, etc. working.
  6. Audio/video working.

Knowledge Prerequisite: Scala, Java

Difficulty: Medium

Mentor: iphy

Implementation of a ToxCore mock

Brief explanation: Create a full implementation of the ToxCore interface without networking.

Currently, our tests rely on the toxcore C library to establish a network connection between two instances by performing LAN discovery. This is a fragile process that can take anywhere between 4 and 10 seconds. After that, friend connections need to be established, which takes another 4-10 seconds. Even with a generous timeout of 60 seconds, some of our tests occasionally time out, because toxcore got confused or due to random network issues.

The tests currently take anywhere between 20 and 40 minutes, if they are ran in parallel (this sometimes confuses toxcore, causing it to never establish a connection, thus exceeding the 60 second timeout). Running them sequentially takes over 1 hour.

The purpose of this project is

Requirements:

Design restrictions:

Expected results:

Milestones:

  1. Single-client non-network tests work.
  2. Bootstrap tests work.
  3. Messaging tests work.
  4. File transfer tests work.
  5. ToxAv mock: audio/video tests work.

Knowledge Prerequisite: Java

Difficulty: Medium

Mentor: iphy

qTox

Project link.

Usability cleanup

Brief Explanation: Tox is meant to be user friendly to the average and less-than-average computer literate user. qTox needs a lot of touch ups, bug fixes, UI improvements, and feature parity with both Skype and uTox. This summer-long project will entail multiple sub projects of varying difficulties and required skills, such as:

Knowledge Prerequisite: Experience with C++ and Qt is a prerequisite for all the above tasks. qTox supports GNU-Linux, Mac OS X and Windows equally, so writing cross platform code is also a must. These requirements are in addition to the preferred (but not necessarily requisite) experience above.

Difficulty: Medium

Mentor: bunslow (aka Dubslow) bunslow@tox.im, tux3

Although that may seem like a lot for one student over the course of a summer, some progress is expected to be made between now and summer. Additionally, together with the following qTox project, there may well be two students working on qTox simultaneously.

Proposals: The ideas above are only a starting point for your proposal; after you review qTox and its code, you will likely have other things you think need to be fixed as well. Your proposal should specify what you intend to fix, drawing from both the ideas above and your own experience and opinions. In addition to the questions listed here, I'd like you to answer the following questions:

Multimedia Streaming

Brief Explanation: A student will enable users to stream their webcams, an area of their screen, or any media file, composited and arranged as the user wishes. Tox is a pipe that media flows through and we will allow the user to take advantage of this and come up with uses we could never dream of, rather than restricting users to a few predetermined use-cases.

Expected Results:

Note that there is at least one open source/libre software project that provides similar features, namely OBS MultiPlatform. It may well be possible to borrow code from or collaborate with that project.

Knowledge Prerequisite: Qt, multimedia framework

Difficulty: Hard

Mentor: TBA

Native OS X API support

Brief Explanation: While qTox works well on OS X, it lacks a lot of features like toolbar support, badges support, etc. These features and many other features that would make qTox even more enjoyable on OS X are all well documented and supported by Qt via the QtMacExtras package and other OS X APIs like CoreFoundation. While a student would be required to own a Mac, getting started with Qt Creator and working on qTox has a fairly low learning curve as many of the complexities of C++ are abstracted and made easier by Qt libraries itself.

Expected Results:

Knowledge Prerequisite: Qt, C++, OS X

Difficulty: Easy

Mentor: Sean sean@tox.im

uTox

Project link.

Android port

Brief explanation: The original author of uTox ported uTox to Android as an experiment, however that port is far from complete. The code for this experimental Android port lies dormant in the uTox codebase waiting for someone to use it to turn uTox into an Android application that is actually usable. The difficulty of this lies in the fact that uTox is a C program and most of the Android APIs are Java.

Expected results:

References: Android specific code Latest apk

Knowledge Prerequisite: C, Java, Android.

Difficulty: Nightmare

Mentor: irungentoo

Windows Improvements

Brief explanation: Your job will be to improve support and usability on Windows. There are a lot of improvements to do to make uTox integrate well in Windows. Some examples are adding features such as start on boot and doing that fancy file transfer thing with the taskbar when transferring files (copy a file somewhere on Windows 7+ and look at the taskbar, that's what I mean).

Expected results:

Knowledge Prerequisite: C, Windows API

Difficulty: Medium

Mentor: irungentoo

ToxMe

Project link.

Major improvements

Brief explanation: A lot of the initial design of toxme was rushed and not as complete as we like. Because of this, stuff like overaggressive caching makes it hard to distribute and searching lacks features like lookups by location and email. Your task would be to fix this from the ground up, replacing sqlalchemy with a proper replicating database, adding entries like location and email, and implementing searching.

Tips: Being Python, it's fairly easy to underestimate how much work is actually required.

Expected results:

Difficulty: Medium

Mentor: Sean sean@tox.im

Antidote

Project link.

Audio and video support

Brief explanation: Your task would be to work with its maintainer to implement audio and video chats with our desktop clients.

Expected results:

Difficulty: Medium

Mentor: Dvor d@dvor.me

Toxic

Project link.

Video support

Brief explanation: With this idea the student would implement full video chats from both an external window or rendered on the terminal. Please be aware that this isn't particularly difficult, but it will require a lot of trial and error figuring out how best to render a video frame on a command line.

Expected results:

Difficulty: Easy

Mentor: mannol mannol@tox.im

Other

Modular library for platform-dependent audio, video and desktop capture

Brief explanation: Although there are good libraries for crossplatform audio capture, it looks like there is no single library that provides good crossplatform video capture, not even mentioning desktop capture, so all Tox clients have to implement their own ways of doing these things. (For video capturing, libraries such as GStreamer, OpenCV and QtMultimedia were considered, but all of them fail short in some aspect). By writing a library that would do audio, video and desktop capture, it would ease the burden of developing the same thing over and over in clients, as well as push client developers to improve the library if they find something missing in the library, making this feature available to everyone using the library.

Expected results: Although the goal of this library is to implement native audio/video/desktop capture for Windows/OS X/Linux, it's a too big task for GSoC, so we have prioritized some specific platforms and features.

References: A work in progress specification of what the library should be able to do and what back-ends we'd like it to use.

Knowledge Prerequisite: C/C++, Obj-C. It's required to have at least two webcams, Windows 7 or newer and OS X 10.7 or newer. Knowledge of library development and familiarity with Windows API and OS X API are not required, but welcome.

Difficulty: Hard

Mentor: nurupo, tux3, irungentoo

SuperTox

Brief explanation: Write a multiplayer game or add multiplayer support to an existing open source one using Toxcore for the networking. This video game should also have a competitive mode that can be used by devs to settle their differences. If you choose this idea, we ask that you come speak to us via IRC before submitting your proposal.

Expected results:

Difficulty: Medium

Mentor: irungentoo

Tox for Windows

Brief explanation: Write a Tox client in preferably C# using SharpTox that follows all Modern UI best practices and conforms to the modern feel and styling of Windows 8+ applications. Please make sure this is a real native application that would support modern UI features like proper snapping, OSK support, ETC. You're also expected to make use of as many features from the core library as possible. Not only standard features like one to one conversations are expected to be implemented, but also audio/video and groupchats.

Expected results:

Knowledge Prerequisite:

Difficulty: Depends

Mentor: Impyy impyy@tox.im

New Tox Client

Brief explanation: If you own a device that Tox isn't usable on yet and you want to make a native client for it or if you think all our clients suck, this idea is for you. If you choose this idea, we ask that you come speak to us via IRC before submitting your proposal.

Expected results:

Difficulty: Depends

Mentor: irungentoo