User:SiddhGanju/GSoC 2013 Application

Short description
The project jQuery.IME will provide an onscreen keyboard to users. Catering to the needs of users, customized keyboards will enable the user to keep on using the favoured language. The envisaged keyboard will support various languages, thus I will have to take into account the symbols of all languages. Developing an editable div tab would be a major enhancement in this project. This will enable the user to perform changes on the run.

Name and contact information
Name: Siddha Ganju

Email: siddhaganju@gmail.com

IRC or IM networks/handle(s): siddha

Location: Shimla, Himachal Pradesh, India

Working Hours: 40 hours weekly

Synopsis
I noticed some differences between the keyboards of laptops and computers. Some do not provide a separate number keypad. For people who are used to separate number keyboards find it pretty difficult to adapt to a new layout. That's usually people who do calculations in banks, accountants, etc. Being charmed by the layout of the keyboard, I researched and I found out that all computers do not have the same layout for the keyboard. The American QWERTY format is replaced by the AZERTY format and so many more at different places. More importantly, while laying down the keys one must take into account the symbols for a native language, after all they must also make it to the board. These keyboards are developed keeping in mind that letters most frequently used, usually are kept in the home row. So each key on the keyboard represents different placement criteria. Similarly letters which frequently occur together in words are usually kept in hard to reach spots. While creating a virtual keyboard, this all will serve as a very important base. For languages which have characters more than the number of available keys different approach will be adopted. Usually such languages have some basic strokes predefined which can be recreated. It is these strokes that can serve as their basic implementation.

I plan to customize the keyboard and provide a wide variety keyboards to the people using jQuery.IME. The beginner user can stick to the default and the advanced user can start to tweak it. People using it will be able to choose their preferred keyboard layout and will find it easier to work on a home environment. Another innovation, is for the content editable divs which will provide the ability to format the text on the go. This will require wiring each button’s click event to the correct div, retrieve its content, and then perform the action. In case of a text area the browser does it all. This provides the editors with the advantage that they can change the action performed event of each stimulus. Some can even be provided with more than one action, as is decided by the programmer. They are free to implement their own choice, making the buttons perform actions respectively.

1 May 2013 to 11 May 2013 (10 working days)
College Exams, I will not be able to devote much work time during this period.

12 May to 20 June 2013 (39 working days)
Coding for the virtual keyboards will be my main aim. I will start with the American QWERTY format. A major early activity will be familiarizing with the code base. As a result if this I will be trying to correct the existing bugs in Bugzilla. This would enable me to gain in depth knowledge about the working of the code.

I would prefer to proceed in small iterations while developing each keyboard. As soon as one is developed I will duly inform my mentor. A rough conservative deadline for each feature will be decided on between me and the mentor. Deliverables in the form new features will be submitted as they are completed.

If a sub-project can't be completed before the deadline, I will reassess the overall project timeline to keep expectations practical, and learn how to not overestimate dates. At the end of this time period I will have completed majority of the virtual keyboards. These will include several languages and an extra tweak feature for the user to create the choicest keyboard. Doing all this will increase my knowledge of the linguistic diversity of the world as well!

21 June to 26 June (5 working days)
I will test the code written thoroughly and document it. Any error in implementation will be rectified and documented. The investigation will be done for any missing language, not currently implemented, and will be added accordingly. Also investigation will be carried out for creating editable divs.

27 June to 15 July (6 working days)
Finish implementing content editable divs. This will include making the primary focus of the editor, their own choice of actions related to each button. Also during this period I will start on Cucumber implementation by Ruby. I am learning Ruby and by this time I will be capable to read the implementations on Cucumber. I will start in small iterations, preferably by fixing the bugs.

16 July to 19 August (4 working days)
Tests shall be carried out. Documentation will be completed. All the investigation regarding browser compatibilities and major checks on the enhancements shall be accomplished. For improving browser capabilities, a lot of emphasis will be laid on the previously developed tests acting as a standard reference. Hence the added enhancements must pass these tests. I will be using Cucumber (https://en.wikipedia.org/wiki/Cucumber_%28software%29). Cucumber implements the Acceptance Test Driven Development. For this I will be writing several Cucumber test cases, and run them and write the Ruby code to execute it properly. I will be utilizing the already created and available ATDD ( https://www.mediawiki.org/wiki/QA/Browser_testing/Running_tests#Acceptance_Test_Driven_Development ) to specify the deliverables. As I become proficient in Ruby I will write tests for browsers. I will also have access to the code created for this, so that I will have a strong base to start working from.

20 August to 11 September (38 days)
Browser compatibilities are checked. All the previously created keyboards will be tested against all the known browsers including Chrome, Firefox, Epiphany, SeaMonkey. Any discrepancy will be rectified. The tests will be carried on the Mobile UI's as well. For this I will use tablet (HCL ME tablet) and touchscreen device Samsung Galaxy Tab. The browsers checked for Mobile UI's will include Safari, Opera Mini, Skyfire, Bolt, Blazer. The interaction design will be cross-checked by various users as it is added to the GitHub. This is very important considering that they will be using it frequently.

12 September to 27 September (Final Week)
Till now almost all of the work will be over. Extra tests carried out, which will improve the code written. These tests will help in evaluation of user experience. The code will be documented properly according to the project's conventions. Final project submission will take place.

Mentors
Mr. Siebrand Mazeland, the Product Manager Language Engineering for Wikipedia and Authorized WoodWing Consultant is the likely mentor for this project. Under the guidance of the mentor I am quite sure that I will be able to fulfil all my project requirements. I highly appreciate his help.

What I need?

 * 1) Knowledge of JavaScript, jQuery, CSS, QUnit, browser compatibility
 * 2) Well versed in GitHub
 * 3) Knowledge of Ruby

What I have?

 * 1) Basic layout of a keyboard with several languages implemented already·
 * 2) Knowledge of JavaScript, jQuery, CSS

What I am required to do
I plan to work in a branch and then merge it. Since the work will continue in several small iterations I will have to merge the branch many times. For testing purposes I will use touchscreen devices like the HCL ME tablet and Samsung Galaxy Tab. The user experience can also be checked by various tools freely available on the internet.
 * 1) Gather information regarding browser compatibility.
 * 2) Implement the keyboards in various languages.
 * 3) Add new features like giving the geek the ability to innovate his own keyboard.
 * 4) Thoroughly test all the created features for existing browsers.
 * 5) Currently I am not well versed in Ruby, and am learning it. I am fluent in Python and Ruby being more object-oriented than Python is really great to use. I am beginning to believe that Ruby is indeed a programmer's best friend!

About me
I am a 2nd year student of Computer Science and Engineering from National Institute of Technology, Hamirpur, Himachal Pradesh, India.

I believe that Open Source is definitely the new approach. People can contribute to the open source and promote it among others. We can create new and improved things only when many brains are thinking towards it. Contributing towards open source is great! Wiki pages are the most useful ones. They provide us valuable information. About 400 million people use the Wiki pages monthly.

It would be awesome if I could just give back a little part of what I have received. When someone actually uses the code that you have written, that feeling is great! I can't even start to imagine how they will find these new enhancements advantageous. This will make the Wiki experience way better especially for those that like to edit their way in.

Apart from coding I enjoy photography and digital design. I am also interested in philately.

Participation and Time commitments
During the summers my only commitment is this project and I plan to work about 40 hours per week on it. My summer break will be from 15 May to 27 July. During this time the project is my sole commitment and I am very much dedicated towards it. I am hopeful that much of the coding work will be completed during this time Afterwards my college starts around 28 July, I will still be available as before when the college is going on.

Each feature as and when gets implemented will be informed to the mentor, and its source code will be published on the GitHub. On successful completion of this project a lot of native languages will be available as virtual keyboards. The additional enhancements will definitely prove helpful.

I am wholeheartedly dedicated towards this project. I would love to give back to this community, considering that I visit it almost every day, increasing my knowledge and helping my complete my work!

Past Open Source Experience
As of now I have not contributed any code to an Open Source. I am an active contributor to GLUG (GNU/LINUX User Group) at my college. Here we promote Open Source. I have helped in documentation and many other tasks. I am very much interested in Open Source and am willing to work hard so that all the said work is accomplished.

Links

 * GLUG main page: http://glug.nith.ac.in/

Past Development Experience
I am a Certified Windows Phone App Developer (Jan 2012 - Present) and have developed apps for Windows which have been certified and published at the Windows Phone Market Place. These are implemented in C# and .NET framework.

Links

 * 1) http://www.windowsphone.com/en-ug/store/app/caladd/6546cf64-7fdd-43b0-aaab-9677b433c310
 * 2) http://www.windowsphone.com/en-ug/store/app/doodle/be9f29de-1439-4e06-abd5-82b96da5d177

During their development I learnt about C# and .NET framework and worked towards getting a certification. While C# provided support for internationalization which I thought promoted unifications of all Language Supports, .NET provides language interoperability that helped me make use of Common Language Runtime (CLR), and Common language Infrastructure (CLI).