==Profile==
Name: Ankit Maity
IRC nick: ankitmaity
Profile: https://www.linkedin.com/in/ankitmaity
Location: New Delhi, India
Working hours: 1300 - 2300 hours (UTC+05:30)
==Summary==
===Welcoming===
The #announce stream announces all new signups, each signup will trigger a bot action from goodbot on the # general stream (Getting started topic). The bot will direct them to https://www.mediawiki.org/wiki/How_to_contribute, https://www.mediawiki.org/wiki/New_Developers, https://www.mediawiki.org/wiki/Good_first_bugs and offer a list of available GSoC/GSoD/Outreachy commands (and informing the participant about the `!help` command).
===Replying and error control===
If summoning the bot, the bot will helpfully give a list of commands and expect you to answer them, some commands (such as `faq`) expect additional commands, so each command will have a failsafe to not trigger an error, as well as helpful followups like "if you intended to ask a question, type `!help faq your-question` (shown in demo).
====Organization-level assistance====
The bot will seek to assist them about respective project ideas, guide them to instructions and GSoC/GSoD/Outreachy org-admins. The participant can request help by summoning the bot with a specific command such as `!help gsoc`, the bot will display further resources related to the outreach program (shown in demo).
====Project-level assistance====
The bot will seek to assist them about specific projects by directing them to respective mentors, Phab tasks and instructions about that particular project.
===On-stream bot administration===
Allow setting bot administrators via on-stream commands. Bot admins can configure core messages, such as links to resources and welcome messages.
===Summoning user-groups===
Since Zulip API does not allow bots to get user_groups, the bot will maintain its own database of user_groups, such as mentors for specific projects, Outreachy/GSoC/GSoD org-admins. The bot will provide resources to contact these user-groups as well the ability to send pings via Zulipchat itself.
====CI/CD====
We will use Travis CI for continuous integration and build verification. We will use a mirror testbot and use integration testing instead of standard unit-testing and rely on preventive error control mechanisms, integration testing using the mirror-testbot should relay any errors instead of setting up expensive unit-testing methods that will bulk up bot packages.
=====Toolforge deployment=====
The entire pipeline of deployment and syncing will be triggered by a cronjob carried out after commit is pushed to production. Setting up config files need to be done on the production host itself, as well as automated updates via the sync script.
====Searching Wikipedia and StackOverflow====
Wikipedia and StackOverflow can prove to be good usage for applicants and participants. Both sites have strong, mature APIs and will be a very useful resource without needing to leave Zulipchat, also helpful in answering queries by mentors on why certain errors are occurring (for e.g. `@goodbot search stackoverflow “ModuleError:...”`).
---
- Possible mentor(s): @Pavithraes @D3r1ck01 @Medhabansal
- **Have you contacted the mentor?** Yes, I've contacted the mentors via email.
==Timeline==
| **Period** | **Task** |
|-------------|-----------|
|April 27 to May 18|**Community bonding period**. Discuss requisites and pre-requisites with mentors and identify most important features. Research about deployment on Toolforge and identify potential problems (proactive risk strategy). Also, talk to current and ex (if available) Outreachy, GSoC, GSoD participants and mentors, and see what features they would want in such a bot.|
|May 18 to May 24|Start implementing core features for the bot, such as welcoming and replying to participants.|
|May 25 to May 31|Start implementing more user-facing features, such as intelligently answering questions based on given FAQs, links and subscribing them depending on whether they are an Outreachy/GSoC/GSoD participant.|
|June 1 to June 7|Begin production deployment on Toolforge and iron out all possible errors.|
|June 8 to June 14|Testing Round 1: Exploratory testing and documentation. Get an MVP out of the door.|
|**June 15 to June 19**|**Phase I evaluation**|
|June 20 to June 26|Take input from stakeholders such as volunteer developers, current and previous mentors and participants to gauge requirement of features. Identify and implement strategies to enable on-stream administration of the bot by moving messages to a database structure.|
|June 27 to July 3|Dynamically allow administration, allow the bot owner to add other administrators and admins to add and remove admins and so on.|
|July 4 to July 10|Implement a feature for bot administrators to update core messages (such as welcoming and replying to “!help”) from streams itself.|
|July 11 to July 13|Testing Round 2: Exploratory testing, automated testing and documentation. Refine present features and strategize on what features to be added next.|
|**July 13 to July 17**|**Phase II evaluation**|
|July 17 to July 23|Allow setting of summon groups, such as “org-admins”, “GSoC”, “Outreachy”, etc. via on-stream commands. Participants can make use of these summon groups to summon them as well as available details (such as email, IRC nick).|
|July 23 to July 29|Allow setting project-specific commands via on-stream commands. Participants can make use of these summon groups to summon them as well as available details (such as email, IRC nick).|
|July 30 to August 5|Implement search functionality from Wikipedia and StackOverflow.|
|August 6 to August 10|Testing Round 3: test robustness and recovery, set up failsafe measures.|
|August 11 to August 13|Freeze the codebase and iron out all kinks before final prod deployment.|
|August 14 to August 17|Improve UX, prettify documentation, introduce bot to participants, find ways to extend the bot beyond current usage as a stretch goal.|
|August 17 to August 24|Mentors submit final student evaluations.|
|**August 25**|**Final results of Google Summer of Code 2020 announced**|
|----------------|------------------------------------------------------------------------|
====Stretch goals====
* Contributor guide for new contributors
* Possibility of expansion beyond GSoC/Outreachy/GSoD by increasing modularity in the code.
* Gamification
** Chatting with the bot!
** Implement a feature to play games with the bot, such as Tic-Tac-Toe.
==Deliverables==
* A !!user-friendly!! bot that can understand commands and assist new members to the Zulipchat channel.
* A !!robust and reliable!! bot that has mechanisms in place that will restart by itself in case it fails.
* An !!interactive!! bot that does exactly what it's asked with a 100% accuracy.
* A bot that makes the org-admins' life easier by !!summoning them only when required!!.
* And a !!simple!! bot that does not require hardcoding information and can be modified from the channel itself.
* !!Proper documentation!! about the functioning of the bot on the repo itself, and to assist future volunteer developers to make new features.
==Participation==
* I will communicate with mentors via email and Zulipchat. I am also active on WhatsApp if that's preferable.
* I plan to deploy the development code to GitHub ([[https://github.com/QEDK/goodbot|link to repo]]) preferably under an MIT license. It can be branched into development and master/production branches to separate development from production code if required.
(WARNING) Since the repo is private, it will show an error 404.
* I will use Phabricator for managing tasks and subtasks.
* The production code will be deployed to Toolforge, which can be synced by cronjob-ing a sync script with the above repo.
* I will provide reports twice a week via Google Docs and publish a blog post at the end of the period on my Medium (https://medium.com/@ankittt) summarizing the entire experience.
==About me==
- I am currently pursuing Bacherlor's of Science in Computer Science (Honours) from University of Delhi. I expect to graduate in May 2021.
- My friend from a nearby university successfully completed his GSoC project with FOSSASIA, we participate in hackathons together, during one of which he told me about this experience.
- In the first week (of the community bonding period), I will have my semester exams but I expect to be available on most days. They are fairly spread out so I doubt that it will impact my availability. After my exams, I do not have any job or educational commitments as it will be my semester break period. I am confident I will be available for the entire duration of this project. I expect to give 350+ hours (estimating from 5x70) to this project.
- I am only applying for GSoC '20. As of now, Wikimedia Foundation is the only organization I am applying to. Per eligibility requirements, I would also like to state that I have never participated in GSoC or Outreachy.
- As someone who has been a long-time contributor to Wikipedia and someone who intends to be a part of the Wikimedia movement in the future as well, taking on the role of a student developer with the Foundation gives me the opportunity to give back to the project. Outreachy and GSoC do a good job of bringing excellent developer candidates directly in contact with people organizations such as the WMF, I believe I can make that process easier for those candidates, as well as expand my knowledge and involvement with the worldwide Wikimedia movement. It would mean a lot to me personally to be able to contribute positive towards making their onboarding process easier and giving deserving candidates a helping hand to begin contributing to the Wikimedia project. I would also like to keep contributing to this particular project to make it successful and also the Wikimedia movement as a whole.
==Past experience==
I've been a [[https://en.wikipedia.org/wiki/User:QEDK|long-time contributor]] to Wikimedia projects ([[https://en.wikipedia.org/wiki/Special:CentralAuth/QEDK|~10 years]]), I also hold the sysop and editfiltermanager rights on the English Wikipedia and autopatrolled on a few others. I began contributing to the Twinkle codebase in [[https://github.com/azatoth/twinkle/commit/da620625ca07b603db0a9c6235a4e9cb12235dd8|2012]], a Gadget that is used by most of editors contributing to Wikipedia. I am still an active contributor to the codebase:
* https://github.com/azatoth/twinkle/pull/877
* https://github.com/azatoth/twinkle/pull/847
* https://github.com/azatoth/twinkle/pull/838
* https://github.com/azatoth/twinkle/pull/837
I also assisted in the updating of Twinkle Bengali back in 2013 as their version was running out-of-date:
* https://github.com/jayantanth/twinkle-bn/commit/5b86ac32254a36de6c52d6aa13687619b9a7baba
* https://github.com/jayantanth/twinkle-bn/commit/51807646ca518ad0342cf29f0ce16f70192114f6
* https://github.com/jayantanth/twinkle-bn/commit/bb33d59d131e2952cc56169f7549267ae74ede32
* https://github.com/jayantanth/twinkle-bn/commit/673cc867e3534ad445a5ddf3af05aeaf69f3084e
until it was localized and branched off via a Gadget as Twinkle is not yet i18n-ized.
I've interned with companies in the fields of data science and machine learning, unfortunately, most of my work there is covered by copyright and NDA. I've been reporting bugs on MediaWiki since the Bugzilla days, I've also contributed code to the Xtools project ([[https://github.com/x-tools/xtools/commit/47f07212ef38f243660f1a9a0181d089940f43d9|1]]) and the Toolforge-hosted WHOIS tool ([[https://github.com/whym/whois-gateway/commit/25c3da635b5e71d134cd0057cbbb40d99b4670d7|1]], [[https://github.com/whym/whois-gateway/commit/6c1cca458cdf2de00bfee78a1a72e0f21572cfff|2]]) both of which are widely used by contributors. Apart from this, I've recently worked on fixing Phab tasks marked as "patch welcome" and "good first bug" some of which are in core MediaWiki:
* https://gerrit.wikimedia.org/r/c/mediawiki/core/+/578578 (merged)
* https://gerrit.wikimedia.org/r/c/mediawiki/core/+/578580 (merged)
* https://gerrit.wikimedia.org/r/c/operations/puppet/+/578575 (merged)
* https://gerrit.wikimedia.org/r/c/operations/puppet/+/578611 (merged)
* https://gerrit.wikimedia.org/r/c/operations/puppet/+/578609 (merged)
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/DynamicPageList/+/578548 (merged)
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/DynamicPageList/+/579919
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/DeviceMapLogCapture/+/580118 (merged)
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/BlueSpiceEditNotifyConnector/+/580116 (merged)
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/ArticleFeedbackv5/+/580322 (merged)
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/NetworkAuth/+/580321 (merged)
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/AnonPrivacy/+/579855 (merged)
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/CookieWarning/+/579685 (merged)
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/SecureSessions/+/579736 (merged)
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/MassMessage/+/578977 (merged)
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/ContentTranslation/+/578976 (merged)
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/ExtJSBase/+/579654 (merged)
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/ExtJSBase/+/578980
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/Wikibase/+/579011 (merged)
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/Gadgets/+/578978
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/GlobalContributions/+/579524 (merged)
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/GlobalContribs/+/579618
* https://gerrit.wikimedia.org/r/c/mediawiki/extensions/DonationInterface/+/579738 (will be merged after prod migrates to MW 1.35.0)
I am proposed to be whitelisted as a long-term WMF contributor and volunteer developer: https://gerrit.wikimedia.org/r/c/integration/config/+/579623
I have experience with the Python, Java, JavaScript, C++ and C languages as a result of working with OSS and other projects. I also have experience with running tools on Toolforge (see [[https://en.wikipedia.org/wiki/User:QEDKbot|my bot]], [[https://en.wikipedia.org/wiki/Wikipedia:Bots/Requests_for_approval/QEDKbot|ongoing request for approval]] and [[https://tools.wmflabs.org/admin/tool/qedkbot|TF tool]]). I also experience with deploying Python apps (such as the one for Zulip-bot) on services like Heroku and Microsoft Azure (learnt as part of a hackathon, [[https://github.com/QEDK/AIDEN|link to repo]]) and VCS (mostly Git) as a result of contributing on OSS projects.
Working with the Wikimedia community as well the local developer community has given me experience with community organization and collaboration, which has been enlightening for me. I've used and set up (like Tatsumaki mentioned above) multiple bots on Discord which gives me an idea about suitable workflows for help/chatbots.
==Demo==
{M298}
The demo pictures can be found at M298
The bot is accessible on the private `#goodbot` stream on Wikimedia Zulipchat.