🏡 index : 7800.io.git

author Jacob Walchuk <yaqub@xpg.local> 2025-09-15 13:24:49.0 +01:00:00
committer Jacob Walchuk <yaqub@xpg.local> 2025-09-15 13:24:49.0 +01:00:00
commit
9e2a706812f23fc18a1065187662899763b56d97 [patch]
tree
a6b265e4f5086714c7c116479ebaed6e5a9c77a2
download
9e2a706812f23fc18a1065187662899763b56d97.tar.gz

inital commit :^)



Diff

 cv.docx     |   0 
 cv.pdf      |   0 
 email.js    |  16 ++++++++++++++++
 heading.svg |  69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 index.html  | 137 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 222 insertions(+)

diff --git a/cv.docx b/cv.docx
new file mode 100644
index 0000000000000000000000000000000000000000..ee6fdb74da5d75bf09ccdcd5053eb9a77f63f2d6 100644
Binary files /dev/null and a/cv.docx differdiff --git a/cv.pdf b/cv.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..c74b9a4a3e737009c9d941331134ca9af972298b 100644
Binary files /dev/null and a/cv.pdf differdiff --git a/email.js b/email.js
new file mode 100644
index 0000000..a66e443 100644
--- /dev/null
+++ a/email.js
@@ -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); // 0.5 seconds
    }, { once: true });
  }

  decodeAndReplace("personalEmail", "amFjb2JANzgwMC5pbw==");
  decodeAndReplace("academicEmail", "anB3MjRAc3QtYW5kcmV3cy5hYy51aw==");
});
diff --git a/heading.svg b/heading.svg
new file mode 100644
index 0000000..b947d3b 100644
--- /dev/null
+++ a/heading.svg
@@ -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>
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..69baf62 100644
--- /dev/null
+++ a/index.html
@@ -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>