Google Summer of Code 2015 Ideas Page - Manak-org/Manak GitHub Wiki

#Student Guidelines

  • The following ideas list is ranked based on significance and near future requirements of Manak.
  • Each idea is associated with a prospective mentor along with his nick on Gitter and IRC. The email id of the mentor is also given so that students can get in touch, even if the mentor isn't available online at the moment.
  • Secondary mentor is also provided in case mentor takes a short leave during coding period. In such a scenario secondary mentor will guide the students during that leave.
  • Students please note that, subject of any mail should be specifically stated, 'GSOC 2015 ' followed by the idea number and the type of the query. In such a scenario, the mentor is obliged to reply under 12 hours.
  • Students are encouraged to build on the following ideas however a new idea will be treated with equal importance as long as it looks forward to the goals of Manak.
  • New ideas can be discussed with Sumedh Ghaisas(IRC: sumedhghaisas, Gitter:sumedhghaisas, E-Mail: [email protected]). The subject of such interactions should be 'GSOC 2015 ' followed by the title.
  • Each idea provides at least 1 GitHub issue where students can take part in the active development.

#Proposal Guidelines

  • Check out [GSOC 2015 Proposal Template](GSOC 2015 Proposal Template).
  • Student are allowed to add stuff to the proposal as long as they provide the information stated in the template.
  • We, as developers know that it is very difficult to predict the timeline before starting the project but we still encourage students to provide a tentative timeline(reflects planning skills). Tentative timeline improves coordination between mentor and student, and helps with evaluations.

#Ideas List

    1. [Adding Memory Usage Statistics to Manak](#Adding Memory Usage Statistics to Manak) Difficulty: High
    1. [Improvement of Testing Framework](#Improvement of Testing Framework) Difficulty: Medium
    1. [Responsive Output Generation](#Responsive Output Generation) Difficulty: Easy
    1. [Multithreading Support for Manak](#Multithreading Support for Manak) Difficulty: Hard
    1. [Adding Support for Fixtures](#Adding Support for Fixtures) Difficulty: Medium
    1. [Compiler Like Output for Testing Framework](#Compiler Like Output for Testing Framework) Difficulty: Easy

##1. Adding Memory Usage Statistics to Manak ###Brief Explanation:
Currently a unit in Manak can time and test the code, but it would be nice to incorporate the memory consumption stats of each unit. When 2 implementations passes all the tests, they can be compared against each other with the comparison framework given in Manak, but the comparison currently is only based on time measurements. But In some situation the memory consumption is a deciding factor. Taking inspiration from Valgrind which tracks every assigned memory, Manak would like to start with computing total memory usage of every benchmark and test case. ###Referenced GitHub Issue(s): #2 ###Useful Links:

###Knowledge Prerequisite: A very good command over C++ language ###Expected Results: Memory consumption stats for each case in Manak ####Difficulty: High ####Prospective Mentor: Sumedh Ghaisas(IRC: sumedhghaisas, Gitter:sumedhghaisas, E-Mail: [email protected]) ####Secondary Mentor: Nishant Mal(E-Mail: [email protected])

##2. Improvement of Testing Framework ###Brief Explanation:
The current testing framework of Manak is very basic and offers very litte options for users. It would be better to provide wide variety of usefull macros which can print better failure messages. The referenced GitHub issues provides some starting points. The other thing the testing framework is lacking is environment setup, like to catching core c++ exception and maybe even segfaults. The provided links may be helpful in understanding how to do it, but still the major work remains in integrating it with the current framework. Any more useful improvements will be happily accepted. ###Referenced GitHub Issues: #19, #18, #17 ###Useful Links:

###Knowledge Prerequisite: Understanding of C++ Exception Handling as the entire project will be based on it. ###Expected Results:

  • WARNING and COMPARISON macros implemented completely(to be least)
  • Give verbose errors on core exception and segfaults

####Difficulty: Medium ####Prospective Mentor: Sumedh Ghaisas(IRC: sumedhghaisas, Gitter:sumedhghaisas, E-Mail: [email protected]) ####Secondry Mentor: Jay Dusara(E-Mail: [email protected])

##3. Responsive Output Generation ###Brief Explanation: The current output is verbose but lacks the responsive user interface. A good thing to add would be a tree view which will show the hierarchy of suites and cases. Also currently the comparison part is handled by C++, it would be better for the output(The generated HTML page, add some scripting code for loading) to handle it. That way to compare a new implementation with many older implementations we don't have to run the new implementation again and again with different command line arguments, just generate a ouput of the new implementation and let the output worry about the comparison. Maybe in the future this can be used to load multiple files for comparison(maybe generate graphs). This will also imply that we need to store the results in well constructed form(like XML) so that responsive output can load the previously stored results easily. The project will involve generation of responsive output which will have a mechanism to load a previously stored results for comparison. It will also involve support for XML(or similar) report generation which will be loaded by the responsive output. ###Referenced GitHub Issues: #22 ###Useful Links:

###Knowledge Prerequisite: Everything involved in this project can be learned while doing it, some design skiils can come handy ###Expected Results:

  • Responsive output
  • Save the results in a well constructed format
  • Output should be able to load the old saved results at user's wish for comparison
  • Loading multiple files for compaison will be a bonus

####Difficulty: Easy ####Prospective Mentor: Chinmay Gangal(IRC: chinmay2312, Gitter: chinmay2312:, E-Mail:[email protected]) ####Secondary Mentor: Jay Dusara(E-Mail: [email protected])

##4. Multithreading Support for Manak ###Brief Explanation:
Currenty any single case in Manak is run on a single thread, but in some situations user would like to check the performance of a function on multiple threads. Like iterations, tolerance and success percentage, another parameter should be given to user which will determine the number of threads this function will run. The project will also involve solving all the race condition occuring in global registration. These race conditions can occur while meauring time or registering the failure of the test. Check out the developer documntation of modules manak::TestMonitor and manak::ManakSuite for more information. Another issue which remains unsolved is how to deal with the collective information received from multiple threads. Some measure has to be given which combines this collective information into one index.

###Refernecd GitHub Issues: #20 ###Useful Links:

###Knowledge Prerequisite: Hands on experiance with C++ multithreading ###Expected Results:

  • User should be able to run a case on certain number of threads
  • Manak should be able to provide the user with an index based on the information collected from multiple threads

####Difficulty: Hard ####Prospective Mentor: Sumedh Ghaisas(IRC: sumedhghaisas, Gitter:sumedhghaisas, E-Mail: [email protected]) ####Secondary Mentor: Nishant Mal(E-Mail: [email protected])

##5. Adding Support for Fixtures ###Brief Explanation:
Manak implements groups to solve the problem of code redundancy. The cases in the group can share variables which are initialized only once in the GINIT function. This also helps reduce total run time. The difference between groups and fixtures, in very basic terms is that group cases can share variables where as fixture cases share code. When the same code is used by multiple cases there are 2 options to remove the redundancy, either use group which runs the code only once or use fixture which runs the code on start of every case initialized inside. There are situaltions where fixtures provide better support to users. Fixtures are part of the xUnit architecture, and it would be nice to implement them in Manak. The project will involve designing a good interface and implementing it inside the current framework. It would be great if fixtures are made to work inside manak groups as there are many more advantages of groups than just sharing variables. Check out [Using Groups](Using Groups) for better understanding.

###Refernecd Github Issues: None ###Useful Links:

###Knowledge Prerequisite: Experiance with C++ programming, especially with C++ templates ###Expected Results:

  • Good enough API to use fixtures in Manak
  • User should be able to define and use fixture inside groups

####Difficulty: Medium ####Prospective Mentor: Sumedh Ghaisas(IRC: sumedhghaisas, Gitter:sumedhghaisas, E-Mail: [email protected]) ####Secondary Mentor: Nishant Mal(E-Mail: [email protected])

##6. Compiler Like Output for Testing Framework ###Brief Explanation:
Currently Manak supports 2 output handlers, HTML and TXT. Both of these handlers generate a detailed report about both timing and testing. It would be nice to generate a compiler like output for testing framework such that Manak can be integrated inside any development environment. The output should provide the file name, line number and associated errors or warnings. For example, valgrind generates such an output which helps users integrate it inside development environments like CodeBlocks etc. The project will involve figuring out how to track file name and line number for the raised errors and warnings and how to trace stack calls.

###Refernecd GitHub Issues: #21 ###Useful Links:

  • cppUnit testing framework generates this kind of output, take a look for help

###Knowledge Prerequisite: Everything involved in this project can be learned while doing it ###Expected Results:

  • A working and well constructed compiler like output

####Difficulty: Easy ####Prospective Mentor: Jay Dusara(IRC: dusara39, Gitter:JayDusara, E-Mail: [email protected]) ####Secondary Mentor: Chinmay Gangal(E-Mail:[email protected])