Minerva targets school students as the audience group.
In this on-going pandemic, the world has turned virtual and education is no exception. With amazing products like Google Classroom, Zoom, Google Meet and others, the transition from offline education to online was rapid, but not as jitter-free as we would have liked it.
The Question-Answer module of existing market products is not that great. It is very easy for school students, who relatively have more doubts about their subjects, to get lost in the sea of comments. Multiple comments on the same answer can lead to confusion. The teacher can comment, but he/she needs to first scan through an ocean of content to decode the question and give the right answer. Students can very easily miss the teacher's answer too if the number of comments is high.
This is where Minerva comes into the picture. Minerva is a very simple (and beautiful) Question-Answer platform that incorporates a lot of utilities to solve the current problems faced by the school students.
Minerva is not just any product, but a real-life problem solver.
The most difficult part was the intercommunication between the different modules.
Every question was a sataset for our Python script. The Web App can communicate easily with MongoDB. But the Python script needed a Comma Seperated Value (csv) file.
We decided to create a CSV file for every question we ad or update. That was fine. But running the Python script was the problem.
We tried Flask in the beginning. It did not work even though we scoured all over StackOverflow and docs. After about an hour, we decided that our goal is still the same, but we are changing our plan.
The Python script was changed into a CLI. Everything was wrapped into a function and was running from the command line. We need our Node.js server to execute this file.
We went for Node.js child process, a territory that was new to us. The first step was exec() with promisify (from util). It worked. But it could not find the librabies we needed.
We tried Python-Shell package. It failed to run for some reason.
The actual thing that worked is spwan(). It did everything we wanted. But the process was asynchronous. So we went for spwanSync(), which finally did the job.
We learnt a new way of integrating Python code with Node.js server. And not only Python, but this opens up a new territory for use to use with Node.js (Java or C++ even). This made our project more modular, as we can work on different componentts with different languages, and run the one required. This is certainly a field we will be exploring more in the future.
Discussion