User:X-Savitar/IFTTT GSoC Report 2016

Introduction
My name is Alangi Derick Ndimnain (IRC handle: d3r1ck), I joined Wikimedia Foundation on Sep 13 2015. Since then, I have been contributing to the movement and part of my work is available on my mediawiki profile page here: My MediaWiki Page or on Wikidata here: My Wikidata Page. In addition to that, I was selected in the GSoC 2016 program to contribute code to the Wikimedia Foundation (WMF). I was selected on the project: "Integrating IFTTT (IF This Then That) Support for Wikidata" in which you can find the proposal for the project here: Project Proposal. This project is mentored by:


 * Stephen Laporte (Primary Mentor)
 * Beneditk Seidl (Co-Mentor)
 * Marius Hoch (Co-Mentor)
 * Lydia Pintscher (Co-Mentor & Product Manager, Wikidata)

In addition, I will be executing this project during the Summer and below will be a daily log with respect to my progress in the project starting from Community Bonding to Final Evaluation and Code Submission to Google. You can still follow my progress in the project in my blog: project progress blogspot on my Google Blog Spot in brief.

Community bonding
Week 1 (23nd April - 29th April)


 * Created Project progress report page (this page) as a sub-page of my profile page to keep track of my work during the Summer of Code and a brief log of this report in blog spot here: project progress blogspot
 * Created a phabricator conference to enable a synchronized discussion about the project progress with my mentors and notify them with recent updates on the project's progress and any other updates.
 * Held meetings with some of my mentors individually, having their weekly schedules for code review, guidance etc... This enabled me to get their available times, taking into consideration time zones.
 * Extending Wikipedia IFTTT to support RSS feeds. Worked on the Article revisions and User revision feeds in addition to the Article of the Day, Word of the Day and New article feeds I already worked on. Commit on github is here: Commit and the pull request for the work here: PR3.
 * Created a Wikimedia Tool Labs account and submitted to the mentor (Stephen) so that he could integrate me to the dev edition of the Wikipedia IFTTT application on Tool labs. This will enable me to be running Database Access Layer (DAL) tests that is concerned with database driven feeds.
 * Requested for access to be added to a group on tools lab so that my account can be given rights under a particular project. In this case, testing on Wikipedia IFTTT and development of Wikidata IFTTT during developing the project.
 * Tool Lab account request was processed and approved by Tim Landscheidt and at this point, it is just left for me to have access to the IFTTT dev project on tools lab for testing.
 * Stephen (mentor) added me to Tool Labs on the IFTTT-Dev project so that I can perform testing of the RSS feeds work that I have done. I successfully logged into Tool Labs after adding my SSH key to my tool labs profile. Ran DAL (Database Access Layer) tests for feeds that needed DAL for its functioning and all where successful.

Week 2 (30th April - 7th May)


 * Created a discussion thread here, where my mentors will suggest and decide on the triggers that will be implemented for Wikidata IFTTT web app. Also, I am personally doing some thinking and research on the triggers which will be implemented and will suggest to mentors and if approved, all the decided triggers will be implemented during the coding period.
 * Further my leaning and investigation on Wikidata API, installed a local instance of the API on my computer and started running local queries on my_wiki database. At this point, I am understanding how the Wikidata API work and following the API's documentation at Wikidata API Docs.
 * Sent a formal introductory mail to the Wikimedia dev mailing list, Wikidata and Wikidata dev mailing list informing the community members about my acceptance to the GSoC program and also the project I am working on. The links to the mail in the lists are here: Wikimedia-Dev-List, Wikidata-List and Wikidata-Dev-List
 * Reading documentations about IFTTT concept and also studying in detail Stephen's implementation of IFTTT web app for Wikipedia. Reading docs on RESTful API's and JSON/XML data transfer mechanisms.
 * Schedule a meeting and sent and email to my mentors including my academic supervisor on my GSoC project and the meeting agenda can be seen here: Meeting Agenda, meeting shall take place on Google Hangout and will be 1hr 30mins maximum.
 * Setup a hangout on air call and created an event on my YouTube channel where the call can be streamed live by other audience. Here is the link to the video/audio on YouTube: Live Video/Audio.
 * The meeting held and was very exciting. In this meeting, we had the following points cleared out:
 * Modification of time-line to suite the current demands for the project. Once I modify the time-line, I will put a link to it.
 * Agreed that we shall investigates all the following listed triggers for Wikidata and rank them to choose the best that will be implemented.
 * I shall no longer use Gerrit for development, so I shall use Github and as a result, I shall set-up Travis CI automated testing bot to help me with some testing aspects of the project.
 * We also agreed I will also spend some time writing test cases/suite for the current Wikipedia IFTTT web app and also write Wikidata's tests along side building the triggers. In addition to this, I shall also help write documentation for both the current app and the Wikidata app I shall develop.
 * Modified my GSoC proposal as agreed in the meeting with the mentors. This modification was done both on the Google docs version of the proposal and on the phabricator (T129016) version of the proposal.

Week 3 (8th May - 15th May)


 * Researched on how to set up Travis-CI bot with Github repositories and also specific to repositories with python projects (any version of python). Read on how to transfer Travis-CI bot setting from one repository to another.
 * Learned how to use Query module in the Wikidata API, using it in my local instance to run queries again the database. This enabled me to understand how the query module works. Under the query module, I learnt how to use;
 * lists
 * meta
 * generator
 * prop
 * Researched on Unit testing and Integration testing in Python and most especially related to the IFTTT project. Unit testing will be based on the 8 triggers for Wikipedia IFTTT and the triggers I will develop for Wikidata. Also, in addition to the Unit tests, I shall also write integration tests for all the triggers in concern.
 * Practicing how to write unit tests in python using the "unittest" package and also reading how to run unit tests in python using "Nose". This will enable me to write unit tests for the IFTTT project.
 * Pushed a mini project on Github where I am using to practice my unit testing skills in python. The link to the repository can be found here: Math Functions & Unit Tests
 * Had in total of 3 meetings with the mentor with each greater than 1 hours to discuss on how to go about writing the tests. Which properties of the triggers to be tested and other parameters to be tested in the triggers. At the end, we had put in place all the parameters to be tested in triggers.
 * Researched about how to dynamically generate test cases in python since this will be needed in the project to automatically generate test cases for all the triggers rather than writing a test for each trigger in concern.
 * Investing the Wikidata list of proposed triggers and ranking them in order for I and the mentors to select the highest priority triggers to implement during the coding period. There are 6 triggers so far and they are going through a ranking process.

Week 4 (16th May - 22nd May)


 * Finalizing the ranking process of the Wikidata triggers with the mentors.
 * Wrapping up with the study of the code base and citing some key important core parts of the code that will be related to my GSoC project.
 * Reading flask docs on client side testing since this will be highly necessary for my project. This will enable me to test the app just withing the application not involving the servers.