Compare commits

..

6 Commits

Author SHA1 Message Date
16bff441df Minor changes 2024-05-29 13:50:09 -04:00
6b2a29b078 Kogito PR links 2024-05-24 10:08:12 -04:00
1881fd9778 Resume spacing/font sizes 2024-05-24 09:43:39 -04:00
24f58db4f9 Work exp colors 2024-05-24 09:28:07 -04:00
61dc603da2 Add Astronofty to resume 2024-05-23 19:27:01 -04:00
c9e307dd70 AWS server to resume 2024-05-23 19:17:27 -04:00
8 changed files with 113 additions and 143 deletions

View File

@@ -106,16 +106,11 @@ body {
// line-height: 1.5; // line-height: 1.5;
line-height: 1.57; line-height: 1.57;
// font-size: 100%; // font-size: 100%;
// font-size: 15px; font-size: 15px;
font-size: 17px;
// 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 +172,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 +212,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 +370,7 @@ header {// {{{
display: inline; display: inline;
&#gnu { &#gnu {
// background-color: $base04; background-color: $base04;
// background-color: $base05; // background-color: $base05;
} }
} }
@@ -500,7 +493,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 +501,6 @@ header {// {{{
} }
} }
a {// {{{ a {// {{{
color: #4287cd;
text-decoration: none; text-decoration: none;
&:hover { &:hover {
text-decoration: none; text-decoration: none;
@@ -520,8 +512,7 @@ header {// {{{
.row { .row {
// flex-grow: 1; // flex-grow: 1;
// color: $base05; color: $base05;
color: #4287cd;
img { img {
height: 1em; height: 1em;
@@ -539,9 +530,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 +545,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,8 +552,7 @@ 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;
@@ -578,7 +563,7 @@ header {// {{{
// } // }
}// }}} }// }}}
h2 {// {{{ h2 {// {{{
//color: $base-orange; color: $base-orange;
margin-top: .5rem; margin-top: .5rem;
font-size: 1em; font-size: 1em;
@@ -608,7 +593,7 @@ header {// {{{
}// }}} }// }}}
.section-header { .section-header {
margin-top: .7em; margin-top: 1em;
margin-bottom: 0.4em; margin-bottom: 0.4em;
} }
@@ -644,12 +629,6 @@ header {// {{{
margin-bottom: 5px; margin-bottom: 5px;
} }
.project-title {
// color: $base-blue;
color: black;
display: inline;
}
.project-link { .project-link {
&:link { &:link {
text-decoration: none; text-decoration: none;
@@ -688,8 +667,7 @@ header {// {{{
}// }}} }// }}}
.company { .company {
// color: #fe4646; color: #fe4646;
color: black;
font-weight: bold; font-weight: bold;
font-size: 1.2em; font-size: 1.2em;
margin-bottom: 5px; margin-bottom: 5px;
@@ -697,27 +675,16 @@ header {// {{{
.position { .position {
// color: black; // color: black;
// color: $base-sky-blue; color: $base-sky-blue;
// color: $base-blue;
color: black;
font-weight: bold; font-weight: bold;
// font-style: italic; // font-style: italic;
// font-size: 1.1em; font-size: 1.1em;
font-size: 1em;
// margin-bottom: 5px; // margin-bottom: 5px;
margin-bottom: 15px; 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 +790,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 +965,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

@@ -3,34 +3,64 @@ title: "Resume"
date: 2019-02-11T07:50:51-05:00 date: 2019-02-11T07:50:51-05:00
draft: false draft: false
--- ---
{{% resume/section "Web Dev Projects" %}}<!--- {{{ --> {{% resume/section "Work Experience" %}}<!--- {{{ -->
{{% resume/work-experience name="Red Hat"
title="Cloud/Software Engineer Intern" 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**
using only command-line (Golang used for this and below).
- Implemented ability for Kubernetes operator to fetch data
from a deployed service and update config with data.
- 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.
- Automated the promotion and release process
as part of the **Jenkins** [release pipeline](https://github.com/apache/incubator-kie-kogito-pipelines/commit/4c83f1aecdea2c1ba2796b79839a90d4083dce88).
- Wrote [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.
{{% /resume/section %}}<!--- }}} -->
{{% resume/section projects %}}<!--- {{{ -->
<!--- AWS {{{ -->
{{% resume/project name="AWS Server/Kubernetes"
url="https://kevin-mok.com/server/" 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.
- Used Amazon Route 53's DNS and **NGINX** to route
subdomains to each web application.
- Used AWS security groups to allow inbound HTTPS traffic.
- Used Amazon EBS snapshots to regularly back up server.
- Wrote a [**JavaScript** script][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="TypeScript, JavaScript, Node.js, React" date="Oct 2021" show="true" %}}
date="March 2025" show="true" %}}
- **Developed a full-stack web application - 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.
(TypeScript/JavaScript)** to generate - Reverse engineered the ranking algorithm to match the
rarity rankings for NFT's, integrating with **leading leading rarity ranking site's rankings (scraped using
marketplaces API** to enable users to quickly identify Selenium) with a **discrepancy of <0.25%**.
rare NFT's and check their listing status, **improving - Used app to frontrun purchases of **top 5%** rarity NFT's
market research efficiency by 80%**. against competing buyers.
- **Built a scalable [Node.js backend](https://github.com/Rarity-Surf/ME-sniper-backend)** with REST API - Wrote **Django (Python)** backend to fetch metadata from IPFS, store rarity rankings in PostgreSQL and serve rarity data using GraphQL.
endpoints to return NFTs based on customizable filters - Wrote **React** frontend with hooks to dynamically load rarity data. Styled with Tailwind.
such as max rank, price, and rarest traits. **Optimized
performance** to handle **3,000+ concurrent requests** by
implementing efficient data fetching and caching
mechanisms using **PostgreSQL** , ensuring low-latency
access to NFT data.
- **Built a dynamic [React frontend](https://github.com/Rarity-Surf/ME-sniper-frontend) (TypeScript/JavaScript)** to load and display NFTs in real-time with user-defined filters. Styled
using a mobile-responsive library, **reducing load times by 50%**.
- **Developed a [Discord bot](https://github.com/Rarity-Surf/ME-sniper-discord-bot) (TypeScript/JavaScript/Node.js)** to notify users of profitable
resale opportunities by leveraging historical sales data
to assess deal quality. This feature **increased user
engagement by 80%** and provided a seamless way for users
to stay updated on market opportunities.
{{% /resume/project %}} {{% /resume/project %}}
@@ -39,73 +69,40 @@ date="March 2025" show="true" %}}
<!--- Astronofty {{{ --> <!--- Astronofty {{{ -->
{{% resume/project name="Astronofty" {{% resume/project name="Astronofty"
url="https://github.com/Kevin-Mok/astronofty" url="https://github.com/Kevin-Mok/astronofty" date="Jan 2023"
languages="JavaScript, React, Solidity" date="Jan 2023"
show="true" %}} show="true" %}}
- **Secured [2nd place](https://devpost.com/software/astronofty) overall out of 150+ teams** at UofTHacks - Created for a 36 hour hackathon (UofTHacks X) where it [**came 2nd overall**](https://devpost.com/software/astronofty).
X, a 36-hour hackathon, for developing a blockchain-based - Created and deployed a smart contract with **Solidity** on
NFT marketplace app. the Ethereum blockchain to create/buy/sell NFT's
- **Built and optimized React (JavaScript) [components](https://github.com/Kevin-Mok/astronofty/tree/main/src/components)** to synchronously using MetaMask.
upload images and metadata to IPFS, **enhancing user engagement by 80%** during the demo. - Wrote a **React** hook to fetch and show listed NFT's, NFT details and owned NFT's.
- Used API to synchronously upload images and metadata to IPFS.
{{% /resume/project %}} {{% /resume/project %}}
<!--- Astronofty }}} --> <!--- Astronofty }}} -->
{{% resume/section "Work Experience" %}}<!--- {{{ -->
{{% resume/work-experience name="Red Hat" title="Cloud/Software Engineer Intern" languages="Kubernetes, GoLang, Jenkins" date="May 2022 — Aug 2023" %}}
- **Reduced deployment time by 66%** by implementing a
[solution](https://github.com/apache/incubator-kie-kogito-operator/commit/175a6356c5474f2360ccb8ae835e0b9b2d653cf1) for deploying locally-compiled binaries onto
Kubernetes/OpenShift via command-line, **cutting average
deployment times from 45 minutes to 15 minutes**.
(**Kubernetes/GoLang** used for this and three below).
- **Eliminated 80% of manual configuration errors** by enabling
the Kubernetes operator to automatically fetch data from
deployed services and update configurations, **deprecating
legacy startup scripts and reducing overall startup time
by 40%**.
- **Improved application stability** by introducing startup
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.
- **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 skills %}}<!--- {{{ --> {{% resume/section skills %}}<!--- {{{ -->
**TypeScript**, **JavaScript**, **React**, **Node.js**, **Python**, AWS, Kubernetes, Docker (Compose), **JavaScript**, **React**, **Python**, Go, Bash, Solidity, C, **Django**, Node.js, Jenkins, PostgreSQL,
**Django**, PostgreSQL, MongoDB, Bash, **Git**, **Linux**, **Command MongoDB, **Linux**, **Git**, **Command Line**
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 (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 "References" %}}<!--- {{{ -->
{{% resume/references %}}
{{% /resume/section %}}<!--- }}} --> {{% /resume/section %}}<!--- }}} -->
<!-- vim: fdm=marker --> <!-- vim: fdm=marker -->

View File

@@ -1,3 +1,19 @@
<!--- CSC369 {{{ -->
{{% resume/project name="Custom Kernel Module"
url="https://kevin-mok.com/server/" date="Jan. 2022" show="true" %}}
- Wrote and installed a [custom Linux kernel module](https://github.com/Kevin-Mok/interceptor-kernel/blob/master/a1/interceptor.c) in **C**.
- Intercepted pre-existing system calls using
custom kernel module by sending commands to
userspace.
- Monitored specific process ID's in my system
call to intercept their system calls.
{{% /resume/project %}}
<!--- CSC369 }}} -->
<!--- Spotify Graphs {{{ --> <!--- Spotify Graphs {{{ -->
{{% resume/project name="Spotify Graphs" {{% resume/project name="Spotify Graphs"

View File

@@ -7,8 +7,9 @@
<a href="https://www.redhat.com/" target="_blank">Red Hat</a>. <a href="https://www.redhat.com/" target="_blank">Red Hat</a>.
</li> </li>
<li> <li>
I'm graduated with a 3.84 GPA studying Computer Science at the I'm a Computer Science student at the University of
University of Toronto in 2024 (currently looking for a full-time position!). Toronto, graduating at the end of 2023 (currently
looking for a full-time position!).
</li> </li>
<li> <li>
I'm greatly interested in all things Linux and I'm greatly interested in all things Linux and

View File

@@ -4,7 +4,6 @@
<h2 class="project-title"> <h2 class="project-title">
{{ .Get "name" }} {{ .Get "name" }}
</h2> </h2>
<span><{{ .Get "languages" }}></span>
</div> </div>
<div class="col-4 text-right date">{{ .Get "date" }}</div> <div class="col-4 text-right date">{{ .Get "date" }}</div>
</div> </div>
@@ -14,4 +13,3 @@
</div> </div>
</div> </div>
</div> </div>

View File

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

View File

@@ -11,8 +11,4 @@
<span class="position"> <span class="position">
{{ .Get "title" }} {{ .Get "title" }}
</span> </span>
<span class="languages">
<{{ .Get "languages" }}>
</span>
</div> </div>