Browse Source

Worked on steam friends graph blog post.

pull/4/head
jrtechs 6 years ago
parent
commit
1d648b3048
1 changed files with 56 additions and 8 deletions
  1. +56
    -8
      entries/projects/steam-friends-graph.md

+ 56
- 8
entries/projects/steam-friends-graph.md View File

@ -1,27 +1,75 @@
<iframe width="100%" height="315" src="https://www.youtube.com/embed/DoDaHmyIPvQ" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe> <iframe width="100%" height="315" src="https://www.youtube.com/embed/DoDaHmyIPvQ" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
# Description of Project
## Links
### Links
- [Github](https://github.com/jrtechs/SteamFriendsGraph) - [Github](https://github.com/jrtechs/SteamFriendsGraph)
- [Live Site](http://steam.jrtechs.net/) - [Live Site](http://steam.jrtechs.net/)
### Project Description
This project utilizes the steam api and graph databases to create friend graphs for clients in a
web browser. Currently there are two types of graphs available:
- Friends of Friends Graph:
This graph displays all the steam friends of a single person and all of their friends friends as well.
- Common Friends Graph:
This graph will only display your friends, however, it will draw edges between your friends if
they are friends with each other.
### Motivation
While learning about graph databases I thought that it would be pretty awesome to create a massive graph
database with steam friends in it. After a quick google search, I realized that some other people have
done similar things in python, however, nobody has ever made a live website do this. Using my prior
knowledge of the steam api and new knowledge of gremlin, hadoop and hbase, I figured that this would
be a great weekend project. Although I got most of the functionality done in the first weekend, I
ended up working on it for 3 weekends to polish it for production. I am satisfied with the
appearance and functionality of the website, but, I am looking forward to make some improvements
in the future.
![Lucid chart diagram](media/steam/diagram.png) ![Lucid chart diagram](media/steam/diagram.png)
# Technical Details
### Technical Details
At the core of this project there is a java backend and a javascript frontend. I needed a backend for
this project because you cannot distribute your steam api key, plus this allows me to cache everything
in a graph database.
The second time a player is queried, it is extremely fast since all the steam friends are cached in
[gremlin](http://tinkerpop.apache.org/docs/3.0.1-incubating/) server.
The only time consuming operation that the backend has to carry out is querying the steam api, querying
the gremlin server is relatively fast.
On the front end I used [Sigma JS](http://sigmajs.org/) with a web socket to render the steam graph.
Since creating a new graph on the back end can take up to 5 minutes, I continuously send new nodes to
the client as they arrive from the steam api. This prevents the client from staring at a loading bar
for 5 minutes; plus, it makes great time lapse videos. The only draw back to this is that you cannot
start applying a force to shake the graph until all the nodes are added to the graph.
![Steam friends graph](media/steam/jrtechs1.png) ![Steam friends graph](media/steam/jrtechs1.png)
# Uses of Friends Graph Data Base
### Uses of Friends Graph Data Base
There are tons of [academic papers](http://infolab.stanford.edu/~ullman/mmds/ch10.pdf)
written on the usages of friends graphs. What you may be able to do with a friends
graph may shock you. A large use of friends graphs is to view friends clusters. For a website
like facebook you may be able to identify someone's family, friends, and work groups. When looking
at steam friends graphs I was able to identify some people's high school and college friends. Another
famous example would be for friends identification. If a ton of people in your friends list is also
friends with a particular person, it is likely that you would also know that person. This is how
websites like Snapchat, Instagram, and facebook recommend people for you to follow. Similarly, you can
use this to find out who people are best friends with. If two people share a ton of friends, it is
more likely that they will be good friends vs the person which they only share one friend with.
Simple analysis of graphs like this may seem benign. However, there are tremendous implications when it
comes to privacy and advertising. If websites chose to, they can harvest a ton of data and start
advertising to you products based on not just what you like, but what your friends also like. Steam
already does this to a certain extent when they recommend you games that are popular among friends.
![Steam friends graph](media/steam/ben2.png) ![Steam friends graph](media/steam/ben2.png)
# Hosting Project
### Hosting Project
![Steam friends graph](media/steam/jrtechs2.png) ![Steam friends graph](media/steam/jrtechs2.png)
# Future Plans for Project
### Future Plans for Project

Loading…
Cancel
Save