===Profile Information
**Name**: Lalit Suthar
**IRC Nick**: lalit97
**Email**: sutharlalit.97@gmail.com
**Github**: https://github.com/lalit97
**Twitter**: https://twitter.com/lalit_97
**Location**: India
**Working hours**: 11 AM to 6 PM and 10 PM to 12 AM (UTC +5:30)
===Synopsis
> Short summary describing your project and how it will benefit Wikimedia projects
Wikimedia has a large pool of developers and contributors. Every year lots of new contributors join Wikimedia and they find their way to Zulip chat as I myself did. Most frequently, newcomers ask for contributing guidelines or how to get started. Org admins have to reply statically with the same messages.
A simple solution is to build a Bot which can help them with the general links which contain Contribution guidelines, Good first bugs etc. with the help of a Bot a lot of questions will be pre answered so newcomers will not hesitate to ask queries as well. This is how It will get new users unblocked quickly and org admins work will get simpler. Also it will save lots of human intervention time.
> Possible Mentor(s)
@Pavithraes, @Medhabansal, @D3r1ck01
> Have you contacted your mentors already?
Yes I have contacted them on Phabricator and Zulip.
===Deliverables
Zulip Welcome bot will perform the following tasks at the end.
- Customizable welcome message which contains some general information for new members which can help them in starting to contribute. It will be customizable by org admins using the bot interface.
- Suggest relevant people/mentors for queries posted.
- Support searching faqs.
- Moving users to specific streams by detecting the intent using fuzzy search.(Phase 2)
- Bridge communication (Phase 3)
=== Implementation Details
==== Workflow
{F31711997}
(//Img: Basic workflow of Bot//)
==== Features
* **Welcome message on Sign up**
** A welcome message from bot to new users. It will direct them to information on contributing and getting started.
** General links to help them get started with contributing. Suggest Good first bugs.
** Bot will suggest a format to new users for introducing themselves to get started.
** Documentation of the bot and it’s other useful commands like search-faqs
** This welcome message will be customizable by org admins. They can configure it using the bot itself.
{F31712006}
(//Img: screenshot of welcome message from my zulip bot//)
* **Smart Suggestions & Customizations (Phase 2)**
** Moving users to specific streams by detecting the intent using fuzzy search.
** Bot will respond to the Introduction message from the user with some helpful suggestions. For example if they mention Python as a skill, it will suggest good first bugs to solve in python and Projects to contribute where python is used.
** We will also ensure if a user has mistyped a word (like librarey instead of library), we will be able to match their query for the related project. we will use fuzzy search to match the user text to our relevant projects/streams list.
** Bot can also respond to learn-more commands, where you can insert any topic name (i.e. GSoC/Outreachy) or project name for which information will be provided if available.
** Users can search faq with a bot command.
** Users can search documentation of any project with a bot command.
** Customize the mapping for keywords which are extracted from the user message and their related project name.
{F31712070}
(//Img: workflow diagram//)
{F31712081}
(//Img: Low level algorithm for “reply to introduction”//)
{F31712085}
(//Img: screenshot from my zulip bot//)
- **Bridge Communications (Phase 3)**
This feature is a way to connect the community on Zulip to the broader community on IRC, especially for technical support. The bot would basically relay communication from a Zulip stream to an IRC channel, meaning any messages posted on IRC will be displayed on Zulip and any replies on Zulip will be posted on IRC.
One simple use case for this when a new member is stuck while setting up the project. In this case we can direct the message to a special stream say ‘Technical Support’ stream on Zulip. All messages in this stream are shared on IRC, where many folks can help the member in project setup issues.
----
Example Chat:
Purpose : Helping in Project Setup related issues
Command: bot SetupIssue <ProjectName> <issue>
Expected Reply from Bot: Moving this to ‘Technical Support’ stream. Hopefully you will get help soon :)
----
==== Technical details, Documentation, Testing and Deployment
- The code will be hosted on Github. We will use fuzzy search, Levenshtein distance for matching user text to relevant projects/streams.
- We will use python for implementing the bot. If customizations require a custom dashboard we’ll use Django to develop it.
- If we get more time, we will start taking the feedback from users if Bot answers are helpful or not and based on that will improve the algorithm to answer. We can generate the training data for improving the bot using the existing welcome messages and their responses by bot.
- Technical documentation for each feature and Unit tests for each module will be written using python's unit test library.
- It will be deployed using Toolforge.
==== Some more examples of communication with Bot
===== Case 1
Purpose : Configuring/changing the welcome message. (will be done after authentication as only org-admins can do this)
Only org admins will be able to run this command. The list of org admin will be configurable by changing the plugin code.
Command: bot config welcome_message “new welcome message goes here”
----
===== Case 2
Purpose : Learn more about any topic
Command: bot learn-more <text>
Message: bot learn-more Proposal for Gsoc
Expected Reply from Bot: There you go Google Summer of Code/Participants
----
===== Case 3
Purpose : Search Frequently asked Questions
Command: bot :search-faqs <search query> or bot :search-faqs <project name> <search query>
bot :search-faqs Welcome to Wikimedia! Here are links which can help you get started.
bot :search-faqs wikidata Welcome to Wikimedia! Here are links which can help you get started.
----
=== Timeline
| **Period** | **Task**
| May 4 to June 1 | (Community Bonding Period) Phase deciding period, where I will try to brainstorm and discuss which features should be prioritized. Will be planning all the implementation details of which libraries to be used for building the bot.
| June 1 to June 7| Setting up project and Zulip bot. Implementing Phase1 by sending Welcome messages for newly signed up users. Write test cases using unit test approach.
|June 8 to June 14 | Deploy the version1 to follow Iterative development strategy. Finishing phase 1 feedback from mentors and completing functional testing. Make the welcome message customizable for each project/stream.
| June 15 to June 21 | Code cleanup as per reviews ensuring code quality. Complete documentation upto phase I.
| June 22 to June 28 | Start Working on Phase II. Smart Suggestions, Customizations & Search-faqs. Implement Smart Suggestions for projects and streams, based on user skill set and interest.
| June 29 to July 3 | First Evaluations
| July 4 to July 10 | Implement searching faqs from wikimedia FAQ page. Implementing documentation search for any specific project asked in the user's search query. Implement customization of keywords and relevant project/stream suggestions.
| July 11 to July 17 | Document all the commands of phase II. Write unit tests for each of them and submit code for review. Deploy all the features on toolforge upto phase 2.
| July 18 to July 26 | Start implementation for bridge communications. Furnish requirements about which zulip stream and IRC channel need to be connected. Implement posting messages from IRC to Zulip.
| July 27 - 31, 2020 | Second Evaluations
| August 1 to August 7 | Implement posting messages back to IRC from Zulip. Write test cases for both the publisher and subscriber modules in this communication.
| August 8 to August 14 | Deploy on Toolforge and get feedback from the community and users. Work on Performance improvements and finish end to end functional and unit testing. Code cleanup as per reviews before submitting for final evaluations.
| August 15 to August 21 | Iron out features and fix bugs which are reported. Write Documentation for phase 3.
| August 21 to August 24 | Fix remaining bugs if any. Complete Documentation.
| August 31 to September 7 | Final Evaluations
===Participation
- I will use Github to version control my code. Each Phase will be a new branch, and will be deployed in an iterative cycle.
- I will get feedback on code and functionality after each deliverable.
- I will be active on Zulip to communicate with mentors.
- I will talk to mentors on zulip for any design decision, feature implementation, bug or code review discussion.
- I will write blog posts regularly about my experience and learnings from this project on Medium ([[ https://medium.com/@sutharlalit.97 | lalit suthar ]]).
===About Me
> Your education (completed or in progress)
pursuing my B.Tech 4th year in Information Technology major at Government Engineering College Bikaner.
> How did you hear about this program?
I have been contributing in open source from last year and I heard about the program from my seniors who also have been actively working on open source projects.
> Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?
I will have my semester exams possibly in June (shifted due to Covoid-19) . I have no other time commitments during this summer. No vacation planned as well. I will be staying at home.
> We advise all candidates eligible for Google Summer of Code and Outreachy to apply for both programs. Are you planning to apply to both programs and, if so, with what organization(s)?
No, I am applying for Google Summer of Code only.
> What does making this project happen mean to you?
Wikimedia is world’s biggest information organizer and there are lot of developers who want to contribute to wikimedia. Creating a tool which will help developers in starting to contribute will be a great opportunity. Making this project would mean creating an interface between the outside dev world and mentors inside wikimedia.
This project will help org-admins to be more productive, reduce noise in channels and help the developer community when they want to start contributing to a project. For new members, a user friendly bot can take a lot of burden and hesitation away. It will be helpful for everyone.
===Past Experience
==== Skills
- Language : Python
- Frameworks : Django
- Web Technologies : Html, CSS, JavaScript
- Version Control : Git
- Database : Mysql, Sqlite
- Libraries and Tools : Django Rest Framework, ReactJs, React-Redux, Celery, Redis, Selenium
==== Projects
- [[ https://github.com/lalit97/krishna-lessons | Krishna Lessons ]]: Twitter Bot which posts one verse from Bhagavad Gita daily. Made using Python and Tweepy library. Live at https://twitter.com/krishnalessons
- [[ https://github.com/lalit97/feedfetcher | Feedfetcher ]]: News aggregator application, which collects summary of news from different categories from given RSS feed urls. It processes the RSS feeds asynchronously to get news content. Built using Python, Django, Django Rest framework & Celery.
- [[ https://github.com/lalit97/Blog-app- | Blog App ]]: Simple Tic-tac-toe game built using Vanilla Js.
- [[ https://github.com/lalit97/Tic-Tac-Toe | Tic Tac Toe ]]: Updated version of Govt.blog application made using python, Engineering College Bikaner website using Reactjsdjango.
- [[ https://github.com/lalit97/college-site | College Website ]]: Simple blog application made using python,Tic-Tac-Toe | Tic Tac Toe ]]: Simple Tic-tac-toe game built using Vanilla Js.
- [[ https://github.com/lalit97/college-site | College Website ]]: Updated version of Govt. djangoEngineering College Bikaner website using Reactjs.
==== Open source contributions
- [[ https://github.com/Ritsyy/findAroundYou/issues/9 | Upgrade django to version 1.11.19 or later ]]
Pull Request: [[ https://github.com/Ritsyy/findAroundYou/pull/11| # 11]]
==== Problem Solving Profiles
- [[ https://www.hackerrank.com/lalit122 | Hackerrank ]]
- [[ https://www.hackerearth.com/@lalit122/ | HackerEarth ]]
- [[ https://auth.geeksforgeeks.org/user/lalit97/practice/ | GeeksForGeeks ]]
==== Wikimedia Contributions
| Status | Phabricator Ticket | Title |Pull Request
| Merged | [[ https://phabricator.wikimedia.org/T239503 | T239503 ]] | Handle modification of application status from INVALID to anything else | [[ https://github.com/WikipediaLibrary/TWLight/pull/429 | #429 ]]
| Open | [[ https://phabricator.wikimedia.org/T212767 | T212767 ]] | Provide error message when navigating to Not Available resources | [[ https://github.com/WikipediaLibrary/TWLight/pull/427 | #427 ]]
| Merged | [[ https://phabricator.wikimedia.org/T218857 | T218857 ]] | Add more links to activity feed | [[ https://github.com/WikipediaLibrary/TWLight/pull/414 | #414 ]]
| Open | [[ https://phabricator.wikimedia.org/T170113 | T170113 ]] | Add 'Back-to-top' button for partners list page | [[ https://github.com/WikipediaLibrary/TWLight/pull/410 | #410 ]]
| Open | [[ https://phabricator.wikimedia.org/T226369 | T226369 ]] | Add condition to check user is current coordinator | [[ https://github.com/WikipediaLibrary/TWLight/pull/406 | #406 ]]
| Merged | [[ https://phabricator.wikimedia.org/T234551 | T234551 ]] | Show Error on 'Mark as Sent' page for automatic-send partners | [[ https://github.com/WikipediaLibrary/TWLight/pull/405 | #405 ]]
| Merged | [[ https://phabricator.wikimedia.org/T193334 | T193334 ]] | Add placeholder text to Review filters | [[ https://github.com/WikipediaLibrary/TWLight/pull/404 | #404 ]]
| Merged | [[ https://phabricator.wikimedia.org/T243746 | T243746 ]] | Add function to handle file name given as url | [[ https://gerrit.wikimedia.org/r/c/labs/tools/VideoCutTool/+/573354 | #573354 ]]
| Merged | [[ https://phabricator.wikimedia.org/T243311 | T243311 ]] | Change 'VideoTrim Settings' position above the 'Step2' | [[ https://gerrit.wikimedia.org/r/#/c/labs/tools/VideoCutTool/+/569217/ | #569217 ]]
| Open | [[ https://phabricator.wikimedia.org/T216400 | T216400 ]] | Allow wildcard project searches | [[ https://github.com/Samwalton9/hashtags/pull/15/ | #15 ]]
| Open | [[ https://phabricator.wikimedia.org/T216399 | T216399 ]] | Allow hashtag project searches | [[ https://github.com/Samwalton9/hashtags/pull/10/ | #10 ]]
==== Microtasks carried out
[[ https://phabricator.wikimedia.org/T245685 | Improve content design of Help:Toolforge/My_first_Pywikibot_tool ]]
===Any Other Info
- Tool used for Mockups [[ https://balsamiq.cloud/ | Balsamiq Cloud ]]