Final draft for GSoC *Myself*
- *Name :* Mayank Jha - *University / current enrollment* : NIT Durgapur, India - *Contact details: *mayank25080...@gmail.com, GMT(+5.30), IRC nick: mapyth - *Short bio / overview of my background* : I am a 2nd year undergraduate student pursuing Computer Science and Engineering at National Institute of Technology, Durgapur, India. I am a FOSS enthusiast, and contributor. I was introduced to the concept of Open Source an year ago by the GLUG (GNU/Linux Users' Group) of our college and since then Ive tried to actively associate with the same. My contributions to the open source world include making a plugin or geany to submit codes to SPOJ from the editor itself. Links to my contributions can be seen at the MediWiki page. https://github.com/mjnovice/geany-plugins/tree/master/codesubmit Ive also made a game using the pygame library called fierytower. http://www.pygame.org/project-fierytower-2496-.html Apart from that Ive sent patches to rekonq, konversation, kate, plasma-desktop and trojita. I am skilled in C, C++, Qt, Python and HTML. I have the experience of building Lyx from source and also editing layouts in it. Coding, Youtubing, Eating, Sleeping, Movies, MJ music, - that pretty much sums up my life. - Subscribe to the LyX developers mailing list and introduce yourself (send a message to lyx-devel-subscr...@lists.lyx.org to subscribe) You should provide all the information listed above, but we are not looking for a simple list. *Sell yourself!* Get across your enthusiasm for the project. Tell us what makes you stand out from the rest of the crowd. Talk about your past experiences, what makes you tick. Why are you interested in open source software, and LyX in particular? What interests do you have, and how do these interests relate to the project for which you're applying? There is a basic assumption that people applying for the Summer of Code will have at least some programming skills already. So rather than spend a lot of time elaborating on these (though by all means, do tell us what you know), spend time talking about you. *My Coding Skills* - What platform do you use to code? I am using Ubuntu 12.04 on my Dell Inspiron n4050 with intel i3 processor and ATI Radeon graphics. - Did you ever code in C++? what is your experience? I am a C++ coder for about 2 years now, and am reasonably skilled in it. - Have you used the QT toolkit before? Yes, I have used it to make a plasmoid for kde-plasma. http://kde-apps.org/content/show.php/?content=157112 - Are you familiar with Python? I am pretty much familiar with python. I made a game called fierytower using the pygame library. http://www.pygame.org/project-fierytower-2496-.html - If you apply for a project on our ideas list, have you experience in the areas listed under "Knowledge prerequisite"? Yes, my project requires C++ and QT programming knowledge which I have. *Me and LyX* - *Were you involved in LyX development in the past? What were your contributions? * This would be the first time I would be contributing to Lyx. - *Were you involved in other Open Source development projects in the past? Which, when and in what role? * I have worked on patches, fixing bugs in projects like konversation, trojita, kate and rekonq. *My Project* - *What do you want to achieve?* I wish to create a GUI interface for Layout Editor to enable normal users who dont want to code to use the interface and make the changes or create their own new layouts. Currently editing layouts in Lyx is a very tedious process . By making a GUI alternative to the the same it would allow the users to use it more frequently and efficiently without having the need to dive into the code part. - *If you have chosen an idea from our list, why did you choose this specific idea?* I chose this idea because GUI development excites me and Currently editing layouts in Lyx is a very tedious process . By making a GUI alternative to the the same it would allow the users to use it more frequently and efficiently without having the need to dive into the code part. - *If you are proposing a project of your own, what is unique about it?* The implementation details of my project are listed below: I have made a Qt prototype http://postimg.org/image/j9g22xphx/ described as below! -GUI portion- *Available Additions :* A QComboBox used to choose from a list of available options "ClassOptions" , "Paragraph styles", "Floats", "Flex insets and InsetLayout", "Counters", "Font description", and their possible suboptions like a "Paragraph style" can have "Font Description" as its subtype *Layout elements:* A QListWidget containing the new Class elements "ClassOptions" , "Paragraph styles", "Floats", "Flex insets and InsetLayout", "Counters", "Font description". The user will select any one of them and he will be shown the available options in the element specifics section. for e.g if the user chooses "Paragraph styles" then he would be shown with options like "Align", "BottomSep", "Copy Style" etc. as much as possible without any coding stuff, this would be shown in layout specifics section. *Layout specifics:* It will contain yet another QListWidget which would display the suboptions which are possible to add into it, and it will have Values section as each option will have to take values like number, color, option etc. some type of values might be common while others might be unique to the option, which would be shown to the user appropriately. *Layout Preview:* It is a QGraphicsWidget which will try to display in as much capacity as possible the combined look showing the usage of every layout element created, added or edited. For eg if I created two paragraph styles, style1 and style2 then it will show two sentences instantiating the styles. *Layout file:* section would be meant for advanced users to directly modify the code, or add some Latex stuff to their liking. On the manner in which Lyx will store the information, I think making a new class LayoutElements and the Layout Editor could be viewed as an instance of the same, can be one solution to the problem. What goes inside this class is determined largely by the manner in which the parsing of .layout file is done, (which is specified in the TextClass, Layout class ) would be more appropriate as I do not find any other alternative. Since my methods, and parameters in the class LayoutElements depends on the classes TextClass, Layout etc. so parsing as a backend job would not be required Also, writing/modifying a layout file in whole can be best done by making it into a "local layout", as the feature already exists, so it wont require much work. - *What makes you suited to carry out the project?* I am well suited to carry out this project because I have experience of working in the open source community, and also possess the requisite coding skills for the same. Apart from that I am very hardworking and passionate about what I do. I will devote my entire energy towards the fulfillment of the goal. Lastly I love coding. - *Do you have other obligations from early June to early September (school, work, vacation, etc.)? Please note that we expect the Summer of Code to be a full-time, 40-hr a week occupation.* I have no other obligations during May to July-mid and would be able to work from 6.30 to 21.30 UTC and after my college reopens in July, I would be working 13.30 to 22.00 UTC. *My Schedule* *May 27 - June 5*: Interaction with the developers and research for better alternatives (if any ) for storing the GUI information in Lyx. *June 5 – June 17 :* Get familiar with the codebase of Lyx, solve in some bugs to get a feel. *June 18 – June 24 :* Research on making the GUI interface better by considering all kinds of possibilities. *June 25 – June 30 :* I would implement the first protoype of my class LayoutElements alongwith to implement editing if layout files, saving and then loading them on the fly. *June 30 – July 7: *Implementing of some basic GUI features like Paragraph styles, Fonts etc. *July 8 – July 14 : * Testing the class with the basic methods throroughly to avoid any crashes or bugs. See if the basic model works as intended. *July 15 – August 1 : *Inclusion of the advanced features like sub-inclusion of layouts inside layouts, making of the treewise dependency for the various options available. *July 15 – August 5: *Testing the GUI interface for bugs and errors, and resolving it. *August 6 – August 15 *: * *Thorough testing of the LayoutEditor. Adding reality checks for providing the users with the required error messages instead of crashing. *August 15 – September 1 :* Documenting of the entire code, to enable other developers extend this. Making the code look neater and ordered to enhance readability of the code. September 2 – September 22 : Backup time for unexpected and unforeseen delays. *September 23: *Pencils down *September 23 – October 8 [after GSOC]: *The LayoutEditor will be committed to the Lyx repository for the community to review it. Shortcomings if any would be taken care of. I will continue to maintain this package, and be involved in development of Lyx.