Compare commits
2 Commits
canonical-
...
2bedc77f1b
| Author | SHA1 | Date | |
|---|---|---|---|
|
2bedc77f1b
|
|||
|
6553a1bfa1
|
3
.gitignore
vendored
3
.gitignore
vendored
@@ -3,8 +3,5 @@ public/
|
|||||||
resources/_gen/
|
resources/_gen/
|
||||||
themes/base16*
|
themes/base16*
|
||||||
|
|
||||||
*.pdf
|
|
||||||
|
|
||||||
commit-msg.txt
|
commit-msg.txt
|
||||||
.hugo_build.lock
|
|
||||||
static/server-apps.json
|
static/server-apps.json
|
||||||
|
|||||||
7
.gitmodules
vendored
7
.gitmodules
vendored
@@ -1,7 +0,0 @@
|
|||||||
[submodule "content/letter"]
|
|
||||||
path = content/letter
|
|
||||||
url = ssh://git@git.kevin-mok.com:399/Kevin-Mok/cover-letters.git
|
|
||||||
branch = master
|
|
||||||
[submodule "static/pdf"]
|
|
||||||
path = static/pdf
|
|
||||||
url = ssh://git@git.kevin-mok.com:399/Kevin-Mok/resume-pdf.git
|
|
||||||
@@ -94,10 +94,10 @@ $phone-width: 800px;
|
|||||||
|
|
||||||
// general elements {{{ //
|
// general elements {{{ //
|
||||||
|
|
||||||
// $background-color: #2d2d2d;
|
$background-color: #2d2d2d;
|
||||||
// $color: #f2f0ec;
|
$color: #f2f0ec;
|
||||||
$background-color: white;
|
// $background-color: white;
|
||||||
$color: black;
|
// $color: black;
|
||||||
|
|
||||||
body {
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@@ -105,11 +105,7 @@ body {
|
|||||||
color: $color;
|
color: $color;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
// font-size: 100%;
|
// font-size: 100%;
|
||||||
// font-size: 12px;
|
font-size: 15px;
|
||||||
// font-size: 15px;
|
|
||||||
font-size: 17.5px;
|
|
||||||
// font-size: 20px;
|
|
||||||
// font-size: 22px;
|
|
||||||
/* font-family: 'Source Code Pro', monospace; */
|
/* font-family: 'Source Code Pro', monospace; */
|
||||||
font-family: 'Hack', monospace;
|
font-family: 'Hack', monospace;
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -217,10 +213,6 @@ footer {
|
|||||||
@include vert-margin-rem(.2);
|
@include vert-margin-rem(.2);
|
||||||
padding-left: .5em;
|
padding-left: .5em;
|
||||||
opacity: .6;
|
opacity: .6;
|
||||||
|
|
||||||
&:hover {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -252,22 +244,22 @@ p {
|
|||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
// h1 {
|
h1 {
|
||||||
// font-size: 2rem;
|
font-size: 2rem;
|
||||||
|
|
||||||
// @media (max-width: $phone-width) {
|
@media (max-width: $phone-width) {
|
||||||
// font-size: 1.75rem;
|
font-size: 1.75rem;
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// h2 {
|
h2 {
|
||||||
// font-size: 1.5rem;
|
font-size: 1.5rem;
|
||||||
|
|
||||||
// @media (max-width: $phone-width) {
|
@media (max-width: $phone-width) {
|
||||||
// font-size: 1.4rem;
|
font-size: 1.4rem;
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
h3 { font-size: 1.25rem }
|
h3 { font-size: 1.25rem }
|
||||||
// h4 { font-size: 1rem }
|
h4 { font-size: 1rem }
|
||||||
h5 { font-size: .875rem }
|
h5 { font-size: .875rem }
|
||||||
h6 { font-size: .75rem }
|
h6 { font-size: .75rem }
|
||||||
|
|
||||||
@@ -482,7 +474,6 @@ header {// {{{
|
|||||||
|
|
||||||
#print-icon {// {{{
|
#print-icon {// {{{
|
||||||
float: right;
|
float: right;
|
||||||
display: none;
|
|
||||||
|
|
||||||
img {
|
img {
|
||||||
height: 1.75em;
|
height: 1.75em;
|
||||||
@@ -501,15 +492,8 @@ header {// {{{
|
|||||||
min-width: $max-page-width;
|
min-width: $max-page-width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
a {// {{{
|
|
||||||
text-decoration: none;
|
|
||||||
&:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
}// }}}
|
|
||||||
|
|
||||||
// font-size: .9em;
|
font-size: .9em;
|
||||||
font-size: .8em;
|
|
||||||
|
|
||||||
.row {
|
.row {
|
||||||
// flex-grow: 1;
|
// flex-grow: 1;
|
||||||
@@ -534,19 +518,18 @@ header {// {{{
|
|||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
// position: relative;
|
// position: relative;
|
||||||
// left: -8px;
|
// left: -8px;
|
||||||
// @media (max-width: $phone-width) {
|
@media (max-width: $phone-width) {
|
||||||
// // display: none;
|
// display: none;
|
||||||
// // font-size: 10px;
|
// font-size: 10px;
|
||||||
// font-size: .8em;
|
font-size: .8em;
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}// }}}
|
}// }}}
|
||||||
|
|
||||||
#resume {// {{{
|
#resume {// {{{
|
||||||
a {// {{{
|
a {// {{{
|
||||||
// text-decoration: none;
|
text-decoration: none;
|
||||||
text-decoration: underline;
|
|
||||||
&:hover {
|
&:hover {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
@@ -554,52 +537,45 @@ header {// {{{
|
|||||||
|
|
||||||
h1 {// {{{
|
h1 {// {{{
|
||||||
color: $base-orange;
|
color: $base-orange;
|
||||||
// margin-top: 1.3rem;
|
|
||||||
margin-top: 1rem;
|
margin-top: 1rem;
|
||||||
font-size: 1.2em;
|
|
||||||
|
|
||||||
// @media (max-width: $phone-width) {
|
@media (max-width: $phone-width) {
|
||||||
// margin-top: .75rem;
|
margin-top: .75rem;
|
||||||
// }
|
}
|
||||||
}// }}}
|
}// }}}
|
||||||
h2 {// {{{
|
h2 {// {{{
|
||||||
color: $base-orange;
|
color: $base-orange;
|
||||||
margin-top: .5rem;
|
margin-top: .5rem;
|
||||||
font-size: 1em;
|
|
||||||
|
|
||||||
// @media (max-width: $phone-width) {
|
@media (max-width: $phone-width) {
|
||||||
// font-size: 1.2em;
|
font-size: 1.2em;
|
||||||
// margin-top: .75rem;
|
margin-top: .75rem;
|
||||||
// }
|
}
|
||||||
}// }}}
|
}// }}}
|
||||||
h4 {// {{{
|
h4 {// {{{
|
||||||
color: $base-yellow;
|
color: $base-yellow;
|
||||||
margin-top: .5rem;
|
margin-top: .5rem;
|
||||||
font-size: 1.2em;
|
|
||||||
|
|
||||||
// @media (max-width: $phone-width) {
|
@media (max-width: $phone-width) {
|
||||||
// font-size: 1.2em;
|
font-size: 1.2em;
|
||||||
// margin-top: .75rem;
|
margin-top: .75rem;
|
||||||
// }
|
}
|
||||||
}// }}}
|
}// }}}
|
||||||
|
|
||||||
.date {// {{{
|
.date {// {{{
|
||||||
|
padding-top: .8em;
|
||||||
float: right;
|
float: right;
|
||||||
color: $base03;
|
color: $base03;
|
||||||
|
|
||||||
// @media (max-width: $phone-width) {
|
@media (max-width: $phone-width) {
|
||||||
// padding-top: 0em;
|
padding-top: 0em;
|
||||||
// }
|
}
|
||||||
}// }}}
|
}// }}}
|
||||||
|
|
||||||
ul {
|
|
||||||
margin-bottom: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#projects {// {{{
|
#projects {// {{{
|
||||||
// // h1 {
|
h1 {
|
||||||
// // margin-bottom: 3px;
|
margin-bottom: 3px;
|
||||||
// // }
|
}
|
||||||
|
|
||||||
.project {// {{{
|
.project {// {{{
|
||||||
@include vert-padding-rem(.2);
|
@include vert-padding-rem(.2);
|
||||||
@@ -613,15 +589,7 @@ header {// {{{
|
|||||||
height: 1.2em;
|
height: 1.2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.project-header {
|
|
||||||
// margin-bottom: .6em;
|
|
||||||
margin-bottom: .1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.project-link {
|
.project-link {
|
||||||
&:link {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
&:hover {
|
&:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
@@ -672,37 +640,11 @@ header {// {{{
|
|||||||
}
|
}
|
||||||
}// }}}
|
}// }}}
|
||||||
|
|
||||||
// @media (max-width: $phone-width) {
|
@media (max-width: $phone-width) {
|
||||||
// font-size: 14px;
|
font-size: 14px;
|
||||||
// // font-size: 1em;
|
// font-size: 1em;
|
||||||
// }
|
|
||||||
|
|
||||||
&.letter {
|
|
||||||
margin-top: 2em;
|
|
||||||
line-height: 1.5em;
|
|
||||||
|
|
||||||
img {
|
|
||||||
height: 4.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
color: $base-red;
|
|
||||||
margin-top: 0em;
|
|
||||||
margin-bottom: .4em;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.no-line-spacing {
|
|
||||||
line-height: .5em;
|
|
||||||
margin-bottom: 1.75em;
|
|
||||||
p {
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}// }}}
|
}// }}}
|
||||||
|
|
||||||
#server {// {{{
|
#server {// {{{
|
||||||
@@ -761,8 +703,7 @@ 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;
|
|
||||||
// color: #66cccc;
|
// color: #66cccc;
|
||||||
color: $base05;
|
color: $base05;
|
||||||
// margin-top: 1rem;
|
// margin-top: 1rem;
|
||||||
@@ -774,20 +715,20 @@ h1.site-title {// {{{
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @media (max-width: $phone-width) {
|
@media (max-width: $max-page-width) {
|
||||||
// font-size: 3em;
|
font-size: 3em;
|
||||||
// }
|
}
|
||||||
|
|
||||||
// @media (max-width: $phone-width) {
|
@media (max-width: $phone-width) {
|
||||||
// font-size: 3.5em;
|
font-size: 3.5em;
|
||||||
// @include vert-margin-rem(.3);
|
@include vert-margin-rem(.3);
|
||||||
// // font-size: 2.5em;
|
// font-size: 2.5em;
|
||||||
// // font-size: 2em;
|
// font-size: 2em;
|
||||||
|
|
||||||
// .surrounding {
|
.surrounding {
|
||||||
// display: none;
|
display: none;
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
}// }}}
|
}// }}}
|
||||||
|
|
||||||
.hero-logo img {
|
.hero-logo img {
|
||||||
|
|||||||
24
config.yaml
24
config.yaml
@@ -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
|
||||||
@@ -16,7 +16,7 @@ menu:
|
|||||||
main:
|
main:
|
||||||
- name: resume
|
- name: resume
|
||||||
url: /resume
|
url: /resume
|
||||||
weight: 1
|
weight: 5
|
||||||
# - name: posts/
|
# - name: posts/
|
||||||
# url: /posts
|
# url: /posts
|
||||||
# weight: 6
|
# weight: 6
|
||||||
@@ -26,23 +26,11 @@ menu:
|
|||||||
- name: config
|
- name: config
|
||||||
url: /config
|
url: /config
|
||||||
weight: 10
|
weight: 10
|
||||||
- name: card
|
|
||||||
url: /card
|
|
||||||
weight: 15
|
|
||||||
# - name: letter
|
|
||||||
# url: /letter
|
|
||||||
# weight: 17
|
|
||||||
# - name: credits
|
# - name: credits
|
||||||
# url: /credits
|
# url: /credits
|
||||||
# weight: 20
|
# weight: 20
|
||||||
|
|
||||||
# blackfriday:
|
blackfriday:
|
||||||
# plainIDAnchors: true
|
plainIDAnchors: true
|
||||||
# hrefTargetBlank: true
|
hrefTargetBlank: true
|
||||||
|
|
||||||
disableKinds: ["RSS"]
|
|
||||||
|
|
||||||
markup:
|
|
||||||
goldmark:
|
|
||||||
renderer:
|
|
||||||
unsafe: true
|
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
title: "Digital Card"
|
|
||||||
date: 2019-02-11T07:50:51-05:00
|
|
||||||
draft: false
|
|
||||||
---
|
|
||||||
@@ -39,4 +39,5 @@ a single branch.
|
|||||||
|
|
||||||
[chezmoi]: https://github.com/twpayne/chezmoi
|
[chezmoi]: https://github.com/twpayne/chezmoi
|
||||||
|
|
||||||
|
|
||||||
<!--- }}} Setup -->
|
<!--- }}} Setup -->
|
||||||
|
|||||||
5
content/credits/_index.md
Normal file
5
content/credits/_index.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
title: "Credits"
|
||||||
|
date: 2019-02-11T03:10:25-05:00
|
||||||
|
draft: true
|
||||||
|
---
|
||||||
Submodule content/letter deleted from 1f7a5be6bc
@@ -3,55 +3,128 @@ title: "Resume"
|
|||||||
date: 2019-02-11T07:50:51-05:00
|
date: 2019-02-11T07:50:51-05:00
|
||||||
draft: false
|
draft: false
|
||||||
---
|
---
|
||||||
{{% resume/section "Work Experience" %}}<!--- {{{ -->
|
{{% resume/section overview %}}<!--- {{{ -->
|
||||||
|
|
||||||
{{% resume/education name="Red Hat"
|
3<sup>rd</sup> year CS student. Enthusiast of all things
|
||||||
title="Cloud/Software Engineer Intern" date="May 2020 — Aug 2021" %}}
|
Linux and FOSS. Seeking 16-month internship for my PEY
|
||||||
- Reduced deployment time by **66%** by implementing ability to
|
co-op program. Looking to gain industry-relevant experience in
|
||||||
deploy locally-compiled binaries onto **Kubernetes**/**OpenShift**
|
full-stack web dev, DevOps or system administration.
|
||||||
using only command-line.
|
|
||||||
- Implemented ability for Kubernetes operator to fetch data
|
{{% /resume/section %}}<!--- }}} -->
|
||||||
from a deployed service and update config with data.
|
|
||||||
- Added startup probes to handle starting legacy application containers that require additional startup time.
|
{{% resume/section skills %}}<!--- {{{ -->
|
||||||
- Refactored probes to have default values assigned based on
|
|
||||||
deployed YAML while also fixing reconciliation issues.
|
#### Languages
|
||||||
- Automated the promotion and release process
|
- **Bash**, C, **CSS**, C++, **Fish**, Godot, **HTML5**, **Python**,
|
||||||
as part of the **Jenkins** release pipeline.
|
Java, **Javascript (ES6)**, **Sass**
|
||||||
- Wrote documentation on how to get started with the project to onboard new
|
|
||||||
developers and mentored the incoming intern.
|
#### 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 %}}<!--- }}} -->
|
||||||
|
|
||||||
{{% resume/section projects %}}<!--- {{{ -->
|
{{% resume/section projects %}}<!--- {{{ -->
|
||||||
|
|
||||||
|
<!--- Spotify Graphs {{{ -->
|
||||||
|
|
||||||
<!--- CSC369 {{{ -->
|
{{% resume/project name="Spotify Graphs"
|
||||||
|
url="https://github.com/Kevin-Mok/spotify-lib-vis" date="June 2018 — July 2018"
|
||||||
|
show="true" %}}
|
||||||
|
|
||||||
{{% resume/project name="Custom Kernel Module"
|
- Scan tracks from user's library using Spotify API and organize data into
|
||||||
url="https://kevin-mok.com/server/" date="Jan. 2022" show="true" %}}
|
database.
|
||||||
|
- Created and tested various __PostgreSQL__ schemas to increase efficiency for
|
||||||
|
use cases.
|
||||||
|
- Produce bubble chart and (stacked) bar chart in [**d3** graphs][d3 graph examples]
|
||||||
|
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.
|
||||||
|
|
||||||
- Wrote and installed a [custom Linux kernel module](https://github.com/Kevin-Mok/interceptor-kernel/blob/master/a1/interceptor.c) in **C**.
|
[d3 graph examples]: https://github.com/d3/d3/wiki/Gallery
|
||||||
- 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 %}}
|
{{% /resume/project %}}
|
||||||
|
|
||||||
<!--- CSC369 }}} -->
|
<!--- 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 {{{ -->
|
||||||
|
|
||||||
|
{{% resume/project name="ParsaFood"
|
||||||
|
url="https://github.com/Kevin-Mok/ParsaFood" date="Feb. 2018"
|
||||||
|
show="true" %}}
|
||||||
|
|
||||||
|
- **Android** app that reads ingredient labels and detects any dietary
|
||||||
|
restrictions/allergies.
|
||||||
|
- Designed user interface and linked various functionality together.
|
||||||
|
- 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
|
||||||
|
an [Oculus Rift][Oculus Rift Amazon].
|
||||||
|
|
||||||
|
[Parsafood repo]: https://github.com/Kevin-Mok/ParsaFood
|
||||||
|
[Platterz Hackathon event]:
|
||||||
|
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
|
||||||
|
|
||||||
|
{{% /resume/project %}}
|
||||||
|
|
||||||
|
<!--- ParsaFood }}} -->
|
||||||
|
|
||||||
|
<!--- TrapBot {{{ -->
|
||||||
|
|
||||||
|
{{% resume/project name="TrapBot"
|
||||||
|
url="https://github.com/Kevin-Mok/TrapBot" date="March 2018" %}}
|
||||||
|
|
||||||
|
- Use reddit API wrapper in **Python** to scan music subreddits for user
|
||||||
|
comments containing common track listing formats.
|
||||||
|
- Match detected track name and artists to track on SoundCloud using another
|
||||||
|
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 %}}
|
||||||
|
|
||||||
|
<!--- Grocery Finder }}} -->
|
||||||
|
|
||||||
<!--- DigitalOcean {{{ -->
|
<!--- DigitalOcean {{{ -->
|
||||||
|
|
||||||
{{% resume/project name="Personal Server"
|
{{% resume/project name="Personal Server"
|
||||||
url="https://kevin-mok.com/server/" date="Aug. 2019 — present" show="true" %}}
|
url="https://kevin-mok.com/server/" date="Aug. 2019—present" %}}
|
||||||
|
|
||||||
- Deployed [various web apps] with backends using NGINX on a Debian/**Linux** server.
|
- Deployed various web apps with backends such as Node, PHP and Python using
|
||||||
- Wrote a [**JavaScript** script][server script] and [systemd service][systemd service]/[timer]
|
**NGINX** on a **Debian** server.
|
||||||
to display the uptime of my pages every hour.
|
- Monitor system resources and perform system maintenance using tmux.
|
||||||
- Monitored system resources and performed 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.
|
||||||
|
|
||||||
[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
|
[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
|
[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
|
[timer]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-pages.timer
|
||||||
@@ -60,42 +133,42 @@ url="https://kevin-mok.com/server/" date="Aug. 2019 — present" show="true" %}}
|
|||||||
|
|
||||||
<!--- DigitalOcean Droplet }}} -->
|
<!--- DigitalOcean Droplet }}} -->
|
||||||
|
|
||||||
<!--- Rarity Surf {{{ -->
|
<!--- Super ADA Bros. {{{ -->
|
||||||
|
|
||||||
{{% resume/project name="Rarity Surf"
|
{{% resume/project name="Super ADA Bros"
|
||||||
date="Oct 2021" show="true" %}}
|
url="https://github.com/Kevin-Mok/SuperADABros" date="May 2019" %}}
|
||||||
|
|
||||||
- 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.
|
- Designed clone of Super Mario Bros 1-1, but Mario is mobility-impaired and
|
||||||
- Reverse engineered the ranking algorithm to match the
|
uses ramps to get through the level.
|
||||||
leading rarity ranking site's rankings (scraped using
|
- Uses **OpenCV** to track player's head movement which is then translated to
|
||||||
Selenium) with a **discrepancy of <0.25%**.
|
in-game movement. [Video Demo]
|
||||||
- Used app to frontrun purchases of **top 5%** rarity NFT's
|
- Implemented in [**Godot**][Godot site], an open-source game engine.
|
||||||
against competing buyers.
|
- Made during a 24-hour [accessibility-themed hackathon][PC Hacks event].
|
||||||
- Wrote **Django (Python)** backend to fetch metadata from IPFS, store rarity rankings in PostgreSQL and serve rarity data using GraphQL.
|
|
||||||
- Wrote **React** frontend with hooks to dynamically load rarity data. Styled with Tailwind.
|
[PC Hacks event]: https://pchacks19.devpost.com/
|
||||||
|
[Godot site]: https://godotengine.org
|
||||||
|
[Video Demo]: https://youtu.be/vRdENLGrBqM
|
||||||
|
|
||||||
{{% /resume/project %}}
|
{{% /resume/project %}}
|
||||||
|
|
||||||
<!--- Rarity Surf }}} -->
|
|
||||||
|
<!--- Grocery Finder }}} -->
|
||||||
|
|
||||||
{{% /resume/section %}}<!--- }}} -->
|
{{% /resume/section %}}<!--- }}} -->
|
||||||
|
|
||||||
{{% resume/section skills %}}<!--- {{{ -->
|
{{% resume/section "Work Experience" %}}<!--- {{{ -->
|
||||||
|
|
||||||
Kubernetes, **JavaScript**, **React**, **Python**, Go, Bash, Solidity, C, **Django**, Node.js, Jenkins, PostgreSQL, **Linux**, **Git**, **Command Line**
|
{{% 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 %}}<!--- }}} -->
|
||||||
|
|
||||||
{{% resume/section education %}}<!--- {{{ -->
|
{{% resume/section education %}}<!--- {{{ -->
|
||||||
|
|
||||||
{{% resume/education name="University of Toronto"
|
{{% resume/education name="University of Toronto" title="Computer Science Specialist" date="2017-2021" %}}
|
||||||
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 %}}<!--- }}} -->
|
||||||
|
|
||||||
|
|||||||
20
content/resume/archived.txt
Normal file
20
content/resume/archived.txt
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<!--- Super ADA Bros. {{{ -->
|
||||||
|
|
||||||
|
{{% resume/project name="Super ADA Bros"
|
||||||
|
url="https://github.com/Kevin-Mok/SuperADABros" date="May 2019" %}}
|
||||||
|
|
||||||
|
- Clone of Super Mario Bros 1-1, but Mario is mobility-impaired and
|
||||||
|
uses ramps to get through the level.
|
||||||
|
- Able to played using only head movement by getting input from a
|
||||||
|
face-tracking script (**OpenCV**).
|
||||||
|
- Implemented in [**Godot**][Godot site], an open-source game engine.
|
||||||
|
- Made during a 24-hour [accessibility-themed hackathon][PC Hacks event].
|
||||||
|
|
||||||
|
[PC Hacks event]: https://pchacks19.devpost.com/
|
||||||
|
[Godot site]: https://godotengine.org
|
||||||
|
|
||||||
|
{{% /resume/project %}}
|
||||||
|
|
||||||
|
|
||||||
|
<!--- Grocery Finder }}} -->
|
||||||
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
<!--- Spotify Graphs {{{ -->
|
|
||||||
|
|
||||||
{{% resume/project name="Spotify Graphs"
|
|
||||||
url="https://github.com/Kevin-Mok/spotify-lib-vis" date="June 2018 — July 2018"
|
|
||||||
show="true" %}}
|
|
||||||
|
|
||||||
- Implemented base functionality of scanning tracks and listening
|
|
||||||
history from user's library using Spotify API and organized data
|
|
||||||
into **PostgreSQL** database with **Django** backend.
|
|
||||||
- Created and tested various relational database schemas to maximize
|
|
||||||
efficiency for use cases.
|
|
||||||
- Produced bubble chart and (stacked) bar chart using [**d3**]
|
|
||||||
[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 %}}
|
|
||||||
|
|
||||||
<!--- Spotify Graphs }}} -->
|
|
||||||
|
|
||||||
<!--- Grocery Finder {{{ -->
|
|
||||||
|
|
||||||
{{% resume/project name="Grocery Finder"
|
|
||||||
url="https://github.com/Kevin-Mok/grocery-finder" date="Feb. 2019 — Apr. 2019"
|
|
||||||
show="true" %}}
|
|
||||||
|
|
||||||
- Proof of concept 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 members' pull requests.
|
|
||||||
|
|
||||||
[Grocery Finder Heroku]: http://www.grocery-finder.ml
|
|
||||||
|
|
||||||
{{% /resume/project %}}
|
|
||||||
|
|
||||||
<!--- 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 }}} -->
|
|
||||||
|
|
||||||
<!--- ParsaFood {{{ -->
|
|
||||||
|
|
||||||
{{% resume/project name="ParsaFood"
|
|
||||||
url="https://github.com/Kevin-Mok/ParsaFood" date="Feb. 2018"
|
|
||||||
show="true" %}}
|
|
||||||
|
|
||||||
- **Android** app that reads ingredient labels and detects any dietary
|
|
||||||
restrictions/allergies.
|
|
||||||
- Designed user interface and linked various functionality together.
|
|
||||||
- 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
|
|
||||||
an [Oculus Rift][Oculus Rift Amazon].
|
|
||||||
|
|
||||||
[Parsafood repo]: https://github.com/Kevin-Mok/ParsaFood
|
|
||||||
[Platterz Hackathon event]:
|
|
||||||
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
|
|
||||||
|
|
||||||
{{% /resume/project %}}
|
|
||||||
|
|
||||||
<!--- ParsaFood }}} -->
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
• Working on the Kogito (cloud-native, open-source business automation technology) Cloud Engineering team.
|
|
||||||
• Implemented ability for Kogito operator to fetch exposed protobuf files from a deployed service and update ConfigMap with data (*Kubernetes*, *Go*, KOGITO-3376).
|
|
||||||
• Reduced deployment time by 66% by implementing ability to deploy locally-compiled Kogito binaries onto OpenShift using only Kogito CLI (*Go*, KOGITO-2113).
|
|
||||||
• Added startup probes to handle starting legacy application containers that require additional startup time
|
|
||||||
(*Go*, KOGITO-4322).
|
|
||||||
• Refactored Kogito probes to have default values assigned based on deployed YAML/runtime while also fixing reconciliation issues (*Kubernetes*, *Go*, KOGITO-4898).
|
|
||||||
• Automated the promotion and release process for Kogito runtimes as part of the release pipeline (*Jenkins*, KOGITO-1653). Wrote unit tests in the Spock framework.
|
|
||||||
• Wrote documentation to onboard new Kogito operator developers and reduce friction needed for them to start contributing (*Kubernetes/minikube/OpenShift*, KOGITO-5127). Was completed as part of mentoring incoming intern to expedite initial onboarding process.
|
|
||||||
• Presented a talk based on my experience called "8 Things I Learned About Software Engineering" to an audience of 75+ in a conference for internship seekers.
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
# To-Do
|
|
||||||
- install Docker
|
|
||||||
- run Docker apps on it
|
|
||||||
- run domain
|
|
||||||
- run/create Docker compose
|
|
||||||
- Dockerize app
|
|
||||||
|
|
||||||
# Done
|
|
||||||
- setup AWS server
|
|
||||||
|
|
||||||
# Points
|
|
||||||
- run/deploy K8s locally on minikube using kubectl
|
|
||||||
- features
|
|
||||||
- Dockerize app
|
|
||||||
- run Docker on server (AWS)
|
|
||||||
|
|
||||||
# Replace
|
|
||||||
- personal server
|
|
||||||
- Astronofy
|
|
||||||
- check price of AWS server
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
{{ partial "base/header.html" . }}
|
|
||||||
|
|
||||||
{{ partial "base/site-title.html" . }}
|
|
||||||
|
|
||||||
{{ partial "base/nav-bar.html" . }}
|
|
||||||
|
|
||||||
{{ partial "base/base16-logo.html" . }}
|
|
||||||
|
|
||||||
<main role="main" id="card">
|
|
||||||
<div id="presentational-container" class="container">
|
|
||||||
<div class="row text-center h-100 my-auto">
|
|
||||||
<div id="email-full" class="h-100 mx-auto">
|
|
||||||
<p class="text-center">
|
|
||||||
<nobr>
|
|
||||||
me@kevin-mok.com
|
|
||||||
<span class="social"><span class="spacing">
|
|
||||||
me</span><span class="link-text">@kevi<span
|
|
||||||
class="safari">n</span>
|
|
||||||
<a href="https://fosstodon.org/@Kevin"
|
|
||||||
target="_blank" id="mastodon" class="link link-top">
|
|
||||||
<img src="https://kevin-mok.com/img/social/mastodon.svg" alt=""/>
|
|
||||||
</a></span>
|
|
||||||
</span>
|
|
||||||
<span class="social"><span class="spacing">
|
|
||||||
me@</span><span class="link-text">ke<span
|
|
||||||
class="safari">v</span>
|
|
||||||
<a href="https://www.linkedin.com/in/Kev-Mok" target="_blank"
|
|
||||||
target="_blank" class="link linkedin linkedin-left">
|
|
||||||
<img src="https://kevin-mok.com/img/social/linkedin.svg" alt=""/>
|
|
||||||
</a></span>
|
|
||||||
</span>
|
|
||||||
<span class="social"><span class="spacing">
|
|
||||||
me@kevin</span><span class="link-text">-mo<span
|
|
||||||
class="safari">k</span>
|
|
||||||
<a href="https://www.linkedin.com/in/Kev-Mok" target="_blank" class="link linkedin linkedin-left"></a></span>
|
|
||||||
</span>
|
|
||||||
<span class="social"><span class="spacing">
|
|
||||||
me@kev</span><span class="link-text">i<span
|
|
||||||
class="safari">n</span>
|
|
||||||
<a href="https://www.linkedin.com/in/Kev-Mok" target="_blank"
|
|
||||||
class="link linkedin linkedin-middle"></a></span>
|
|
||||||
</span>
|
|
||||||
<span class="social"><span class="spacing">
|
|
||||||
me@</span><span class="link-text">kevin-mo<span
|
|
||||||
class="safari">k</span>
|
|
||||||
<a href="https://github.com/Kevin-Mok" target="_blank" id="github" class="link">
|
|
||||||
<img src="https://kevin-mok.com/img/social/github.svg" alt=""/>
|
|
||||||
</a></span>
|
|
||||||
</span>
|
|
||||||
<span class="social"><span class="spacing">
|
|
||||||
me@</span><span class="link-text">kevin-mok.co<span
|
|
||||||
class="safari">m</span>
|
|
||||||
<a href="https://kevin-mok.com/" target="_blank" id="site" class="link">
|
|
||||||
<img src="https://kevin-mok.com/img/resume/link.svg" alt=""/>
|
|
||||||
</a></span>
|
|
||||||
</span>
|
|
||||||
<span class="social"><span class="link-text">me@kevin-mok.co<span class="safari"> </span>
|
|
||||||
<a href="mailto:me@kevin-mok.com" target="_blank" id="email" class="link link-top">
|
|
||||||
<img src="https://kevin-mok.com/img/resume/envelope.svg" alt=""/>
|
|
||||||
</a></span>
|
|
||||||
</span>
|
|
||||||
</nobr>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
{{ partial "base/footer.html" . }}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
{{ partial "base/header.html" . }}
|
|
||||||
|
|
||||||
{{ partial "base/site-title.html" . }}
|
|
||||||
|
|
||||||
{{ partial "base/nav-bar.html" . }}
|
|
||||||
|
|
||||||
{{ partial "base/base16-logo.html" . }}
|
|
||||||
|
|
||||||
<main role="main" id="letter-home">
|
|
||||||
<!-- <h1 class="list-title">{{ .Title }}</h1> -->
|
|
||||||
<h4 id="letter-instr">Please enter the full URL that I provided
|
|
||||||
for your personalized cover letter. :)</h4>
|
|
||||||
|
|
||||||
<div id="resume" class="letter">
|
|
||||||
{{ .Content }}
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
{{ partial "base/footer.html" . }}
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{{ partial "base/header.html" . }}
|
|
||||||
|
|
||||||
{{ partial "base/site-title.html" . }}
|
|
||||||
|
|
||||||
{{ partial "resume/contact-info.html" . }}
|
|
||||||
|
|
||||||
<div id="resume" class="letter">
|
|
||||||
{{ .Content }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -19,30 +19,20 @@
|
|||||||
<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/" target="_blank">
|
|
||||||
<img src="{{ "img/social/gitea.svg" | relURL }}" alt="gitea-logo">
|
|
||||||
</a>
|
|
||||||
·
|
|
||||||
<a href="https://twitter.com/Kev_Mok" target="_blank">
|
|
||||||
<img src="{{ "img/social/twitter.svg" | relURL }}"
|
|
||||||
alt="twitter-logo">
|
|
||||||
</a>
|
|
||||||
<a rel="me" href="https://fosstodon.org/@Kevin" target="_blank">
|
|
||||||
<img src="{{ "img/social/mastodon.svg" | relURL }}"
|
|
||||||
alt="mastodon-logo">
|
|
||||||
</a>
|
|
||||||
<a href="https://www.reddit.com/u/Kevin-Mok" target="_blank">
|
|
||||||
<img src="{{ "img/social/reddit.svg" | relURL }}"
|
|
||||||
alt="reddit-logo">
|
|
||||||
</a>
|
|
||||||
.
|
|
||||||
<a href="https://www.linkedin.com/in/Kev-Mok" target="_blank">
|
<a href="https://www.linkedin.com/in/Kev-Mok" target="_blank">
|
||||||
<img src="{{ "img/social/linkedin.svg" | relURL }}" alt="linkedin-logo">
|
<img src="{{ "img/social/linkedin.svg" | relURL }}" alt="linkedin-logo">
|
||||||
</a>
|
</a>
|
||||||
|
<a href="https://git.kevin-mok.com/" target="_blank">
|
||||||
|
<img src="{{ "img/social/gitea.svg" | relURL }}" alt="gitea-logo">
|
||||||
|
</a>
|
||||||
<a href="mailto:me@kevin-mok.com" target="_blank">
|
<a href="mailto:me@kevin-mok.com" target="_blank">
|
||||||
<img src="{{ "img/social/email.svg" | relURL }}"
|
<img src="{{ "img/social/email.svg" | relURL }}"
|
||||||
alt="envelope">
|
alt="envelope">
|
||||||
</a>
|
</a>
|
||||||
|
<a href="https://fosstodon.org/web/accounts/93113" target="_blank">
|
||||||
|
<img src="{{ "img/social/mastodon.svg" | relURL }}"
|
||||||
|
alt="mastodon-logo">
|
||||||
|
</a>
|
||||||
</span>
|
</span>
|
||||||
<span class="col-xs-2">
|
<span class="col-xs-2">
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -9,16 +9,16 @@
|
|||||||
{{- with $.Param "author" }}
|
{{- with $.Param "author" }}
|
||||||
<meta name="author" content="{{ . }}">
|
<meta name="author" content="{{ . }}">
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{ 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.gq/live.js" charset="utf-8"></script> -->
|
<script src="http://livejs.com/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>
|
||||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
|
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
|
||||||
<!-- <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" /> -->
|
||||||
<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" }}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<div id="about">
|
<div id="about">
|
||||||
<h2>Welcome to my site!</h2>
|
<h2>Welcome to my site!</h2>
|
||||||
<p>
|
<p>
|
||||||
I'm Kevin Mok - a Computer Science
|
I'm Kevin Mok - a 3<sup>rd</sup> year Computer Science
|
||||||
student at the University of Toronto, and I'm greatly interested in all things Linux and
|
student at the University of Toronto, and I'm greatly interested in all things Linux and
|
||||||
<a href="https://www.gnu.org/philosophy/floss-and-foss.en.html"
|
<a href="https://www.gnu.org/philosophy/floss-and-foss.en.html"
|
||||||
target="_blank">FOSS/FLOSS</a>.
|
target="_blank">FOSS/FLOSS</a>.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<div id="contact-info" class="container">
|
<div id="contact-info" class="container">
|
||||||
<div class="row row-top justify-content-center mx-auto">
|
<div class="row row-top justify-content-center">
|
||||||
<div id="phone-number" class="col text-left">
|
<div id="phone-number" class="col text-left">
|
||||||
<a href="tel:647-685-2500" target="_blank">
|
<a href="tel:647-685-2500" target="_blank">
|
||||||
<img src="{{ "img/resume/smartphone.svg" | relURL }}"
|
<img src="{{ "img/resume/smartphone.svg" | relURL }}"
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<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">
|
||||||
<span class="url-info">
|
<span class="url-info">
|
||||||
Kev-Mok
|
Kev-Mok
|
||||||
</span>
|
</span>
|
||||||
@@ -18,9 +18,9 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mx-auto">
|
<div class="row justify-content-center">
|
||||||
<div id="email" class="col col-left">
|
<div id="email" class="col col-left">
|
||||||
<a href="mailto:me@kevin-mok.com" target="_blank">
|
<a href="mailto:me@kevin-mok.com">
|
||||||
<img src="{{ "img/resume/envelope.svg" | relURL }}" alt="envelope-icon">
|
<img src="{{ "img/resume/envelope.svg" | relURL }}" alt="envelope-icon">
|
||||||
<span class="url-info">
|
<span class="url-info">
|
||||||
me@kevin-mok.com
|
me@kevin-mok.com
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div id="website" class="col text-right">
|
<div id="website" class="col text-right">
|
||||||
<a href="https://kevin-mok.com/" target="_blank">
|
<a href="https://kevin-mok.com/">
|
||||||
<span class="url-info">
|
<span class="url-info">
|
||||||
kevin-mok.com
|
kevin-mok.com
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<div id="print-icon">
|
<div id="print-icon">
|
||||||
<a href="{{ "pdf/kevin-mok-resume.pdf" | relURL }}" target="_blank">
|
<a href="{{ "kevin-mok-resume.pdf" | relURL }}" target="_blank">
|
||||||
<img src="{{ "img/resume/printer.svg" | relURL }}" alt="printer-icon">
|
<img src="{{ "img/resume/printer.svg" | relURL }}" alt="printer-icon">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -7,8 +7,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col text-right date">{{ .Get "date" }}</div>
|
<div class="col text-right date">{{ .Get "date" }}</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- <span class="title"> -->
|
<span class="title">
|
||||||
<span>
|
|
||||||
{{ .Get "title" }}
|
{{ .Get "title" }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
<div id="print-icon">
|
|
||||||
{{ $type := .Get "type" }}
|
|
||||||
{{ $code := .Get "code" }}
|
|
||||||
{{ $pdfName := print "pdf/kevin-mok-" $type "-" $code ".pdf" }}
|
|
||||||
<a href="{{ $pdfName | relURL }}" target="_blank">
|
|
||||||
<img src="{{ "img/resume/printer.svg" | relURL }}" alt="printer-icon">
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{{ $_hugo_config := `{ "version": 1 }` }}
|
|
||||||
<div class="no-line-spacing">
|
|
||||||
{{ .Inner }}
|
|
||||||
</div>
|
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
aria-expanded="false" aria-controls="{{ .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.svg" | relURL }}" alt="link-icon"> -->
|
||||||
<img class="down-triangle" src="{{ "img/resume/down-triangle.png" | relURL }}" alt="link-icon">
|
<img class="down-triangle" src="{{ "img/resume/down-triangle.png" | relURL }}" alt="link-icon">
|
||||||
</h2>
|
</h2>
|
||||||
</button>
|
</button>
|
||||||
@@ -16,8 +17,9 @@
|
|||||||
<div class="col-4 text-right date">{{ .Get "date" }}</div>
|
<div class="col-4 text-right date">{{ .Get "date" }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse{{ with .Get "show" }} show{{ end }}" id="{{ .Get "name" | lower | urlize }}-details">
|
<div class="collapse{{ with .Get "show" }} show{{ end }}" id="{{ .Get "name" | lower | urlize }}-details">
|
||||||
|
<!-- <div class="show" id="{{ .Get "name" | lower | urlize }}-details"> -->
|
||||||
<div>
|
<div>
|
||||||
{{ .Inner }}
|
{{ .Inner }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
<div class="references">
|
|
||||||
<span>
|
|
||||||
See my
|
|
||||||
<a href="https://www.linkedin.com/in/Kev-Mok"
|
|
||||||
target="_blank">
|
|
||||||
LinkedIn</a> for references from my Red Hat managers/mentee and a
|
|
||||||
startup client.
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
|
||||||
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
|
||||||
{{ range .Data.Pages }}{{ if ne .Params.sitemap_exclude true }}
|
|
||||||
<url>
|
|
||||||
<loc>{{ .Permalink }}</loc>{{ if not .Lastmod.IsZero }}
|
|
||||||
<lastmod>{{ safeHTML ( .Lastmod.Format "2006-01-02T15:04:05-07:00" ) }}</lastmod>{{ end }}{{ with .Sitemap.ChangeFreq }}
|
|
||||||
<changefreq>{{ . }}</changefreq>{{ end }}{{ if ge .Sitemap.Priority 0.0 }}
|
|
||||||
<priority>{{ .Sitemap.Priority }}</priority>{{ end }}{{ if .IsTranslated }}{{ range .Translations }}
|
|
||||||
<xhtml:link
|
|
||||||
rel="alternate"
|
|
||||||
hreflang="{{ .Lang }}"
|
|
||||||
href="{{ .Permalink }}"
|
|
||||||
/>{{ end }}
|
|
||||||
<xhtml:link
|
|
||||||
rel="alternate"
|
|
||||||
hreflang="{{ .Lang }}"
|
|
||||||
href="{{ .Permalink }}"
|
|
||||||
/>{{ end }}
|
|
||||||
</url>
|
|
||||||
{{ end }}{{ end }}
|
|
||||||
</urlset>
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 465 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 467 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px"><path fill="#FFF" d="M12.193 19.555c-1.94-1.741-4.79-1.727-6.365.029-1.576 1.756-1.301 5.023.926 6.632L12.193 19.555zM35.807 19.555c1.939-1.741 4.789-1.727 6.365.029 1.575 1.756 1.302 5.023-.927 6.632L35.807 19.555zM38.32 6.975A3.5 3.5 0 1 0 38.32 13.975 3.5 3.5 0 1 0 38.32 6.975z"/><path fill="#FFF" d="M24.085 15.665000000000001A18.085 12.946 0 1 0 24.085 41.557A18.085 12.946 0 1 0 24.085 15.665000000000001Z"/><g><path fill="#D84315" d="M30.365 23.506A2.884 2.884 0 1 0 30.365 29.274 2.884 2.884 0 1 0 30.365 23.506zM17.635 23.506A2.884 2.884 0 1 0 17.635 29.274 2.884 2.884 0 1 0 17.635 23.506z"/></g><g><path fill="#37474F" d="M24.002 34.902c-3.252 0-6.14-.745-8.002-1.902 1.024 2.044 4.196 4 8.002 4 3.802 0 6.976-1.956 7.998-4C30.143 34.157 27.254 34.902 24.002 34.902zM41.83 27.026l-1.17-1.621c.831-.6 1.373-1.556 1.488-2.623.105-.98-.157-1.903-.721-2.531-.571-.637-1.391-.99-2.307-.994-.927.013-1.894.365-2.646 1.041l-1.336-1.488c1.123-1.008 2.545-1.523 3.991-1.553 1.488.007 2.833.596 3.786 1.658.942 1.05 1.387 2.537 1.221 4.081C43.961 24.626 43.121 26.096 41.83 27.026zM6.169 27.026c-1.29-.932-2.131-2.401-2.306-4.031-.166-1.543.279-3.03 1.221-4.079.953-1.062 2.297-1.651 3.785-1.658.009 0 .018 0 .027 0 1.441 0 2.849.551 3.965 1.553l-1.336 1.488c-.753-.676-1.689-1.005-2.646-1.041-.916.004-1.735.357-2.306.994-.563.628-.826 1.55-.721 2.53.115 1.067.657 2.023 1.488 2.624L6.169 27.026zM25 16.84h-2c0-2.885 0-10.548 4.979-10.548 2.154 0 3.193 1.211 3.952 2.096.629.734.961 1.086 1.616 1.086h1.37v2h-1.37c-1.604 0-2.453-.99-3.135-1.785-.67-.781-1.198-1.398-2.434-1.398C25.975 8.292 25 11.088 25 16.84z"/><path fill="#37474F" d="M24.085 16.95c9.421 0 17.085 5.231 17.085 11.661 0 6.431-7.664 11.662-17.085 11.662S7 35.042 7 28.611C7 22.181 14.664 16.95 24.085 16.95M24.085 14.95C13.544 14.95 5 21.066 5 28.611c0 7.546 8.545 13.662 19.085 13.662 10.54 0 19.085-6.116 19.085-13.662C43.17 21.066 34.625 14.95 24.085 14.95L24.085 14.95zM38.32 7.975c1.379 0 2.5 1.122 2.5 2.5s-1.121 2.5-2.5 2.5-2.5-1.122-2.5-2.5S36.941 7.975 38.32 7.975M38.32 5.975c-2.484 0-4.5 2.015-4.5 4.5s2.016 4.5 4.5 4.5c2.486 0 4.5-2.015 4.5-4.5S40.807 5.975 38.32 5.975L38.32 5.975z"/></g></svg>
|
|
||||||
|
Before Width: | Height: | Size: 2.2 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="240px" height="240px"><linearGradient id="_osn9zIN2f6RhTsY8WhY4a" x1="10.341" x2="40.798" y1="8.312" y2="38.769" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2aa4f4"/><stop offset="1" stop-color="#007ad9"/></linearGradient><path fill="url(#_osn9zIN2f6RhTsY8WhY4a)" d="M46.105,11.02c-1.551,0.687-3.219,1.145-4.979,1.362c1.789-1.062,3.166-2.756,3.812-4.758 c-1.674,0.981-3.529,1.702-5.502,2.082C37.86,8.036,35.612,7,33.122,7c-4.783,0-8.661,3.843-8.661,8.582 c0,0.671,0.079,1.324,0.226,1.958c-7.196-0.361-13.579-3.782-17.849-8.974c-0.75,1.269-1.172,2.754-1.172,4.322 c0,2.979,1.525,5.602,3.851,7.147c-1.42-0.043-2.756-0.438-3.926-1.072c0,0.026,0,0.064,0,0.101c0,4.163,2.986,7.63,6.944,8.419 c-0.723,0.198-1.488,0.308-2.276,0.308c-0.559,0-1.104-0.063-1.632-0.158c1.102,3.402,4.299,5.889,8.087,5.963 c-2.964,2.298-6.697,3.674-10.756,3.674c-0.701,0-1.387-0.04-2.065-0.122C7.73,39.577,12.283,41,17.171,41 c15.927,0,24.641-13.079,24.641-24.426c0-0.372-0.012-0.742-0.029-1.108C43.483,14.265,44.948,12.751,46.105,11.02"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.1 KiB |
BIN
static/kevin-mok-resume.pdf
Normal file
BIN
static/kevin-mok-resume.pdf
Normal file
Binary file not shown.
Submodule static/pdf deleted from e6c4cde18a
@@ -38,9 +38,6 @@ const generateTable = (table, data) => {
|
|||||||
aElem.textContent = elem['shortUrl']
|
aElem.textContent = elem['shortUrl']
|
||||||
cell.appendChild(aElem)
|
cell.appendChild(aElem)
|
||||||
break
|
break
|
||||||
case 'description':
|
|
||||||
cell.innerHTML = elem[key]
|
|
||||||
break
|
|
||||||
case 'repo':
|
case 'repo':
|
||||||
aElem.href = elem['repoUrl']
|
aElem.href = elem['repoUrl']
|
||||||
aElem.textContent = elem[key]
|
aElem.textContent = elem[key]
|
||||||
|
|||||||
Reference in New Issue
Block a user