Skip to content

Basu Dubey

@basu

Skill iconPython
Skill iconJava
Skill iconSolidity
Skill iconC
Shell

Hyderabad, India

https://github.com/basu96/crux-judge/

This project is called Crux Judge. I can proudly say that I'm the chief contributor, maintainer and the head of this project. Crux Judge is a web app to conduct programming contests on a network - a programming judge. It is written using the Django framework.
In short, one can host programming contests using this platform. It evaluates the submitted code against saved testcases. The programs are securely executed in a sandboxed environment.

The idea of this project came up when I felt the need to replace the usage of an existing programming judge in my college. The existing app was used in our curriculum courses by faculty to evaluate and grade students' C codes. Both the students and the faculty were unhappy with the app as it was old, buggy and not maintained. A better solution was needed.

We took up the task of providing the solution and Crux Judge is the result of it ('Crux' is the name of the programming club of my college, which I currently am the head of: https://github.com/crux-bphc ). I can proudly say that the project took off when I took the lead to develop it. What makes me prouder is the fact that I have worked to solve a problem that was of substantial value to the people around me. The faculty appreciated it and are glad that we are moving to "Crux Judge" to host evaluation contests. I have always been inclined to use my programming and development capabilities to help the community. That is my way of giving back to the society and I will continue to work towards it.

The first difficulty I faced was my lack of experience at that time. I had been programming since more than a year when I set off with this project. But I did not have any experience in developing web apps. I wrote small codes and scripts in C and Python, but I had never taken up a project as big as this. So I took the challenge and starting learning stuff. I spent a few days(weeks?) getting to grasp the basics of Django framework and web programming in general.

Another difficulty that I realized soon after was that this app would be used mainly by my faculty, and not fellow developers. I realized that I could not expect them to make changes to configs or debug every now and then. I had never built tools for the end user. I had to make sure that I provided GUI to change every detail while making sure that relevant portions were abstracted. I learned that the ability to develop while keeping the user's perspective in mind is underrated.

Anti-cheat: The program would be used to host contests for students whose grades depended on how they would perform in the contest. Naturally, some students would always be inclined to use unfair means to get through. To prevent this, I made sure to add anti-cheat features. The app records IP address of every submission. So if multiple accounts got submissions from the same IP address, they would be caught. Also I prevented multiple logins from the same account. This would prevent cheating to a huge extent, which was overlooked earlier. I am planning to add plagiarism checks to catch identical submissions in the future.

Deployment: During the development phase, I had been coding and testing on my system. But it was only after I had to deploy it, did I realise that it took unreasonable amount of time to set up a system for deployment. When I hosted the app for deployment for the students and faculty to use, I was provided a PC on my institute LAN by my faculty. But for some reason the system had to be reset and I lost all the configuration. I realized that my deployment strategy was not up to the mark. I decided to containerize the application in docker image for easier deployment. After spending a few days with docker and testing it on the project, I have succesfully managed to create a docker image for the project( Link to relevant branch: https://github.com/basu96/crux-judge/tree/docker-testing ). I have tested it on my VPS on DigitalOcean and it is working perfectly.

I have learnt a lot during the tenure of this project and have truly grown as a developer. I am ready to take up projects of large scale now. I have done three different projects on Django now apart from this one. Additionally I am currently working on another at my internship. Apart from this, I like to write code on a daily basis to automate stuff and make life better/easier for me and others. For the last few months, I have been fascinated by the applications of blockchain in different domains. I want to start contributing to the development of DApps and that is why I have been learning Solidity. ETHIndia Hackathon seems to me like the perfect opportunity to meet like minded people and to start contributing to the community. If accepted, I will make sure to make the most of this opportunity.