When we were deciding what to build for our hack this time we had plenty of great ideas. We zeroed down on something that people like us would want to use. The hardest problem faced by people like us is managing the assignments, classes and the infamous LeetCode grind. Now it would have been most useful if we could design an app that would finish our homework for us without plagiarising things off of the internet but since we could not come up with that solution(believe me we tried) we did the next best thing. We tried our hands at making the LeetCode grind easier by using machine learning and data analytics. We are pretty sure every engineer has to go through this rite of passage. Since there is no way to circumvent this grind only our goal is to make it less painful and more focused.
What it does
The goal of the project was clear from the onset, minimizing the effort and maximizing the learning thereby making the grind less tedious. We achieved this by using data analytics and machine learning to find the deficiencies in the user knowledge base and recommend questions with an aim to fill the gaps. We also allow the users to understand their data better by allowing the users to make simple queries over our chatbot which utilizes NLP to understand and answer the queries. The overall business logic is hosted on the cloud over the google app engine.
How we built it
The project achieves its goals using 5 major components:
- The web scrapper to scrap the user data from websites like LeetCode.
- Data analytics and machine learning to find areas of weakness and processing the question bank to find the next best question in an attempt to maximize learning.
- Google app engine to host the APIs created in java which connects our front end with the business logic in the backend.
- Google dialogflow for the chatbot where users can make simple queries to understand their statistics better.
Android app client where the user interacts with all these components utilizing the synergy generated by the combination of the aforementioned amazing components.
Challenges we ran into
There were a number of challenges that we ran into:-
- Procuring the data: We had to build our own web scraper to extract the question bank and the data from the interview prep websites. The security measures employed by the websites didn't make our job any easier.
- Learning new technology: We wanted to incorporate a chatbox into our app, this was something completely new to a few of us and learning it in a short amount of time to write production-quality code was an uphill battle.
- Building the multiple components required to make our ambitious project work.
- Lack of UI/UX expertise. It is a known fact that not many developers are good designers, even though we are proud of the UI that we were able to build but we feel we could have done better with mockups etc.
Accomplishments that we are proud of
- Completing the project in the stipulated time. Finishing the app for the demo seemed like an insurmountable task on Saturday night after little to no sleep the previous night.
- Production quality code: We tried to keep our code as clean as possible by using best programming practices whenever we could so that the code is easier to manage, debug, and understand.
What we learned
- Building APIs in Spring Boot
- Using MongoDB with Spring Boot
- Configuring MongoDB in Google Cloud Compute
- Deploying Spring Boot APIs in Google App Engine & basics of GAE
- Chatbots & building chatbots in DialogFlow
- Building APIs in NodeJS & linking them with DialogFlow via Fulfillment
- Scrapping data using Selenium & the common challenges while scrapping large volumes of data
- Parsing scrapped data & efficiently caching it
What's next for CodeLearnDo
- Incorporating leaderboards and a sense of community in the app to encourage learning.