Compare commits

..

1 Commits

Author SHA1 Message Date
76fb50a8b6 Body font size 2024-05-21 09:49:41 -04:00
25 changed files with 158 additions and 499 deletions

View File

@@ -1 +0,0 @@
https://kevin-mok.com/

View File

@@ -103,19 +103,15 @@ body {
margin: 0; margin: 0;
background-color: $background-color; background-color: $background-color;
color: $color; color: $color;
// line-height: 1.5; line-height: 1.5;
line-height: 1.57;
// font-size: 100%; // font-size: 100%;
// font-size: 12px;
// font-size: 15px; // font-size: 15px;
font-size: 17px; font-size: 17.5px;
// font-size: 20px; // font-size: 20px;
// font-size: 22px; // font-size: 22px;
/* font-family: 'Source Code Pro', monospace; */ /* font-family: 'Source Code Pro', monospace; */
// font-family: 'Hack', monospace; font-family: 'Hack', monospace;
// body {
// font-family: 'Times New Roman', serif;
font-family: "Computer Modern Serif";
// }
display: flex; display: flex;
flex-direction: column; flex-direction: column;
min-height: 100vh; min-height: 100vh;
@@ -177,8 +173,7 @@ footer {
margin-top: 2rem; margin-top: 2rem;
$vertical-margin: .2em; $vertical-margin: .2em;
text-align: center; text-align: center;
// font-size: 0.8em; font-size: 0.8em;
font-size: .85em;
color: #747369; color: #747369;
// bottom: 0; // bottom: 0;
// position: absolute; // position: absolute;
@@ -218,8 +213,7 @@ footer {
// padding-right: .9em; // padding-right: .9em;
img { img {
// height: 1.5em; height: 1.5em;
height: 3em;
@include vert-margin-rem(.2); @include vert-margin-rem(.2);
padding-left: .5em; padding-left: .5em;
opacity: .6; opacity: .6;
@@ -377,7 +371,7 @@ header {// {{{
display: inline; display: inline;
&#gnu { &#gnu {
// background-color: $base04; background-color: $base04;
// background-color: $base05; // background-color: $base05;
} }
} }
@@ -500,7 +494,7 @@ header {// {{{
#contact-info {// {{{ #contact-info {// {{{
@include side-margin-em(0); @include side-margin-em(0);
// @include vert-padding-rem(0.5); // @include vert-padding-rem(0.5);
// @include a-color($base-sky-blue); @include a-color($base-sky-blue);
// min-width: $max-page-width; // min-width: $max-page-width;
@media (min-width: 1200px) { @media (min-width: 1200px) {
.container{ .container{
@@ -508,7 +502,6 @@ header {// {{{
} }
} }
a {// {{{ a {// {{{
color: #4287cd;
text-decoration: none; text-decoration: none;
&:hover { &:hover {
text-decoration: none; text-decoration: none;
@@ -520,8 +513,7 @@ header {// {{{
.row { .row {
// flex-grow: 1; // flex-grow: 1;
// color: $base05; color: $base05;
color: #4287cd;
img { img {
height: 1em; height: 1em;
@@ -539,9 +531,7 @@ header {// {{{
} }
.url-info { .url-info {
font-size: 1em;
margin-left: 5px; margin-left: 5px;
// text-decoration: underline;
// position: relative; // position: relative;
// left: -8px; // left: -8px;
// @media (max-width: $phone-width) { // @media (max-width: $phone-width) {
@@ -556,9 +546,6 @@ header {// {{{
#resume {// {{{ #resume {// {{{
a {// {{{ a {// {{{
// text-decoration: none; // text-decoration: none;
// color: $base-blue;
color: #4287cd;
// color: blue;
text-decoration: underline; text-decoration: underline;
&:hover { &:hover {
text-decoration: underline; text-decoration: underline;
@@ -566,12 +553,10 @@ header {// {{{
}// }}} }// }}}
h1 {// {{{ h1 {// {{{
// color: $base-orange; color: $base-orange;
color: black;
// margin-top: 1.3rem; // margin-top: 1.3rem;
margin-top: 1rem; margin-top: 1rem;
// font-size: 1.2em; font-size: 1.2em;
font-size: 1.3em;
// @media (max-width: $phone-width) { // @media (max-width: $phone-width) {
// margin-top: .75rem; // margin-top: .75rem;
@@ -607,19 +592,10 @@ header {// {{{
// } // }
}// }}} }// }}}
.section-header {
margin-top: .7em;
margin-bottom: 0.4em;
}
ul { ul {
margin-bottom: 5px; margin-bottom: 5px;
} }
.work-experience {
margin-bottom: 5px;
}
#projects {// {{{ #projects {// {{{
// // h1 { // // h1 {
// // margin-bottom: 3px; // // margin-bottom: 3px;
@@ -631,7 +607,6 @@ header {// {{{
h2 { h2 {
color: $base-sky-blue; color: $base-sky-blue;
display: inline; display: inline;
font-size: 1.1em;
} }
img { img {
@@ -640,14 +615,7 @@ header {// {{{
.project-header { .project-header {
// margin-bottom: .6em; // margin-bottom: .6em;
// margin-bottom: .1em; margin-bottom: .1em;
margin-bottom: 5px;
}
.project-title {
// color: $base-blue;
color: black;
display: inline;
} }
.project-link { .project-link {
@@ -687,37 +655,8 @@ header {// {{{
} }
}// }}} }// }}}
.company {
// color: #fe4646;
color: black;
font-weight: bold;
font-size: 1.2em;
margin-bottom: 5px;
}
.position {
// color: black;
// color: $base-sky-blue;
// color: $base-blue;
color: black;
font-weight: bold;
// font-style: italic;
// font-size: 1.1em;
font-size: 1em;
// margin-bottom: 5px;
margin-bottom: 15px;
}
.languages {
// font-style: italic;
// font-size: .9em;
}
.institution { .institution {
// color: $base-yellow; color: $base-yellow;
// color: $base-dark-orange;
// color: $base-blue;
color: black;
font-weight: bold; font-weight: bold;
font-size: 1.1em; font-size: 1.1em;
margin-bottom: 5px; margin-bottom: 5px;
@@ -823,21 +762,16 @@ header {// {{{
h1.site-title {// {{{ h1.site-title {// {{{
text-align: center; text-align: center;
// font-size: 4.2em; // font-size: 4.2em;
// font-size: 3.2em; font-size: 3.2em;
font-size: 2.5em;
// color: #66cccc; // color: #66cccc;
color: $base05; color: $base05;
// margin-top: 1rem; // margin-top: 1rem;
// margin-bottom: 0.75rem; // margin-bottom: 0.75rem;
@include vert-margin-rem(.75); @include vert-margin-rem(.75);
// @include a-color($base-sky-blue); @include a-color($base-sky-blue);
a { a {
color: black; text-decoration: none;
// text-decoration: none;
text-decoration: underline;
text-decoration-thickness: 2px;
text-underline-offset: 5px;
} }
// @media (max-width: $phone-width) { // @media (max-width: $phone-width) {
@@ -1003,8 +937,7 @@ article.single section.body h5 { color: #515151; }
article.single section.body h6 { color: #747369; } article.single section.body h6 { color: #747369; }
// article.single section.body a,a:visited { color: #a06700; } // article.single section.body a,a:visited { color: #a06700; }
// article.single section.body a,a:visited { color: $base-sky-blue; } article.single section.body a,a:visited { color: $base-sky-blue; }
// article.single section.body a,a:visited { color: $base-sky-blue; }
/* Article Elements */ /* Article Elements */

View File

@@ -1,5 +1,5 @@
# baseURL: http://localhost:1313/ baseURL: http://localhost:1313/
baseURL: https://kevin-mok.com/ # baseURL: https://kevin-mok.com/
# baseURL: /home/kevin/coding/mf-site/public # baseURL: /home/kevin/coding/mf-site/public
languageCode: en-us languageCode: en-us
# title: Kevin Mok's Website # title: Kevin Mok's Website
@@ -26,9 +26,9 @@ menu:
- name: config - name: config
url: /config url: /config
weight: 10 weight: 10
# - name: card - name: card
# url: /card url: /card
# weight: 15 weight: 15
# - name: letter # - name: letter
# url: /letter # url: /letter
# weight: 17 # weight: 17

View File

@@ -6,7 +6,7 @@ layout: single
--- ---
<!--- Intro {{{ --> <!--- Intro {{{ -->
![desktop-screenshot](/img/config/desktop-screenshot.png) ![desktop-screenshot](https://img.khkm.tk/uploads/big/b2bd45e8f436d389ecb787b5c61c951a.png)
*Screenshot from my dual-monitor setup.* *Screenshot from my dual-monitor setup.*
This [repository][lc-repo] contains the dotfiles to increase my workflow This [repository][lc-repo] contains the dotfiles to increase my workflow
@@ -18,17 +18,17 @@ efficiency. They are also for my Linux [rice][ricing_explanation].
<!--- Main Programs {{{ --> <!--- Main Programs {{{ -->
## Main Programs ## Main Programs
* **OS**: [Arch Linux](https://www.archlinux.org/) ([packages](https://git.kevin-mok.com/Kevin-Mok/linux-config/src/branch/master/txt/arch-2-pkgs.txt)) * **OS**: [Arch Linux](https://www.archlinux.org/) ([packages](txt/nzxt-pkgs.txt))
``` ```
$ systemd-analyze $ systemd-analyze
Startup finished in 2.341s (kernel) + 1.085s (userspace) = 3.426s Startup finished in 2.341s (kernel) + 1.085s (userspace) = 3.426s
graphical.target reached after 1.085s in userspace graphical.target reached after 1.085s in userspace
``` ```
* **Terminal**: [kitty](https://sw.kovidgoyal.net/kitty/) * **Terminal**: [rxvt-unicode-pixbuf](https://www.wikiwand.com/en/Rxvt)
* **Shell**: [fish](https://fishshell.com/) * **Shell**: [Zsh](http://zsh.sourceforge.net/) + [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh)
* **Window Manager**: [i3-gaps](https://i3wm.org/) * **Window Manager**: [i3-gaps](https://github.com/Airblader/i3)
* **Editor**: [neovim](https://neovim.io/) ([plugins](https://git.kevin-mok.com/Kevin-Mok/linux-config/src/branch/master/dot_vimrc.tmpl#L147-L359)) * **Editor**: [Neovim](https://github.com/neovim/neovim) ([plugins](dotfiles/.vimrc#L51))
* **File Manager**: [ranger](https://github.com/ranger/ranger?tab=readme-ov-file#ranger-193)/[PCManFM](https://en.wikipedia.org/wiki/PCMan_File_Manager) * **File Manager**: [ranger](https://ranger.github.io/)
<!--- }}} Basic Info --> <!--- }}} Basic Info -->
<!--- Setup {{{ --> <!--- Setup {{{ -->

View File

@@ -5,103 +5,91 @@ draft: false
--- ---
{{% resume/section "Work Experience" %}}<!--- {{{ --> {{% resume/section "Work Experience" %}}<!--- {{{ -->
{{% resume/work-experience name="Red Hat" {{% resume/education name="Red Hat"
title="Cloud/Software Engineer Intern" languages="Kubernetes, GoLang, Jenkins" date="May 2020 — Aug 2021" %}} title="Cloud/Software Engineer Intern" date="May 2020 — Aug 2021" %}}
- Reduced deployment time by **66%** by implementing ability to
- **Reduced deployment time by 66%** by implementing a deploy locally-compiled binaries onto **Kubernetes**/**OpenShift**
[solution](https://github.com/apache/incubator-kie-kogito-operator/commit/175a6356c5474f2360ccb8ae835e0b9b2d653cf1) for deploying locally-compiled binaries onto using only command-line.
Kubernetes/OpenShift via command-line, **cutting average - Implemented ability for Kubernetes operator to fetch data
deployment times from 45 minutes to 15 minutes**. from a deployed service and update config with data.
(**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 assigned based on
the Kubernetes operator to automatically fetch data from deployed YAML while also fixing reconciliation issues.
deployed services and update configurations, **deprecating - Automated the promotion and release process
legacy startup scripts and reducing overall startup time as part of the **Jenkins** release pipeline.
by 40%**. - Wrote documentation on how to get started with the project to onboard new
- **Improved application stability** by introducing startup developers and mentored the incoming intern.
probes for legacy applications with longer boot times,
**resulting in a 50% reduction in startup-related failures
and downtime during production launches**.
- **Enhanced system reliability** by refactoring probes to
[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%**.
- **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.
{{% /resume/section %}}<!--- }}} --> {{% /resume/section %}}<!--- }}} -->
{{% resume/section projects %}}<!--- {{{ --> {{% resume/section projects %}}<!--- {{{ -->
<!--- AWS {{{ -->
{{% resume/project name="AWS Server" <!--- CSC369 {{{ -->
url="https://kevin-mok.com/server/" languages="AWS, Kubernetes, Docker, Terraform" date="May 2024" show="true" %}}
- **Deployed and maintained multiple web applications** {{% resume/project name="Custom Kernel Module"
using **Docker Compose** on **AWS EC2 Debian/Linux servers**, url="https://kevin-mok.com/server/" date="Jan. 2022" show="true" %}}
ensuring consistent environments for applications handling
**over 2,000+ monthly requests**. - Wrote and installed a [custom Linux kernel module](https://github.com/Kevin-Mok/interceptor-kernel/blob/master/a1/interceptor.c) in **C**.
- **Automated AWS infrastructure provisioning** by writing - Intercepted pre-existing system calls using
**Terraform** files to deploy AWS EC2 instances and Docker custom kernel module by sending commands to
containers, **accelerating deployment times by 80%** and userspace.
providing an easily reproducible infrastructure setup. - Monitored specific process ID's in my system
- **Improved web application accessibility** by call to intercept their system calls.
configuring **AWS Route 53**s DNS and **NGINX** to route
subdomains to individual web apps, **enabling seamless
navigation between apps**.
- **Built a uptime monitoring system** by writing a
[JavaScript script](https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-pages.service) and setting up a systemd
service/timer to check and display page uptime,
**ensuring near real-time monitoring and reducing downtime
time by 95%**.
- **Enhanced data resilience** by automating regular backups
using Amazon EBS snapshots, ensuring **99.9% uptime and data
integrity** by creating consistent and reliable backups,
**reducing potential data loss by 95%** in disaster scenarios.
{{% /resume/project %}} {{% /resume/project %}}
<!--- AWS }}} --> <!--- CSC369 }}} -->
<!--- DigitalOcean {{{ -->
{{% resume/project name="Personal Server"
url="https://kevin-mok.com/server/" date="Aug. 2019 — present" show="true" %}}
- Deployed [various web apps] with backends using NGINX on a Debian/**Linux** server.
- Wrote a [**JavaScript** script][server script] and [systemd service][systemd service]/[timer]
to display the uptime of my pages every hour.
- Monitored system resources and performed system maintenance using tmux.
[various web apps]: https://kevin-mok.com/server/
[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 }}} -->
<!--- Rarity Surf {{{ --> <!--- Rarity Surf {{{ -->
{{% resume/project name="Rarity Surf" {{% resume/project name="Rarity Surf"
languages="Python, Django, JavaScript, React"
date="Oct 2021" show="true" %}} date="Oct 2021" show="true" %}}
- **Developed a full-stack web application** to generate rarity - Web app to give rarity rankings to NFT's within minutes of their metadata being revealed and check which are listed (based on rarity and price filters) on the OpenSea marketplace using their API.
rankings for NFT's integrated with leading NFT - Reverse engineered the ranking algorithm to match the
marketplace's (OpenSea) API, leading rarity ranking site's rankings (scraped 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 5%** rarity NFT's
- **Architected a robust Django (Python) [backend](https://github.com/Kevin-Mok/rarity-surf)** to fetch and process against competing buyers.
NFT metadata from IPFS, store rarity rankings in - Wrote **Django (Python)** backend to fetch metadata from IPFS, store rarity rankings in PostgreSQL and serve rarity data using GraphQL.
**PostgreSQL**, and serve the data via GraphQL API, **ensuring low-latency access and scaling to handle 2,000+ concurrent requests**. - Wrote **React** frontend with hooks to dynamically load rarity data. Styled with Tailwind.
{{% /resume/project %}} {{% /resume/project %}}
<!--- Rarity Surf }}} --> <!--- Rarity Surf }}} -->
{{% /resume/section %}}<!--- }}} --> {{% /resume/section %}}<!--- }}} -->
{{% resume/section skills %}}<!--- {{{ --> {{% resume/section skills %}}<!--- {{{ -->
**Python**, **Django**, **JavaScript**, **React**, Node.js, PostgreSQL, MongoDB, Bash, **Git**, **Linux**, **Command Line**, Go(Lang), AWS, Kubernetes, Terraform, Docker (Compose), Jenkins, Groovy, Solidity, C Kubernetes, **JavaScript**, **React**, **Python**, Go, Bash, Solidity, C, **Django**, Node.js, Jenkins, PostgreSQL, **Linux**, **Git**, **Command Line**
{{% /resume/section %}}<!--- }}} --> {{% /resume/section %}}<!--- }}} -->
{{% resume/section education %}}<!--- {{{ --> {{% resume/section education %}}<!--- {{{ -->
{{% resume/education name="University of Toronto (St. George)" {{% resume/education name="University of Toronto"
title="Computer Science Specialist — 3.84 GPA (CS). Graduated with High Distinction." date="2019 — 2024" %}} title="Computer Science Specialist — 3.84 GPA (CS). Graduated with High Distinction." date="2018 — 2023" %}}
{{% /resume/section %}}<!--- }}} --> {{% /resume/section %}}<!--- }}} -->

View File

@@ -1,179 +1,19 @@
<!--- {{{ Red Hat --> <!--- Spotify Graphs {{{ -->
- 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**
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.
<!--- }}} Red Hat -->
<!--- Rarity Surf {{{ -->
{{% resume/project name="Rarity Surf"
languages="Python, JavaScript, React, Django"
date="Oct 2021" show="true" %}}
- **Developed a full-stack web application** to generate rarity
rankings for NFT's integrated with OpenSea's API,
enabling users to **quickly identify rare NFT's** and check
their listing status, **improving market research efficiency by 80%**.
- **Reverse engineered a proprietary ranking algorithm** to
mirror the leading rarity ranking sites results,
**achieving 99.75% accuracy** by
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 %}}
<!--- Rarity Surf }}} -->
<!--- Astronofty {{{ -->
{{% resume/project name="Astronofty"
url="https://github.com/Kevin-Mok/astronofty" languages="JavaScript, 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 }}} -->
<!--- 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 }}} -->
<!--- AWS 2 {{{ -->
{{% resume/project name="AWS Server"
url="https://kevin-mok.com/server/" languages="AWS, Kubernetes, Docker, Terraform" date="May 2024" show="true" %}}
- **Deployed and maintained multiple web applications**
using **Docker Compose** on **AWS EC2 Debian/Linux servers**,
ensuring consistent environments for applications handling
**over 2,000+ monthly requests**.
- **Streamlined infrastructure management** by creating
Kubernetes manifest files to easily recreate server setups
with persistent storage, automatic restarts, and open
ports, **reducing the need for manual configuration**.
- **Automated AWS infrastructure provisioning** by writing
**Terraform** files to deploy **EC2** instances and Docker
containers, **accelerating deployment times by 80%** and
providing an easily reproducible infrastructure setup for
future projects.
- Improved web application accessibility and scalability by
configuring Amazon Route 53s DNS and NGINX to route
subdomains to individual web apps, enabling seamless
navigation between apps and reducing DNS resolution times
by 25%.
- Built a robust uptime monitoring system by writing a
JavaScript server script and setting up a systemd
service/timer to check and display page uptime every hour,
ensuring near real-time monitoring and reducing downtime
detection time by 85%.
{{% /resume/project %}}
<!--- AWS 2 }}} -->
<!--- AWS 3 {{{ -->
{{% resume/project name="AWS Server"
url="https://kevin-mok.com/server/" languages="AWS, Kubernetes, Docker, Terraform" date="May 2024" show="true" %}}
- **Deployed and maintained multiple web applications**
using **Docker Compose** on **AWS EC2 Debian/Linux servers**,
ensuring consistent environments for applications handling
**over 2,000+ monthly requests**.
- **Automated AWS infrastructure provisioning** by writing
**Terraform** files to deploy AWS EC2 instances and Docker
containers, **accelerating deployment times by 80%** and
providing an easily reproducible infrastructure setup.
{{% /resume/project %}}
<!--- AWS 3 }}} -->
<!--- Astronofty (extended) {{{ -->
{{% resume/project name="Astronofty"
url="https://github.com/Kevin-Mok/astronofty" languages="JavaScript, React, Solidity" date="Jan 2023"
show="true" %}}
- **Secured [2nd place](https://devpost.com/software/astronofty) overall out of 150+ teams** at UofTHacks
X, a 36-hour hackathon, for developing a blockchain-based
NFT marketplace app.
- **Built and optimized React (JavaScript) [components](https://github.com/Kevin-Mok/astronofty/tree/main/src/components)** to synchronously
upload images and metadata to IPFS, **enhancing user engagement by 40%** during the demo,
and ensuring real-time NFT data retrieval, achieving a **75% improvement in loading times**.
{{% /resume/project %}}
<!--- Astronofty }}} -->
<!--- {{{ Spotify Graphs -->
{{% resume/project name="Spotify Graphs" {{% resume/project name="Spotify Graphs"
url="https://github.com/Kevin-Mok/spotify-lib-vis" date="June 2020 " url="https://github.com/Kevin-Mok/spotify-lib-vis" date="June 2018 — July 2018"
languages="Python, Django, PostgreSQL"
show="true" %}} show="true" %}}
- Web app to visualize user's library and listening - Implemented base functionality of scanning tracks and listening
history from Spotify. history from user's library using Spotify API and organized data
- [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. into **PostgreSQL** database with **Django** 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.
- Generated various charts to visualize the artists and genres - Produced bubble chart and (stacked) bar chart using [**d3**]
of tracks in library. [d3 graph examples] to visualize the artists, genres and features of
tracks in library.
[d3 graph examples]: https://github.com/d3/d3/wiki/Gallery
{{% /resume/project %}} {{% /resume/project %}}
@@ -200,21 +40,24 @@ show="true" %}}
<!--- Grocery Finder }}} --> <!--- Grocery Finder }}} -->
<!--- CSC369 {{{ --> <!--- DigitalOcean {{{ -->
{{% resume/project name="Custom Kernel Module" {{% resume/project name="Personal Server"
url="https://kevin-mok.com/server/" date="Jan. 2022" show="true" %}} url="https://kevin-mok.com/server/" date="Aug. 2019 — present" %}}
- Wrote and installed a [custom Linux kernel module](https://github.com/Kevin-Mok/interceptor-kernel/blob/master/a1/interceptor.c) in **C**. - Deployed various web apps with backends such as Node, PHP and Python using
- Intercepted pre-existing system calls using **NGINX** on a **Debian** server.
custom kernel module by sending commands to - Monitor system resources and perform system maintenance using tmux.
userspace. - Wrote [**Node.js** script][server script] and [**systemd** service][systemd service]/[timer]
- Monitored specific process ID's in my system to check and display the uptime of my pages every hour.
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 %}}
<!--- CSC369 }}} --> <!--- DigitalOcean Droplet }}} -->
<!--- ParsaFood {{{ --> <!--- ParsaFood {{{ -->
@@ -237,23 +80,3 @@ 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

@@ -1,23 +0,0 @@
# 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.
# AWS
1. Deployed various web apps using Docker (Compose) on an AWS EC2 Debian/Linux server.
2. Created Kubernetes manifest files to quickly recreate my server setup with persistent storage/restarts and open ports.
3. Created Terraform files to deploy an AWS EC2 instance and Docker containers.
4. Used Amazon Route 53s DNS and NGINX to route subdomains to each web application.
5. Wrote a JavaScript server script and systemd service/timer to display the uptime of my pages every hour.

View File

@@ -1,11 +1,12 @@
# To-Do # To-Do
- check price of AWS server - install Docker
- run Docker apps on it - run Docker apps on it
- run domain - run domain
- run/create Docker compose - run/create Docker compose
- Dockerize app - Dockerize app
# Done # Done
- setup AWS server
# Points # Points
- run/deploy K8s locally on minikube using kubectl - run/deploy K8s locally on minikube using kubectl
@@ -16,3 +17,4 @@
# Replace # Replace
- personal server - personal server
- Astronofy - Astronofy
- check price of AWS server

View File

@@ -1,8 +0,0 @@
# DevOps
AWS, Kubernetes, Terraform, Docker (Compose), Jenkins, Groovy, Go(Lang), Bash, **Linux**, **JavaScript**, **React**, **Python**, **Django**, Node.js, PostgreSQL, MongoDB, Solidity, C, **Git**, **Command Line**
# 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
# 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

View File

@@ -1,16 +1,14 @@
--- ---
title: "Server Apps" title: "Server Apps"
date: 2024-06-10 date: 2019-09-22
draft: false draft: false
layout: single layout: single
js: ["server-table"] js: ["server-table"]
--- ---
Here is a list of apps that I am running on my [AWS EC2][AWS EC2 info] Here is a list of apps that I am running on my [DigitalOcean
Debian instance/[DigitalOcean
droplet][do-droplet]. Their [statuses] are updated every hour using a droplet][do-droplet]. Their [statuses] are updated every hour using a
[Node.js script][update-script] and a [systemd service]/[timer]. [Node.js script][update-script] and a [systemd service]/[timer].
[AWS EC2 info]: https://aws.amazon.com/pm/ec2/?gclid=CjwKCAjwyJqzBhBaEiwAWDRJVA8xkzlFBVRieWU_oiTxnHHfRgTnfN9WlnYON3UptS4aTtjaYRbVJRoCju8QAvD_BwE&trk=8c0f4d22-7932-45ae-9a50-7ec3d0775c47&sc_channel=ps&ef_id=CjwKCAjwyJqzBhBaEiwAWDRJVA8xkzlFBVRieWU_oiTxnHHfRgTnfN9WlnYON3UptS4aTtjaYRbVJRoCju8QAvD_BwE:G:s&s_kwcid=AL!4422!3!472464674288!e!!g!!aws%20ec2!11346198414!112250790958
[do-droplet]: https://www.digitalocean.com/products/droplets/ [do-droplet]: https://www.digitalocean.com/products/droplets/
[statuses]: https://kevin-mok.com/server-apps.json [statuses]: https://kevin-mok.com/server-apps.json
[systemd service]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-pages.service [systemd service]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-pages.service

View File

@@ -6,6 +6,7 @@
<footer> <footer>
<div class="container"> <div class="container">
<!-- <span class="copyright">&copy; {{ .Site.LastChange.Year }} {{ .Site.Title }} - <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></span> -->
<div id="footer-row" class="row justify-content-center"> <div id="footer-row" class="row justify-content-center">
<span id="footer-content" class="name"> <span id="footer-content" class="name">
<span id="copyright" class="col-xs-6"> <span id="copyright" class="col-xs-6">
@@ -14,18 +15,11 @@
<!-- <a href="{{ "credits" | relURL }}">Credits</a> · --> <!-- <a href="{{ "credits" | relURL }}">Credits</a> · -->
</span> </span>
<span id="social-icons" class="col-xs-4"> <span id="social-icons" class="col-xs-4">
<a href="https://www.linkedin.com/in/Kev-Mok" target="_blank">
<img src="{{ "img/social/linkedin.svg" | relURL }}" alt="linkedin-logo">
</a>
<a href="mailto:me@kevin-mok.com" target="_blank">
<img src="{{ "img/social/email.svg" | relURL }}"
alt="envelope">
·
<a href="https://github.com/Kevin-Mok" target="_blank"> <a href="https://github.com/Kevin-Mok" target="_blank">
<img src="{{ "img/social/github.svg" | relURL }}" <img src="{{ "img/social/github.svg" | relURL }}"
alt="github-logo"> alt="github-logo">
</a> </a>
<a href="https://git.kevin-mok.com/Kevin-Mok?tab=activity" target="_blank"> <a href="https://git.kevin-mok.com/" target="_blank">
<img src="{{ "img/social/gitea.svg" | relURL }}" alt="gitea-logo"> <img src="{{ "img/social/gitea.svg" | relURL }}" alt="gitea-logo">
</a> </a>
· ·
@@ -42,6 +36,12 @@
alt="reddit-logo"> alt="reddit-logo">
</a> </a>
. .
<a href="https://www.linkedin.com/in/Kev-Mok" target="_blank">
<img src="{{ "img/social/linkedin.svg" | relURL }}" alt="linkedin-logo">
</a>
<a href="mailto:me@kevin-mok.com" target="_blank">
<img src="{{ "img/social/email.svg" | relURL }}"
alt="envelope">
</a> </a>
</span> </span>
<span class="col-xs-2"> <span class="col-xs-2">

View File

@@ -12,7 +12,7 @@
{{ hugo.Generator }} {{ hugo.Generator }}
<meta name="google-site-verification" content="3aZhrY5bFgQY0HY2DNNUhbkuIfVEcwkrQHnbJd8jCCQ" /> <meta name="google-site-verification" content="3aZhrY5bFgQY0HY2DNNUhbkuIfVEcwkrQHnbJd8jCCQ" />
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<!-- <script src="https://cdn.khkm.tk/live.js" charset="utf-8"></script> --> <!-- <script src="https://cdn.khkm.gq/live.js" charset="utf-8"></script> -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
@@ -20,9 +20,6 @@
<!-- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Code+Pro:400,700" type="text/css"> --> <!-- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Code+Pro:400,700" type="text/css"> -->
<!-- <link rel='stylesheet' href='//cdn.jsdelivr.net/npm/hack-font@3.3.0/build/web/hack-subset.css'> --> <!-- <link rel='stylesheet' href='//cdn.jsdelivr.net/npm/hack-font@3.3.0/build/web/hack-subset.css'> -->
<!-- <link rel="stylesheet" href="https://meyerweb.com/eric/tools/css/reset/reset.css" type="text/css" media="all" /> --> <!-- <link rel="stylesheet" href="https://meyerweb.com/eric/tools/css/reset/reset.css" type="text/css" media="all" /> -->
<!-- href="https://cdn.rawgit.com/dreampulse/computer-modern-web-font/master/fonts.css"> -->
<link rel="stylesheet" type="text/css"
href="https://cdn.jsdelivr.net/gh/dreampulse/computer-modern-web-font@master/fonts.css">
<link rel="stylesheet" href="{{ "css/style.css" | relURL }}" type="text/css"> <link rel="stylesheet" href="{{ "css/style.css" | relURL }}" type="text/css">
{{ $main_sass := resources.Get "sass/main.scss" }} {{ $main_sass := resources.Get "sass/main.scss" }}
{{ $main_style := $main_sass | resources.ToCSS }} {{ $main_style := $main_sass | resources.ToCSS }}

View File

@@ -1,4 +1,7 @@
<h1 class="site-title"> <h1 class="site-title">
<span class="surrounding"></span><a href="{{ .Site.BaseURL }}"> <span class="surrounding">[</span><a href="{{ .Site.BaseURL }}"><span class="base08">K</span><span
<span>Kevin Mok</span> class="base0f">e</span><span class="base09">v</span><span
class="base0a">i</span><span class="base0b">n </span><span
class="base0c">M</span><span class="base0d">o</span><span
class="base0e">k</span></a><span class="surrounding">] # _</span>
</h1> </h1>

View File

@@ -1,33 +1,10 @@
<div id="about"> <div id="about">
<h2>Welcome to my site!</h2> <h2>Welcome to my site!</h2>
<p> <p>
I'm Kevin Mok. Here are a few things about myself! I'm Kevin Mok - a Computer Science
<ul> student at the University of Toronto, and I'm greatly interested in all things Linux and
<li>I'm an Ex-Cloud Engineer Intern at <a href="https://www.gnu.org/philosophy/floss-and-foss.en.html"
<a href="https://www.redhat.com/" target="_blank">Red Hat</a>. target="_blank">FOSS/FLOSS</a>.
</li>
<li>
I'm graduated University of Toronto as a Computer
Science Scecialist in 2023.
</li>
<li>
I am currently looking for full-time work! You can
view
<a href="http://localhost:1313/resume/" target="_blank">my resume</a>
on my site can
reach me on my
<a href="https://www.linkedin.com/in/kev-mok" target="_blank">LinkedIn</a>
or email me at me at kevin-mok.com.
</li>
<li>
I'm greatly interested in Linux (been using
<a href="https://archlinux.org/" target="_blank">Arch Linux </a>
since 2019) and a supporter of
<a href="https://www.gnu.org/philosophy/floss-and-foss.en.html"
target="_blank">FOSS/FLOSS</a>.
</li>
</ul>
</p> </p>
{{ partial "home/me-equation.html" . }} {{ partial "home/me-equation.html" . }}

View File

@@ -1,24 +1,23 @@
<div class="me-equation"> <div class="me-equation">
<div class="equation-part"> <div class="equation-part">
<a href="https://www.redhat.com/" target="_blank"> <a href="https://www.gnu.org/" target="_blank">
<img src="{{ "img/home/red-hat.svg" | relURL }}" <img src="{{ "img/home/gnu.svg" | relURL }}" id="gnu" alt="gnu-logo">
alt="red-hat-logo">
</a>
<p>+</p>
</div>
<div class="equation-part">
<a href="https://archlinux.org/" target="_blank">
<!-- <img src="{{ "img/home/gnu.svg" | relURL }}" id="gnu" alt="gnu-logo"> -->
<img src="{{ "img/home/arch.svg" | relURL }}" id="gnu" alt="gnu-logo">
</a> </a>
<p>+</p> <p>+</p>
</div> </div>
<div class="equation-part">
<a href="https://www.wikiwand.com/en/Arch_Linux" target="_blank">
<img src="{{ "img/home/arch.svg" | relURL }}" alt="linux-logo">
<!-- <img src="{{ "img/home/larbs.png" | relURL }}" alt="linux-logo"> -->
</a>
<p>+</p>
</div>
<div class="equation-part" id="uoft-part"> <div class="equation-part" id="uoft-part">
<a href="https://www.utoronto.ca/" target="_blank"> <a href="https://www.utoronto.ca/" target="_blank">
<img src="{{ "img/home/uoft-logo.svg" | relURL }}" alt="uoft-logo"> <img src="{{ "img/home/uoft-logo.svg" | relURL }}" alt="uoft-logo">
</a> </a>
</div>
<p>=</p> <p>=</p>
</div>
<div class="equation-part"> <div class="equation-part">
<img src="{{ "img/home/hexatar.png" | relURL }}" id="hexatar" alt="my-avatar"> <img src="{{ "img/home/hexatar.png" | relURL }}" id="hexatar" alt="my-avatar">
</div> </div>

View File

@@ -12,7 +12,7 @@
<div id="linkedin" class="col text-right"> <div id="linkedin" class="col text-right">
<a href="https://www.linkedin.com/in/Kev-Mok" target="_blank"> <a href="https://www.linkedin.com/in/Kev-Mok" target="_blank">
<span class="url-info"> <span class="url-info">
linkedin.com/in/Kev-Mok Kev-Mok
</span> </span>
<img src="{{ "img/social/linkedin.svg" | relURL }}" alt="linkedin-icon"> <img src="{{ "img/social/linkedin.svg" | relURL }}" alt="linkedin-icon">
</a> </a>
@@ -28,11 +28,11 @@
</a> </a>
</div> </div>
<div id="website" class="col text-right"> <div id="website" class="col text-right">
<a href="https://github.com/Kevin-Mok" target="_blank"> <a href="https://kevin-mok.com/" target="_blank">
<span class="url-info"> <span class="url-info">
github.com/Kevin-Mok kevin-mok.com
</span> </span>
<img src="{{ "img/social/github.svg" | relURL }}" alt="link-icon"> <img src="{{ "img/resume/link.svg" | relURL }}" alt="link-icon">
</a> </a>
</div> </div>
</div> </div>

View File

@@ -1,10 +1,17 @@
<div class="project"> <div class="project">
<div class="row project-header"> <div class="row project-header">
<div class="col-8 text-left"> <div class="col-8 text-left">
<a class="project-link" href="{{ .Get "url" }}" target="_blank">
<img src="{{ "img/resume/link.svg" | relURL }}" alt="link-icon">
</a>
<button class="btn" type="button" data-toggle="collapse"
data-target="#{{ .Get "name" | lower | urlize }}-details"
aria-expanded="false" aria-controls="{{ .Get "name" | lower | urlize }}-details">
<h2 class="project-title"> <h2 class="project-title">
{{ .Get "name" }} {{ .Get "name" }}
<img class="down-triangle" src="{{ "img/resume/down-triangle.png" | relURL }}" alt="link-icon">
</h2> </h2>
<span><{{ .Get "languages" }}></span> </button>
</div> </div>
<div class="col-4 text-right date">{{ .Get "date" }}</div> <div class="col-4 text-right date">{{ .Get "date" }}</div>
</div> </div>

View File

@@ -1,10 +1,9 @@
<div class="references"> <div class="references">
<span> <span>
See my LinkedIn for See my
<a href="https://www.linkedin.com/in/kev-mok/details/recommendations/?detailScreenTabIndex=0" <a href="https://www.linkedin.com/in/Kev-Mok"
target="_blank"> target="_blank">
references</a> from my LinkedIn</a> for references from my Red Hat managers/mentee and a
Red Hat managers/mentee, a startup client and a graduate startup client.
student mentor.
</span> </span>
</div> </div>

View File

@@ -1,17 +0,0 @@
<div class="work-experience">
<div class="row">
<div class="col-8 text-left">
<p class="company">
{{ .Get "name" }}
</p>
</div>
<div class="col text-right date">{{ .Get "date" }}</div>
</div>
<!-- <span class="title"> -->
<span class="position">
{{ .Get "title" }}
</span>
<span class="languages">
<{{ .Get "languages" }}>
</span>
</div>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 MiB

View File

@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="b6bdd2b4-52ab-488a-9a30-1e6d1d7dd2d4" data-name="Layer 1" viewBox="0 0 192.30001 146" version="1.1" sodipodi:docname="logo.svg" width="192.3" height="146" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
<metadata id="metadata15">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1007" id="namedview13" showgrid="false" fit-margin-top="1" fit-margin-right="1" fit-margin-bottom="1" fit-margin-left="1" inkscape:zoom="0.45930043" inkscape:cx="306.89999" inkscape:cy="73" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="b6bdd2b4-52ab-488a-9a30-1e6d1d7dd2d4"/>
<defs id="defs4">
<style id="style2">.a737459c-e8c7-4afa-8008-f6cfd15ccda2{fill:#e00;}</style>
</defs>
<path class="a737459c-e8c7-4afa-8008-f6cfd15ccda2" d="m 128,84 c 12.5,0 30.6,-2.6 30.6,-17.5 a 19.53,19.53 0 0 0 -0.3,-3.4 L 150.9,30.7 C 149.2,23.6 147.7,20.3 135.2,14.1 125.5,9.1 104.4,1 98.1,1 92.2,1 90.5,8.5 83.6,8.5 76.9,8.5 72,2.9 65.7,2.9 c -6,0 -9.9,4.1 -12.9,12.5 0,0 -8.4,23.7 -9.5,27.2 a 6.15,6.15 0 0 0 -0.2,1.9 C 43,53.7 79.3,83.9 128,84 m 32.5,-11.4 c 1.7,8.2 1.7,9.1 1.7,10.1 0,14 -15.7,21.8 -36.4,21.8 C 79,104.5 38.1,77.1 38.1,59 a 18.35,18.35 0 0 1 1.5,-7.3 C 22.8,52.5 1,55.5 1,74.7 1,106.2 75.6,145 134.6,145 c 45.3,0 56.7,-20.5 56.7,-36.7 0,-12.7 -11,-27.1 -30.8,-35.7" id="path8" inkscape:connector-curvature="0" style="fill:#ee0000"/>
<path d="m 160.5,72.6 c 1.7,8.2 1.7,9.1 1.7,10.1 0,14 -15.7,21.8 -36.4,21.8 C 79,104.5 38.1,77.1 38.1,59 a 18.35,18.35 0 0 1 1.5,-7.3 l 3.7,-9.1 a 6.15,6.15 0 0 0 -0.2,1.9 c 0,9.2 36.3,39.4 84.9,39.4 12.5,0 30.6,-2.6 30.6,-17.5 A 19.53,19.53 0 0 0 158.3,63 Z" id="path10" inkscape:connector-curvature="0"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 465 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 465 KiB