GitReps is a way to more easily show off your GitHub reputation, get in touch with open-source projects, and showcase your collaboration skills.
Designed with the Ruby on Rails framework, the application authenticates directly with GitHub using Omniauth. This way, the user's information can be directly accessed from the GitHub REST api and presented in a meaningful manner.
This project is currently under development, and I aim to test and continue developing it with the help of new users as soon as an MVP is produced.
The goal is to get early-stage software engineers to use and give feedback about GitReps in order to understand what type of data is most important for people to understand at first sight.
Getting involved in meaningful projects involves a lot of research and knowledge relevant to the subject-matter, and that's something I want help provide people with in order to inspire collaboration and transparency in open-source work.
The E-Telligence API bridges the gap between legitimate product data and the e-commerce services that rely on that data.
Partnered with NetPrism LLC for my senior year capstone project, I led the design and development of this e-commerce data ingestion service. You can learn more about the project and interact with a demo versionĀ here.
In the diagram below, you can see how tasks would be queued within the application in order to aggregate filtered product data to be sent to the client. The API itself was designed to be extremely lightweight and detached from the product filteration process. This way, simple interaction with small amounts of data would be allowed for previewing via the React app, but the large amounts of product data would be sent directly to the client throught the API upon scheduled task completion.
Takeaways:
- 1. Plan ahead
- While working on this project, I learned how valuable it can be to plan optimizations ahead of time. Even though I wasn't working with a commercial amount of data, my team quickly ran into rate limiting issues and the boundaries of our personal computers.
- By implementing a queueing system using a tool like RabbitMQ and leveraging a cache with Redis instead of permanently storing data unnecessarily, we could increase efficiency and decrease the need for storage.
- 2. Take time with key design decisions
- Take more time to write the important code once so that you don't need to come back and write it again. Half way through this project I realized that having a Node.js backend for an application that revolved almost entirely around Scrapy (a Python web-crawling framework) was a bad design decision.
- The initial logic was that the entire team had more experience with JavaScript, Node, & Express, however we realized soon after that script execution and thread management using a Python-based framework was much more logical given the scope of the project.
Imagine Tic Tac Toe, but instead of a pen and paper we're sending and recieving your choice of TCP or UDP packets to and from the opponent.
Implementing strict protocols for sent and recieved moves, we can play a simple game of tic tac toe with any other player who follows the same RFC. Here's an example of the move types being sent on either end:
Here's an example of what a game might look like, with one user using a TCP/UDP connection from their computer and their opponent from another (click to expand):
The purpose of this project is to demonstrate how important attention to detail is when you're prioritizing interoperability. We use TC and UDP protocols every day in our personal and professional technologies.