|
|
|
@@ -12,19 +12,42 @@ full-stack web dev, DevOps or system administration.
|
|
|
|
|
|
|
|
|
|
|
|
{{% /resume/section %}}<!--- }}} -->
|
|
|
|
{{% /resume/section %}}<!--- }}} -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{% resume/section skills %}}<!--- {{{ -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### Languages
|
|
|
|
|
|
|
|
- **Bash**, C, **CSS**, C++, **Fish**, Godot, **HTML5**, **Python**,
|
|
|
|
|
|
|
|
Java, **Javascript (ES6)**, **Sass**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### Frameworks
|
|
|
|
|
|
|
|
- **Bootstrap**, **Django**, **Node.js**, **PostgreSQL**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### Services
|
|
|
|
|
|
|
|
- **DigitalOcean**, **Linux**, Heroku, **REST/Web API's**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### Tools
|
|
|
|
|
|
|
|
- **Arch Linux**, Android Studio, **Debian**, **Command Line**,
|
|
|
|
|
|
|
|
**Git**, IntelliJ IDEA, **Pycharm**, **NGINX**, **SFTP**, **SSH**,
|
|
|
|
|
|
|
|
**Vim**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{% /resume/section %}}<!--- }}} -->
|
|
|
|
|
|
|
|
|
|
|
|
{{% resume/section projects %}}<!--- {{{ -->
|
|
|
|
{{% resume/section projects %}}<!--- {{{ -->
|
|
|
|
|
|
|
|
|
|
|
|
<!--- Spotify Graphs {{{ -->
|
|
|
|
<!--- Spotify Graphs {{{ -->
|
|
|
|
|
|
|
|
|
|
|
|
{{% resume/project name="Spotify Visualizer"
|
|
|
|
{{% resume/project name="Spotify Graphs"
|
|
|
|
url="https://github.com/Kevin-Mok/spotify-lib-vis" date="July 2018" show="true" %}}
|
|
|
|
url="https://github.com/Kevin-Mok/spotify-lib-vis" date="June 2018 — July 2018"
|
|
|
|
|
|
|
|
show="true" %}}
|
|
|
|
|
|
|
|
|
|
|
|
- Web app that scans your Spotify library using their API to produce
|
|
|
|
- Scan tracks from user's library using Spotify API and organize data into
|
|
|
|
[**d3** graphs][d3 graph examples] to visualize the artists, genres and
|
|
|
|
database.
|
|
|
|
features of tracks in your library.
|
|
|
|
- Created and tested various __PostgreSQL__ schemas to increase efficiency for
|
|
|
|
- Can also keep track of your listening history. Currently runs as a `cron`
|
|
|
|
use cases.
|
|
|
|
job on my local machine to keep track of my own.
|
|
|
|
- Produce bubble chart and (stacked) bar chart in [**d3** graphs][d3 graph examples]
|
|
|
|
- Uses __Django__ and __PostgreSQL__ for back-end.
|
|
|
|
to visualize the artists, genres and features of tracks in library.
|
|
|
|
|
|
|
|
- Implement functionality to keep track of user's listening history. Set up
|
|
|
|
|
|
|
|
`cron` job on my local machine to keep track of my own.
|
|
|
|
|
|
|
|
- Uses __Django__ for backend.
|
|
|
|
|
|
|
|
|
|
|
|
[d3 graph examples]: https://github.com/d3/d3/wiki/Gallery
|
|
|
|
[d3 graph examples]: https://github.com/d3/d3/wiki/Gallery
|
|
|
|
|
|
|
|
|
|
|
|
@@ -32,6 +55,27 @@ url="https://github.com/Kevin-Mok/spotify-lib-vis" date="July 2018" show="true"
|
|
|
|
|
|
|
|
|
|
|
|
<!--- Spotify Graphs }}} -->
|
|
|
|
<!--- Spotify Graphs }}} -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!--- Grocery Finder {{{ -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{% resume/project name="Grocery Finder"
|
|
|
|
|
|
|
|
url="https://github.com/Kevin-Mok/grocery-finder" date="Feb. 2019 — Apr. 2019"
|
|
|
|
|
|
|
|
show="true" %}}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- PoC for web app that finds the ideal supermarket based on your cart.
|
|
|
|
|
|
|
|
- Designed responsive front-end layout using **Bootstrap**.
|
|
|
|
|
|
|
|
- Implemented REST API functionality on backend using **Node.js** and
|
|
|
|
|
|
|
|
**MongoDB**.
|
|
|
|
|
|
|
|
- Setup deployment on [**Heroku**][Grocery Finder Heroku].
|
|
|
|
|
|
|
|
- Led team of 4 as project leader to prioritize and delegate tasks while
|
|
|
|
|
|
|
|
also implementing a majority of the core features.
|
|
|
|
|
|
|
|
- Performed code review for team member's pull requests.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Grocery Finder Heroku]: http://www.grocery-finder.ml
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{% /resume/project %}}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!--- Grocery Finder }}} -->
|
|
|
|
|
|
|
|
|
|
|
|
<!--- ParsaFood {{{ -->
|
|
|
|
<!--- ParsaFood {{{ -->
|
|
|
|
|
|
|
|
|
|
|
|
{{% resume/project name="ParsaFood"
|
|
|
|
{{% resume/project name="ParsaFood"
|
|
|
|
@@ -40,70 +84,70 @@ show="true" %}}
|
|
|
|
|
|
|
|
|
|
|
|
- **Android** app that reads ingredient labels and detects any dietary
|
|
|
|
- **Android** app that reads ingredient labels and detects any dietary
|
|
|
|
restrictions/allergies.
|
|
|
|
restrictions/allergies.
|
|
|
|
|
|
|
|
- Designed user interface and linked various functionality together.
|
|
|
|
- Made during a 24-hour [food-themed hackathon][Platterz Hackathon event]
|
|
|
|
- Made during a 24-hour [food-themed hackathon][Platterz Hackathon event]
|
|
|
|
in a group with two other members. Came in 2<sup>nd</sup> place and won
|
|
|
|
in a group with two other members. Came in 2<sup>nd</sup> place and won
|
|
|
|
an [Oculus Rift][Oculus Rift Amazon].
|
|
|
|
an [Oculus Rift][Oculus Rift Amazon].
|
|
|
|
- Came up with the idea based on [personal experience][Parsafood motivation].
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Parsafood repo]: https://github.com/Kevin-Mok/ParsaFood
|
|
|
|
[Parsafood repo]: https://github.com/Kevin-Mok/ParsaFood
|
|
|
|
[Parsafood motivation]: https://github.com/Kevin-Mok/ParsaFood#motivation
|
|
|
|
[Platterz Hackathon event]:
|
|
|
|
[Platterz Hackathon event]: https://www.eventbrite.com/e/platterz-hackathon-tickets-42682237722
|
|
|
|
https://www.eventbrite.com/e/platterz-hackathon-tickets-42682237722
|
|
|
|
[Oculus Rift Amazon]: https://www.amazon.ca/Oculus-Rift-Windows-VR-Headset/dp/B00VF0IXEY/ref=sr_1_1_sspa?ie=UTF8&qid=1520422949&sr=8-1-spons&keywords=oculus+rift&psc=1
|
|
|
|
[Oculus Rift Amazon]: https://www.amazon.ca/Oculus-Rift-Windows-VR-Headset/dp/B00VF0IXEY/ref=sr_1_1_sspa?ie=UTF8&qid=1520422949&sr=8-1-spons&keywords=oculus+rift&psc=1
|
|
|
|
|
|
|
|
|
|
|
|
{{% /resume/project %}}
|
|
|
|
{{% /resume/project %}}
|
|
|
|
|
|
|
|
|
|
|
|
<!--- ParsaFood }}} -->
|
|
|
|
<!--- ParsaFood }}} -->
|
|
|
|
|
|
|
|
|
|
|
|
<!--- Grocery Finder {{{ -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{% resume/project name="Grocery Finder"
|
|
|
|
|
|
|
|
url="https://github.com/Kevin-Mok/grocery-finder" date="April 2019"
|
|
|
|
|
|
|
|
show="true" %}}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- Proof of concept for a web app that finds the best supermarket for
|
|
|
|
|
|
|
|
your needs based on the total price of your cart items and distance
|
|
|
|
|
|
|
|
from you.
|
|
|
|
|
|
|
|
- Responsive front-end using **Bootstrap**. Uses **Node.js** and
|
|
|
|
|
|
|
|
**MongoDB** for back-end.
|
|
|
|
|
|
|
|
- Currently deployed on [**Heroku**][Grocery Finder Heroku].
|
|
|
|
|
|
|
|
- Took on role as project leader to prioritize and delegate tasks
|
|
|
|
|
|
|
|
while
|
|
|
|
|
|
|
|
also implementing a majority of the core features.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Grocery Finder Heroku]: http://www.grocery-finder.ml
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{% /resume/project %}}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!--- Grocery Finder }}} -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!--- TrapBot {{{ -->
|
|
|
|
<!--- TrapBot {{{ -->
|
|
|
|
|
|
|
|
|
|
|
|
{{% resume/project name="TrapBot"
|
|
|
|
{{% resume/project name="TrapBot"
|
|
|
|
url="https://github.com/Kevin-Mok/TrapBot" date="March 2018" %}}
|
|
|
|
url="https://github.com/Kevin-Mok/TrapBot" date="March 2018" %}}
|
|
|
|
|
|
|
|
|
|
|
|
- reddit bot that looks for comments with song names and responds with
|
|
|
|
- Use reddit API wrapper in **Python** to scan music subreddits for user
|
|
|
|
their respective SoundCloud links.
|
|
|
|
comments containing common track listing formats.
|
|
|
|
- Received positive feedback from users who saw the bot's posts.
|
|
|
|
- Match detected track name and artists to track on SoundCloud using another
|
|
|
|
- Uses __Python__ API wrappers for SoundCloud and reddit.
|
|
|
|
Python API wrapper.
|
|
|
|
|
|
|
|
- Respond to original poster's comment with formatted list of tracks found.
|
|
|
|
|
|
|
|
- Received positive comment from users who replied to the bot's posts.
|
|
|
|
|
|
|
|
|
|
|
|
{{% /resume/project %}}
|
|
|
|
{{% /resume/project %}}
|
|
|
|
|
|
|
|
|
|
|
|
<!--- Grocery Finder }}} -->
|
|
|
|
<!--- Grocery Finder }}} -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!--- DigitalOcean {{{ -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{% resume/project name="Personal Server"
|
|
|
|
|
|
|
|
url="https://kevin-mok.com/server/" date="Aug. 2019—present" %}}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- Deployed various web apps with backends such as Node, PHP and Python using
|
|
|
|
|
|
|
|
**NGINX** on a **Debian** server.
|
|
|
|
|
|
|
|
- Monitor system resources and perform system maintenance using tmux.
|
|
|
|
|
|
|
|
- Wrote [**Node.js** script][server script] and [**systemd** service][systemd service]/[timer]
|
|
|
|
|
|
|
|
to check and display the uptime of my pages every hour.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[server script]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-status.js
|
|
|
|
|
|
|
|
[systemd service]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-pages.service
|
|
|
|
|
|
|
|
[timer]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-pages.timer
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{% /resume/project %}}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!--- DigitalOcean Droplet }}} -->
|
|
|
|
|
|
|
|
|
|
|
|
<!--- Super ADA Bros. {{{ -->
|
|
|
|
<!--- Super ADA Bros. {{{ -->
|
|
|
|
|
|
|
|
|
|
|
|
{{% resume/project name="Super ADA Bros"
|
|
|
|
{{% resume/project name="Super ADA Bros"
|
|
|
|
url="https://github.com/Kevin-Mok/SuperADABros" date="May 2019" %}}
|
|
|
|
url="https://github.com/Kevin-Mok/SuperADABros" date="May 2019" %}}
|
|
|
|
|
|
|
|
|
|
|
|
- Clone of Super Mario Bros 1-1, but Mario is mobility-impaired and
|
|
|
|
- Designed clone of Super Mario Bros 1-1, but Mario is mobility-impaired and
|
|
|
|
uses ramps to get through the level.
|
|
|
|
uses ramps to get through the level.
|
|
|
|
- Able to be played using only head movement by getting input from a
|
|
|
|
- Uses **OpenCV** to track player's head movement which is then translated to
|
|
|
|
face-tracking script (**OpenCV**).
|
|
|
|
in-game movement. [Video Demo]
|
|
|
|
- Implemented in [**Godot**][Godot site], an open-source game engine.
|
|
|
|
- Implemented in [**Godot**][Godot site], an open-source game engine.
|
|
|
|
- Made during a 24-hour [accessibility-themed hackathon][PC Hacks event].
|
|
|
|
- Made during a 24-hour [accessibility-themed hackathon][PC Hacks event].
|
|
|
|
|
|
|
|
|
|
|
|
[PC Hacks event]: https://pchacks19.devpost.com/
|
|
|
|
[PC Hacks event]: https://pchacks19.devpost.com/
|
|
|
|
[Godot site]: https://godotengine.org
|
|
|
|
[Godot site]: https://godotengine.org
|
|
|
|
|
|
|
|
[Video Demo]: https://youtu.be/vRdENLGrBqM
|
|
|
|
|
|
|
|
|
|
|
|
{{% /resume/project %}}
|
|
|
|
{{% /resume/project %}}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -112,8 +156,20 @@ url="https://github.com/Kevin-Mok/SuperADABros" date="May 2019" %}}
|
|
|
|
|
|
|
|
|
|
|
|
{{% /resume/section %}}<!--- }}} -->
|
|
|
|
{{% /resume/section %}}<!--- }}} -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{% resume/section "Work Experience" %}}<!--- {{{ -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{% resume/education name="Philpott Children's Tennis" title="Head Instructor" date="2013—2015" %}}
|
|
|
|
|
|
|
|
- Ran 8-week summer camp for inner-city youth with assistant coach.
|
|
|
|
|
|
|
|
- Prepared daily lesson plans for 4 different age groups of children
|
|
|
|
|
|
|
|
with varying skill levels and needs.
|
|
|
|
|
|
|
|
- Supervised and ensured the safety and enjoyment of up to 20 children at once.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{% /resume/section %}}<!--- }}} -->
|
|
|
|
|
|
|
|
|
|
|
|
{{% resume/section education %}}<!--- {{{ -->
|
|
|
|
{{% resume/section education %}}<!--- {{{ -->
|
|
|
|
|
|
|
|
|
|
|
|
{{% resume/education name="University of Toronto" title="Computer Science Specialist" date="2017-2021" %}}
|
|
|
|
{{% resume/education name="University of Toronto" title="Computer Science Specialist" date="2017-2021" %}}
|
|
|
|
|
|
|
|
|
|
|
|
{{% /resume/section %}}<!--- }}} -->
|
|
|
|
{{% /resume/section %}}<!--- }}} -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- vim: fdm=marker -->
|
|
|
|
|