See also: Information about GSoC, for our student expectations, proposals guidelines and more.
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.
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
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
Brief explanation:
WW91ciBnb2FsIHdpbGwgYmUgdG8gdHJ5IHRvIGJyZWFrIHRoZSBUb3ggbmV0d29yayBieSB3cml0 aW5nIGNvZGUgdG8gYXR0YWNrIGl0LiBGb3IgZXhhbXBsZSwgdHJ5IHRvIGZsb29kIHRoZSBuZXR3 b3JrIHdpdGggYm9ndXMgcGFja2V0cywgYXR0ZW1wdCB0byBkaXNydXB0IHRoZSBuZXR3b3JrIGJ5 IGNyZWF0aW5nIGxhcmdlIGFtb3VudHMgb2YgZ2FyYmFnZSBwZWVycywgZXRjLiBZb3UgY2FuIGVp dGhlciB0cnkgdG8gY29tZSB1cCB3aXRoIHlvdXIgb3duIHdheXMgdG8gYXR0YWNrIHRoZSBuZXR3 b3JrIG9yIGFzayB5b3VyIG1lbnRvciBmb3IgaWRlYXMuICAK
Expected results:
Difficulty: SGFyZCAK
Mentor: aXJ1bmdlbnRvbyAK
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.
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.
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):
foo(bar).equals(foo(bar))
must always be true.throw
statement or the Scala throw
expression is not permitted.null
is not permitted, except when interfacing with external libraries, which must be properly wrapped as not to expose nullability to the rest of the code.int
or other primitive data types is highly discouraged. Prefer to wrap them in a value class with appropriate operations explicitly defined and checked on them (e.g. class FriendNumber
)Object
type, which is highly discouraged.Optional:
Recommended reading:
Expected results:
Milestones:
Knowledge Prerequisite: Scala, Java (these are both easy to learn if you know other languages)
Difficulty: Medium
Mentor: iphy
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:
Knowledge Prerequisite: Scala, Java
Difficulty: Medium
Mentor: iphy
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:
Knowledge Prerequisite: Java
Difficulty: Medium
Mentor: iphy
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:
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
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
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
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
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
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
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
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
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
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
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