Page MenuHomePhabricator

Article Reminder
Closed, DeclinedPublic

Description

PROPOSAL FOR TASK
“ARTICLE REMINDER” ON MEDIAWIKI
Phabricator Task Link: https://phabricator.wikimedia.org/T161364
Contents
Personal Information
Mentors
Task Description
Deliverables
Timeline
Implementation
Other Commitments


PERSONAL INFORMATION
Name: KAYODE, Adedayo Matthew
Email Address: adedayomatt@gmail.com
Institution: Federal University of Agriculture, Abeokuta
http://www.unaab.edu.ng

MediaWiki Username : Adedayomatt
Phabricator Username: Adedayomatt
Meta-wiki link: https://meta.wikimedia.org/wiki/User:Adedayomatt
MENTORS
Moriel Schottlender
Matthew Flaschen

TASK DESCRIPTION
This task “Article Reminder” aims at improving the Mediawiki notifications; allowing logged in users to get a reminder of an article after a few days.
DELIVERABLES
PHP scripts
JavaScript source code
A sample of the implementation
TIMELINE
Coding Period: May 30, 2017 – August 21, 2017 (According to GSoC ’17 Timeline)
Total Number of weeks: 12 weeks
Average coding hours: 28 hours/week

IMG_20170331_211606.JPG (269×480 px, 38 KB)

IMPLEMENTATION
There would be need to the get the user reminder preference (i.e. X day to be reminded of the particular article). This X days would be converted to a Timestamp using the time function in php. For example, if a user wants to be reminded about an article in X days, the Timestamp of the next X day(s) would be:
<time() + (X*86400)/>
Using cookie to store users’ reminder preference would not be efficient enough because user can change browser at any time, and this data would be lost, therefore there would be need to store the user’s reminder preference and it’s associated data in a database on the server. For this reason, a new table would be created on the database with the following columns:
Reminder_ID
User_ID
Article_ID
Reminder_time
Article_Title
Article_Link
Reminder_status
Important Note: 1. The Reminder_ID column would be the Primary key for the table.

  1. Foreign key would be added to User_ID column and the “User ID column” on the the “users table” would be referenced, so that if for any reason, the user account is deleted or updated, it also reflect on the reminder table too.
  2. Reminder_time column would be an integer column that takes the Timestamp of when the user should be notified.
  3. Reminder_status would only be having two possible values: ‘pending’ or ‘reminded’

‘Pending’ indicates that the time for the reminder has not elapsed while ‘reminded’ indicates the opposite.
At the beginning of every page loaded by the user, all the pending reminders are fetched from the database, then a JavaScript function would be use on each of the user’s reminder to count down remaining seconds before the user is notified, when the remaining seconds hit Zero and the user is currently online, an XMLHttpRequest object would instantiated to fetch the reminder details from the database asynchronously (i.e. without leaving the current page where the user is), a notification can then be added by manipulating the notification area element on the current webpage the user is.

JavaScript snippet (1).png (237×488 px, 9 KB)

If the remaining seconds is negative, then it means the user was not logged in or online when the time elapsed, the notification can also be sent and let the user knows the time the reminder was sent (by formatting Reminder_Time in mm,dd hh:min)
The php script that fetch the reminder when the remaining time hits Zero or a negative value would also update the table and set the Reminder_Status column corresponding to the reminder as ‘reminded’ immediately after the successful fetching of the reminder and notifying the user.
One may wonder, how would these JavaScript keep counting down the remaining seconds on every page visited, the solution to that would be to include this JavaScript file in the header or any file that is always included before the body of any webpage on the website.
OTHER COMMITMENTS
I am a Fourth year student of the aforementioned institution, I would be writing my project which is a partial fulfillment of the requirement for the award of B.Sc in Statistics.

I am involved in a project which is a suite of software technologies, services and operation targeted at providing students with a medium to simplify their tertiary educational life and activities by providing them with services focused at different aspects of advanced educational technologies.

I also belong to AISEC, Abeokuta which is a Non Governmental Organization aimed at building up young people for leadership roles.

https://summerofcode.withgoogle.com/dashboard/organization/4574972736438272/proposal/5647575175659520/

Event Timeline

After adding the possible-tech-projects tag, what else do I need to do.
Actually, I want to write a proposal on this for GSoC '17, any advice from you @Aklapper and others??

Advice is the link that I posted. :) If anything is unclear on that page about the procedure and proposal/application format, please ask specific questions. Happy to help :)

@Aklapper please what kind of database does wikimedia use?
I am asking so i can know the techniques to implement the task.

@Adedayomatt I think the default database is MariaDB. You can also set it up locally using the databases cited here.

@Adebalogoon thank you for your interest! Please see step-by-step instructions listed here https://www.mediawiki.org/wiki/Google_Summer_of_Code_2017#Recommended_Next_Steps. The instructions to prepare a proposal is listed in these steps as well.

@Adedayomatt and @Eugene233, if you are going for an installation of the development environment, please see MediaWiki-Vagrant as the best preferred option. It will set up a VM for you with all necessary configurations and utilities; you will only have to then add the necessary roles.

Feel free to ask a specific question if you run into issues with either the microtask or the proposal drafting.

@Aklapper @Mooeypoo
I guess I can implement the task on a local server on my PC and make it a deliverable. Right??

@Adedayomatt and @Eugene233, if you are going for an installation of the development environment, please see MediaWiki-Vagrant as the best preferred option. It will set up a VM for you with all necessary configurations and utilities; you will only have to then add the necessary roles.

Feel free to ask a specific question if you run into issues with either the microtask or the proposal drafting.

@Mooeypoo Thanks for this👍

@Aklapper Alright. I got that.
I guess I can implement the task on a local server on my PC and make it a deliverable. Right??

Depending on which task you take, you can submit it to gerrit (our code review environment) or, if you're taking the gadget task, you should implement it in your user-space (see my comment on that specific microtask) and post the link in your proposal.

To get started in gerrit, see: https://www.mediawiki.org/wiki/Gerrit/Getting_started

For how to get started with our development environment (Vagrant, git, signing up for a developer account, etc) please see https://www.mediawiki.org/wiki/How_to_become_a_MediaWiki_hacker#Get_started

@Aklapper Alright. I got that.
I guess I can implement the task on a local server on my PC and make it a deliverable. Right??

Depending on which task you take, you can submit it to gerrit (our code review environment) or, if you're taking the gadget task, you should implement it in your user-space (see my comment on that specific microtask) and post the link in your proposal.

To get started in gerrit, see: https://www.mediawiki.org/wiki/Gerrit/Getting_started

For how to get started with our development environment (Vagrant, git, signing up for a developer account, etc) please see https://www.mediawiki.org/wiki/How_to_become_a_MediaWiki_hacker#Get_started

I'm going to be working on this task (Article Reminder). If I understand what you meant by Gadget tasks, I guess this isn't one of them.

Let me make myself explicit enough. What I am planning as my deliverable is a sample webpage coded with html, php, and JavaScript that will implement this particular task.
Would that be ok as deliverable?

Let me make myself explicit enough. What I am planning as my deliverable is a sample webpage coded with html, php, and JavaScript that will implement this particular task.
Would that be ok as deliverable?

Are you talking about the deliverable that you write in your proposal, or are you talking about your required microtask (that you should choose from the ones in this ticket) ?

The deliverable for the entire project is what this task lays out as the project itself; I am not sure what you mean by a "sample page" ? You are not required to deliver a sample of this project before you start it. What you are required to provide is a microtask. There are a couple of those written in the description as options.

The required microtask is for your registration to the internship (either GSoC or Outreachy) and is a required step. Please choose one of the microtasks that are written above for that.

@Mooeypoo But I can't see any microtask here.

That's because this is a subtask of the original. The actual project description is here: T2582: Remind me of this article in X days

@Aklapper and @Mooeypoo please kindly take a second to review my draft proposal here https://docs.google.com/document/d/1myvlANsGXk5pVYFVkG0XUI9VphjZ7gAiUl-gXhdF2yI/edit?usp=sharing
I would grealtly appreciate your feedbacks.

@Adedayomatt please post your proposal in the ticket itself (here, edit the description of this ticket).

Please see https://www.mediawiki.org/wiki/Google_Summer_of_Code_2017#Recommended_Next_Steps

@Adedayomatt please post your proposal in the ticket itself (here, edit the description of this ticket).

Please see https://www.mediawiki.org/wiki/Google_Summer_of_Code_2017#Recommended_Next_Steps

The proposal contains some code snippet in image form. How can I post that here?

You should be able to upload them here by drag/dropping the image into the editor. It'll produce a '{reference}' that will display the image.

See https://secure.phabricator.com/book/phabricator/article/remarkup/

This comment was removed by Adedayomatt.
Adedayomatt raised the priority of this task from Lowest to High.Mar 31 2017, 8:25 PM
Adedayomatt updated the task description. (Show Details)

Feel free to click "Edit task" and improve readability by using some markup. :)

@Adedayomatt awesome, thank you. @Mattflaschen-WMF and I will go over the proposal.

Please also be aware that there are other students interested in this project, who posted proposals as child-tasks to the original T2582: Remind me of this article in X days
And please don't forget to complete a microtask.
Also -- you might want to take out the phone number, since this is public.

Thank you for your application. It's great to see people interested.

Even better than uploading the code snippet images would be to put the code block as text. Copy the code to the text box here, highlight it, then click the </> icon to format it.

We can only consider your proposal once it's in Phabricator. Please make the following updates, then copy it in:

  • Remove your phone number.
  • Make your deliverables more specific. The project must be completed in the GSOC time period, so it's not clear what "A sample of the implementation" means (it needs to be fully done, not just a sample).
  • Please update your timeline to reflect the below.
    • May 4 - May 30 - Community Bonding Period - The timeline should include this, and explain how you will get up to speed (learning about the code base, planning, communicating with us, etc.)
    • May 30 - August 29 - Coding period. Please add to the timeline to account for the correct end date and number of weeks (13 weeks coding period + 3 weeks, 5 days for bonding period)
    • Please clarify "Code the sample front end" further, taking into account the existing Echo software.
    • "JavaScript coding" is not specific enough.
  • You can review our database layout to make your implementation section more precise.
  • GSOC is a full-time job. Do you have any conflicting commitments, e.g.:
    • When does your university start and end? How much overlap is there, if any?
    • Do you have any conflicting jobs?
    • Do you have any vacation in the period?
    • Make sure your time commitment reflects that it is a full-time job. You should certainly not expect to spend less than 30 hours/week on the project.

Thank you @Mattflaschen-WMF, @Aklapper and @Mooeypoo for the corrections and support. I would make the necessary adjustment in the proposal draft before the deadline.
@Mattflaschen-WMF I would revisit the timeline and provide more details to the implicit points you noted. Regarding my other commitment and hours dedicated for coding per week, I would revisit and rearrange my routine so I can dedicate more hours to the project. Meanwhile, you mentioned a microtask, @Mooeypoo has mentioned it to me earlier also, I would see to it.
I was not aware of the commencement of GSoC '17 application on time, that is why it seems everything is coming late. However, I appreciate your supports.

Please provide any of the below information, if you have it (from the application template):

  • IRC or IM networks/handle(s):
  • Web Page / Blog / Microblog / Portfolio:
    • You can list as many of your relevant sites as you wish, but we are particularly interested in examples of your past work, such as a GitHub account.
  • Resume (optional)
  • Typical working hours
  • Participation
    • "We don't just want to know what you plan to accomplish; we want to know how. Briefly describe your work style: how you plan to communicate progress, where you plan to publish your source code while you're working, how and where you plan to ask for help. (We will tend to favor applicants that demonstrate a clear vision for what it means to be an active participant in our development community.)"
  • Past experience
    • "Please describe your experience with any other FOSS projects as a user and as a contributor:"
    • "Please describe any relevant projects that you have worked on previously and what knowledge you gained from working on them (include links):" (please provide a link for the project you mention in OTHER COMMITMENTS, preferably to source code but that is not public to the site)
    • "Do you have any past experience working in open source projects (MediaWiki or otherwise)? If so, tell us about it! If you have already written a feature or bugfix in a Wikimedia technology such as MediaWiki, link to it here; we will give strong preference to candidates who have done so."

Thank you @Mattflaschen-WMF, @Aklapper and @Mooeypoo for the corrections and support.

Please also reach out to us on IRC (#wikimedia-collaboration) so we can discuss issues and how to improve your proposal.

Just a reminder that today is the final day to submit your final draft on https://summerofcode.withgoogle.com.

Please provide any of the below information, if you have it (from the application template):

  • IRC or IM networks/handle(s):
  • Web Page / Blog / Microblog / Portfolio:
    • You can list as many of your relevant sites as you wish, but we are particularly interested in examples of your past work, such as a GitHub account.
  • Resume (optional)
  • Typical working hours
  • Participation
    • "We don't just want to know what you plan to accomplish; we want to know how. Briefly describe your work style: how you plan to communicate progress, where you plan to publish your source code while you're working, how and where you plan to ask for help. (We will tend to favor applicants that demonstrate a clear vision for what it means to be an active participant in our development community.)"
  • Past experience
    • "Please describe your experience with any other FOSS projects as a user and as a contributor:"
    • "Please describe any relevant projects that you have worked on previously and what knowledge you gained from working on them (include links):" (please provide a link for the project you mention in OTHER COMMITMENTS, preferably to source code but that is not public to the site)
    • "Do you have any past experience working in open source projects (MediaWiki or otherwise)? If so, tell us about it! If you have already written a feature or bugfix in a Wikimedia technology such as MediaWiki, link to it here; we will give strong preference to candidates who have done so."

Thank you @Mattflaschen-WMF this is very helpful for a successful proposal, but i have uploaded the final proposal already without an IRC because i don't have one.

@Adedayomatt: Please provide text (such as tables or code) as (formatted) text instead of (sometimes hard-to-read) images. Thanks!

Please provide any of the below information, if you have it (from the application template):

  • IRC or IM networks/handle(s):
  • Web Page / Blog / Microblog / Portfolio:
    • You can list as many of your relevant sites as you wish, but we are particularly interested in examples of your past work, such as a GitHub account.
  • Resume (optional)
  • Typical working hours
  • Participation
    • "We don't just want to know what you plan to accomplish; we want to know how. Briefly describe your work style: how you plan to communicate progress, where you plan to publish your source code while you're working, how and where you plan to ask for help. (We will tend to favor applicants that demonstrate a clear vision for what it means to be an active participant in our development community.)"
  • Past experience
    • "Please describe your experience with any other FOSS projects as a user and as a contributor:"
    • "Please describe any relevant projects that you have worked on previously and what knowledge you gained from working on them (include links):" (please provide a link for the project you mention in OTHER COMMITMENTS, preferably to source code but that is not public to the site)
    • "Do you have any past experience working in open source projects (MediaWiki or otherwise)? If so, tell us about it! If you have already written a feature or bugfix in a Wikimedia technology such as MediaWiki, link to it here; we will give strong preference to candidates who have done so."

Thank you @Mattflaschen-WMF this is very helpful for a successful proposal, but i have uploaded the final proposal already without an IRC because i don't have one.

Don't make changes to your implementation, milestones, or deliverables (except trivial changes like spelling fixes), but you can add (to the Phabricator version of your proposal) personal information requested above.

There does not seem to be a microtask attached to your proposal. If one was completed before the deadline, please link it here. Thank you.

As mentors will soon be reviewing applications, if your proposal is complete, move it to the submitted column. Thanks!

Thank you to all applicants. We have accepted a different proposal.

You are welcome to apply again in the future, to any programs you are eligible for!

We also welcome your participation as a volunteer if you're interested.