Compare commits
47 Commits
20a120e33e
...
latex-resu
| Author | SHA1 | Date | |
|---|---|---|---|
| 55d6615976 | |||
| 6a6e9bb11f | |||
| 90fef7bb61 | |||
| 49a846ee2d | |||
| c97c1a221f | |||
| 4ff6ac20f0 | |||
| 25535aa384 | |||
| 5d8442a6f0 | |||
| b40109382e | |||
| 5fdcb18365 | |||
| 278e2a8f46 | |||
| 79b7e336a7 | |||
| 7ea1739380 | |||
| a1086f3c2e | |||
| 87c293ce13 | |||
| 9be9043b6c | |||
| 26d63d2e6a | |||
| b1f3cfdf57 | |||
| 461eb2aeb6 | |||
| a7fa6b9f3e | |||
| d21758675c | |||
| 14c6827b79 | |||
| 052f98860d | |||
| 7c08682c66 | |||
| 179b3f7c7e | |||
| 2abc9de891 | |||
| 16bff441df | |||
| 6b2a29b078 | |||
| 1881fd9778 | |||
| 24f58db4f9 | |||
| 61dc603da2 | |||
| c9e307dd70 | |||
| 4d29261b3c | |||
| b7a493c8c9 | |||
| 275c5b679b | |||
| 161cc14764 | |||
| 49cda38430 | |||
| c3f43c408d | |||
| 35ca126618 | |||
| a61b6e2761 | |||
| e3c8fee6e8 | |||
| 68a7866b18 | |||
| 8101b4dbfa | |||
| f0056972e3 | |||
| d0a21e8b36 | |||
| 24b999b2f2 | |||
| 67ecb5ddb5 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -3,6 +3,8 @@ public/
|
|||||||
resources/_gen/
|
resources/_gen/
|
||||||
themes/base16*
|
themes/base16*
|
||||||
|
|
||||||
|
*.pdf
|
||||||
|
|
||||||
commit-msg.txt
|
commit-msg.txt
|
||||||
.hugo_build.lock
|
.hugo_build.lock
|
||||||
static/server-apps.json
|
static/server-apps.json
|
||||||
|
|||||||
@@ -2,14 +2,10 @@
|
|||||||
|
|
||||||
// base colors {{{ //
|
// base colors {{{ //
|
||||||
|
|
||||||
$base00: #2d2d2d;
|
|
||||||
$base01: #393939;
|
|
||||||
$base02: #515151;
|
$base02: #515151;
|
||||||
$base03: #747369;
|
$base03: #747369;
|
||||||
$base04: #a09f93;
|
$base04: #a09f93;
|
||||||
$base05: #d3d0c8;
|
$base05: #d3d0c8;
|
||||||
$base06: #e8e6df;
|
|
||||||
$base07: #f2f0ec;
|
|
||||||
$base-red: #f2777a;
|
$base-red: #f2777a;
|
||||||
$base-orange: #f99157;
|
$base-orange: #f99157;
|
||||||
$base-yellow: #ffcc66;
|
$base-yellow: #ffcc66;
|
||||||
@@ -19,6 +15,13 @@ $base-blue: #6699cc;
|
|||||||
$base-violet: #cc99cc;
|
$base-violet: #cc99cc;
|
||||||
$base-dark-orange: #d27b53;
|
$base-dark-orange: #d27b53;
|
||||||
|
|
||||||
|
/* .base00 { color: #2d2d2d; }
|
||||||
|
.base01 { color: #393939; }
|
||||||
|
.base02 { color: #515151; }
|
||||||
|
.base03 { color: #747369; }
|
||||||
|
.base04 { color: #a09f93; }
|
||||||
|
.base06 { color: #e8e6df; }
|
||||||
|
.base07 { color: #f2f0ec; } */
|
||||||
.base08 { color: $base-red; }
|
.base08 { color: $base-red; }
|
||||||
.base09 { color: $base-orange; }
|
.base09 { color: $base-orange; }
|
||||||
.base0a { color: $base-yellow; }
|
.base0a { color: $base-yellow; }
|
||||||
@@ -35,7 +38,6 @@ $base-dark-orange: #d27b53;
|
|||||||
// $max-page-width: 52em;
|
// $max-page-width: 52em;
|
||||||
$max-page-width: 45em;
|
$max-page-width: 45em;
|
||||||
$phone-width: 800px;
|
$phone-width: 800px;
|
||||||
$vert-phone-width: 500px;
|
|
||||||
|
|
||||||
@mixin side-padding-rem($n) {// {{{
|
@mixin side-padding-rem($n) {// {{{
|
||||||
padding-left: $n * 1rem;
|
padding-left: $n * 1rem;
|
||||||
@@ -88,33 +90,32 @@ $vert-phone-width: 500px;
|
|||||||
}
|
}
|
||||||
}// }}}
|
}// }}}
|
||||||
|
|
||||||
@mixin a-no-underline() {// {{{
|
|
||||||
a {
|
|
||||||
text-decoration: none;
|
|
||||||
&:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}// }}}
|
|
||||||
|
|
||||||
// }}} mixins //
|
// }}} mixins //
|
||||||
|
|
||||||
// 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;
|
||||||
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: 15px;
|
// font-size: 15px;
|
||||||
|
font-size: 17px;
|
||||||
|
// 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;
|
||||||
|
// 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;
|
||||||
@@ -176,7 +177,8 @@ 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;
|
||||||
@@ -214,10 +216,10 @@ footer {
|
|||||||
position: relative;
|
position: relative;
|
||||||
padding-right: $side-padding;
|
padding-right: $side-padding;
|
||||||
// padding-right: .9em;
|
// padding-right: .9em;
|
||||||
@include a-no-underline();
|
|
||||||
|
|
||||||
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;
|
||||||
@@ -256,22 +258,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 }
|
||||||
|
|
||||||
@@ -375,7 +377,7 @@ header {// {{{
|
|||||||
display: inline;
|
display: inline;
|
||||||
|
|
||||||
&#gnu {
|
&#gnu {
|
||||||
background-color: $base04;
|
// background-color: $base04;
|
||||||
// background-color: $base05;
|
// background-color: $base05;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -486,31 +488,40 @@ header {// {{{
|
|||||||
|
|
||||||
#print-icon {// {{{
|
#print-icon {// {{{
|
||||||
float: right;
|
float: right;
|
||||||
|
display: none;
|
||||||
|
|
||||||
img {
|
img {
|
||||||
height: 2em !important;
|
height: 1.75em;
|
||||||
position: absolute;
|
position: relative;
|
||||||
top: 1em;
|
top: 1em;
|
||||||
}
|
}
|
||||||
}// }}}
|
}// }}}
|
||||||
|
|
||||||
#contact-info {// {{{
|
#contact-info {// {{{
|
||||||
@include side-margin-em(0);
|
@include side-margin-em(0);
|
||||||
@include side-padding-rem(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);
|
||||||
width: 100%;
|
// min-width: $max-page-width;
|
||||||
// @media (min-width: 1200px) {
|
@media (min-width: 1200px) {
|
||||||
// .container{
|
.container{
|
||||||
// min-width: $max-page-width;
|
min-width: $max-page-width;
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
a {// {{{
|
||||||
|
color: #4287cd;
|
||||||
|
text-decoration: none;
|
||||||
|
&:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}// }}}
|
||||||
|
|
||||||
font-size: .9em;
|
// font-size: .9em;
|
||||||
|
font-size: .8em;
|
||||||
|
|
||||||
.row {
|
.row {
|
||||||
// flex-grow: 1;
|
// flex-grow: 1;
|
||||||
color: $base05;
|
// color: $base05;
|
||||||
|
color: #4287cd;
|
||||||
|
|
||||||
img {
|
img {
|
||||||
height: 1em;
|
height: 1em;
|
||||||
@@ -528,67 +539,91 @@ 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) {
|
||||||
// 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;
|
||||||
|
// color: $base-blue;
|
||||||
|
color: #4287cd;
|
||||||
|
// color: blue;
|
||||||
|
text-decoration: underline;
|
||||||
&:hover {
|
&:hover {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
}// }}}
|
}// }}}
|
||||||
|
|
||||||
h1 {// {{{
|
h1 {// {{{
|
||||||
color: $base-orange;
|
// color: $base-orange;
|
||||||
|
color: black;
|
||||||
|
// margin-top: 1.3rem;
|
||||||
margin-top: 1rem;
|
margin-top: 1rem;
|
||||||
|
// font-size: 1.2em;
|
||||||
|
font-size: 1.3em;
|
||||||
|
|
||||||
@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;
|
||||||
}
|
// }
|
||||||
}// }}}
|
}// }}}
|
||||||
|
|
||||||
|
.section-header {
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 0.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.work-experience {
|
||||||
|
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);
|
||||||
@@ -596,13 +631,29 @@ header {// {{{
|
|||||||
h2 {
|
h2 {
|
||||||
color: $base-sky-blue;
|
color: $base-sky-blue;
|
||||||
display: inline;
|
display: inline;
|
||||||
|
font-size: 1.1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
img {
|
img {
|
||||||
height: 1.2em;
|
height: 1.2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.project-header {
|
||||||
|
// margin-bottom: .6em;
|
||||||
|
// margin-bottom: .1em;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-title {
|
||||||
|
// color: $base-blue;
|
||||||
|
color: black;
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
.project-link {
|
.project-link {
|
||||||
|
&:link {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
&:hover {
|
&:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
@@ -636,8 +687,37 @@ 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;
|
||||||
@@ -653,13 +733,14 @@ header {// {{{
|
|||||||
}
|
}
|
||||||
}// }}}
|
}// }}}
|
||||||
|
|
||||||
@media (max-width: $phone-width) {
|
// @media (max-width: $phone-width) {
|
||||||
font-size: 14px;
|
// font-size: 14px;
|
||||||
// font-size: 1em;
|
// // font-size: 1em;
|
||||||
}
|
// }
|
||||||
|
|
||||||
&.letter {
|
&.letter {
|
||||||
margin-top: 2em;
|
margin-top: 2em;
|
||||||
|
line-height: 1.5em;
|
||||||
|
|
||||||
img {
|
img {
|
||||||
height: 4.5em;
|
height: 4.5em;
|
||||||
@@ -668,21 +749,19 @@ header {// {{{
|
|||||||
h2 {
|
h2 {
|
||||||
color: $base-red;
|
color: $base-red;
|
||||||
margin-top: 0em;
|
margin-top: 0em;
|
||||||
|
margin-bottom: .4em;
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
margin-bottom: 1.5em;
|
margin-bottom: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.no-line-spacing {
|
.no-line-spacing {
|
||||||
line-height: .5em;
|
line-height: .5em;
|
||||||
margin-bottom: 2.15em;
|
margin-bottom: 1.75em;
|
||||||
p {
|
p {
|
||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
}
|
}
|
||||||
strong {
|
|
||||||
line-height: 1.25em;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}// }}}
|
}// }}}
|
||||||
@@ -737,200 +816,44 @@ header {// {{{
|
|||||||
}
|
}
|
||||||
}// }}}
|
}// }}}
|
||||||
|
|
||||||
#card {// {{{
|
|
||||||
@include vert-margin-rem(2);
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
font-family: 'Oxygen Mono', monospace;
|
|
||||||
|
|
||||||
.container {// {{{
|
|
||||||
padding-left: 0;
|
|
||||||
padding-right: 0;
|
|
||||||
|
|
||||||
.row {
|
|
||||||
padding-top: 6rem;
|
|
||||||
padding-bottom: 8rem;
|
|
||||||
|
|
||||||
@media (max-width: $phone-width) {
|
|
||||||
padding-top: 5rem;
|
|
||||||
padding-bottom: 6rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}// }}}
|
|
||||||
|
|
||||||
// $card-bg: #e8e6df;
|
|
||||||
$card-bg: $base07;
|
|
||||||
#presentational-container {// {{{
|
|
||||||
margin-top: 3em;
|
|
||||||
margin-bottom: 1em;
|
|
||||||
max-width: $max-page-width;
|
|
||||||
box-shadow: 2px 2px 10px 5px black;
|
|
||||||
// card bg
|
|
||||||
// background-color: #fff;
|
|
||||||
// background-color: #e5e5e5;
|
|
||||||
background-color: $card-bg;
|
|
||||||
}// }}}
|
|
||||||
|
|
||||||
#email-full {// {{{
|
|
||||||
font-size: 50px;
|
|
||||||
@media (max-width: $phone-width) {
|
|
||||||
font-size: 40px;
|
|
||||||
}
|
|
||||||
@media (max-width: $vert-phone-width) {
|
|
||||||
font-size: 33px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@include vert-margin-rem(2);
|
|
||||||
height: 7em;
|
|
||||||
|
|
||||||
img {
|
|
||||||
height: .5em;
|
|
||||||
position: absolute;
|
|
||||||
left: -.8em;
|
|
||||||
bottom: -.15em;
|
|
||||||
}
|
|
||||||
|
|
||||||
p { // {{{
|
|
||||||
position: relative;
|
|
||||||
// color: grey;
|
|
||||||
color: #151515;
|
|
||||||
// color: #133337;
|
|
||||||
|
|
||||||
div {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
|
|
||||||
.social {// {{{
|
|
||||||
// display: none;
|
|
||||||
display: inline;
|
|
||||||
white-space: nowrap;
|
|
||||||
position: absolute;
|
|
||||||
// left: 5.5rem;
|
|
||||||
left: 0rem;
|
|
||||||
|
|
||||||
.safari {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
@supports (-webkit-backdrop-filter: blur(1px)) {
|
|
||||||
left: .65rem;
|
|
||||||
.safari {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.link-text {
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
$border-thickness: 8px;
|
|
||||||
@media (max-width: $vert-phone-width) {
|
|
||||||
$border-thickness: 5px;
|
|
||||||
}
|
|
||||||
.link {
|
|
||||||
position: absolute;
|
|
||||||
border-color: black;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 0 $border-thickness $border-thickness $border-thickness;
|
|
||||||
height: .45em;
|
|
||||||
width: 100%;
|
|
||||||
left: 0;
|
|
||||||
img {
|
|
||||||
position: absolute;
|
|
||||||
left: -1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.link-top {
|
|
||||||
border-width: $border-thickness $border-thickness 0 $border-thickness;
|
|
||||||
|
|
||||||
img {
|
|
||||||
position: absolute;
|
|
||||||
top: -.2em;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
opacity: .6;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$line-spacing: .65em;
|
|
||||||
#mastodon {
|
|
||||||
top: -$line-spacing * 1.1;
|
|
||||||
border-color: #3088d4;
|
|
||||||
}
|
|
||||||
.linkedin {
|
|
||||||
bottom: -$line-spacing * 1.1;
|
|
||||||
border-color: #0077b7;
|
|
||||||
|
|
||||||
&.linkedin-middle {
|
|
||||||
border-style: dotted;
|
|
||||||
border-width: 0 0 3.5px 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#github {
|
|
||||||
bottom: -$line-spacing * 2.7;
|
|
||||||
}
|
|
||||||
#site {
|
|
||||||
bottom: -$line-spacing * 4.25;
|
|
||||||
border-color: #ff7058;
|
|
||||||
}
|
|
||||||
#email {
|
|
||||||
top: -$line-spacing * 2.65;
|
|
||||||
border-color: #d1d0bf;
|
|
||||||
}
|
|
||||||
}// }}}
|
|
||||||
|
|
||||||
.spacing {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
}// }}}
|
|
||||||
}// }}}
|
|
||||||
}// }}}
|
|
||||||
|
|
||||||
#letter-home {// {{{
|
|
||||||
|
|
||||||
#letter-instr {
|
|
||||||
text-align: center;
|
|
||||||
margin-top: 1.5em;
|
|
||||||
// margin-top: 25vh;
|
|
||||||
font-size: 1.4em;
|
|
||||||
}
|
|
||||||
}// }}}
|
|
||||||
|
|
||||||
// TODO: converted up to here
|
// TODO: converted up to here
|
||||||
|
|
||||||
// hero {{{ //
|
// hero {{{ //
|
||||||
|
|
||||||
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: 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 {
|
||||||
text-decoration: none;
|
color: black;
|
||||||
|
// text-decoration: none;
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-thickness: 2px;
|
||||||
|
text-underline-offset: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: $max-page-width) {
|
// @media (max-width: $phone-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 {
|
||||||
@@ -1080,7 +1003,8 @@ 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 */
|
||||||
|
|
||||||
|
|||||||
10
config.yaml
10
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
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ layout: single
|
|||||||
---
|
---
|
||||||
<!--- Intro {{{ -->
|
<!--- Intro {{{ -->
|
||||||
|
|
||||||

|

|
||||||
*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](txt/nzxt-pkgs.txt))
|
* **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))
|
||||||
```
|
```
|
||||||
$ 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**: [rxvt-unicode-pixbuf](https://www.wikiwand.com/en/Rxvt)
|
* **Terminal**: [kitty](https://sw.kovidgoyal.net/kitty/)
|
||||||
* **Shell**: [Zsh](http://zsh.sourceforge.net/) + [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh)
|
* **Shell**: [fish](https://fishshell.com/)
|
||||||
* **Window Manager**: [i3-gaps](https://github.com/Airblader/i3)
|
* **Window Manager**: [i3-gaps](https://i3wm.org/)
|
||||||
* **Editor**: [Neovim](https://github.com/neovim/neovim) ([plugins](dotfiles/.vimrc#L51))
|
* **Editor**: [neovim](https://neovim.io/) ([plugins](https://git.kevin-mok.com/Kevin-Mok/linux-config/src/branch/master/dot_vimrc.tmpl#L147-L359))
|
||||||
* **File Manager**: [ranger](https://ranger.github.io/)
|
* **File Manager**: [ranger](https://github.com/ranger/ranger?tab=readme-ov-file#ranger-193)/[PCManFM](https://en.wikipedia.org/wiki/PCMan_File_Manager)
|
||||||
<!--- }}} Basic Info -->
|
<!--- }}} Basic Info -->
|
||||||
|
|
||||||
<!--- Setup {{{ -->
|
<!--- Setup {{{ -->
|
||||||
|
|||||||
Submodule content/letter updated: 996ec6349b...f07869796d
@@ -5,71 +5,84 @@ draft: false
|
|||||||
---
|
---
|
||||||
{{% resume/section "Work Experience" %}}<!--- {{{ -->
|
{{% resume/section "Work Experience" %}}<!--- {{{ -->
|
||||||
|
|
||||||
{{% resume/education name="Red Hat"
|
{{% resume/work-experience name="Red Hat"
|
||||||
title="Cloud/Software Engineer Intern" date="May 2020 — Aug 2021" %}}
|
title="Cloud/Software Engineer Intern" languages="Kubernetes, GoLang, Jenkins" date="May 2020 — Aug 2021" %}}
|
||||||
- Reduced deployment time by **66%** by implementing ability to
|
- 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**
|
deploy locally-compiled binaries onto **Kubernetes**/**OpenShift**
|
||||||
using only command-line.
|
using only command-line (**Kubernetes/GoLang** used for this and three below).
|
||||||
- Implemented ability for Kubernetes operator to fetch data
|
- Implemented ability for Kubernetes operator to fetch data
|
||||||
from a deployed service and update config with data.
|
from a deployed service and update config with data to
|
||||||
- Refactored probes to have default values assigned based on
|
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.
|
deployed YAML while also fixing reconciliation issues.
|
||||||
- Automated the promotion and release process
|
- Rewrote the **Jenkins (Groovy)** [nightly pipeline](https://github.com/apache/incubator-kie-kogito-pipelines/commit/4c83f1aecdea2c1ba2796b79839a90d4083dce88) to run in a GitHub
|
||||||
as part of the **Jenkins** release pipeline.
|
PR using a trigger keyword to test all the team's submitted PR's
|
||||||
- Wrote documentation on how to get started with the project to onboard new
|
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.
|
developers and mentored the incoming intern.
|
||||||
- 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.
|
|
||||||
|
|
||||||
{{% /resume/section %}}<!--- }}} -->
|
{{% /resume/section %}}<!--- }}} -->
|
||||||
|
|
||||||
{{% resume/section projects %}}<!--- {{{ -->
|
{{% resume/section projects %}}<!--- {{{ -->
|
||||||
|
|
||||||
<!--- Astronofty {{{ -->
|
|
||||||
|
|
||||||
{{% resume/project name="Astronofty"
|
|
||||||
url="https://github.com/Kevin-Mok/astronofty" date="Jan 2023"
|
|
||||||
show="true" %}}
|
|
||||||
|
|
||||||
- Created for a 36 hour hackathon (UofTHacks X) where it **came 2nd overall**.
|
|
||||||
- Created and deployed a smart contract with **Solidity** on
|
|
||||||
the Ethereum blockchain to create/buy/sell NFT's
|
|
||||||
using MetaMask.
|
|
||||||
- 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 %}}
|
|
||||||
|
|
||||||
<!--- Astronofty }}} -->
|
|
||||||
|
|
||||||
<!--- Rarity Surf {{{ -->
|
<!--- Rarity Surf {{{ -->
|
||||||
|
|
||||||
{{% resume/project name="Rarity Surf"
|
{{% resume/project name="Rarity Surf"
|
||||||
|
languages="Python, Django, React, GraphQL"
|
||||||
date="Oct 2021" show="true" %}}
|
date="Oct 2021" show="true" %}}
|
||||||
|
|
||||||
- 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.
|
- Web app to give rarity rankings to NFT's and check which are listed on the OpenSea marketplace using their API.
|
||||||
- Reverse engineered the ranking algorithm to match the
|
- Reverse engineered the ranking algorithm to match the
|
||||||
leading rarity ranking site's rankings (scraped using
|
leading rarity ranking site's rankings ([scraped](https://github.com/Kevin-Mok/rarity-surf/blob/django/rarity_check/project/scrape.py) using
|
||||||
Selenium) with a **discrepancy of <0.25%**.
|
**Selenium**) with a **discrepancy of <0.25%**.
|
||||||
- Used app to frontrun purchases of **top 5%** rarity NFT's
|
- Used app to frontrun purchases of **top 0.5%** rarity NFT's
|
||||||
against competing buyers.
|
against competing buyers.
|
||||||
- Wrote **Django** backend to fetch metadata from IPFS, store rarity rankings in PostgreSQL and serve rarity data using GraphQL.
|
- Wrote **Django (Python)** [backend](https://github.com/Kevin-Mok/rarity-surf) to fetch metadata from IPFS, store rarity rankings in PostgreSQL and serve rarity data using GraphQL.
|
||||||
- Wrote **React** frontend with hooks to dynamically load rarity data. Styled with Tailwind.
|
- Wrote **React** [frontend](https://github.com/Kevin-Mok/rarity-surf-frontend) with hooks to dynamically load rarity data. Styled with Tailwind.
|
||||||
|
|
||||||
{{% /resume/project %}}
|
{{% /resume/project %}}
|
||||||
|
|
||||||
<!--- Rarity Surf }}} -->
|
<!--- Rarity Surf }}} -->
|
||||||
|
|
||||||
<!--- DigitalOcean {{{ -->
|
<!--- {{{ Spotify Graphs -->
|
||||||
|
|
||||||
{{% resume/project name="Personal Server"
|
{{% resume/project name="Spotify Graphs"
|
||||||
url="https://kevin-mok.com/server/" date="Aug. 2019 — present" show="true" %}}
|
url="https://github.com/Kevin-Mok/spotify-lib-vis" date="June 2020 "
|
||||||
|
languages="Python, Django, PostgreSQL"
|
||||||
|
show="true" %}}
|
||||||
|
|
||||||
- Deployed various web apps with backends using NGINX on a Debian/**Linux** server.
|
- Web app to visualize user's library and listening
|
||||||
- Wrote a [**JavaScript** script][server script] and [systemd service][systemd service]/[timer]
|
history from Spotify.
|
||||||
|
- [Fetched and organized](https://github.com/Kevin-Mok/spotify-lib-vis/blob/master/api/utils.py) user data from Spotify API into PostgreSQL database with **Django (Python)** backend.
|
||||||
|
- Created and tested various relational database schemas to maximize
|
||||||
|
efficiency for use cases.
|
||||||
|
- Generated various charts to visualize the artists and genres
|
||||||
|
of tracks in library.
|
||||||
|
|
||||||
|
{{% /resume/project %}}
|
||||||
|
|
||||||
|
<!--- Spotify Graphs }}} -->
|
||||||
|
|
||||||
|
<!--- AWS {{{ -->
|
||||||
|
|
||||||
|
{{% resume/project name="AWS Server"
|
||||||
|
url="https://kevin-mok.com/server/" languages="AWS, Kubernetes, Terraform, Docker" date="May 2024" show="true" %}}
|
||||||
|
|
||||||
|
- Deployed [various web apps](https://kevin-mok.com/server/) using **Docker** (Compose) on an
|
||||||
|
**AWS EC2** Debian/**Linux** server.
|
||||||
|
- Created **Kubernetes** [manifest files](https://github.com/Kevin-Mok/aws-minicube) to quickly recreate my server setup
|
||||||
|
with persistent storage/restarts and open ports.
|
||||||
|
- Created **Terraform** [files](https://github.com/Kevin-Mok/terraform-deploys/tree/main)
|
||||||
|
to deploy an AWS EC2 instance and Docker containers.
|
||||||
|
- Used Amazon Route 53's DNS and **NGINX** to route
|
||||||
|
subdomains to each web application.
|
||||||
|
- Wrote a **JavaScript** [server script] and [systemd service][systemd service]/[timer]
|
||||||
to display the uptime of my pages every hour.
|
to display the uptime of my pages every hour.
|
||||||
- Monitored system resources and performed system maintenance using tmux.
|
|
||||||
|
|
||||||
[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
|
||||||
@@ -77,26 +90,26 @@ url="https://kevin-mok.com/server/" date="Aug. 2019 — present" show="true" %}}
|
|||||||
|
|
||||||
{{% /resume/project %}}
|
{{% /resume/project %}}
|
||||||
|
|
||||||
<!--- DigitalOcean Droplet }}} -->
|
<!--- AWS }}} -->
|
||||||
|
|
||||||
{{% /resume/section %}}<!--- }}} -->
|
{{% /resume/section %}}<!--- }}} -->
|
||||||
|
|
||||||
{{% resume/section skills %}}<!--- {{{ -->
|
{{% resume/section skills %}}<!--- {{{ -->
|
||||||
|
|
||||||
- **JavaScript**, **React**,**Python**, Go, Bash, Solidity, C, **Django**, Node.js, PostgreSQL, **Linux**, **Git**, **Command Line**
|
**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
|
||||||
|
|
||||||
{{% /resume/section %}}<!--- }}} -->
|
{{% /resume/section %}}<!--- }}} -->
|
||||||
|
|
||||||
{{% resume/section education %}}<!--- {{{ -->
|
{{% resume/section education %}}<!--- {{{ -->
|
||||||
|
|
||||||
{{% resume/education name="University of Toronto"
|
{{% resume/education name="University of Toronto"
|
||||||
title="Computer Science Specialist — 3.84 GPA (CS)" date="2018 — 2023" %}}
|
title="Computer Science Specialist — 3.84 GPA (CS). Graduated with High Distinction." date="2019 — 2024" %}}
|
||||||
|
|
||||||
{{% /resume/section %}}<!--- }}} -->
|
{{% /resume/section %}}<!--- }}} -->
|
||||||
|
|
||||||
{{% resume/section "References" %}}<!--- {{{ -->
|
{{% resume/section "References" %}}<!--- {{{ -->
|
||||||
|
|
||||||
{{% resume/references title="See my LinkedIn (Kev-Mok) for references from my Red Hat managers/mentee and a startup client." %}}
|
{{% resume/references %}}
|
||||||
|
|
||||||
{{% /resume/section %}}<!--- }}} -->
|
{{% /resume/section %}}<!--- }}} -->
|
||||||
|
|
||||||
|
|||||||
88
content/resume/old.txt
Normal file
88
content/resume/old.txt
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
<!--- 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 }}} -->
|
||||||
|
<!--- {{{ Astronofty -->
|
||||||
|
|
||||||
|
{{% resume/project name="Astronofty" url="https://github.com/Kevin-Mok/astronofty" languages="React, Solidity" date="Jan 2023" show="true" %}}
|
||||||
|
|
||||||
|
- Created for a 36 hour hackathon (UofTHacks X) where it came 2nd overall.
|
||||||
|
- Created and deployed a smart contract with Solidity on the Ethereum blockchain to create/buy/sell NFT's.
|
||||||
|
- Wrote React components to synchronously upload images and metadata to IPFS and fetch and show NFT's.
|
||||||
|
|
||||||
|
{{% /resume/project %}}
|
||||||
|
|
||||||
|
<!--- Astronofty }}} -->
|
||||||
|
|
||||||
|
<!--- 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 }}} -->
|
||||||
9
content/resume/red-hat.txt
Normal file
9
content/resume/red-hat.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
• 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.
|
||||||
18
content/resume/server-ideas.md
Normal file
18
content/resume/server-ideas.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# To-Do
|
||||||
|
- check price of AWS server
|
||||||
|
- run Docker apps on it
|
||||||
|
- run domain
|
||||||
|
- run/create Docker compose
|
||||||
|
- Dockerize app
|
||||||
|
|
||||||
|
# Done
|
||||||
|
|
||||||
|
# Points
|
||||||
|
- run/deploy K8s locally on minikube using kubectl
|
||||||
|
- features
|
||||||
|
- Dockerize app
|
||||||
|
- run Docker on server (AWS)
|
||||||
|
|
||||||
|
# Replace
|
||||||
|
- personal server
|
||||||
|
- Astronofy
|
||||||
8
content/resume/skills.md
Normal file
8
content/resume/skills.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# 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, PostgreSQL, , **Command Line**, Groovy, Go(Lang), Bash, **JavaScript**, **React**, Node.js, MongoDB, Solidity, C
|
||||||
@@ -1,14 +1,16 @@
|
|||||||
---
|
---
|
||||||
title: "Server Apps"
|
title: "Server Apps"
|
||||||
date: 2019-09-22
|
date: 2024-06-10
|
||||||
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 [DigitalOcean
|
Here is a list of apps that I am running on my [AWS EC2][AWS EC2 info]
|
||||||
|
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
|
||||||
|
|||||||
@@ -15,11 +15,18 @@
|
|||||||
<!-- <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/" target="_blank">
|
<a href="https://git.kevin-mok.com/Kevin-Mok?tab=activity" target="_blank">
|
||||||
<img src="{{ "img/social/gitea.svg" | relURL }}" alt="gitea-logo">
|
<img src="{{ "img/social/gitea.svg" | relURL }}" alt="gitea-logo">
|
||||||
</a>
|
</a>
|
||||||
·
|
·
|
||||||
@@ -36,12 +43,6 @@
|
|||||||
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">
|
||||||
|
|||||||
@@ -12,14 +12,17 @@
|
|||||||
{{ 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="https://cdn.khkm.tk/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" /> -->
|
||||||
|
<!-- 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 }}
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
<h1 class="site-title">
|
<h1 class="site-title">
|
||||||
<span class="surrounding">[</span><a href="{{ .Site.BaseURL }}"><span class="base08">K</span><span
|
<span class="surrounding"></span><a href="{{ .Site.BaseURL }}">
|
||||||
class="base0f">e</span><span class="base09">v</span><span
|
<span>Kevin Mok</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>
|
||||||
|
|||||||
@@ -7,12 +7,23 @@
|
|||||||
<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 a Computer Science student at the University of
|
I'm graduated University of Toronto as a Computer
|
||||||
Toronto, graduating at the end of 2023 (currently
|
Science Scecialist in 2023.
|
||||||
looking for a full-time position!).
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
I'm greatly interested in all things Linux and
|
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"
|
<a href="https://www.gnu.org/philosophy/floss-and-foss.en.html"
|
||||||
target="_blank">FOSS/FLOSS</a>.
|
target="_blank">FOSS/FLOSS</a>.
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -6,15 +6,16 @@
|
|||||||
</a>
|
</a>
|
||||||
<p>+</p>
|
<p>+</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="equation-part" id="uoft-part">
|
<div class="equation-part">
|
||||||
<a href="https://www.utoronto.ca/" target="_blank">
|
<a href="https://archlinux.org/" target="_blank">
|
||||||
<img src="{{ "img/home/uoft-logo.svg" | relURL }}" alt="uoft-logo">
|
<!-- <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">
|
<div class="equation-part" id="uoft-part">
|
||||||
<a href="https://www.gnu.org/" target="_blank">
|
<a href="https://www.utoronto.ca/" target="_blank">
|
||||||
<img src="{{ "img/home/gnu.svg" | relURL }}" id="gnu" alt="gnu-logo">
|
<img src="{{ "img/home/uoft-logo.svg" | relURL }}" alt="uoft-logo">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<p>=</p>
|
<p>=</p>
|
||||||
|
|||||||
@@ -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">
|
||||||
Kev-Mok
|
linkedin.com/in/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://kevin-mok.com/" target="_blank">
|
<a href="https://github.com/Kevin-Mok" target="_blank">
|
||||||
<span class="url-info">
|
<span class="url-info">
|
||||||
kevin-mok.com
|
github.com/Kevin-Mok
|
||||||
</span>
|
</span>
|
||||||
<img src="{{ "img/resume/link.svg" | relURL }}" alt="link-icon">
|
<img src="{{ "img/social/github.svg" | relURL }}" alt="link-icon">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
</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,17 +1,10 @@
|
|||||||
<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>
|
||||||
</button>
|
<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>
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
<div class="references">
|
<div class="references">
|
||||||
<span>
|
<span>
|
||||||
{{ .Get "title" }}
|
See my LinkedIn for
|
||||||
|
<a href="https://www.linkedin.com/in/kev-mok/details/recommendations/?detailScreenTabIndex=0"
|
||||||
|
target="_blank">
|
||||||
|
references</a> from my
|
||||||
|
Red Hat managers/mentee, a startup client and a graduate
|
||||||
|
student mentor.
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
17
layouts/shortcodes/resume/work-experience.html
Normal file
17
layouts/shortcodes/resume/work-experience.html
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<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>
|
||||||
BIN
static/img/config/desktop-screenshot.png
Normal file
BIN
static/img/config/desktop-screenshot.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.9 MiB |
BIN
static/img/resume/signature-white-lg.png
Normal file
BIN
static/img/resume/signature-white-lg.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 465 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 465 KiB After Width: | Height: | Size: 66 KiB |
Submodule static/pdf updated: 441dbce684...efff2ea4f4
Reference in New Issue
Block a user