Three hours before the beginning of Hack@WPI, a couple of months late for registration, Greg and I decided we wanted to participate. As expected, once we got in, we had no idea of what to do. Our first idea was to create a better solution than When2Meet which has a terrible interface for mobile. We also thought of using the 25Live API to create a classroom reservation app for mobile since there isn’t one yet.
In the end, our dreams of controlling computers with The Power of the Force lead us to the Myo Armband.
The Force is weak within you.
Since my arms are quite thin, the armband couldn’t get a tight fit and struggled to recognize my gestures. So there I was, in the middle of a room full people looking like this:
But I have the force!
After 2 hours of playing around with the Myo, it was time to get to work. Very soon we began to run into all sorts of problems:
1. What are we doing again?
2. What on earth is LUA?
3. I’ve no idea what the SDK says
4. The Pizza is cold.
For the next six hours, Greg and I tried to figure out how to get a script that would make Myo print text to a text box. Basically, we wanted to turn the Myo into a keyboard. Each gesture would enter a user defined message. Ideally, we would figure out how to let the user BRO Fist a YouTube video, which would like and comment the video.
We fought the Myo until we finally managed to get the Wave-In and Wave-Out gestures to print text. At this point we decided it was time to let the user define the responses that the Myo would print depending on the gesture, so off we went to create a Python script to generate a GUI. Initially we intended to get the Python script to save the responses to a text file which the LUA script would then access and extract the responses from there.
The Importance of Reading the SDK
After hours of trying to read the text file and constantly getting errors that seemed to make no sense, Greg decided to take a better look at the first paragraphs of the SDK where the second one said “Scripts may not access the file system.”
We are making a virus
At 2PM on Saturday we got back to coding. I talked to some developers from MITRE who freaked out when I told them what we intended to do. Since the LUA script couldn’t access the file system, we were going to have the Python script edit the LUA file. The Python script would open the LUA file and change the lines where the responses are stored as strings. According to the MITRE Devs, the only the only developers who make scripts that edit scripts are black hat hackers who are making viruses.
So, we should instead setup a Python server that sends the responses to the LUA script which is listening to the server? I guess we are making a virus.
This Python script changes the extension of the file from .lua to .txt and then back to .lua
The Minimum Viable Product
At this point we had our Minimum Viable Product. We had something to present. The next step was to enable the user to Bro-Fist a YouTube video. In doing so, the script would automatically publish a comment for user with whatever message the user chose.
Hours of google searches lead to nothing. Tired and with little motivation I could not figure out how to make the script find the comment box in order to enter the message. To make matters worse, Greg was forced to begin working on his homework unless he wanted to be completely unprepared for his inquiry seminar on Monday. I was now working on my own.
I talked to Jacob, the web developer, and he suggested that I should have a chrome plugin written in JS. The plugin would find the comment box, focus it and once the LUA script had entered the message, it would hit the submit button.
More googlin’ lead to nothing. I could not figure out how to have the script interact with a chrome plugin. It was now 12AM on Sunday. After discussing the matters with Greg we decided to call it a day and present our MVP.
So how does it work?
So… This piece of code here… Magic. Its magic.
We should have set up a server
Since I had been researching like crazy while Greg worked on HW, after deciding to present the MVP he suggested that I let him revert our code to the MVP while I took a break.
During this time I sat down with WPI graduate, Henrique Polido. He works at Microsoft as a Big Data Analyst and he is truly fascinating. During his time at WPI, he developed the WPI Scheduler as his IQP and then worked for Boston Dynamics developing software for Atlas for his MQP. Upon noticing that he was Brazilian I got him to speak Portuguese with me! We talked for about an hour about his experience at Microsoft, WPI and opinions about college. He gave me some very insightful advice: Take the advanced math courses so that you can develop your logic. If you understand math you can learn programming very easily. (Sabs, LOGIC!)
Finally I asked him how he would approach our problem and he told me… create a server with LUA and have it send the response to the chrome plugin…
The little sleep was well worth it
I really enjoyed taking participating in the Hackathon. I’m glad that Greg asked me to join his team. Although we did not build anything revolutionary or half as awesome as the face slapping robot with facial recognition that the team next to us built, I learned a lot. I came in knowing absolutely nothing about writing scripts and left knowing some Python and Lua. And I got to play with the Myo which admittedly I did not want to return. After playing with it for hours, I felt like a Jedi.
I also enjoyed spending time with Greg. I learned quite a bit from him and I can’t wait to help him develop his Laser Tag system.
Not to mention that Henrique took my resume for possible internship opportunities at Microsoft! He did take many others as well, but its a start. By the way, I learned the hard way that having a good resume is a must. The resume that I handed him was a slight modification from the one that I used to apply for the Morocco HUA which was not geared towards technology at all. At least now I know more or less how to get some internship opportunities.
Hack@WPI was awesome!
Link to the GitHub Repo: