Eat, Sleep, MindTheWord, Repeat [GSoC’16]

Links To Completed Tasks

Rohan Katyal
10 min readJun 9, 2016

Chrome Extension: https://github.com/OiWorld/MindTheWord/commits/master?author=rohankatyal29

Firefox Extension: https://github.com/OiWorld/MindTheWordFirefox/commits/master?author=rohankatyal29

Weekly Updates

Post GSoC Plan

I plan to remain an active contributor to MindTheWord. Since, the vision and feature list of MTW is not exhaustive and so much more can be done. I would want to extend the project by extending the reach to more and more users and improving the overall learning experience by testing the current and implementing new features.

Week Nine, Ten and Eleven

The completion of these tasks bring an end to an amazing summer of code. I successfully finished all the tasks.

  • I spent two hours on Skype trying to explain a language trainer in the US how to configure MindTheWord, I got some insightful feedback from her in the process. My experience of helping her setup the extension got me thinking on how to make the extension easier to use. After discussion with the team I added two features to enhance the usability of the extension display API key limit and tutorial videos
  • Display API Key Limit (Link To Commit) — I developed the backend support and user interface to display the API key limits. Whenever the daily or monthly limit is reached an alert is shown to the user to wait or change the key.
  • Tutorial Videos (Link To Commit) — I recorded tutorial videos and uploaded them on Youtube. I added modals in the extension with the videos embedded.
  • More Stats — Added support for daily API request stats
  • Manual Testing — Tested the system from a user’s perspective. I asked 6 of my family and friends to use all the features of the system and conducted contextual inquiries. The results were very satisfying.
  • Stanford POS Tagger[Stretch Goal] — Still looking into the possibility of implementing a POS tagger and different cases where this can be used.
  • Bug Fixes and Changes — Quiz word order wasn’t getting shuffled (Link To Commit), Translation percentage is missing in the description of patterns in stats tab (Link To Commit), Comma separation of stats should be avoided (Link To Commit), Minor update in quiz feature (Link To Commit), “Generate new quiz” button takes user to basic options tab (Link To Commit), Words in difficulty buckets not getting toggled (Link To Commit)

Week Seven And Eight

  • Porting Extension To Firefox (Link To Commit) — I completed porting all the features to Firefox [Future Work] — Testing the Firefox add on for corner cases
  • Visual Hints (Link To Commit 1, Link To Commit 2) — The user can now see hints to assist in remembering/guessing the translation before translating the word to the original language
  • Fixed High Priority Issue #95 (Link To Commit) — Previously there was no support for dynamically loaded page content. And by extension, no support for JS-only single page apps. Using mutation observers I have added an enhancement for all dynamically loaded content to be translated. Screenshots of dynamically loaded responses on Medium-

Week Six

  • Porting Extension To Firefox (Link To Commit) — I further ported the application to Firefox. Before starting to port the extension to Firefox I had to chose between using XUL or web extensions. I talked to developers on the mozilla developer network about the issue. In order to minimize the porting effort I decided to go with web extensions as the APIs were similar to the ones in Chrome. Even though web extensions have just been introduced and still are in experimental state, this will be the standard for firefox add ons in the future. The documentation also recommends to use web extensions for production grade add ons. However some of the Chrome APIs that the application is dependent on aren’t available in web extensions which are creating roadblocks, for example the onInstalled event doesn’t exist in web extensions. The first stable version of Mozilla Firefox with full functional support for web extensions will be introduced in August’16. I am currently using nightly and firefox developer edition, some of the features in both of them aren’t stable because of which I am facing challenges in testing the ported features for example context menu features are working on firefox developer edition but not on nightly. The extension has not been fully ported yet. I am waiting for the stable version of web extensions to come out for me to able to test the features in and out.

Week Five

I developed a gamification feature to keep the user engaged

  • Quiz Mode (Link To Commit) — To get the user more involved and improve the user’s ability to retain the translations I added a quiz mode. The user can test herself/himself on randomly selected ten words out of the last set of translated words.

Week Four

This week I completed all the tasks before the mid term in my timeline.

  • Statistics (Link to Commit 1, Link To Commit 2, Link To Commit 3, Link To Commit 4) — In today’s age of big data, it’s always interesting to know the numbers. I implemented a feature for the user to get to now the number behind MindTheWord: total number of words translated, words translated in every pattern, blacklisted words, blacklisted websites, saved translations, difficulty buckets, learnt words and user defined translations. [future work: implementing some interesting stats suggested my by mentor]
  • Porting Extension To Firefox — To provide the benefits of MindTheWord to more users I began porting the extension to Firefox and realised that implementing all the chrome extension features into Firefox is not going to be a straight forward task.

Week Three

  • Mark words as learnt (Link To Commit) — As the user progresses in his endeavour of learning a new language, there will be words that he would’ve learnt well. There is no use of translating those words in the text again and again, the user should be able to concentrate on the words that he doesn’t know well. Marking words as learnt prevents the words from being translated. The user can keep a track of the his learnt words in the options page.
  • Save translations (Link To Commit) — This feature allows the user to save specific translations into his dictionary, which further allows him to review those translations time and again. These translations can be saved from the context menu and the options page. [Future work: the user will be able to restrict translations to only these ones]
  • Difficulty buckets for words (Link To Commit 1, Link To Commit 2) : I developed the UI to view, add and remove words in the difficulty buckets in the options page. Words can be removed from buckets from the context menu as well.
  • Fixed bug which was empty translations to be added into the local storage
  • Code refactoring and adding tooltips to maintain ES6 standards

Week Two

Another week has gone by in the pursuit of making lives easier for people wanting to learn new languages, everything is still on track, that is a sign of relief. On the other hand this week was full of roadblocks, mostly because of the asynchronous nature of Javascript. Promises came to the rescue.

I developed context menu based features to make the learning curve less steep for the user:

  • Difficulty buckets for words (Link To Commit 1, Link To Commit 2) — Since we all put the tasks we want to do into different difficulty buckets and invest time on each one of them accordingly, I thought of implementing a similar feature for MindTheWord. The user can put words into different difficulty buckets namely easy, normal and hard and the words in different difficulty buckets appear in different colors after being translated. This allows the user to concentrate more on the words he finds difficult and less on the ones he already knows well.
  • Search for sentence examples (Link To Commit) — It is important that the user understand the different contexts in which the word can be used. Sentence examples assist in the user’s understanding of the word beyond the sentence it has been translated in. In order to provide examples I developed support for youdictionary.com, use-in-a-sentence.com and manythings.org.
  • General Improvements — A check was added to ensure that the context menu based features can not be used on blacklisted websites or when MindTheWord is switched off.

Week One

One week into the coding period, I know the code base in and out. I have spent several hours on MindTheWord. I dedicated this week on adding some essential context menu based features which I feel are essential for an extension which aids in the user’s learning of a new language:

  • As I like to call it SpeakTheWord (Link To Commit) — now the user can not only see the translations inline but also hear the pronunciations. Many linguistic experts claim that knowing the pronunciation helps the individual more than knowing the translation. MindTheWord currently uses the chrome text to speech engine for speaking the word. I plan on adding support for more speech engines in the near future.
  • The ability to search for similar words (Link To Commit) — Knowing the synonyms helps to learn the word better and even assists in retaining the translation mapping. Currently the extension returns results from Bing, Google, Google Image search and Thesaurus.com.

Community Bonding

We spent the community bonding period on getting to know the code base better, modifying the timeline/goals, setting up the development environment, modularizing the code base

and of course for getting to know each other better :)

Several video calls and coding sessions later we were able to automate and enhance the workflow using gulp, travis CI and shifting the code base to ES6 standards.

We were all set to go, rather raring to go!

If you have any suggestions or even if you just want to say hi! you can shoot me an email on rohankatyal29@gmail.com

--

--

Rohan Katyal

Product Manager, Meta’s in-house incubator (Past WhatsApp, Yelp, Yahoo, FindAWay)