# BlockOJ

>
> Boundless creativity.
>
>
>

## What is BlockOJ?

BlockOJ is an online judge built around Google's Blockly library that teaches children how to code. The library allows us to implement a code editor which lets the user program with various blocks (function blocks, variable blocks, etc.).

![Figure 1. Image of BlockOJ Editor](https://i.imgur.com/UOmBhL4.png)

On BlockOJ, users can sign up and use our lego-like code editor to solve instructive programming challenges! Solutions can be verified by pitting them against numerous test cases hidden in our servers :) -- simply click the "submit" button and we'll take care of the rest.

Our lightning fast judge, painstakingly written in C, will provide instantaneous feedback on the correctness of your solution (ie. how many of the test cases did your program evaluate correctly?).

![Figure 2. Image of entire judge submission page](https://i.imgur.com/N898UAw.jpg)

## Inspiration and Design Motivation

Back in late June, our team came across the article announcing the "[new Ontario elementary math curriculum to include coding starting in Grade 1](https://www.thestar.com/politics/provincial/2020/06/23/new-ontario-elementary-math-curriculum-to-include-coding-starting-in-grade-1.html)." During Hack The 6ix, we wanted to build a practical application that can aid our hard working elementary school teachers deliver the coding aspect of this new curriculum.

We wanted a tool that was

1. Intuitive to use,
2. Instructive, and most important of all
3. Engaging

Using the Blockly library, we were able to use a code editor which resembles building with LEGO: the block-by-block assembly process is **procedural** and children can easily look at the **big picture** of programming by looking at how the blocks interlock with each other.

Our programming challenges aim to gameify learning, making it less intimidating and more appealing to younger audiences. Not only will children using BlockOJ **learn by doing**, but they will also slowly accumulate basic programming know-how through our carefully designed sequence of problems.

Finally, not all our problems are easy. Some are hard (in fact, the problem in our demo is extremely difficult for elementary students). In our opinion, it is beneficial to mix in one or two difficult challenges in problemsets, for they give children the opportunity to gain valuable problem solving experience. Difficult problems also pave room for students to engage with teachers. Solutions are saved so children can easily come back to a difficult problem after they gain more experience.

## How we built it

Here's the tl;dr version.

* AWS EC2
* PostgreSQL
* NodeJS
* Express
* C
* Pug
* SASS
* JavaScript

*We used a link shortener for our "Try it out" link because DevPost doesn't like URLs with ports.*
## Inspiration

We've noticed that many educators draw common structures on boards, just to erase them and redraw them in common ways to portray something. Imagine your CS teacher drawing an array to show you how bubble sort works, and erasing elements for every swap. This learning experience can be optimized with AI.

## What It Does

Our software recognizes digits drawn and digitizes the information. If you draw a list of numbers, it'll recognize it as an array and let you visualize bubble sort automatically. If you draw a pair of axes, it'll recognize this and let you write an equation that it will automatically graph.

The voice assisted list operator allows one to execute the most commonly used list operation, "append" through voice alone. A typical use case would be a professor free to roam around the classroom and incorporate a more intimate learning experience, since edits need no longer be made by hand.

## How We Built It

The digits are recognized using a neural network trained on the MNIST hand written digits data set. Our code scans the canvas to find digits written in one continuous stroke, puts bounding boxes on them and cuts them out, shrinks them to run through the neural network, and outputs the digit and location info to the results canvas.

For the voice driven list operator, the backend server's written in Node.js/Express.js. It accepts voice commands through Bixby and sends them to Almond, which stores and updates the list in a remote server, and also in the web user interface.

## Challenges We Ran Into

* The canvas was difficult to work with using JavaScript
* It is unbelievably hard to test voice-driven applications amidst a room full of noisy hackers haha

## Accomplishments that We're Proud Of

* Our software can accurately recognize digits and digitize the info!

## What We Learned

* Almond's, like, *really* cool
* Speech recognition has a long way to go, but is also quite impressive in its current form.

## What's Next for Super Smart Board

* Recognizing trees and visualizing search algorithms
* Recognizing structures commonly found in humanities classes and implementing operations for them
* Leveraging Almond's unique capabilities to facilitate operations like inserting at a specific index and expanding uses to data structures besides lists
* More robust error handling, in case the voice command is misinterpreted (as it often is)
* Generating code to represent the changes made alongside the visual data structure representation
## Inspiration

I was inspired by the silence and disconnect in the job market. The barrier between employers and job seekers leaves many in the dark—people are uncertain about callbacks, interviews, and successes. I hope to promote job transparency, bridge this gap, empower job seekers with knowledge, and foster a more interactive, informed, and fair employment landscape for everyone. This website is meant to be like downdetector.com but for the job market.

## What it does

This website revolutionizes the job search experience by providing real-time data on job applications, including callbacks, non-responses, interviews, and successful hires. It aims to empower job seekers, fostering transparency and interactivity in the job market.

## How we built it

I built it using HTML, CSS, and some JavaScript.

## Challenges we ran into

I had trouble making the buttons on the front page look pretty and engaging. When I first tried to put a picture inside the button the text disappeared and the button became blank. Fortunately, I was able to ask a mentor for help and I was able to make pretty buttons like the ones on downdetector.com.

My teammates got busy and had to quit the hackathon, so I had to finish the project on my own!

## Accomplishments that we're proud of

The buttons on the front page. They look so pretty and the buttons actually do stuff!

## What we learned

I learned about the HTML ![]() src Attribute, how to make a drop-down button, and how to use Javascript to read values inside buttons and save it.

## What's next for JobPostTI

I would like to move the website from Replit, which limits me to using only HTML, CSS, and JavaScript for my project to my own personal public webpage so that I can implement the backend to add graphs and track data using SQL and Python.