<!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;
--fg:#d3d3d3;
--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/>Zotero</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>