Showing posts with label gsoc. Show all posts
Showing posts with label gsoc. Show all posts

Friday, March 2, 2012

Enjoy your summer with GSOC

Since most of the students ask from me "How to get in to GSOC", I though to write down some important facts which will help you when applying for a GSOC project.

First of all if you need to get more detailed description on GSOC you can refer this set of slides which were prepared by Kathiravelu Pradeeban.

GSOC is full of competition. People who have more commitment on it successfully finish it. It's not a matter of your knowledge on technologies, capacity on academics or fluency on language. Its all about you commitment to that project. It's not just the money you get or the package you receive, it's about your enthusiasm towards the opensource world. So ready your backpack to join the memorable journey.


Selecting an Organization

When you are in the competition, selecting an organization for the project plays a major role in your success path. Most people lost their enthusiasm on the competing as soon as they realize the difficulty on selecting a proper organization. Don't be silly. There are few simple steps you can follow to get rid of this headache.

  • Find out what are the organizations which were acted as mentoring organizations in the last GSOC competition. Most of the organizations which were at the last competition will be repeatedly get selected to the next upcoming sessions. So rather than searching here and there, you can directly refer the last years GSOC web page for the information. You can find last years mentoring organizations in that list. Now you get an idea about what kind of organizations participate for this competition and what are the relevant technologies they use.
  • Now you can shortlist some of the organizations according to your awareness on those technologies. But it is not necessary to be an expert on those technologies. It's okay to select it even though you know nothing about mentioned technologies, you have few more weeks to get ready with that. In this page you can find how many project slots those organizations got last year. If you select organizations which get more slots, you can be assure that your project idea will not get thrown off at the last moment. Now you have couple of targets on your head.
Selecting a Project

Now you are done with selecting organizations. Next step id to select an project idea.
  • Search for the 2012 GSOC ideas of those organizations. As an example if you select PhpMyadmin as an organization, you can google for "phpmyadmin 2012 gsoc ideas". It will give you set of links which are related to that topic. Among those you can find this wiki page which solves half of your problems.
  • Now you can find what are the latest project ideas they have, who are the assigned mentors for those ideas and what are the technologies they expect from you. If those project ideas match with your expectations you can proceed, or else you can find for other organizations. Assume that you are interested on an idea which was in the Phpmyadmin wiki page.
  • Then you can find whether this is a continuation of a previous GSOC project or a new one using the gsoc project list which I have mentioned above. If it is a continuation your are lucky. You have person to ask. So find who was the last student and drop him mail to get more information. It's okay to drop one or two private mails to him for more information but not too much.
Dropping your first mail
  • Since this a project with a community your visibility to that community is a crucial factor when they select students for their project. So your private mails add less advantage on the competition. So find what is the developer mailing list and the IRC channel of that organization. Then subscribe to them. Now you are ready to put your first mail to the organization which will get a reply with a warm welcome to the community.
  • In the first mail you can introduce your self to the community and mention that your are willing to participate on gsoc with that organization. You need to specifically mention the project idea which is in your focus on that mail and ask for more information.
  • Then you'll get a reply with related information, links to students guides and many more useful things for that project. Now your have to read them and follow them to be prepared for the project. As always you can ask questions on the mailing list for more details.
  • Since all the community people help you voluntarily, you should not bother them asking quick replies for your mails. If they have a time they will definitely reply you. So be patient and polite on the IRC and the mailing list.
Continue with the community
  • You have work with the community and impress them before applying for the project. Most of the communities expect students to fix some bugs which are listed on their bug tracks to make sure that the student is committed to this project.
  • So you can select some easy bugs from the bug list and try to resolve them. You can ask for more help on the mailing list.
  • You can suggest your own ideas to the project and discuss them on the mailing list.
Early bird gets the worm
  • Since this is highly competitive, more and more students will try to get the same project. Most of projects get huge number of request at the last moment. So it is better to active on the project earlier and be on safe side.
  • One other advantage of being active on the community is get rid of unnecessary competition. Most of the students look at an idea from the list and then go and check in the mailing list to make sure someone is not active on that project idea. If they see that there are many number of mail threads related to that project which were sent by you, they will think twice to compete with you. They may think it's better to move on to a another project which will be more easy to drag.
Get ready your proposal

By the time of your proposal submission, you'll have sound knowledge on the project as well as the community. It's better to prepare it couple of days before the deadline and get your proposal reviewed by the community and the mentor. It will enhance the quality of your proposal as well as avoid unnecessary changes during the project time.

Now you are done with the proposal submission and if you correctly follow these steps you'll definitely get selected to the project. After that the project success is all depend on your commitment.

We warmly welcome you to GSOC. Enjoy your summer.

Sunday, August 21, 2011

AJAXify phpMyAdmin Interface - GSOC 2011 - 13th week

This is the final week of gsoc 2011. As I mentioned in last weeks report I had to continue with rewriting the querywindow.js functions using jquey this week.

I had to rewrite the following functions this week.
  1. PMA_queryAutoCommit()
  2. PMA_querywindowResize()

Initially I rewrote the logic in "PMA_queryAutoCommit()" function using jquery, but I could not find a scenario where this function is triggered within the query window. Then I asked from Marc to get an ideal of a scenario where this function triggers. Then he suggested me that "clicking on the queries in sql history tab" should trigger this function. Further he mentioned that this scenario didn't work with his testings and if I also couldn't get it check correctly it is better to skip ajaxify this function. I tried the scenario and compiled the querywondow.js file with firebug, but it didn't trigger the "PMA_queryAutoCommit()" function. So I skipped ajaxifying the "PMA_queryAutoCommit()" fucntion.

Then I started working with ajaxify "PMA_querywindowResize()" function and with Marcs help I was able to test it correctly.

With that I finished ajaxifying the functions in querywindow.js file.

Then Marc directed me to a bug which is reported at bug tracker regarding the table->structure->change. When the user clicks on change a column which is having var_cahr type, the change dialog does not load the type correctly. So I went through the code and found this that this issue is not with my ajaxified part, but on original non table structure change section. Then I went though the tbl_properties.inc.php file and found what is the issue for this and reported it to Marc. Then Aris showed what was the bad commit which caused this issue and the remaining changes should do after discussing more with Marc.

With all these, I finished my tasks which were proposed my proposal at the beginning. Lots of people helped me a lot to achieve this success in the project, specially Marc, Ninad, Michal, Madura, Rouslan and Aris. Even after this gsoc project I'm willing to continue contributing to PMA which is a great pleasure to me.

Monday, August 15, 2011

AJAXify phpMyAdmin Interface - GSOC 2011 - 12th week

According to the schedule I had to continue with ajaxify the table maintenance options in this week. Last week I did some modifications with this task and there were some bugs with that. Marc showed me that some important information are missing with the results of ajaxified table maintenance actions. In CHECK TABLE action there was a table which contains Msg_type and Msg_text information in non ajax configuration but in ajax configuration it was not there. In order to make this information available I had to do the following changes.
  1. Added "if(isset($_REQUEST['ajax_request']) && isset($_REQUEST['table_mainrenance'])) {}" condition to sql.php file in order to handle the table maintenance action and return the results with those useful information.
  2. Change the logic in "$("#tbl_maintenance.ajax li").live('click')" action to get the results sent by sql.php file and then show it in the table operations page using ajax.
Then after Marc showed me a new bug where the documentation links are not functioned properly, I changed the "$("#tbl_maintenance.ajax li").live('click')" action to "$("#tbl_maintenance.ajax li a.maintain_action").live('click')" and changed the tbl_operations.js file according to that.
After all these changes this option seems working properly and I'm waiting for the response by Marc.

Since I skip ajaxify the "Table options" in table operations after discussing with Marc due to inefficiency of doing that, Marc asked me to find a new task instead of that. I went trough various options in PMA and could not find a suitable action which is really need ajax behavior at this moment. Then I went through the "Ajaxify Interface" section in PMA wiki and found that the ajaxification of table insert is remaining as a to do task. After discussing with Marc he mentioned that this is not necessary at this stage and he asked me to involve with more useful task which is rewrite the querywindow.js file using jquery.

The querywindow.js file contains four function which are
  1. PMA_queryAutoCommit()
  2. PMA_querywindowCommit(tab)
  3. PMA_querywindowSetFocus()
  4. PMA_querywindowResize().
I rewrote the 2nd and 3rd functions using jquery and works fine for testing.

Next week I'll continue with rewriting the querywindow.js functions.

Sunday, August 7, 2011

AJAXify phpMyAdmin Interface - GSOC 2011 - 11th week

According to the schedule I had to continue with ajaxifying table operations task this week.

Since there was a bug with "Table copy" option which was done last week, Marc asked me to fixed the issue which is currently not reloading the navigation panel after copping the table to a new database. Initially I could not understand why we need a reload on navigation panel, but after the Madhura clarify me why we need it I fixed the issue.

Then I start working with ajaxifyig the other four options in "Table operations". Those are
  • Move table to database
  • Table options
  • Table maintenance
  • Delete data or table.
After discuss with Marc we decided "Move table to database" option do not need ajax behavior, because anyhow we have to redirect to the moved table after moving the table to new database. Also we decided that only "Empty the table(Truncate)" option in the "Delete data or table" section need ajaxification because after delete action there is no need to be in the Table operations of the deleted table.

I started ajaxifing the four actions in Table maintenance section.
  • I added "$("#tbl_maintenance.ajax li").live('click')" ajax action to the fucntions.js file which handles all four ajax click actions in "Table maintenance" section, and get the results of those actions.
  • Then I changed the tbl_operations.php and sql.php files in order to handle the ajax request and response according to that.
Then Marc showed a me a bug of not showing the Msg_type and Msg_txt feature after "Check table option" and I'll fix it next week.

Then I worked with Ajaxify the "Empty the table (Truncate)" option.
  • Since there is some related code for this feature with $("#truncate_tbl_anchor.ajax").live('click')" action in functions.js file I reused that action and changed the logic to show the results using ajax.

Next week I 'll continue with ajaxify the "Table options" and fixing the bug in "Table maintenance".

Sunday, July 31, 2011

AJAXify phpMyAdmin Interface - GSOC 2011 - 10th week

According to my timeline, this week I had to work with ajaxify the options in table operations. Mainly this week I focused on ajaxify two option in the table options. Those options are
  1. Alter order by
  2. Copy table.
For the "Alter order by" option I did following changes to handle the ajax request and the response.
  1. I added the "$("#alterTableOrderby.ajax").live('submit')" action to the functions.js file which posts the alterTableOrderby form with ajax post and then return the results without reloading the page.
  2. I modified the tbl_operations.php and tbl_alter.php files in order to handle the ajax request which was sent by the above action.
Now when the user click on the go button "Alter order by" form, it get submit as a ajax request and then show the results of the action to the user without reloading the page.

Then I started working with ajaxify the "Copy table" option in the table operations. I did following changes in order to handle this ajax response.
  1. I added "$("#copyTable.ajax").live('submit',)" action to the functions.js file which handles the ajax submission of the copy table form. When the "Switch to copied table" options is selected I continued with the non ajax submit.
  2. Then I modified the tbl_operations.js file and the tbl_move_copy.php file which handles that ajax request.
After doing these modifications now when user copy a table to another database he can do it by reloading the page and if only the user select "Switch to copied table" option only he redirects to the copied table.

Next week I'll continue with ajaxify the remaining options in table operations.

Sunday, July 24, 2011

AJAXify phpMyAdmin Interface - GSOC 2011 - ninth week

This week I continued my works on "Ajaxify the Add column(s) in table structure". I added two ajax actions in to tbl_strucure.js and functions.js files.
  1. I added the "$("#addColumns.ajax input[value=Go]").live('click')" action to the tbl_structure.js file which gives the add columns dialog for the user.
  2. Then I reused the code in "$("#append_fields_form input[name=do_save_data]").live('click')" action in functions.js file which was initially written for handling the table->change option. I did small changes for the same action and used with this feature.
Then after Marc pointed out two issues with the enum editor which are
  1. Cannot edit the enum editor values
  2. Not appearing the name of the column in enum editor header
Since I have fixed a similar issue in Table->Structure->change feature I used the same logic of overlaying the enum editor by changing its z index using jquery.

Finally when the feature is finished, user gets an "Add column" dialog box which allows the user to add a column to the table as follows.


I started working with modifying the Table operations tasks by applying the ajax behavior for those features. I started ajaxifying the Alter table order option and still in progress.

Next week I'll continue with that feature.

Sunday, July 17, 2011

AJAXify phpMyAdmin Interface - GSOC 2011 - eighth week

The mind term evaluation for the GOSC 2011 with phpMyadmin was on this week and I was able to successfully get through the evaluation this time with the help of Marc and the other community members.
In this week I worked with modifying the initTooltips() function which converts the footnotes to tool tips. I changed the logic by defining the relevant domain of its operation at each time by adding and extra parameter to it. But Marc informed me on some issues with that logic and I'll work on that in next week.

Then I worked with my 9th week task "Ajaxify the Add column(s) in Table structure". I added the "Add column" dialog which carries the "append_fields_form" for submitting action in the add column form in the table structure.
There are some modifications with this option and I'll push my code as soon as I finish them.

Next week I'll continue with above work and start working with "Implement the Table operations tasks"



Sunday, July 10, 2011

AJAXify phpMyAdmin Interface - GSOC 2011 - Seventh week

This week my target was to work with "ajaxify the Column->Change in Table->Structure" task. But at the beginning of the week Rouslan and Marc arose two issues regarding my previous modifications. Those are
  1. Set of issues with the "Ajaxified Index->Edit" option
  2. An issue of not appearing the date time pickers in "DB->Structure->Insert"
With the issues in "Ajaxified Index->Edit" I had to rewrite the "checkIndexName()" function which was written in the indexes.js file. The existed method was written in pure javascript and I had to write it using jquery. And there were some issues with the manner I have used the jquery dialog and by Rouslans explanation I was able to gain some important facts on using the dialog correctly.

Then I worked with DB->Structure->Insert" issue with the help of Rouslans help and was able to bind the datetime picker with the insert form.

Then I start working with my this weeks task which is to "ajaxify the Column->Change in Table->Structure". Initially I tried to reuse the code which I have used in my previous task "Ajaxify Table->Structure->Muli_column->Change". So I moved the common code to "changeColumns(action,url)" function and used with both
  • $("#fieldsForm.ajax .mult_submit[value=change]").live('click')
  • $("#fieldsForm.ajax #tablestructure tbody tr td.edit a").live('click')
tasks.
Since I used "modal:true" parameter within the dialog there was an issue of "enum-editor" getting disable. This happens because of applying the "ui-widget-overlay" for the rest while we editing in the dialog. I found that the basic z-index of the overlay id 1000 and dynamically changed the z-index of the "enum-editor" to 1100 so it appears above the overlay.


Now it works properly and the modifications were merged to the master branch by Marc.
Change dialog box
Enum editor

Next week I will work with the mid-term evaluation and implementing "Add->Columns" in "Table->Structure".

Sunday, July 3, 2011

AJAXify phpMyAdmin Interface - GSOC 2011 - Sixth week



This week I mainly worked with three options in my project. Those are ajaxifying the following features.
  1. Continued with "Multi_row ->Export" in "Table->Browse"
  2. "Indexes->Edit" in "Table->Structure"
  3. "Hide/Show Indexes" in "Table->Structure"
The first task is a continuation of the my forth week task. In this I tried to export the results to an external file and tried to do it with ajax. But after referring some discussion in forums I realized that this is hard to achieve with ajax and then after discussing with Marc I have reverted the changes done to the ''Export" option and skipped the "Multi_row -> Export" in "Table->Browse" option to been ajaxifying. But I suggested a Jquery plugin for future developers, which is able to solve this issue.

Then I started working with my second task which is adding ajax dialog box for "Indexes->Edit" feature in "Table->Structure". I mainly used "tbl_structure.js" file to handle the logic of actions and modified the "tbl_indexes.php" file to response for ajax request for this. In tbl_strucuture.js file i used three actions to handle this feature. Those are
  1. $("#table_index tbody tr td.edit_index.ajax").live('click') - pops up the "Edit" dialog which loads the "index_frm"
  2. $("#index_frm.ajax input[name=do_save_data]").live('click') - submits the index changes for the "tbl_indexes.php" file
  3. $("#index_frm.ajax input[name=add_fields").live('click') - Add more columns to the index form
After completing above modifications this feature works fine and add more usability to the index edit option.
Edit dialogbox

Then I started working with my third task which is adding "Hide/Show Indexes" in "Table->Structure". I used tbl_structure.js file to handle the actions logic for this. I have generated "#toggletableindexdiv" which carries the "toggletableindexlink" which will toggle the index table show and hide. Following screen shots show how this feature works.

When the indexes are shown

When the indexes shown

After adding these features to PMA, it improved the usability and allow the user to do above mentioned actions without reloading its base pages.

Next week I'll work with ajaxifying the "Single_column -> Change" in "Table->Structure".

Sunday, June 26, 2011

AJAXify phpMyAdmin Interface - GSOC 2011 - Fifth week

Since I could not finish my fourth weeks second task which is "Ajaxify the multi row export in table browse" last week, I continued working with it in this week.
I used the sql.js file for handling the actions related to export and then the sql.php file. For this task I tried to reuse the toggle_quick_or_custom(); function. I used two actions for this task which are
  1. $("#resultsForm.ajax .mult_submit[value=export]").live('click') which pop ups the "Export" dialog box containing the "dump" form for export
  2. $("#buttonGo.ajax").live('click') which post the export data to export.php file.
Even though I worked with this task still there are some bugs with that option and I'll continue with that in the next week also.
Even tough my "Ajaxify Table-> Browse->Multiple rows->Export" option is not yet finished, since my this weeks task is "Ajaxify Table->Structure->Multiple rows->Change", I worked with it.
In this I tried to reuse the "if($("input[type='hidden'][name='table_type']").val() == "table")" code segment and place it in "displayMoreTableOpts()" fucntion in function.js.

I used the tbl_structure.js for handling the change event and in that I used two actions which are
  1. "$("#fieldsForm.ajax .mult_submit[value=change]").live('click')" action to pop up the change dialog which contains the "#apend_field_form".
  2. "$("#append_fields_form input[name=do_save_data].ajax").live('click')" action to handle the save option for save the changes.
There small modifications which should done for this option, so I need to continue with this option in the next week.

My sixth week tasks are "Ajaxify edit index and show/hide index in table structure", so I'll work with those options in next week.

Monday, June 13, 2011

AJAXify phpMyAdmin Interface - GSOC 2011 - Third week

After finishing my last week task which is ajaxifying the "Add a new User" in db->privileges, this week I started providing an ajax featured dialog to the table inserts in db->structure.
There were no previously done related works on that, so I had to start it form the beginning and there were no any codes which I could reuse in my implementation. I chose the db_structure.js file to handle the ajax behavior in this insertion.
  • Initially I added the ajax class for the insert link and then wrote the action for that insert link click in db_structure.js file. The action is $("td.insert_table a.ajax").live('click'). After click action it popups the "insert_table_dialog" dialog which carries the "insertForm"
Insert Table pop up dialog
  • Then I implemented the action which triggers when the "Go" button in "insertRowTable" is clicked. That is $("#insertForm .insertRowTable.ajax input[value=Go]").live('click') and it basically post the insert form to the db_structure.php and then after the record is successfully inserted it reloads the "tablesForm" in the db->structure with newly inserted values. I used "$().load()" function to load the tableForm with new values.
  • Then I implemented the click action of the "Go" button at the "action_panel" in the insertForm. That is "$("#buttonYes.ajax").live('click')". In that case I had to handle the different "submit_types" and "after_insert" types. When user select the "new_insert" in after_insert list the "Insert table" dialog should re popup. So I used "trigger('click')" function to trigger the insert click automatically.
Now the insert option in db->structure works fine with its ajax behavior but seems little bit slow due to high number of "get()" requests during the operations. I'll fix that issue in the next week.
Next week my major tasks will be implementing the Actions on multiple rows in table browse. It will basically contains two part which are "change" and "export".

Sunday, June 5, 2011

AJAXify phpMyAdmin Interface - GSOC 2011 - Second week

After successfully completing my first task which is Ajaxify the "Create Table" option in the navigation panel last week, I moved to the second task of the schedule. It is applying ajax behavior to the "Add a new User" option in the db->privileges tab. Initially I went through the implementation of "Add a new User" option in host->privileges which is a similar situation as db->privileges. I went through the code in the server_privileges.php and server_privileges.js files to find out what are the available logics and the code which can be reused for my implementation. I found that $("#fieldset_add_user a.ajax").live("click") event code is the logic and the code which I can reuse for my implementation. After that I started modifying it according to my task.

First I added the class="ajax" attribute to the "Add a new user link" when the Ajax in enabled. Then It became supporting to the same logic in $("#fieldset_add_user a.ajax").live("click") event.

At that point when we click on the "Add a new User" link, it successfully popups the dialog box which is carrying the "Add user" form and after we submit it correctly create that user. But still its not done. Because I had to reload the "db specific user rights" table at the db->privileges tab.

After discussing with Marc I decided to use a post command to get the updated "db specific user rights" table in db->privileges and replace it with the current table. So in oder to do so I had to remove the echoes of the "db specific user rights" form in server_privileges.php file and use the PMA_ajaxResponse() to pass the string of the table object as a json string.

Then I had to face a problem of not parsing the json string correctly and outputs error. So I used the $.parseJSON() function to parse the json string at the server_privileges.js file. Then it worked fine and reloaded the "db specific user rights" table with newly added user.

Then Marc directed me to a new scenario in host->databases->check_privileges->"Add a new user" which gave some errors because of my modification. Finally I have modified the logic which corrects the error and now the feature is working correctly.

Add user dialog

Now the "Add a new user" in db->privileges option works fine with the ajax behavior and I think it will help to improve the usability of PMA.

Next week I'm going to work with modifying the "Insert for a table" option in db->structure, which will apply the ajax behavior to it.

Friday, May 27, 2011

AJAXify phpMyAdmin Interface - GSOC 2011 - First week

This is the fist week of coding time period in my gsoc 2011 project with phpMyAdmin(PMA). On 23rd of May the official coding time started. Since there were some free time with my in the community building period I started my works on before hand. It made me easy to be familiar with the code base and style which is used in PMA.

My first task is give the ajax behavior to the "Create Table" option in the navigation panel of the database. Initially when we click on the "Create Table" option it directs the content frame to a new page. So I wanted to give a dialog box which loads the create table form and then submit it using ajax.

First I went through a similar feature in the "database->structure" and "database->operation" by using the "create_table_form_minimal" form. At that case I got some knowledge on how we can use dialog boxes for this kind of scenario. Then I tried to find out of them what are the code segments which I can reuse for my task. There were three actions which used for "Create Table" option in "function.js". Those are


("#create_table_form_minimal").live('submit') - triggers when the initial form has submit.
("#create_table_form input[name=do_save_data]").live('click') - triggers when the save button clicks in the form.
("#create_table_form.ajax input[name=submit_num_fields]").live('click') - triggers when the add new column option clicks.


Out of those I realized that the second and third actions are common to both cases. I had to add a new action instead of the first one.

Then I planed how to structure my new option. After discussing with Marc I decided to add my code the "navigation.js" so it is logical and easy to use in the future. Then I developed the (#newtable).live('click') action in "naviation.js" file and after discuss with Marc I put the common logic to the "PMA_createTableDialog()" function in the "fucntion.js" file.
Finally Marc requested a modification on changing the "Add 'x' column(s) Go" option to the top of the create table form and I did that. Now the "Create Table" option in the navigation panel works fine and I think the modification added some more usability on that.
I have successfully finished my first task of my project. Next I 'm willing to work with adding the ajax behavior to the "database->privileges" option.

Saturday, April 30, 2011

AJAXify phpMyAdmin Interface - Gsoc 2011



This time my proposal on "AJAXify phpMyAdmin Interface" got accepted for Google Summer of Competition with phpMyAdmin (PMA). Marc Delisle, Michal Čihař and Ninad Pundalik who is the last year Gsoc contributor helped me a lot when I improve my patches and the proposal. Marc Delisle act as my mentor for my project in this summer.


Ajaxifing the PMA is a project idea which continues from the last year gsoc session which was done by Ninad Pundalik. Last year he has improved some important features by giving the ajax behaviour to them in the PMA. Since ajax is a trendy behaviour among web domain and since it improves the usability of the system, moving in to ajax is a huge improvement step on PMA. This time I’m willing to improve the usability of some identified important features in PMA by applying ajax behavior using jquery library. After improving those features, they will be able to provide a quick and consistent flow of operations to the PMA users.

Next series of blog post will discuss more about my project in this summer.