Compare commits

...

5 Commits

Author SHA1 Message Date
cc9d68081c Improve Rarity Surf 2024-10-09 10:51:46 -04:00
0534b97f73 Improved Red Hat 2024-09-30 12:46:57 -04:00
c56d8fb731 Javascript skill in projects 2024-09-24 13:19:52 -04:00
3f71be8c66 Merge latex-resume-python-selenium 2024-09-24 13:13:49 -04:00
6a6e9bb11f Grad year 2024-09-09 13:01:25 -04:00
6 changed files with 194 additions and 103 deletions

View File

@@ -608,7 +608,7 @@ header {// {{{
}// }}} }// }}}
.section-header { .section-header {
margin-top: 1em; margin-top: .7em;
margin-bottom: 0.4em; margin-bottom: 0.4em;
} }

View File

@@ -7,98 +7,91 @@ draft: false
{{% resume/work-experience name="Red Hat" {{% resume/work-experience name="Red Hat"
title="Cloud/Software Engineer Intern" languages="Kubernetes, GoLang, Jenkins" date="May 2020 — Aug 2021" %}} title="Cloud/Software Engineer Intern" languages="Kubernetes, GoLang, Jenkins" date="May 2020 — Aug 2021" %}}
- Reduced deployment time by **66%** by [implementing ability](https://github.com/apache/incubator-kie-kogito-operator/commit/175a6356c5474f2360ccb8ae835e0b9b2d653cf1) to
deploy locally-compiled binaries onto **Kubernetes**/**OpenShift** - **Reduced deployment time by 66%** by implementing a
using only command-line (**Kubernetes/GoLang** used for this and three below). [solution](https://github.com/apache/incubator-kie-kogito-operator/commit/175a6356c5474f2360ccb8ae835e0b9b2d653cf1) for deploying locally-compiled binaries onto
- Implemented ability for Kubernetes operator to fetch data Kubernetes/OpenShift via command-line, **cutting average
from a deployed service and update config with data to deployment times from 45 minutes to 15 minutes**.
deprecate reliance on startup script. (**Kubernetes/GoLang** used for this and three below).
- Added startup probes to handle starting legacy application containers that require additional startup time. - **Eliminated 80% of manual configuration errors** by enabling
- Refactored probes to [have default values](https://github.com/apache/incubator-kie-kogito-operator/commit/af4977af228ec8648be28779259d4552246b656f) assigned based on the Kubernetes operator to automatically fetch data from
deployed YAML while also fixing reconciliation issues. deployed services and update configurations, **deprecating
- Rewrote the **Jenkins (Groovy)** [nightly pipeline](https://github.com/apache/incubator-kie-kogito-pipelines/commit/4c83f1aecdea2c1ba2796b79839a90d4083dce88) to run in a GitHub legacy startup scripts and reducing overall startup time
PR using a trigger keyword to test all the team's submitted PR's by 40%**.
before merging to the main branch. - **Improved application stability** by introducing startup
- Took initiative to write [file](https://github.com/apache/incubator-kie-kogito-pipelines/commit/4c83f1aecdea2c1ba2796b79839a90d4083dce88#diff-7d2c018dafbccec859077d19bf1ade53ec9c7649f235528ce89f5632b109f7e6) probes for legacy applications with longer boot times,
to define the GitHub parameters for the above pipeline so that it **resulting in a 50% reduction in startup-related failures
can be recreated easily. and downtime during production launches**.
- Took initiative to write [documentation](https://github.com/apache/incubator-kie-kogito-operator/blob/1534c03d1d26bec08a16608a775782bf8b305de9/docs/GUIDE_FOR_KOGITO_DEVS.md) on how to get started with the project to onboard new - **Enhanced system reliability** by refactoring probes to
developers and mentored the incoming intern. [assign default values](https://github.com/apache/incubator-kie-kogito-operator/commit/af4977af228ec8648be28779259d4552246b656f) dynamically based on deployed YAML
files and fixing reconciliation issues, **increasing probe
accuracy by 30%** and preventing misconfigurations.
- **Increased CI pipeline efficiency** by rewriting the
**Jenkins (Groovy)** [nightly pipeline](https://github.com/apache/incubator-kie-kogito-pipelines/commit/4c83f1aecdea2c1ba2796b79839a90d4083dce88) to run in a GitHub PR
environment, allowing for automated testing of all
team-submitted PRs prior to merging, **reducing manual
intervention by 60%**.
- **Demonstrated leadership and collaboration** by actively
contributing to **Agile** sprint planning in a 12-member team,
driving improvement in sprint velocity through
optimized task delegation and idea generation.
- **Increased project reproducibility** by taking initiative to
write a [reusable GitHub parameters file](https://github.com/apache/incubator-kie-kogito-pipelines/commit/4c83f1aecdea2c1ba2796b79839a90d4083dce88#diff-7d2c018dafbccec859077d19bf1ade53ec9c7649f235528ce89f5632b109f7e6) for the pipeline,
**enabling 100% reusability** and ensuring consistent pipeline
setups across different environments.
- **Streamlined developer onboarding** by authoring
comprehensive [project documentation](https://github.com/apache/incubator-kie-kogito-operator/blob/1534c03d1d26bec08a16608a775782bf8b305de9/docs/GUIDE_FOR_KOGITO_DEVS.md) and mentoring an
incoming intern, **reducing onboarding time by 50%** and
enhancing new team members' productivity within their
first sprint.
{{% /resume/section %}}<!--- }}} --> {{% /resume/section %}}<!--- }}} -->
{{% resume/section projects %}}<!--- {{{ --> {{% resume/section projects %}}<!--- {{{ -->
<!--- AWS {{{ -->
{{% resume/project name="AWS Server"
url="https://kevin-mok.com/server/" languages="AWS, Kubernetes, Terraform, Docker" date="May 2024" show="true" %}}
- Deployed [various web apps](https://kevin-mok.com/server/) using **Docker** (Compose) on an
**AWS EC2** Debian/**Linux** server.
- Created **Kubernetes** [manifest files](https://github.com/Kevin-Mok/aws-minicube) to quickly recreate my server setup
with persistent storage/restarts and open ports.
- Created **Terraform** [files](https://github.com/Kevin-Mok/terraform-deploys/tree/main)
to deploy an AWS EC2 instance and Docker containers.
- Used Amazon Route 53's DNS and **NGINX** to route
subdomains to each web application.
- Wrote a **JavaScript** [server script] and [systemd service][systemd service]/[timer]
to 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 %}}
<!--- AWS }}} -->
<!--- Rarity Surf {{{ --> <!--- Rarity Surf {{{ -->
{{% resume/project name="Rarity Surf" {{% resume/project name="Rarity Surf"
languages="Python, Django, React, GraphQL" languages="Python, JavaScript, React, Django"
date="Oct 2021" show="true" %}} date="Oct 2021" show="true" %}}
- Web app to give rarity rankings to NFT's and check which are listed on the OpenSea marketplace using their API. - **Developed a full-stack web application** to generate rarity
- Reverse engineered the ranking algorithm to match the rankings for NFT's integrated with OpenSea's API,
leading rarity ranking site's rankings ([scraped](https://github.com/Kevin-Mok/rarity-surf/blob/django/rarity_check/project/scrape.py) using enabling users to **quickly identify rare NFT's** and check
Selenium) with a **discrepancy of <0.25%**. their listing status, **improving market research efficiency by 80%**.
- Used app to frontrun purchases of **top 0.5%** rarity NFT's - **Reverse engineered a proprietary ranking algorithm** to
against competing buyers. mirror the leading rarity ranking sites results,
- Wrote **Django (Python)** [backend](https://github.com/Kevin-Mok/rarity-surf) to fetch metadata from IPFS, store rarity rankings in PostgreSQL and serve rarity data using GraphQL. **achieving 99.75% accuracy** by
- Wrote **React** [frontend](https://github.com/Kevin-Mok/rarity-surf-frontend) with hooks to dynamically load rarity data. Styled with Tailwind. utilizing data scraping techniques [with Selenium](https://github.com/Kevin-Mok/rarity-surf/blob/django/rarity_check/project/scrape.py),
increasing the platform's trustworthiness among users.
- **Optimized purchasing strategy** by leveraging the app to
frontrun competitors in purchasing top 0.5% rarity NFTs,
**boosting acquisition success rate by 90%** and allowing
users to gain a competitive edge in the marketplace.
- **Architected a robust Django (Python) [backend](https://github.com/Kevin-Mok/rarity-surf)** to fetch and process
NFT metadata from IPFS, store rarity rankings in
**PostgreSQL**, and serve the data via GraphQL API, **ensuring low-latency access and scaling to handle 2,000+ concurrent requests**.
- **Developed a dynamic React [frontend](https://github.com/Kevin-Mok/rarity-surf-frontend)** using hooks to load
rarity data in real-time, styled with Tailwind for
mobile responsiveness, **improving user experience
and reducing frontend load times by 70%**.
{{% /resume/project %}} {{% /resume/project %}}
<!--- Rarity Surf }}} --> <!--- Rarity Surf }}} -->
<!--- Astronofty {{{ -->
{{% resume/project name="Astronofty"
url="https://github.com/Kevin-Mok/astronofty" languages="React, Solidity" date="Jan 2023"
show="true" %}}
- Created for a 36 hour hackathon (UofTHacks X) where it [**came 2nd overall**](https://devpost.com/software/astronofty).
- Created and deployed a smart contract with **Solidity** on
the Ethereum blockchain to create/buy/sell NFT's.
- Wrote **React** [components](https://github.com/Kevin-Mok/astronofty/tree/main/src/components) to synchronously upload images and metadata to IPFS and fetch and show NFT's.
{{% /resume/project %}}
<!--- Astronofty }}} -->
{{% /resume/section %}}<!--- }}} --> {{% /resume/section %}}<!--- }}} -->
{{% resume/section skills %}}<!--- {{{ --> {{% resume/section skills %}}<!--- {{{ -->
AWS, Kubernetes, Terraform, Docker (Compose), Jenkins, Groovy, Go(Lang), Bash, **Linux**, **JavaScript**, **React**, **Python**, **Django**, Node.js, PostgreSQL, MongoDB, Solidity, C, **Git**, **Command Line** **JavaScript**, **React**, **Python**, **Django**, Node.js, PostgreSQL, MongoDB, Bash, **Git**, **Linux**, **Command Line**, Go(Lang), AWS, Kubernetes, Terraform, Docker (Compose), Jenkins, Groovy, Solidity, C
{{% /resume/section %}}<!--- }}} --> {{% /resume/section %}}<!--- }}} -->
{{% resume/section education %}}<!--- {{{ --> {{% resume/section education %}}<!--- {{{ -->
{{% resume/education name="University of Toronto" {{% resume/education name="University of Toronto"
title="Computer Science Specialist — 3.84 GPA (CS). Graduated with High Distinction." date="2018 — 2023" %}} title="Computer Science Specialist — 3.84 GPA (CS). Graduated with High Distinction." date="2019 — 2024" %}}
{{% /resume/section %}}<!--- }}} --> {{% /resume/section %}}<!--- }}} -->

View File

@@ -1,35 +1,97 @@
<!--- CSC369 {{{ --> <!--- {{{ Red Hat -->
{{% resume/project name="Custom Kernel Module" - Reduced deployment time by **66%** by [implementing ability](https://github.com/apache/incubator-kie-kogito-operator/commit/175a6356c5474f2360ccb8ae835e0b9b2d653cf1) to
url="https://kevin-mok.com/server/" date="Jan. 2022" show="true" %}} deploy locally-compiled binaries onto **Kubernetes**/**OpenShift**
using only command-line (**Kubernetes/GoLang** used for this and three below).
- Implemented ability for Kubernetes operator to fetch data
from a deployed service and update config with data to
deprecate reliance on startup script.
- Added startup probes to handle starting legacy application containers that require additional startup time.
- Refactored probes to [have default values](https://github.com/apache/incubator-kie-kogito-operator/commit/af4977af228ec8648be28779259d4552246b656f) assigned based on
deployed YAML while also fixing reconciliation issues.
- Rewrote the **Jenkins (Groovy)** [nightly pipeline](https://github.com/apache/incubator-kie-kogito-pipelines/commit/4c83f1aecdea2c1ba2796b79839a90d4083dce88) to run in a GitHub
PR using a trigger keyword to test all the team's submitted PR's
before merging to the main branch.
- Took on tasks and contributed ideas in **Agile sprint** planning meetings in a team of 12 people.
- Took initiative to write [file](https://github.com/apache/incubator-kie-kogito-pipelines/commit/4c83f1aecdea2c1ba2796b79839a90d4083dce88#diff-7d2c018dafbccec859077d19bf1ade53ec9c7649f235528ce89f5632b109f7e6)
to define the GitHub parameters for the above pipeline so that it
can be recreated easily.
- Took initiative to write [documentation](https://github.com/apache/incubator-kie-kogito-operator/blob/1534c03d1d26bec08a16608a775782bf8b305de9/docs/GUIDE_FOR_KOGITO_DEVS.md) on how to get started with the project to onboard new
developers and mentored the incoming intern.
- Wrote and installed a [custom Linux kernel module](https://github.com/Kevin-Mok/interceptor-kernel/blob/master/a1/interceptor.c) in **C**. <!--- }}} Red Hat -->
- Intercepted pre-existing system calls using
custom kernel module by sending commands to <!--- Rarity Surf {{{ -->
userspace.
- Monitored specific process ID's in my system {{% resume/project name="Rarity Surf"
call to intercept their system calls. languages="Python, JavaScript, React, Django"
date="Oct 2021" show="true" %}}
- Web app to give rarity rankings to NFT's and check which are listed on the OpenSea marketplace using their API.
- Reverse engineered the ranking algorithm to match the
leading rarity ranking site's rankings ([scraped](https://github.com/Kevin-Mok/rarity-surf/blob/django/rarity_check/project/scrape.py) using
Selenium) with a **discrepancy of <0.25%**.
- Used app to frontrun purchases of **top 0.5%** rarity NFT's
against competing buyers.
- Wrote **Django (Python)** [backend](https://github.com/Kevin-Mok/rarity-surf) to fetch metadata from IPFS, store rarity rankings in PostgreSQL and serve rarity data using GraphQL.
- Wrote **React** [frontend](https://github.com/Kevin-Mok/rarity-surf-frontend) with hooks to dynamically load rarity data. Styled with Tailwind.
{{% /resume/project %}} {{% /resume/project %}}
<!--- CSC369 }}} --> <!--- Rarity Surf }}} -->
<!--- Spotify Graphs {{{ --> <!--- Astronofty {{{ -->
{{% resume/project name="Spotify Graphs" {{% resume/project name="Astronofty"
url="https://github.com/Kevin-Mok/spotify-lib-vis" date="June 2018 — July 2018" url="https://github.com/Kevin-Mok/astronofty" languages="JavaScript, React, Solidity" date="Jan 2023"
show="true" %}} show="true" %}}
- Implemented base functionality of scanning tracks and listening - Created for a 36 hour hackathon (UofTHacks X) where it [**came 2nd overall**](https://devpost.com/software/astronofty).
history from user's library using Spotify API and organized data - Created and deployed a smart contract with **Solidity** on
into **PostgreSQL** database with **Django** backend. the Ethereum blockchain to create/buy/sell NFT's.
- Wrote **React** [components](https://github.com/Kevin-Mok/astronofty/tree/main/src/components) to synchronously upload images and metadata to IPFS and fetch and show NFT's.
{{% /resume/project %}}
<!--- Astronofty }}} -->
<!--- AWS {{{ -->
{{% resume/project name="AWS Server"
url="https://kevin-mok.com/server/" languages="AWS, Kubernetes, Docker, Terraform" date="May 2024" show="true" %}}
- Deployed [various web apps](https://kevin-mok.com/server/) using **Docker** (Compose) on an
**AWS EC2** Debian/**Linux** server.
- Created **Kubernetes** [manifest files](https://github.com/Kevin-Mok/aws-minicube) to quickly recreate my server setup
with persistent storage/restarts and open ports.
- Created **Terraform** [files](https://github.com/Kevin-Mok/terraform-deploys/tree/main)
to deploy an AWS EC2 instance and Docker containers.
- Used Amazon Route 53's DNS and **NGINX** to route
subdomains to each web application.
- Wrote a **JavaScript** [server script] and [systemd service][systemd service]/[timer]
to 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 %}}
<!--- AWS }}} -->
<!--- {{{ Spotify Graphs -->
{{% resume/project name="Spotify Graphs"
url="https://github.com/Kevin-Mok/spotify-lib-vis" date="June 2020 "
languages="Python, Django, PostgreSQL"
show="true" %}}
- Web app to visualize user's library and listening
history from Spotify.
- [Fetched and organized](https://github.com/Kevin-Mok/spotify-lib-vis/blob/master/api/utils.py) user data from Spotify API into PostgreSQL database with **Django (Python)** backend.
- Created and tested various relational database schemas to maximize - Created and tested various relational database schemas to maximize
efficiency for use cases. efficiency for use cases.
- Produced bubble chart and (stacked) bar chart using [**d3**] - Generated various charts to visualize the artists and genres
[d3 graph examples] to visualize the artists, genres and features of of tracks in library.
tracks in library.
[d3 graph examples]: https://github.com/d3/d3/wiki/Gallery
{{% /resume/project %}} {{% /resume/project %}}
@@ -56,24 +118,21 @@ show="true" %}}
<!--- Grocery Finder }}} --> <!--- Grocery Finder }}} -->
<!--- DigitalOcean {{{ --> <!--- CSC369 {{{ -->
{{% resume/project name="Personal Server" {{% resume/project name="Custom Kernel Module"
url="https://kevin-mok.com/server/" date="Aug. 2019 — present" %}} url="https://kevin-mok.com/server/" date="Jan. 2022" show="true" %}}
- Deployed various web apps with backends such as Node, PHP and Python using - Wrote and installed a [custom Linux kernel module](https://github.com/Kevin-Mok/interceptor-kernel/blob/master/a1/interceptor.c) in **C**.
**NGINX** on a **Debian** server. - Intercepted pre-existing system calls using
- Monitor system resources and perform system maintenance using tmux. custom kernel module by sending commands to
- Wrote [**Node.js** script][server script] and [**systemd** service][systemd service]/[timer] userspace.
to check and display the uptime of my pages every hour. - Monitored specific process ID's in my system
call to intercept their system calls.
[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 %}} {{% /resume/project %}}
<!--- DigitalOcean Droplet }}} --> <!--- CSC369 }}} -->
<!--- ParsaFood {{{ --> <!--- ParsaFood {{{ -->
@@ -96,3 +155,23 @@ https://www.eventbrite.com/e/platterz-hackathon-tickets-42682237722
{{% /resume/project %}} {{% /resume/project %}}
<!--- ParsaFood }}} --> <!--- ParsaFood }}} -->
<!--- 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 }}} -->

View File

@@ -0,0 +1,16 @@
# Red Hat
1. Reduced deployment time by 66% by implementing ability to deploy locally-compiled binaries onto Kubernetes/OpenShift using only command-line (Kubernetes/GoLang used for this and three below).
2. Implemented ability for Kubernetes operator to fetch data from a deployed service and update config with data to deprecate reliance on startup script.
3. Added startup probes to handle starting legacy application containers that require additional startup time.
4. Refactored probes to have default values assigned based on deployed YAML while also fixing reconciliation issues.
5. Rewrote the Jenkins (Groovy) nightly pipeline to run in a GitHub PR using a trigger keyword to test all the teams submitted PRs before merging to the main branch.
6. Took on tasks and contributed ideas in Agile sprint planning meetings in a team of 12 people.
7. Took initiative to write file to define the GitHub parameters for the above pipeline so that it can be recreated easily.
8. Took initiative to write documentation on how to get started with the project to onboard new developers and mentored the incoming intern.
# Rarity Surf
1. Web app to give rarity rankings to NFTs and check which are listed on the OpenSea marketplace using their API.
2. Reverse engineered the ranking algorithm to match the leading rarity ranking sites rankings (scraped using Selenium) with a discrepancy of <0.25%.
3. Used app to frontrun purchases of top 0.5% rarity NFTs against competing buyers.
4. Wrote Django (Python) backend to fetch metadata from IPFS, store rarity rankings in PostgreSQL and serve rarity data using GraphQL.
5. Wrote React frontend with hooks to dynamically load rarity data. Styled with Tailwind.

View File

@@ -3,3 +3,6 @@ AWS, Kubernetes, Terraform, Docker (Compose), Jenkins, Groovy, Go(Lang), Bash, *
# Web Dev # Web Dev
**JavaScript**, **React**, **Python**, **Django**, Node.js, PostgreSQL, MongoDB, Bash, **Git**, **Linux**, **Command Line**, Go(Lang), AWS, Kubernetes, Terraform, Docker (Compose), Jenkins, Groovy, Solidity, C **JavaScript**, **React**, **Python**, **Django**, Node.js, PostgreSQL, MongoDB, Bash, **Git**, **Linux**, **Command Line**, Go(Lang), AWS, Kubernetes, Terraform, Docker (Compose), Jenkins, Groovy, Solidity, C
# Python
**Python**, **Django**, **Linux**, **Git**, AWS, Kubernetes, Docker (Compose), Ansible, Jenkins, Selenium, Terraform, Go(Lang), PostgreSQL, **Command Line**, Groovy, Bash, **JavaScript**, **React**, Node.js, MongoDB, Solidity, C