Rate My Oppressor
By: Victor Williams
Tags: Software Development, Rails, Engineering, Technology

How I overcame setbacks and built a Rails web application on top of my CLI project

What Is Rate My Oppressor?

Rate My Oppressor (RMO) uses OpenOversight’s database to display officers in the Chicago PD. Users can leave reviews on individual officers, contributing to my overall theme of holding law enforcement accountable to the communities they are sworn to serve.

One of the biggest ways this can be done is via federal law. Here’s a really informative, easy to follow video on qualified immunity and the 2020 Presential election that partially inspired me to build RMO.

I imagined RMO to be a continuation of my Popo command-line interface project. I wanted to bring some of the ideas I had then to the present and test how well of a grasp I had on Ruby thus far. Or at least that’s what I was thinking at first.

How I Started

I have a habit of going into project builds with a sense of purpose: I plan out my user experience, outline the key concepts I want to dive into, and complete project requirements line-by-line before tackling my stretch goals and front-end design. It’s a foolproof plan that’s gotten me through other tough projects in the past, so I’ve grown to stick to it when approaching a particularly difficult build.

But this project was a different kind of monster. The dozens of folders kept me hopping from file to file trying to ensure my associations were neat. Scouring files made it a bit harder to find bugs, and scraping with Rails was an entirely new endeavor I had to learn piece-by-piece. That goes without mentioning OmniAuth and it’s inherent complexity!

A lot of the time I was looking at my computer screen like this:

How I Finished

After finishing up my login, logout, and signup routes, I spent a decent about of time hauling over different gems that could scrape a Javascript heavy site like OpenOversight. I ended up coming across the Kimurai Gem that helped me find, iterate over, and display all of the officer attributes I wanted for my project alongside Nokogiri.

Here are the guides I used to do that! Scraping with Nokogiri & Scraping with Kimurai

Once I had the officers displaying on my Feed page, I worked on my Reviews class to make sure a user could leave a review for a particular officer and that a review could only be edited and deleted by the user that created it.

Afterward, I had to tackle OmniAuth. To this day, I’m still reading over documentation, watching tutorials, and tuning in to MIT lectures to figure out how OmniAuth works under the hood. I’m even refactoring some of the code in Rate My Oppressor to better handle OmniAuth, improve usability, and user authentication protocols.

What I Learned

After watching a couple of walkthrough tutorials and reading through the Rails documentation, I found that Rails is a responsive and powerful framework that, when used in its full capacity, can really accelerate web app production. I can also see why it’s an essential framework to learn: Rails upholds convention over configuration. This means that “by giving up vain individuality, you can leapfrog the toils of mundane decisions, and make faster progress in areas that really matter.” This doctrine helps to eliminate redundancy and unnecessary deliberation, whilst also lowering the knowledge barrier for fledging software engineers like me!

What is essential to remember — and is something I constantly have to remind myself of — is this: programming is always a work in progress. No one language is perfect and thus, no one engineer is inherently more capable than another. If you’re willing to learn as you go and put in the work to be a better you — you’ll always succeed because you’re progressing on your own time and with your own standard.