A video speaks a thousand words!
You just watched a Thodio(portmanteau of Thoughts and Video) embedded in a Jupyter notebook. I built the entire app as a consultant for Jed-i's Machine Learning course.
The software has three components:
This component is an HTML5 Canvas interface used by instructors to create content, ala Khan Academy, using a drawing pad. In addition to capturing strokes entered by the drawing pad, it supports various input-types such as LaTeX, geometric shapes and images. The instructor can also "freeze" time and add multiple items that appear simultaneously when watched by students. After the content is entered, the instructor can seek to specific timestamps and enter captions.
I built the sidebar and input components using React and relied on Canvas APIs to build the core application. Data is saved by compacting the list of all actions performed by the instructor and stored as a JSON blob by a Flask server exposing a simple REST interface.
This component plays Thodios created by instructors. The raw JSON data captured by the Thodio Creator is fetched and played on the Canvas, thereby drastically reducing the bandwidth required to play video-like content.
Like any media player, it supports operations such as play speed, fast forward and rewind. It also has a special feature where students can seek by clicking on an element. will seek I used a static KD-Tree, a spacial data-structure, to implement this feature and it was quite fun!
The ML course is delivered as a bunch of Jupyter Notebooks. So I built a Jupyter front-end extension to embed Thodio Players inside the notebook by executing a IPython magic command. I also extended the Markdown syntax to support features such as highlighting and underlining.
If you're in Bangalore, enroll!
While contributing to education as a software engineer is great, I missed teaching. So I wrote a popular answer on Quora which led to a bootcamp to help junior web developers take their skills to the next level.
Based on students' interests, I create customized learning paths, do code reviews, create video tutorials, help students with their side-projects, and land them freelancing gigs.
I found that my students, mostly from 2nd tier Indian engineering colleges usually lack problem solving and Discrete Math skills. So I focus on improving students' thinking process by leveraging structured tools such as George's Polya's "How to Solve It". I also help students learn more effectively using techniques outlined in this blog post.
Let's say you come across a problem at work which requires knowledge of Principal Components Analysis(PCA). Your friend recommends the popular "Introduction to Linear Algebra" book by Gilbert Strang. You find that it is explained on Page 457. But your Linear Algebra is a bit rusty and you'd prefer to reach
PCA as fast as possible.
What if there was a way to only learn concepts which are required to understand
PCA instead of studying each concept from page 1 to page 457 in detail?
Enter Concept Coaster
Instructor: Concept Coaster helps the instructor to split a large topic into small, atomic concepts and specify dependencies between them. The instructor can also create text and multimedia content, quizzes and coding exercises pertaining to each concept in the topic.
Student: When a student visits the site for the first time, Concept Coaster guides the student through an adaptive pre-test using the information entered by the instructor to identify the student's current knowledge level so that the student can starting learning at the edge of their knowledge instead of wasting time reviewing known concepts. Also, the entire concept graph is visualized on the main page so that the student can choose a learning path optimized for reaching their target concept as quickly as possible.
Major Goals for the next 4 years are:
Sounds interesting? Watch the project on GitHub
I was an early employee at New Rubric Solutions, an edtech company. Here are some accomplishments during my time with the company.
One of my major highlights was building a web app to generate student reports by aggregating thousands of data points collected from each student through assignments and additional inputs by teachers. The report had to look beautiful on print and fit within 6 pages even though each student had different data associated with them.
Oh, and the product had to be built and deployed within 4 weeks by a team consisting of a sole full-stack developer(me), two senior backend developers, an awesome QA and an enthusiastic intern . This required working on nights and weekends, a bunch of PhantomJS tricks, detailed attention to each pixel, autoscaling our infrastructure to handle increased load during the parent-teacher meeting season, and dozens of late-night debugging sessions with teammates to workaround
@media print issues.
But it was all worth it when we printed the reports and received positive feedback from delighted parents.
Here are a few sample reports: (They look better when printed!)