Diff
cv.docx | 0
cv.pdf | 0
email.js | 16 ++++++++++++++++
heading.svg | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
index.html | 137 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 222 insertions(+)
Binary files /dev/null and a/cv.docx differ
Binary files /dev/null and a/cv.pdf differ
@@ -1,0 +1,16 @@
document.addEventListener("DOMContentLoaded", () => {
function decodeAndReplace(id, encoded) {
const el = document.getElementById(id);
el.addEventListener("click", () => {
const email = atob(encoded);
el.textContent = email;
el.removeAttribute("id");
setTimeout(() => {
el.href = "mailto:" + email;
}, 500);
}, { once: true });
}
decodeAndReplace("personalEmail", "amFjb2JANzgwMC5pbw==");
decodeAndReplace("academicEmail", "anB3MjRAc3QtYW5kcmV3cy5hYy51aw==");
});
@@ -1,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 776.91 259.47">
<defs>
<style>
.cls-1 {
letter-spacing: -.02em;
}
.cls-1, .cls-2, .cls-3, .cls-4 {
font-family: Futura-Bold, Futura;
font-weight: 700;
}
.cls-2 {
letter-spacing: -.06em;
}
.cls-3 {
letter-spacing: -.1em;
}
.cls-4 {
letter-spacing: -.1em;
}
.cls-5 {
letter-spacing: -.05em;
}
.cls-5, .cls-6, .cls-7 {
font-family: Futura-Medium, Futura;
font-weight: 500;
}
.cls-8 {
fill-rule: evenodd;
}
.cls-8, .cls-9 {
fill: #d3d3d3;
}
.cls-7 {
letter-spacing: -.09em;
}
.cls-10 {
fill: none;
stroke-linecap: round;
stroke-width: 4px;
}
.cls-10, .cls-9 {
stroke: #d3d3d3;
stroke-miterlimit: 10;
}
.cls-9 {
font-size: 120px;
}
</style>
</defs>
<text class="cls-9" transform="translate(182.75 106.17)"><tspan class="cls-3" x="0" y="0">7</tspan><tspan class="cls-2" x="69.84" y="0">8</tspan><tspan class="cls-1" x="144.36" y="0">0</tspan><tspan class="cls-4" x="223.92" y="0">0</tspan><tspan class="cls-7" x="293.28" y="0">.</tspan><tspan class="cls-5" x="320.11" y="0">i</tspan><tspan class="cls-6" x="343.99" y="0">o</tspan></text>
<text/>
<g>
<path class="cls-10" d="M192.88,119.52L2,257.07M774.91,257.07H2.5M192.88,119.52l391.32-.02M774.91,257.07l-190.71-137.56M597.09,128.9l-416.78-.22M165.79,139.25l446.13.25M148.93,151.42l479.92.29M128.55,165.57l519.24.35M106,182.26l565.58.42M77.63,202.2l621.01.51M44.67,226.64l688.93.63M241.79,119.52l-143.2,137.55M290.63,119.62l-95.72,137.85M339.62,119.49l-47.79,137.48M388.08,119.62l-.55,137.85M437.43,119.49l47.56,137.48M486.84,119.56l95.83,137.71M536.19,119.52l143.92,137.61"/>
<path class="cls-8" d="M192.88,119.52L2,257.07M774.91,257.07H2.5M192.88,119.52l391.32-.02M774.91,257.07l-190.71-137.56M597.09,128.9l-416.78-.22M165.79,139.25l446.13.25M148.93,151.42l479.92.29M128.55,165.57l519.24.35M106,182.26l565.58.42M77.63,202.2l621.01.51M44.67,226.64l688.93.63M241.79,119.52l-143.2,137.55M290.63,119.62l-95.72,137.85M339.62,119.49l-47.79,137.48M388.08,119.62l-.55,137.85M437.43,119.49l47.56,137.48M486.84,119.56l95.83,137.71M536.19,119.52l143.92,137.61"/>
</g>
</svg>
@@ -1,0 +1,137 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Jacob Walchuk's Landing Page</title>
<meta name="description" content="CV, projects, and contact information." />
<script src="email.js"></script>
<style>
:root{
--bg:#2b2b2b; /* dark grey */
--fg:#d3d3d3; /* light grey */
--accent:#e0e0e0;
--maxw:800px;
}
*{box-sizing:border-box}
html,body{height:100%}
body{
margin:0;
font:16px/1.6 ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
background:var(--bg);
color:var(--fg);
-webkit-font-smoothing:antialiased;
-moz-osx-font-smoothing:grayscale;
}
.wrap{
max-width:var(--maxw);
margin:0 auto;
padding:6rem 1.25rem;
}
h1,h2{margin:0 0 0.5rem}
h1{font-size:2.25rem}
p{margin:0 0 1rem}
.cta{
display:inline-block;
padding:.75rem 1rem;
border:1px solid var(--accent);
text-decoration:none;
color:var(--fg);
border-radius:8px;
}
.centre{
text-align: center;
}
a{
color:white;
}
#personalEmail, #academicEmail {
font-style: italic;
}
#screenfetch {
font-size: 0.7rem;
display: flex;
}
#screen_one, #screen_two {
flex: 1;
}
</style>
</head>
<body>
<main class="wrap" role="main">
<img src=heading.svg id=headimg />
<br><br>
<p>
I'm <b>Jacob Walchuk</b>, a final-year philosophy student at the University of St Andrews. Right now, this site contains some basic information about me and links to past technical projects.</p>
<h2>Contact</h2>
<ul>
<li>Personal Email: <a id="personalEmail" href="#">[click to reveal]</a></li>
<li>Academic Email: <a id="academicEmail" href="#">[click to reveal]</a></li>
<li>LinkedIn: <a href="https://www.linkedin.com/in/walchuk/">/in/walchuk</a>.</li>
<li>Github: <a href="https://github.com/yaqubroli">@yaqubroli</a>. Note that most of my projects are <a href="https://git.bql.7800.io/">selfhosted</a>.</li>
</ul>
<h2>Curriculum Vitae</h2>
<div class="centre">
<a class="cta" href="cv.pdf">PDF Format</a>
<a class="cta" href="cv.docx">DOCX Format</a>
</div>
<h2>Projects</h2>
<ul>
<li>I wrote a <a href=>YAML Parser in VBA</a> to generate my CV from a YAML source, and updated the <a href=>VBASync</a> C# application, which detaches VBA from its associated document for version control, so that it could be compiled on modern systems.</li>
<li>Wrote a <a href="https://sprightly-malabi-9b60b5.netlify.app/booktracker/all/">book tracker</a> in node.js, which pulled together the SQLite databases of <a href=https://www.orgroam.com/>org-roam</a> and <a href=https://www.zotero.org/></a> and generated a static "app" which showed progress and notes. I am not actively using it to track readings anymore, although it might be revived someday. Neither zotero or org-roam document their schemas well, so I had to reverse-engineer them!</li>
<li>Wrote a combination <a href=https://git.bql.7800.io/old_projects/url_shortener.git/tree>URL shortener and pastebin</a> in Rust + tokio which included its own <i>very</i> basic templating engine.
<li>Wrote a <a href=https://git.bql.7800.io/old_projects/demo_old.git/tree>basic wireframe 3D renderer</a> in Java, which includes a linalg library.</li>
</ul>
<h2>Homelab</h2>
I currently run a homelab with the following specs, which hosts various selfhosted services at <a href=https://bql.7800.io>bql.7800.io</a>.
<div id="screenfetch">
<div id="screen_one">
<pre>
<span style="color:purple;"></span><span style="font-weight:bold;color:purple;"> -/oyddmdhs+:.
-o</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">dNMMMMMMMMNNmhy+</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">-`
-y</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">NMMMMMMMMMMMNNNmmdhy</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">+-
`o</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">mMMMMMMMMMMMMNmdmmmmddhhy</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">/`
om</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">MMMMMMMMMMMN</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">hhyyyo</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">hmdddhhhd</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">o`
.y</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">dMMMMMMMMMMd</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">hs++so/s</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">mdddhhhhdm</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">+`
oy</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">hdmNMMMMMMMN</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">dyooy</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">dmddddhhhhyhN</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">d.
:o</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">yhhdNNMMMMMMMNNNmmdddhhhhhyym</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">Mh
.:</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">+sydNMMMMMNNNmmmdddhhhhhhmM</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">my
/m</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">MMMMMMNNNmmmdddhhhhhmMNh</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">s:
`o</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">NMMMMMMMNNNmmmddddhhdmMNhs</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">+`
`s</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">NMMMMMMMMNNNmmmdddddmNMmhs</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">/.
/N</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">MMMMMMMMNNNNmmmdddmNMNdso</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">:`
+M</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">MMMMMMNNNNNmmmmdmNMNdso</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">/-
yM</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">MNNNNNNNmmmmmNNMmhs+/</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">-`
/h</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">MMNNNNNNNNMNdhs++/</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">-`
`/</span><span style="font-weight:bold;color:gray;"></span><span style="font-weight:bold;">ohdmmddhys+++/:</span><span style="color:purple;"></span><span style="font-weight:bold;color:purple;">.`
`-//////:--.</span>
</pre>
</div>
<div id="screen_two">
<pre>
<span style="font-weight:bold;"></span><span style="font-weight:bold;color:purple;">yaqub</span>@<span style="color:purple;"></span><span style="font-weight:bold;color:purple;">bql</span>
---------
<span style="color:purple;"></span><span style="font-weight:bold;color:purple;">OS</span>: Gentoo Linux aarch64
<span style="color:purple;"></span><span style="font-weight:bold;color:purple;">Host</span>: HUAWEI QingYun W515x-B056 W515x
<span style="color:purple;"></span><span style="font-weight:bold;color:purple;">Kernel</span>: 5.10.97-arm64-desktop-custom
<span style="color:purple;"></span><span style="font-weight:bold;color:purple;">Packages</span>: 1 (dpkg), 1037 (emerge)
<span style="color:purple;"></span><span style="font-weight:bold;color:purple;">Shell</span>: bash 5.2.37
<span style="color:purple;"></span><span style="font-weight:bold;color:purple;">Resolution</span>: 2560x1440
<span style="color:purple;"></span><span style="font-weight:bold;color:purple;">Terminal</span>: /dev/pts/1
<span style="color:purple;"></span><span style="font-weight:bold;color:purple;">CPU</span>: ARM Cortex-A510 (12) @ 1.530GHz
<span style="color:purple;"></span><span style="font-weight:bold;color:purple;">Memory</span>: 15248MiB
<span style="color:dimgray;"></span><span style="color:dimgray;background-color:black;"> </span><span style="color:red;background-color:black;"></span><span style="color:red;background-color:red;"> </span><span style="color:green;background-color:red;"></span><span style="color:green;background-color:green;"> </span><span style="color:olive;background-color:green;"></span><span style="color:olive;background-color:olive;"> </span><span style="color:blue;background-color:olive;"></span><span style="color:blue;background-color:blue;"> </span><span style="color:purple;background-color:blue;"></span><span style="color:purple;background-color:purple;"> </span><span style="color:teal;background-color:purple;"></span><span style="color:teal;background-color:teal;"> </span><span style="color:gray;background-color:teal;"></span><span style="color:gray;background-color:gray;"> </span>
<span style="filter: contrast(70%) brightness(190%);color:dimgray;"></span><span style="filter: contrast(70%) brightness(190%);color:dimgray;background-color:black;"> </span><span style="filter: contrast(70%) brightness(190%);color:red;background-color:black;"></span><span style="filter: contrast(70%) brightness(190%);color:red;background-color:red;"> </span><span style="filter: contrast(70%) brightness(190%);color:green;background-color:red;"></span><span style="filter: contrast(70%) brightness(190%);color:green;background-color:green;"> </span><span style="filter: contrast(70%) brightness(190%);color:olive;background-color:green;"></span><span style="filter: contrast(70%) brightness(190%);color:olive;background-color:olive;"> </span><span style="filter: contrast(70%) brightness(190%);color:blue;background-color:olive;"></span><span style="filter: contrast(70%) brightness(190%);color:blue;background-color:blue;"> </span><span style="filter: contrast(70%) brightness(190%);color:purple;background-color:blue;"></span><span style="filter: contrast(70%) brightness(190%);color:purple;background-color:purple;"> </span><span style="filter: contrast(70%) brightness(190%);color:teal;background-color:purple;"></span><span style="filter: contrast(70%) brightness(190%);color:teal;background-color:teal;"> </span><span style="filter: contrast(70%) brightness(190%);color:gray;background-color:teal;"></span><span style="filter: contrast(70%) brightness(190%);color:gray;background-color:gray;"> </span>
</pre>
</div>
</div>
You may notice that the kernel version is quite out-of-date. This is because the SoC that my server uses (the <a href=https://www.hisilicon.com/en/products/kirin/kirin-flagship-chips/kirin-9000>Kirin 9000c</a>) does not have kernel source available for it.
In order to run an unsupported distribution, I had to debug anomalous behaviour at the kernel level, gained insight into how Huawei used proprietary <a href=https://en.wikipedia.org/wiki/Linux_Security_Modules>linux security modules</a> for security on their enterprise offerings, and communicated with kernel devs in Mandarin to obtain a custom-compiled kernel that did not contain Huawei's security features. Hopefully, I'll write a blog post about this in the future.
</main>
</body>
</html>