It’s been a year to the day since I published my last blog post reflecting on the DigiFest Hackathon of 2019. It’s been a busy year, but the opportunity to reunite the team for another Hackathon was one we couldn’t turn down!
As usual, the theme of this Hackathon is EdTech, organised by JISC. JISC are a UK non-profit, aimed at providing advice and resources in the tech sector, to schools and universities. Our team consisted of Nathaniel Read, Alex Lovett and Dan Tregoiing. We’ve completed a number of Hackathons together, and we’re all members (or alumni in my case) of the University of Hull, and Hull Computer Science Society (HullCSS). This event is for students and recent graduates, and JISC were happy to invite us to compete again.
Nathaniel wrote a fantastic piece about the event as a whole, and I’d recommend you read it. This post will focus more on the technology behind what we built, and how it works.
oneGrade is our automatic marking solution, aimed at Computer Science teaching. Marking code is inherently complex problem given how many possible solutions exist. As such, we designed a solution to automate as much of the quantitative aspect of the marking process as possible.
The concept is simple; students submit their work (git or svn link) via a web interface or VLE integration, code is checked out and built into a container using Azure Kubernetes Service, and a suite of automated Unit, Interface, Integration etc testing can be performed. Azure Web Apps and Azure Container Service power this workflow, and results are delivered via the oneGrade web interface.
To setup an assignment, a lecturer must provide a Dockerfile that defines their assignment (e.g. an .NET Core image) and any number of testing scripts for their unit/integration/other testing framework that we support. This gives us the power of flexibility, allowing the platform to support any mix of languages and unlimited testing potential. This is all stored in the database against the assignment ID, and pulled out for use at container build time.
The Student interface is also simple, providing only a list of assignments. Assignments have either a submission box for a source URI, or a link to the report for their marks.
The solution consists of two components, a React frontend providing our Instructor and Student UI, with an ASP .NET Core backend providing our Container Management services and testing environment. This hackathon was my first encounter with React, though I’m happy to say it was an experience I rather enjoyed. React proved a flexible and straightforward framework, and I was able to get going quickly. Most of my web experience is through the ASP.NET MVC Framework, with traditional JQuery.
The backend is responsible for taking a submission, building it into a container, and running the suite of defined tests. It does this using Azure Kubernetes Service (AKS). oneGrade will accept submissions, generate a worker process, and dispatch a request to AKS. Once AKS reports that the image is built and the container is running, the worker will run the defined testing, and store the results in the database. This provides a detached testing method, allowing for highly parallel operation.
Overall, the solution was fairly robust and solved the challenge we set for ourselves. There were a number of features we’d hoped to implement but simply ran out of time for, including a wider array of testing support, and using Azure Blockchain Service to store submissions for plagiarism detection. I’m pleased with how far we took the project during the Hackathon, and we may see some future iteration in our free time.
Our team was awarded the “Most Market Ready Solution” prize by JISC, for which we are immensely grateful. Competition was very strong with many incredible solutions being proposed, and both myself and the team would like to thank JISC for the opportunity to attend!