This project was originally an idea that I wanted to make with Stanley in our free time but with Android instead. During the first part of the hackathon, we were originally going to make some other android application that I thought of but both of us were pretty new to it, so there was a lot of confusion with its API. We decided to scratch it and go simple and make my personal idea into a web application. We knew it does not really fall into the IoT or Microservices category, but nonetheless, we thought it was a fun thing to make. It was still programming, something we both love deeply.
What does it do?
MemeMash scrapes memes or any images that are connected to the user's inputted subreddit by parsing online JSON files from the Reddit API through Go. Once the user inputs a subreddit they like in the text box and press enter, the page gets neatly populated with images from that subreddit. Why build something like this? What better way is there to brighten someone's day than to make them laugh by favorite memes?
How we built it?
We wanted to challenge ourselves since everyone else was working with hardware (whether they knew some aspects of it or not). Just making a web application with a back-end language we are proficient in didn't seem to allow us to branch out and explore with newer technologies. Therefore, we decided to go with "GoLang", or "Go". At the moment, the language is still fairly new with a rapidly growing community. Compared to some of the more well known languages, there are barely any external libraries, resources, and "decent" documentation for some advanced features. We didn't know the syntax either so we thought this was a perfect opportunity to challenge ourselves and learn something at the same time. The front-end however, was still made using HTML5 and CSS3 experimenting both Cirrus and Bootstrap for resizing column widths. Going into specifics, we used Go's net/http library to handle the launch of the web server and used their html/template library to exchange data between the back-end and front-end. We used an external JSON library we found to parse the online JSON files and locate certain member elements we needed to look in. Once the data was captured, we used a POST request to allow the user to modify their subreddit and display the images correspondent with it accordingly. Last, I used my personal DigitalOcean server to deploy the web application and bought the domain: mememash.net and linked it to the server.
Challenges we ran into?
The first challenge was our first idea, an android application that lets you scan anything and reverse image search it. With the reverse image search, we would fetch data such as names or social media accounts (for people) or names of the pictures (if the scanned entity was inanimate). Near the end of Friday, we decided that we were truly behind in skill for this project so we thought we'd move on to something for practical.
The next challenge was using Go. It's half object oriented and half functional making things a little confusing for the regular programmer. The syntax is a little different than what I am accustomed to and there were a lot of issues in setting up environments and messing with their internal libraries. Overall it was a big mess and I think we spent more time fixing issues with Go than programming in Go itself.
There were many more challenges along the way, but one I remember in particular was with deploying the server to my personal VPS. For hours and hours in trying to figure out why the application was running, I reached an embarrassing explanation: the port I was trying to use for my application was already in use by Apache.
Accomplishments that we're proud of?
I think our biggest accomplishment is that we learned a new language. Go is not that widely known or used, so getting that head start on it gave us hope that we can create a lot of libraries or utilities for the language (since they are most likely not already made by someone else).
What we learned?
- Difference between POST and GET requests.
- The Go programming language.
- Some of the Android API (including Runtime Security Permissions)
- Working with REST APIs.
- More useful bash and git commands.
- What a Rasberry Pi actually is and how does it work and run.
- To have fun with what you're doing.
What's next for MemeMash?
Stanley and I looked if something like MemeMash already existed and there were several alternatives out there. However, we noticed that most were outdated and did not work or they did not parse images correctly/were not aesthetically pleasing. Because of this and the fact that Go is a very fast language, we could step up and continue to improve MemeMash, hoping to make it into something popular.