On Fri, Mar 25, 2016 at 1:31 PM, Mohit Kumra (via Google Docs) <mohitkumra95@gmail.com> wrote:
Mohit Kumra has invited you to comment on the following document:
GSOC_2016_proposal_Compilation_Firewall
I am extremely interested in working for the OutputDevice class Compilation Firewall
project I have C,C++,Java,scripting,Python,and have working proficiency of STL.
It is requested to review the Proposal for Output-Device use a Compilation Firewall for
Libreoffice.
Thank you for the consideration.A quick reply is appreciated!!
Open in Docs
Snapshot of the item below:
Output-Device use a Compilation Firewall for Libreoffice
MOHIT KUMRA
MARCH 23rd 2016
MENTOR: Chris Sherlock
Student Name: MOHIT KUMRA
DATE: MARCH 23rd 2016
TITLE: Compilation firewall for Libreoffice and Modularizing the Output-Device class.
SYNOPSIS:
Data abstraction refers to, providing only essential information to the outside world and hiding
their background details.With the introduction of this concept programs and developers now could
easily write the code and had lesser chances of depiction of all the features to all thus
minimizing the threat of code corruption.
I would recommend to make the compilation firewall for the Output-Device class and to split the
functionality of the Output-Device class. This would minimize the massive load due to
functionality being encapsulated into a dense form in the Output-Device class, thereby enabling
programs to run faster with inclusion of the Compilation Firewall.
The Project:
In any programming language writing code does not imply that it is in alignment with the
guidelines but one needs to ensure that the code is protected and secure against
corruption/malwares thereby having zero or minimal code smells.
The concept of Data abstraction provides us with the feature of hiding the details and depicting
only the essential details to the end user. For this we use the PIMPL Idiom (Pointer to
IMPLementation) is a technique for implementation hiding in which a public class wraps a
structure or class that cannot be seen outside the library the public class is part of. This
hides internal implementation details and data from the user of the library.
These are the Benefits of using PIMPL Idiom:
Benefits:
Changing private member variables of a class does not require recompiling classes that depend on
it, thus make times are faster, and the well known Fragile Binary Interface Problem() is reduced.
The header file does not need to #include classes that are used 'by value' in private member
variables, thus compile times are faster.
This is sort of like the way Small Talk (a well known unusual syntax based language)
automatically handles classes... more pure encapsulation.
The Implementation of making the Compilation Firewall file with the help of the pmlpl idom
format is as follows:
How to do it:
Put all the private member variables into a struct.
Put the struct definition in the .cpp file.
In the header file, put only the Forward Declaration of the struct.
In the class definition, declare a (smart) pointer to the struct as the only private member
variable.
The constructors for the class need to create the struct.
The destructor of the class needs to destroy the struct (possibly implicitly due to use of a
smart pointer).
The assignment operator and Copy Constructor need to copy the struct appropriately or else be
disabled.
To study for Compilation file links are:
http://c2.com/cgi/wiki?PimplIdiom
http://stackoverflow.com/questions/60570/why-should-the-pimpl-idiom-be-used
http://herbsutter.com/gotw/_100/
Example:
#include <iostream>
using namespace std;
class Adder1{
public:
// constructor
Adder1(int i = 0)
{
total1 = i;
}
// interface to outside world
void addNum1(int number)
{
total1 += number;
}
// interface to outside world
int getTotal1()
{
return total1;
};
private:
// hidden data from outside world
int total1;
};
int main( )
{
Adder1 a;
a.addNum1(10);
a.addNum1(20);
a.addNum1(30);
cout << "Total " << a.getTotal1() <<endl;
system("pause");
return 0;
}
The Output is : Total 60
Above class adds numbers together, and returns the sum. The public members addNum1 and getTotal1
are the interfaces to the outside world and a user needs to know them to use the class. The
private member total1 is something that the user doesn't need to know about, but is needed for
the class to operate properly.
Road-Map:
For Project Development, following steps would be followed:
1. Review: On acceptance of the proposal for the project I would review the code provided by the
Mentors and try to analyse and familiarize with the Data members and Data functions being used
in the code. (May 23rd - May 30th 2016)
2. Refactor: After reviewing the code, I will use my skillset for refactoring the code. Thus
making the code more effective and efficient in terms of complexity( Time + Space ) and would
modularize the code as much as possible. This would take less than a week to complete.(June 2016)
3. Step 2 would help in achieving the goal of reducing the massive Output-Device class code into
modules and subclasses.
4. Develop: Parallel to modularizing the Output-Device class code I would deduce and implement a
methodology for making the compilation firewall for the Output-Device class of the
LibreOffice.(June 20th - July 20th 2016 )
Design Strategy:
Abstraction separates code into interface and implementation. So while designing the component,
I will keep interface independent of the implementation so that if I change underlying
implementation the interface would remain intact.
Steps to be followed would include:
a. Put all the private member variables into a struct.
b. Put the struct definition in the .cpp file.
c. In the header file, put only the Forward Declaration of the struct.
d. In the class definition, declare a pointer to the struct as the only private member variable.
e. The constructors for the class need to create the struct.
f. The destructor of the class needs to destroy the struct (possibly implicitly due to use of a
smart pointer).
g. The assignment operator and Copy Constructor need to copy the struct appropriately or else be
disabled.
5. Reconcile:On achieving the goal of the project would Reconcile the work and provide the
Mentor with all possible updates and features of the development with the help of DFD (Data flow
Diagrams) and all the documentation required by the Mentor.(Last week of July- August 2016)
Conclusion:
When the Project would achieve the goals it would be suitable for implementation to the system.
The Output-Device class would then be modularized and its compilation firewall would also be
implemented effectively.
Proficiency:
I am proficient in C,C++,JAVA and have worked on developmental projects undertaking these
languages.
Resume link: https://drive.google.com/file/d/0B7RrMabDB-4FU3VURDBMUlprU3M/view?usp=sharing
University Information:
University Name: JAYPEE INSTITUTE OF INFORMATION TECHNOLOGY
Major:COMPUTER SCIENCE ENGINEERING
Current Year and Expected Graduation date: 3rd YEAR & 31-06-2017
Degree (e.g. BSc, PhD):B.Tech
This is a courtesy copy of an email for your record only. It's not the same email your
collaborators received. Click here to learn more.