Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
developers:gsoc:2015:ideas [2015/07/26 19:10] – deleted page nurupo | developers:gsoc:2015:ideas [2016/01/22 21:55] (current) – fixed mailto nurupo | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== GSoC 2015 Ideas ====== | ||
+ | See also: **[[developers: | ||
+ | |||
+ | ===== Ideas ===== | ||
+ | |||
+ | ==== Your Own Idea ==== | ||
+ | |||
+ | **Brief explanation**: | ||
+ | |||
+ | **Expected results**: To be determined. | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: You pick. | ||
+ | |||
+ | ===== Tox Core ===== | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ==== Offline messaging ==== | ||
+ | |||
+ | **Brief explanation: | ||
+ | |||
+ | 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**: | ||
+ | * Research and write a document explaining how you will do offline messages. | ||
+ | * Implement your work. | ||
+ | * Help client developers implement your work. | ||
+ | |||
+ | **Knowledge Prerequisite**: | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: [[User: | ||
+ | |||
+ | ==== Multiple device support ==== | ||
+ | |||
+ | **Brief explanation**: | ||
+ | |||
+ | **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**: | ||
+ | |||
+ | **Mentor**: [[User: | ||
+ | |||
+ | ==== QXR0YWNrIHRoZSBUb3ggTmV0d29yayAK ==== | ||
+ | |||
+ | **Brief explanation**: | ||
+ | < | ||
+ | WW91ciBnb2FsIHdpbGwgYmUgdG8gdHJ5IHRvIGJyZWFrIHRoZSBUb3ggbmV0d29yayBieSB3cml0 | ||
+ | aW5nIGNvZGUgdG8gYXR0YWNrIGl0LiBGb3IgZXhhbXBsZSwgdHJ5IHRvIGZsb29kIHRoZSBuZXR3 | ||
+ | b3JrIHdpdGggYm9ndXMgcGFja2V0cywgYXR0ZW1wdCB0byBkaXNydXB0IHRoZSBuZXR3b3JrIGJ5 | ||
+ | IGNyZWF0aW5nIGxhcmdlIGFtb3VudHMgb2YgZ2FyYmFnZSBwZWVycywgZXRjLiBZb3UgY2FuIGVp | ||
+ | dGhlciB0cnkgdG8gY29tZSB1cCB3aXRoIHlvdXIgb3duIHdheXMgdG8gYXR0YWNrIHRoZSBuZXR3 | ||
+ | b3JrIG9yIGFzayB5b3VyIG1lbnRvciBmb3IgaWRlYXMuICAK | ||
+ | </ | ||
+ | |||
+ | **Expected results**: | ||
+ | * V3JpdGUgY29kZSB0aGF0IGF0dGFja3MgdGhlIFRveCBuZXR3b3JrLiAK | ||
+ | * VHJ5IHRvIGZpbmQgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSBUb3ggbmV0d29yay4K | ||
+ | * SGVscCBmaXggZGlzY292ZXJlZCBpc3N1ZXMuICAK | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: aXJ1bmdlbnRvbyAK | ||
+ | |||
+ | ===== Tox4j ===== | ||
+ | |||
+ | [[developers: | ||
+ | |||
+ | <WRAP center round important 40%> | ||
+ | **Important: | ||
+ | </ | ||
+ | |||
+ | 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, | ||
+ | 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, | ||
+ | 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: | ||
+ | * If you do not understand the idea, but think that you might be interested, please come and talk to us on [[users: | ||
+ | * We want to see that you put some thought into the project, you have a rough idea of what it entails, and that you understand the project idea written on this page. We have put a lot of thought into the idea, so we would like to see you spend some time thinking about it, as well. We do not want to see something that is essentially a copy of the idea, reworded a little. | ||
+ | * Don't write large amounts of text saying nothing with a lot of words. We're not a university, so we don't grade you based on word count. Be precise and to the point. | ||
+ | * Structure your text with headings in bold. Preferably copy the wording from the [[developers: | ||
+ | * Run a spelling checker. We don't mind if your English is not grammatically perfect, but running it through a spelling checker is the least you can do. | ||
+ | |||
+ | **Furthermore: | ||
+ | * We are very interested in relevant skills. These include functional programming, | ||
+ | * We are not very interested in your ability to cough up buzzwords, so filling your proposal with Enterprise Service Bus, JavaBeans and other corporate transportation or coffee-related words will not help. | ||
+ | * If you can, try to come up with an approximate timeline for your project. | ||
+ | |||
+ | **Criteria: | ||
+ | |||
+ | What we are (ideally) looking for in students. | ||
+ | |||
+ | * Technical skills | ||
+ | * Having adequate technical background to complete the project. | ||
+ | * Being able to quickly acquire new skills, learn new programming concepts, familiarise oneself with a foreign codebase. | ||
+ | * Communication skills | ||
+ | * Able to express your ideas and questions clearly and precisely. | ||
+ | * Comfortable discussing your ideas with other developers. | ||
+ | * Vision | ||
+ | * Having ideas that go beyond the ones listed on this page. | ||
+ | * Having ideas that go beyond GSoC. | ||
+ | * Be realistic in your proposal, but there is room for a " | ||
+ | * Ownership | ||
+ | * You feel that the project is yours, you stand behind it, you own it. | ||
+ | * Consequently, | ||
+ | |||
+ | **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**: | ||
+ | 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:// | ||
+ | * Friend lists: adding/ | ||
+ | * File transfers: state (paused, running, cancelled), meaning (avatar, inline image/ | ||
+ | * User profiles: managing user profiles, user-specific settings (global settings like autostart are out of scope) | ||
+ | * Chat logs: storage protocol, full text search, statistical data, ... | ||
+ | * Protocol implementation for communication with toxdns services (e.g. toxme.io) | ||
+ | * Custom Tox protocol extensions: e.g. location sharing, recommend friends, ... | ||
+ | |||
+ | //Examples of what the library will NOT do:// | ||
+ | * Actual file system I/O. It will expose an interface that the concrete client can implement to provide functionality such as creating, opening, and deleting files | ||
+ | * Direct user interaction. All communication goes through specific programming interfaces without human-readable information. The task of making human sense of the API is up to the client. (In particular this means internationalisation is done by the client, not by the library, although the language setting can be in the library). | ||
+ | * Audio/video frame gathering from devices. This is done by target-specific APIs (e.g. the Android SDK). | ||
+ | |||
+ | // | ||
+ | * It must take care of everything that isn't the interface. | ||
+ | * It must implement all the client logic, and only leave the most low-level implementation details (i.e. storage backend, database backend, audio/ | ||
+ | * It must be easily usable from Java. | ||
+ | * It must use only Java 6 library features (for Android compatibility). | ||
+ | * The design must account for testability. | ||
+ | * A simple GUI or Android client based on the library for demonstration purposes. | ||
+ | |||
+ | // | ||
+ | * Referential transparency for all functions: calling a function with the same argument twice needs to yield the same result, i.e. '' | ||
+ | * Every function must be total; the use of the Java '' | ||
+ | * The use of '' | ||
+ | * If a function is partial (i.e. it cannot return a valid output for every input), it can return an '' | ||
+ | * For every data structure (type), there must be a generator function that creates a random valid instance of that data structure. This will be used in property-based testing. | ||
+ | * Correct by construction: | ||
+ | * "No raw ints": The use of '' | ||
+ | * "No raw loops": | ||
+ | * "No raw getters": | ||
+ | * "No string-typing": | ||
+ | * Small specific functions: Write small, independent functions that perform a single small task. If a function is larger than a single screen (~50 lines), it's probably doing too much work. | ||
+ | |||
+ | // | ||
+ | * It should be written in Scala. | ||
+ | * It should be incorporated into the main tox4j repository. | ||
+ | * The implementation should be well-tested. Use a combination of property-based testing and unit tests to increase confidence. | ||
+ | |||
+ | // | ||
+ | * http:// | ||
+ | * https:// | ||
+ | |||
+ | **Expected results**: | ||
+ | * Have a working high level Tox client library for the JVM. | ||
+ | * At least milestone 4 achieved. | ||
+ | |||
+ | **Milestones**: | ||
+ | - Design document (possible collaboration with Android client). | ||
+ | - User information setting/ | ||
+ | - Buddy list and message sending. | ||
+ | - Storage and database backends. | ||
+ | - File transfers. | ||
+ | - Simple Android or desktop GUI app. | ||
+ | |||
+ | **Knowledge Prerequisite**: | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: [[iphydf@gmail.com|iphy]] | ||
+ | |||
+ | ==== New Android client ==== | ||
+ | |||
+ | **Brief explanation**: | ||
+ | |||
+ | Since the " | ||
+ | |||
+ | // | ||
+ | * It must use the High Level Client Library. | ||
+ | |||
+ | // | ||
+ | * It should be written in Scala using [[https:// | ||
+ | * It should be tested using a UI testing framework. | ||
+ | |||
+ | // | ||
+ | * http:// | ||
+ | * Search for any of the words on the above website using your favourite search engine. | ||
+ | |||
+ | **Expected results**: | ||
+ | * Have a working Android client for Tox. | ||
+ | |||
+ | **Milestones**: | ||
+ | - Design document (collaboration with HLAPI). | ||
+ | - UI mockup (any format permitted: can be PDF, HTML+CSS+JS, | ||
+ | - UI implementation (on Android). | ||
+ | - Data store and other platform specific APIs [[http:// | ||
+ | - Buddy list, messaging, etc. working. | ||
+ | - Audio/video working. | ||
+ | |||
+ | **Knowledge Prerequisite**: | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: [[iphydf@gmail.com|iphy]] | ||
+ | |||
+ | ==== Implementation of a ToxCore mock ==== | ||
+ | |||
+ | **Brief explanation**: | ||
+ | |||
+ | 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, | ||
+ | |||
+ | 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 | ||
+ | * Get an executable specification of the ToxCore API definition. | ||
+ | * To achieve reproducible test results in the HLAPI (see above) tests. | ||
+ | * To speed up our tests by eliminating network setup time. | ||
+ | |||
+ | Requirements: | ||
+ | * May use any JVM language. | ||
+ | * Must behave like a real Tox instance in an ideal network situation. | ||
+ | * Must support creating multiple instances that can communicate with each other. | ||
+ | * Optional: simulate different network situations. | ||
+ | * Optional: ToxAv mock in addition to the core mock. | ||
+ | |||
+ | Design restrictions: | ||
+ | * The behavioural model must be separate from the execution model. | ||
+ | * The behaviour must be modelled as directed (cyclic) graph. | ||
+ | * The program state must support checkpointing and detailed transition tracking. | ||
+ | |||
+ | **Expected results**: | ||
+ | * All tests that succeed with the real implementation also succeed with the mock. | ||
+ | * All tests that currently time out no longer time out. | ||
+ | * For the student to pass, milestone 3 must be achieved. Milestones after 3 are optional. | ||
+ | |||
+ | **Milestones**: | ||
+ | - Single-client non-network tests work. | ||
+ | - Bootstrap tests work. | ||
+ | - Messaging tests work. | ||
+ | - File transfer tests work. | ||
+ | - ToxAv mock: audio/video tests work. | ||
+ | |||
+ | **Knowledge Prerequisite**: | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: [[iphydf@gmail.com|iphy]] | ||
+ | |||
+ | ===== qTox ===== | ||
+ | |||
+ | [[clients: | ||
+ | |||
+ | ==== Usability cleanup ==== | ||
+ | |||
+ | **Brief Explanation**: | ||
+ | |||
+ | * Overhauling the audio input and output code; potentially using some uTox code. Experience with OpenAL is preferred. | ||
+ | * Overhauling the video input and output code, and friendly interaction with web cams. Perhaps some uTox code can be used. Experience with OpenCV preferred. | ||
+ | * Chatform improvements: | ||
+ | * Screenshot button: Implement a screenshot button that allows users to image a select portion of their screen without resorting to using external photo editors. This will require the use of the Windows, Mac OS X, X11, and possibly Wayland and/or Mir APIs. | ||
+ | * Desktop and operating system integration. All the OSs that qTox support have their own APIs for doing neat things that users expect, such as desktop notifications, | ||
+ | * General bug fixes. There' | ||
+ | |||
+ | **Knowledge Prerequisite**: | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: bunslow (aka Dubslow) < | ||
+ | |||
+ | 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, | ||
+ | |||
+ | **Proposals**: | ||
+ | |||
+ | * Are you familiar with Qt and C++? If so, please mention and link past work. | ||
+ | * Do you have experience with either or both of OpenAL/ | ||
+ | * If you don't have experience, are you capable of learning large, new APIs quickly and effectively? | ||
+ | * Have you worked on a team before, either in the libre/open source world, or in an office/ | ||
+ | |||
+ | ==== Multimedia Streaming ==== | ||
+ | |||
+ | **Brief Explanation**: | ||
+ | |||
+ | **Expected Results**: | ||
+ | * qTox allows selecting arbitrary combinations of media files, webcams, and desktop, as video sources to composite and stream into one-to-one- and group- calls | ||
+ | * qTox provides a graphical interface to arrange the feeds spatially | ||
+ | * qTox provides an in-call interface for managing the playback of media files selected as sources | ||
+ | |||
+ | Note that there is at least one open source/ | ||
+ | |||
+ | **Knowledge Prerequisite**: | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: TBA | ||
+ | |||
+ | ==== Native OS X API support ==== | ||
+ | |||
+ | **Brief Explanation**: | ||
+ | |||
+ | **Expected Results**: | ||
+ | * qTox supports standard OS X badges | ||
+ | * qTox supports NSStatusbar | ||
+ | * qTox supports other native OS X features as the student and mentor see fit | ||
+ | |||
+ | **Knowledge Prerequisite**: | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: Sean < | ||
+ | |||
+ | ===== uTox ===== | ||
+ | |||
+ | [[clients: | ||
+ | |||
+ | ==== Android port ==== | ||
+ | |||
+ | **Brief explanation**: | ||
+ | |||
+ | **Expected results**: | ||
+ | * Port all the unported uTox functionality to Android. | ||
+ | * Improve usability on Android. | ||
+ | |||
+ | **References**: | ||
+ | |||
+ | **Knowledge Prerequisite**: | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: [[User: | ||
+ | |||
+ | ==== Windows Improvements ==== | ||
+ | |||
+ | **Brief explanation**: | ||
+ | |||
+ | **Expected results**: | ||
+ | * Improve usability on Windows. | ||
+ | * Make uTox a better client. | ||
+ | |||
+ | **Knowledge Prerequisite**: | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: [[User: | ||
+ | |||
+ | ===== ToxMe ===== | ||
+ | |||
+ | [[developers: | ||
+ | |||
+ | ==== Major improvements ==== | ||
+ | |||
+ | **Brief explanation**: | ||
+ | |||
+ | **Tips:** Being Python, it's fairly easy to underestimate how much work is actually required. | ||
+ | |||
+ | **Expected results**: | ||
+ | * Switch toxme to a new replicating DB | ||
+ | * Find a way to transfer data between the existing sqlite db and it | ||
+ | * Safely add support for location/ | ||
+ | * Work out a way to validate and correct user supplied info (email, checking and fixing locations, etc) | ||
+ | * Design a UI and a backend to search through this data based on user privacy settings | ||
+ | * If time permits work out a Tox bot to do authentication/ | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: Sean < | ||
+ | |||
+ | ===== Antidote ===== | ||
+ | |||
+ | [[clients: | ||
+ | |||
+ | ==== Audio and video support ==== | ||
+ | |||
+ | **Brief explanation**: | ||
+ | |||
+ | **Expected results**: | ||
+ | * Add toxav support to the Objective C bindings | ||
+ | * Implement 1 on 1 audio calling | ||
+ | * Implement 1 on 1 video chats | ||
+ | * implement ringtones and audio notifications for calls | ||
+ | * Optional: Implement group audio chats | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: Dvor < | ||
+ | |||
+ | ===== Toxic ===== | ||
+ | |||
+ | [[clients: | ||
+ | |||
+ | ==== Video support ==== | ||
+ | |||
+ | **Brief explanation**: | ||
+ | |||
+ | **Expected results**: | ||
+ | * Make Toxic work with the video portion of libtoxav | ||
+ | * Access the webcam in a platform agnostic way | ||
+ | * Display an X window to show the streamed video of the other recipient if requested | ||
+ | * Work our how to best take a video frame and display it on a terminal. | ||
+ | * Integrate this in to the Toxic UI | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: mannol < | ||
+ | |||
+ | ===== Other ===== | ||
+ | |||
+ | ==== Modular library for platform-dependent audio, video and desktop capture ==== | ||
+ | |||
+ | **Brief explanation**: | ||
+ | |||
+ | **Expected results**: Although the goal of this library is to implement native audio/ | ||
+ | |||
+ | * Implement video and audio capture for Windows and OS X | ||
+ | |||
+ | **References**: | ||
+ | |||
+ | **Knowledge Prerequisite**: | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: [[User: | ||
+ | |||
+ | ==== SuperTox ==== | ||
+ | |||
+ | **Brief explanation**: | ||
+ | |||
+ | **Expected results**: | ||
+ | * Multiplayer game that shows off how good toxcore is at dealing with networking. | ||
+ | * Video game should have at least one mode where players can compete against each other. | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: [[User: | ||
+ | |||
+ | ==== Tox for Windows ==== | ||
+ | |||
+ | **Brief explanation**: | ||
+ | |||
+ | **Expected results**: | ||
+ | * A proper modern UI client | ||
+ | |||
+ | **Knowledge Prerequisite**: | ||
+ | * Familiarity with C# and the .NET framework in general. | ||
+ | * Experience with WPF or Windows.UI.Xaml (not required, but welcome). | ||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: [[User: | ||
+ | |||
+ | ==== New Tox Client ==== | ||
+ | |||
+ | **Brief explanation**: | ||
+ | |||
+ | **Expected results**: | ||
+ | * Working Native Tox Client | ||
+ | |||
+ | **Difficulty**: | ||
+ | |||
+ | **Mentor**: [[User: |