Inspiration

I've been using an e-ink tablet (Remarkable2) for a few months now and while it removes a lot of friction with sharing files with a laptop, I've always wished I could download HW onto it and upload from it directly.

What it does

There are two main intractable parts, the GUI built using a library called libremarkable, and a TUI for use on any other system where someone would just like to use a terminal to do the same things like browse assignment details and download assignments.

How we built it

We split into three focuses, one making the API glue library that would do the heavy lifting for the user interfaces to talk with the canvas API, another focus was simply learning how to make an app for the e-ink tablet, and the third focus was a sort of backup plan of the TUI. More technically we used Rust and a number of crates to both challenge ourselves but also get the boring parts like networking out of the way.

Challenges we ran into

The documentation both on the part of Canvas for their API and libremarkable for making the e-ink app were both atrocious. Really for the API it's not even the documentation but the lack of a query option to filter out "hidden" courses that have almost every field removed, required a whole filter on our side to go through the JSON before fully parsing it and remove all the "hidden" courses. On the side of the rm2 app there was an expectation of a high level API than actually existed and many things had to be hacked in quite brutal ways to be completed on time and there is certainly more Rust unsafe code than there should be.

Accomplishments that we're proud of

Two of the four people on this team have never used Rust before and the other two did not have much more experience, we have certainly thrown ourselves into the deep end for a challenge. And we have results, the rm2 app can download files from courses and displays assignments from a selected course!

What we learned

Well we certainly learned a lot of Rust on our journey, but the biggest lesson is to do more research on the quality of APIs before embarking on large projects like this instead of just checking for their presence.

What's next for CanvasInterface

There will certainly be a lot of refactoring to remove as much unsafe code as possible (and hopefully all of it) followed by an uploading feature, non hard-coded credentials, uploading our library to rust crates and our GUI to the rm2 3rd party package repo toltec.

Built With

Share this project:

Updates