Really trying to clean things up...
This commit is contained in:
+5
-6
@@ -3,7 +3,6 @@ from __future__ import annotations
|
||||
from dataclasses import dataclass
|
||||
from types import NoneType
|
||||
from typing import Optional
|
||||
from result import Result, Ok, Err
|
||||
import os
|
||||
import sys
|
||||
|
||||
@@ -76,25 +75,25 @@ class HTML:
|
||||
tags.append(Tag(tag, trail))
|
||||
return tags
|
||||
|
||||
def inflate(self) -> Result[str, str]:
|
||||
def inflate(self) -> str:
|
||||
file = str()
|
||||
|
||||
for tag in self.tags():
|
||||
if tag.type() == 'include':
|
||||
chunk = tag.get_param('src')
|
||||
if isinstance(chunk, NoneType):
|
||||
return Err('FileNotFoundError')
|
||||
raise FileNotFoundError
|
||||
|
||||
html = HTML(open(str(WORK_DIR) + '/src/' + chunk, 'rt').read())
|
||||
file += html.inflate().expect('FileNotFoundError')
|
||||
file += html.inflate()
|
||||
else:
|
||||
file += tag.write()
|
||||
|
||||
return Ok(file)
|
||||
return file
|
||||
|
||||
# Convert the HTML obj into a str to write to file.
|
||||
def write(self) -> str:
|
||||
return self.inflate().unwrap()
|
||||
return self.inflate()
|
||||
|
||||
|
||||
def main() -> None:
|
||||
|
||||
+8
-10
@@ -11,29 +11,27 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Error - 400</h5>
|
||||
<p>You are here:</p>
|
||||
<p class="page">Error - 400</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane error">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">400</h1>
|
||||
<h2>Bad Request!</h2>
|
||||
</header>
|
||||
<hr />
|
||||
<p>
|
||||
The server cannot or will not process this request due to apparent client-side
|
||||
error or deception.
|
||||
The server cannot or will not process this request due to apparent client-side error
|
||||
or deception.
|
||||
</p>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<ul class="pane spacer">
|
||||
<li class="spacer_container">#AD</li>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
+6
-8
@@ -11,24 +11,22 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Error - 401</h5>
|
||||
<p>You are here:</p>
|
||||
<p class="page">Error - 401</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane error">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">401</h1>
|
||||
<h2>Unauthorized!</h2>
|
||||
</header>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<ul class="pane spacer">
|
||||
<li class="spacer_container">#AD</li>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
+6
-8
@@ -11,26 +11,24 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Error - 403</h5>
|
||||
<p>You are here:</p>
|
||||
<p class="page">Error - 403</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane error">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">403</h1>
|
||||
<h2>Forbidden!</h2>
|
||||
</header>
|
||||
<hr />
|
||||
<p>The server is refusing to act upon your request.</p>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<ul class="pane spacer">
|
||||
<li class="spacer_container">#AD</li>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
+6
-8
@@ -11,24 +11,22 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Error - 404</h5>
|
||||
<p>You are here:</p>
|
||||
<p class="page">Error - 404</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane error">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">404</h1>
|
||||
<h2>Page not found!</h2>
|
||||
</header>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<ul class="pane spacer">
|
||||
<li class="spacer_container">#AD</li>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
+6
-8
@@ -11,26 +11,24 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Error - 500</h5>
|
||||
<p>You are here:</p>
|
||||
<p class="page">Error - 500</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane error">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">500</h1>
|
||||
<h2>Internal Server Error!</h2>
|
||||
</header>
|
||||
<hr />
|
||||
<p>The server has no clue WTF happened here.</p>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<ul class="pane spacer">
|
||||
<li class="spacer_container">#AD</li>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
+6
-8
@@ -11,26 +11,24 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Error - 501</h5>
|
||||
<p>You are here:</p>
|
||||
<p class="page">Error - 501</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane error">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">501</h1>
|
||||
<h2>Not Implemented!</h2>
|
||||
</header>
|
||||
<hr />
|
||||
<p>Whatever you just tried doing, the server doesn't know how to handle it.</p>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<ul class="pane spacer">
|
||||
<li class="spacer_container">#AD</li>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
+6
-8
@@ -11,26 +11,24 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Error - 502</h5>
|
||||
<p>You are here:</p>
|
||||
<p class="page">Error - 502</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane error">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">502</h1>
|
||||
<h2>Bad Gateway!</h2>
|
||||
</header>
|
||||
<hr />
|
||||
<p>This service may be offline.</p>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<ul class="pane spacer">
|
||||
<li class="spacer_container">#AD</li>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
+6
-8
@@ -11,26 +11,24 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Error - 503</h5>
|
||||
<p>You are here:</p>
|
||||
<p class="page">Error - 503</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane error">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">503</h1>
|
||||
<h2>Service Unavailable!</h2>
|
||||
</header>
|
||||
<hr />
|
||||
<p>The server may be overloaded or down for maintenance.</p>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<ul class="pane spacer">
|
||||
<li class="spacer_container">#AD</li>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
+8
-10
@@ -11,29 +11,27 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Error - 504</h5>
|
||||
<p>You are here:</p>
|
||||
<p class="page">Error - 504</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane error">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">504</h1>
|
||||
<h2>Gateway Timeout!</h2>
|
||||
</header>
|
||||
<hr />
|
||||
<p>
|
||||
The server acted as a proxy and didn't receive a timely response from the
|
||||
upstream server.
|
||||
The server acted as a proxy and didn't receive a timely response from the upstream
|
||||
server.
|
||||
</p>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<ul class="pane spacer">
|
||||
<li class="spacer_container">#AD</li>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
@@ -1,68 +1,52 @@
|
||||
<div class="spacer_container blog_recent_posts">
|
||||
<h2>Recent Posts</h2>
|
||||
<div class="section_list">
|
||||
<li class="spacer_container blog_recent_posts">
|
||||
<p>Recent Posts</p>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Hack Racing</h3>
|
||||
<span class="subtitle">28 March, 2026</span>
|
||||
</div>
|
||||
<p class="name">Hack Racing</p>
|
||||
<p class="subtitle">28 March, 2026</p>
|
||||
</header>
|
||||
<a href="/blog/posts/6_hack_racing.html" class="status">View</a>
|
||||
</header>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Optical Recovery</h3>
|
||||
<span class="subtitle">10 January, 2026</span>
|
||||
</div>
|
||||
<p class="name">Optical Recovery</p>
|
||||
<p class="subtitle">10 January, 2026</p>
|
||||
</header>
|
||||
<a href="/blog/posts/5_optical_recovery.html" class="status">View</a>
|
||||
</header>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Pointless Plans</h3>
|
||||
<span class="subtitle">18 December, 2025</span>
|
||||
</div>
|
||||
<p class="name">Pointless Plans</p>
|
||||
<p class="subtitle">18 December, 2025</p>
|
||||
</header>
|
||||
<a href="/blog/posts/4_pointless_plans.html" class="status">View</a>
|
||||
</header>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Closing Chapters</h3>
|
||||
<span class="subtitle">18 December, 2025</span>
|
||||
</div>
|
||||
<p class="name">Closing Chapters</p>
|
||||
<p class="subtitle">18 December, 2025</p>
|
||||
</header>
|
||||
<a href="/blog/posts/3_closing_chapters.html" class="status">View</a>
|
||||
</header>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Buyer's Anxiety</h3>
|
||||
<span class="subtitle">11 September, 2025</span>
|
||||
</div>
|
||||
<p class="name">Buyer's Anxiety</p>
|
||||
<p class="subtitle">11 September, 2025</p>
|
||||
</header>
|
||||
<a href="/blog/posts/2_buyers_anxiety.html" class="status">View</a>
|
||||
</header>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Unsure U.</h3>
|
||||
<span class="subtitle">09 August, 2025</span>
|
||||
</div>
|
||||
<p class="name">Unsure U.</p>
|
||||
<p class="subtitle">09 August, 2025</p>
|
||||
</header>
|
||||
<a href="/blog/posts/1_unsure_u.html" class="status">View</a>
|
||||
</header>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Divergent Pathways</h3>
|
||||
<span class="subtitle">29 July, 2025</span>
|
||||
</div>
|
||||
<a href="/blog/posts/0_divergent_pathways.html" class="status">View</a>
|
||||
<p class="name">Divergent Pathways</p>
|
||||
<p class="subtitle">29 July, 2025</p>
|
||||
</header>
|
||||
<a href="/blog/posts/0_divergent_pathways.html" class="status">View</a>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
@@ -1,3 +1 @@
|
||||
<footer>
|
||||
<p>Made with love in Canada 🇨🇦</p>
|
||||
</footer>
|
||||
<p class="viewport_footer">Made with love in Canada 🇨🇦</p>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<input id="toggle_nav" type="checkbox" />
|
||||
<label for="toggle_nav" class="nav_header">
|
||||
<h2 class="logo">Cutieguwu</h2>
|
||||
<p class="logo">Cutieguwu</p>
|
||||
<ion-icon name="menu-outline"></ion-icon>
|
||||
</label>
|
||||
|
||||
@@ -1,21 +1,33 @@
|
||||
<div class="quick_links">
|
||||
<ul class="quick_links">
|
||||
<li>
|
||||
<a href="https://gitea.cutieguwu.ca/Cutieguwu/cutieguwu-site" title="Website Source">
|
||||
<ion-icon name="git-branch-outline" alt="(Gitea) Website Source" class="green"></ion-icon>
|
||||
<ion-icon
|
||||
name="git-branch-outline"
|
||||
alt="(Gitea) Website Source"
|
||||
class="green"
|
||||
></ion-icon>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://gitea.cutieguwu.ca/Cutieguwu/cutieguwu-site/src/branch/main/LICENSE"
|
||||
title="MIT License"
|
||||
>
|
||||
<ion-icon name="book-outline" alt="MIT License" class="indigo"></ion-icon>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://gitea.cutieguwu.ca/Cutieguwu/cutieguwu-site/issues" title="Report Issues">
|
||||
<ion-icon name="alert-circle-outline" alt="Report Issues" class="magenta"></ion-icon>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://www.cutieguwu.ca/feed/rss.xml" title="RSS Feed" download>
|
||||
<ion-icon name="logo-rss" alt="RSS Feed" class="orange"></ion-icon>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<!-- Mastodon Verification -->
|
||||
<!-- Doubles as the spacer -->
|
||||
<a rel="me" href="https://mastodon.online/@OliveTheFemboy" class="phantom"></a>
|
||||
</div>
|
||||
<li><a rel="me" href="https://mastodon.online/@OliveTheFemboy" class="phantom"></a></li>
|
||||
</ul>
|
||||
|
||||
@@ -10,19 +10,17 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">About</h5>
|
||||
<p class="title">You are here:</p>
|
||||
<p class="page">About</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane">
|
||||
<div class="body"><p>This page has not yet been filled out. Sorry!</p></div>
|
||||
<main class="pane"><p>This page has not yet been filled out. Sorry!</p></main>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<ul class="pane spacer">
|
||||
<li class="spacer_container">#AD</li>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
@@ -10,26 +10,24 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Acknowledgements</h5>
|
||||
<p class="title">You are here:</p>
|
||||
<p class="page">Acknowledgements</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane">
|
||||
<div class="body">
|
||||
<p>There are currently no acknowledgements</p>
|
||||
<p>In terms of security, hopefully that means I'm doing a good-ish job.</p>
|
||||
<p>
|
||||
I will get my thanks to various open projects in here in time, but I'm still
|
||||
busy getting the basics handled.
|
||||
I will get my thanks to various open projects in here in time, but I'm still busy
|
||||
getting the basics handled.
|
||||
</p>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
<ul class="pane spacer">
|
||||
<li class="spacer_container">#AD</li>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
@@ -10,28 +10,24 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Blog</h5>
|
||||
<p class="title">You are here:</p>
|
||||
<p class="page">Blog</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">Blog</h1>
|
||||
<p class="date">Last Edited: 03 August, 2025</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<h2>I have an RSS feed!</h2>
|
||||
<p>Just look for the RSS Quick Link in the Navigation pane.</p>
|
||||
</div>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<include src="includes/tailer.html" />
|
||||
<ul class="pane spacer">
|
||||
<include src="./includes/blog_recent_posts.html" />
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
@@ -11,113 +11,102 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Blog - Divergent Pathways</h5>
|
||||
<p class="title">You are here:</p>
|
||||
<p class="page">Blog - Divergent Pathways</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane blog">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">Divergent Pathways</h1>
|
||||
<p class="date">Posted: 29 July, 2025</p>
|
||||
<p class="date">Last Edited: 29 July, 2025</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p>I can't say that this is how I wanted to start my blog.</p>
|
||||
<p>
|
||||
Although, in all honesty, I didn't really have an idea for how I wanted it
|
||||
to start. That's not to say I didn't know what I *didn't* want. A
|
||||
meaningless 'Welcome to my Blog' filled with my hopes and aspirations that
|
||||
inevitably would never come to light was something I knew I didn't want. I
|
||||
figured it more likely for me to have a semi-respectful rant about
|
||||
whatever's causing me to 'crash out' on that particular day. That would
|
||||
certainly be in character for me.
|
||||
Although, in all honesty, I didn't really have an idea for how I wanted it to start.
|
||||
That's not to say I didn't know what I *didn't* want. A meaningless 'Welcome to my
|
||||
Blog' filled with my hopes and aspirations that inevitably would never come to light
|
||||
was something I knew I didn't want. I figured it more likely for me to have a
|
||||
semi-respectful rant about whatever's causing me to 'crash out' on that particular
|
||||
day. That would certainly be in character for me.
|
||||
</p>
|
||||
<p>
|
||||
But no. Instead, I'm starting my blog on one of the last things I ever
|
||||
expected to write about.
|
||||
But no. Instead, I'm starting my blog on one of the last things I ever expected to
|
||||
write about.
|
||||
</p>
|
||||
<p>Love.</p>
|
||||
<p>Or rather, the passing of it due to life.</p>
|
||||
<p>
|
||||
I've been in two relationships now. Both ended mutually, although what I
|
||||
consider mutual may not be everyone else's. We came to see the same side of
|
||||
things, and we understood that we couldn't sustain our lives together. We're
|
||||
all still friends at the end.
|
||||
I've been in two relationships now. Both ended mutually, although what I consider
|
||||
mutual may not be everyone else's. We came to see the same side of things, and we
|
||||
understood that we couldn't sustain our lives together. We're all still friends at
|
||||
the end.
|
||||
</p>
|
||||
<p>
|
||||
Me and my ex-boyfriend were struggling a lot with being able to see each
|
||||
other. It's not like this relationship was geographically long distance; we
|
||||
went to the same school. The distance came more from our schedules and
|
||||
pathways. I have always been a relatively heavy academic. My parents and
|
||||
teachers certainly made sure of that, and ultimately helped lead me down a
|
||||
path of being the teacher's pet. Maybe I'll talk about my experiences and
|
||||
struggles related to that another time, but the short of it is that I am a
|
||||
high-achieving workaholic as a result. My ex-boyfriend on the other hand,
|
||||
didn't have that kind of an experience, and ultimately was led down the
|
||||
Me and my ex-boyfriend were struggling a lot with being able to see each other. It's
|
||||
not like this relationship was geographically long distance; we went to the same
|
||||
school. The distance came more from our schedules and pathways. I have always been a
|
||||
relatively heavy academic. My parents and teachers certainly made sure of that, and
|
||||
ultimately helped lead me down a path of being the teacher's pet. Maybe I'll talk
|
||||
about my experiences and struggles related to that another time, but the short of it
|
||||
is that I am a high-achieving workaholic as a result. My ex-boyfriend on the other
|
||||
hand, didn't have that kind of an experience, and ultimately was led down the
|
||||
college-level course stream in high school.
|
||||
</p>
|
||||
<p>
|
||||
Now, as I began to struggle in my fourth year, particularly with my
|
||||
mathematics continuing their downwards trend, I decided that the life of a
|
||||
software engineer wasn't for me. I turned around, almost on a dime, and set
|
||||
myself towards a career in Psychology. Now, on the surface, this may look
|
||||
like it would help with our scheduling issues, but no. While I was studying
|
||||
at school, and desperately trying to keep up my grades, my boyfriend would
|
||||
be doing a co-op elsewhere. Even when that ended at the end of the term, the
|
||||
problem remained. I was too much of a workaholic.
|
||||
Now, as I began to struggle in my fourth year, particularly with my mathematics
|
||||
continuing their downwards trend, I decided that the life of a software engineer
|
||||
wasn't for me. I turned around, almost on a dime, and set myself towards a career in
|
||||
Psychology. Now, on the surface, this may look like it would help with our
|
||||
scheduling issues, but no. While I was studying at school, and desperately trying to
|
||||
keep up my grades, my boyfriend would be doing a co-op elsewhere. Even when that
|
||||
ended at the end of the term, the problem remained. I was too much of a workaholic.
|
||||
</p>
|
||||
<p>
|
||||
Ultimately, the break-up that I've just had has left me intent on not
|
||||
spiralling downward. My first was rough on me, and I was not in a good place
|
||||
for about a week. This time, we both kind of saw this coming. Perhaps that
|
||||
makes it easier, but it still sucks for both of us. And, why squander the
|
||||
motivation I have to better my self care, my habits, and thus myself? I'm
|
||||
about to go into my first year of university. Normally, I'm either scared of
|
||||
my inevitable death, or some past regret of my life that chooses to grip me.
|
||||
But now, I'm also anxious for the life ahead.
|
||||
Ultimately, the break-up that I've just had has left me intent on not spiralling
|
||||
downward. My first was rough on me, and I was not in a good place for about a week.
|
||||
This time, we both kind of saw this coming. Perhaps that makes it easier, but it
|
||||
still sucks for both of us. And, why squander the motivation I have to better my
|
||||
self care, my habits, and thus myself? I'm about to go into my first year of
|
||||
university. Normally, I'm either scared of my inevitable death, or some past regret
|
||||
of my life that chooses to grip me. But now, I'm also anxious for the life ahead.
|
||||
</p>
|
||||
<p>
|
||||
So what does this all mean in terms of dating for me? Well, it leaves me
|
||||
considering the idea that some people are meant to walk through life alone.
|
||||
I'm at a point in my life where dating is probably not a great idea for me.
|
||||
I struggle enough with burnout spells that adding heartbreak on top would
|
||||
likely kill my education.
|
||||
So what does this all mean in terms of dating for me? Well, it leaves me considering
|
||||
the idea that some people are meant to walk through life alone. I'm at a point in my
|
||||
life where dating is probably not a great idea for me. I struggle enough with
|
||||
burnout spells that adding heartbreak on top would likely kill my education.
|
||||
</p>
|
||||
<p>
|
||||
On top of that are my concerns with online dating. Aside from data privacy,
|
||||
breaches, and otherwise disgusting people who can't leave these projects to
|
||||
be a good part of the internet, are the risks with being trans. There are
|
||||
far too many stories, even if most of them are probably from the US, of
|
||||
people 'trying it out' with a trans person. Ignoring how slimy and
|
||||
disgusting you have to be to even do that without considering the effects of
|
||||
those actions, the point of dating is for love (and to meet societal
|
||||
expectations while seeking a dual income for the household, among other
|
||||
things).
|
||||
breaches, and otherwise disgusting people who can't leave these projects to be a
|
||||
good part of the internet, are the risks with being trans. There are far too many
|
||||
stories, even if most of them are probably from the US, of people 'trying it out'
|
||||
with a trans person. Ignoring how slimy and disgusting you have to be to even do
|
||||
that without considering the effects of those actions, the point of dating is for
|
||||
love (and to meet societal expectations while seeking a dual income for the
|
||||
household, among other things).
|
||||
</p>
|
||||
<p>
|
||||
To make it extra clear, love != sex. The point at the end of it isn't so you
|
||||
can run home and shag every night--this isn't some 1960s Bond film.
|
||||
To make it extra clear, love != sex. The point at the end of it isn't so you can run
|
||||
home and shag every night--this isn't some 1960s Bond film.
|
||||
</p>
|
||||
<p>
|
||||
If you want to have kids, some trans people who are on HRT, may still be
|
||||
able to if they've gone to the really awkward and expensive effort of
|
||||
cryopreservation.
|
||||
If you want to have kids, some trans people who are on HRT, may still be able to if
|
||||
they've gone to the really awkward and expensive effort of cryopreservation.
|
||||
</p>
|
||||
<p>
|
||||
Anyway, being someone who was a 'test run' is crushing. I certainly don't
|
||||
want to run that risk, and other people are in the same boat.
|
||||
Anyway, being someone who was a 'test run' is crushing. I certainly don't want to
|
||||
run that risk, and other people are in the same boat.
|
||||
</p>
|
||||
<p>Given all this, I'll probably tough it out on my own for a while.</p>
|
||||
</div>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<include src="includes/tailer.html" />
|
||||
<ul class="pane spacer">
|
||||
<include src="./includes/blog_recent_posts.html" />
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
@@ -11,19 +11,17 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Blog - Unsure U.</h5>
|
||||
<p class="title">You are here:</p>
|
||||
<p class="page">Blog - Unsure U.</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane blog">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">Unsure U.</h1>
|
||||
<p class="date">Posted: 09 August, 2025</p>
|
||||
<p class="date">Last Edited: 09 August, 2025</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<img
|
||||
alt="A Coaster which reads 'focus on the good,' placed in front of a window."
|
||||
src="/img/blog/posts/1_unsure_u.webp"
|
||||
@@ -31,91 +29,83 @@
|
||||
<p>The little things, it's the little things that count.</p>
|
||||
<p>Or so I'm told.</p>
|
||||
<p>
|
||||
All around me, all my friends are super excited for university, or college,
|
||||
or appreticeship, or--post-secondary in general. They're excited about
|
||||
meeting new [like-minded] people, clubs, increased autonomy, the future
|
||||
promises of post-secondary education, and of course, parties (within
|
||||
reason). They look to the hopeful side of things.
|
||||
All around me, all my friends are super excited for university, or college, or
|
||||
appreticeship, or--post-secondary in general. They're excited about meeting new
|
||||
[like-minded] people, clubs, increased autonomy, the future promises of
|
||||
post-secondary education, and of course, parties (within reason). They look to the
|
||||
hopeful side of things.
|
||||
</p>
|
||||
<p>
|
||||
Now, I have this set of coasters which I got a year or so ago at a local
|
||||
market. They're meant to keep me in a more positive headspace, but half the
|
||||
time they're covered up by drinks... Anyway, one of them advises me to
|
||||
"focus on the good".
|
||||
Now, I have this set of coasters which I got a year or so ago at a local market.
|
||||
They're meant to keep me in a more positive headspace, but half the time they're
|
||||
covered up by drinks... Anyway, one of them advises me to "focus on the good".
|
||||
</p>
|
||||
<p>
|
||||
And boy, do I try hard to do that. But without a job, I'm left to my
|
||||
hyperfixation and burnout routine. If I'm lucky, I just start going a bit
|
||||
stir-crazy from sitting in my room, doing things that I consider productive,
|
||||
with only the occasional break for the loo and another cup of bean juice.
|
||||
Then, it's back to work, dawn until dinner, then maybe I'll play a game
|
||||
briefly, but not until working some more.
|
||||
And boy, do I try hard to do that. But without a job, I'm left to my hyperfixation
|
||||
and burnout routine. If I'm lucky, I just start going a bit stir-crazy from sitting
|
||||
in my room, doing things that I consider productive, with only the occasional break
|
||||
for the loo and another cup of bean juice. Then, it's back to work, dawn until
|
||||
dinner, then maybe I'll play a game briefly, but not until working some more.
|
||||
</p>
|
||||
<p>
|
||||
There are of course plenty of things that I'd like to blame for why I'm like
|
||||
this, but that's not the purpose of this post, nor more than speculation.
|
||||
There are of course plenty of things that I'd like to blame for why I'm like this,
|
||||
but that's not the purpose of this post, nor more than speculation.
|
||||
</p>
|
||||
<p>
|
||||
Anyway, I'm currently writing this in a cheerful little café after an
|
||||
appointment so that I take a break to process, and perhaps understand, some
|
||||
emotions, while taking in this little thing. So, back to university, since
|
||||
that's my academic trajectory.
|
||||
Anyway, I'm currently writing this in a cheerful little café after an appointment so
|
||||
that I take a break to process, and perhaps understand, some emotions, while taking
|
||||
in this little thing. So, back to university, since that's my academic trajectory.
|
||||
</p>
|
||||
<p>I'm terrified.</p>
|
||||
<p>
|
||||
I've struggled a lot to plan and get course selections which will allow me
|
||||
to fulfill my degree, only to fail rather badly. Seriously, I will probably
|
||||
do poorly in philosophy, and it doesn't help me with just about any of my
|
||||
requirements. On top of that, I'm worried about the teachers that I'll get.
|
||||
It was bad enough in grade 5, and I'd had a few years to anticipate that
|
||||
teacher. In university, I have no knowledge going into first year. The best
|
||||
resource I have is something like RateMyProf which honestly kinda sucks and
|
||||
probably makes things worse unless there's a resoundingly poor overall
|
||||
rating.
|
||||
I've struggled a lot to plan and get course selections which will allow me to
|
||||
fulfill my degree, only to fail rather badly. Seriously, I will probably do poorly
|
||||
in philosophy, and it doesn't help me with just about any of my requirements. On top
|
||||
of that, I'm worried about the teachers that I'll get. It was bad enough in grade 5,
|
||||
and I'd had a few years to anticipate that teacher. In university, I have no
|
||||
knowledge going into first year. The best resource I have is something like
|
||||
RateMyProf which honestly kinda sucks and probably makes things worse unless there's
|
||||
a resoundingly poor overall rating.
|
||||
</p>
|
||||
<p>
|
||||
That's not to say that all of my course selections are bad; I still have the
|
||||
ones within the interest of my degree and some in my hobbies, that also
|
||||
contribute directly to the degree. One friend and I were also able to get
|
||||
some courses together since I had to take them, and they wanted to. This may
|
||||
sound silly given the struggles with course availabilities, but I promise
|
||||
these decisions were made following a lot of logical consideration of both
|
||||
of our degrees' completion.
|
||||
That's not to say that all of my course selections are bad; I still have the ones
|
||||
within the interest of my degree and some in my hobbies, that also contribute
|
||||
directly to the degree. One friend and I were also able to get some courses together
|
||||
since I had to take them, and they wanted to. This may sound silly given the
|
||||
struggles with course availabilities, but I promise these decisions were made
|
||||
following a lot of logical consideration of both of our degrees' completion.
|
||||
</p>
|
||||
<p>
|
||||
Another concern is the fact that I know so little, and I get my orientation
|
||||
the day before I need to use it... that's not a lot of time to figure out if
|
||||
you're missing something. That then contributes to my concerns about being
|
||||
able to move around campus fast enough to not miss classes, on top of the
|
||||
fatigue that I'll have from waking up at 5h30.
|
||||
Another concern is the fact that I know so little, and I get my orientation the day
|
||||
before I need to use it... that's not a lot of time to figure out if you're missing
|
||||
something. That then contributes to my concerns about being able to move around
|
||||
campus fast enough to not miss classes, on top of the fatigue that I'll have from
|
||||
waking up at 5h30.
|
||||
</p>
|
||||
<p>
|
||||
Finally, because otherwise I could keep going on, are my concerns regarding
|
||||
the ever-shoved-down-our-gullets AIs. I write oddly. This blog, my poetry,
|
||||
and all of my past essays and analyses. My teachers can attest, especially
|
||||
my grade 9 & 12 English teacher who had to consult two other teachers and
|
||||
myself to fully understand
|
||||
Finally, because otherwise I could keep going on, are my concerns regarding the
|
||||
ever-shoved-down-our-gullets AIs. I write oddly. This blog, my poetry, and all of my
|
||||
past essays and analyses. My teachers can attest, especially my grade 9 & 12 English
|
||||
teacher who had to consult two other teachers and myself to fully understand
|
||||
<a href="https://gitea.cutieguwu.ca/cutieguwu/falling_down_building_up"
|
||||
>Building Up</a
|
||||
>, a poem I wrote with the rust programming language for symbology.
|
||||
</p>
|
||||
<p>
|
||||
The concerns about having to prove that I don't use AI were bad enough in
|
||||
High School. Universities have far more strict policies, which likely
|
||||
utilize a guilty until proven innocent model.
|
||||
The concerns about having to prove that I don't use AI were bad enough in High
|
||||
School. Universities have far more strict policies, which likely utilize a guilty
|
||||
until proven innocent model.
|
||||
</p>
|
||||
<p>
|
||||
At the end of the day, I'm trying to take in the little things and not worry
|
||||
too much.
|
||||
At the end of the day, I'm trying to take in the little things and not worry too
|
||||
much.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<include src="includes/tailer.html" />
|
||||
<ul class="pane spacer">
|
||||
<include src="./includes/blog_recent_posts.html" />
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
@@ -11,152 +11,138 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Blog - Buyer's Anxiety</h5>
|
||||
<p class="title">You are here:</p>
|
||||
<p class="page">Blog - Buyer's Anxiety</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane blog">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">Buyer's Anxiety</h1>
|
||||
<p class="date">Posted: 11 September, 2025</p>
|
||||
<p class="date">Last Edited: 14 September, 2025</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<img
|
||||
alt="Katie's old laptop, seated upon her clean desk, struggling on. Although, you can't tell how broken the hinge is or the parts that her kitten chewed. I swear, it's in worse condition than it looks."
|
||||
src="/img/blog/posts/2_buyers_anxiety.webp"
|
||||
/>
|
||||
<p>
|
||||
I can't say that I'm thrilled that my blog posts have only been when I'm
|
||||
down or struggling with something. But, here we are: the third one.
|
||||
I can't say that I'm thrilled that my blog posts have only been when I'm down or
|
||||
struggling with something. But, here we are: the third one.
|
||||
</p>
|
||||
<p>
|
||||
I'm stuck with an internal conflict. It feels like remorse, but before the
|
||||
poor choice has happened, as opposed to fear? But it is fear.
|
||||
</p>
|
||||
<p>
|
||||
It's no secret that I love my Framework 16, the company's values, and Linux.
|
||||
I'm stuck with an internal conflict. It feels like remorse, but before the poor
|
||||
choice has happened, as opposed to fear? But it is fear.
|
||||
</p>
|
||||
<p>It's no secret that I love my Framework 16, the company's values, and Linux.</p>
|
||||
<p>I also want to support my friends whenever and however I can.</p>
|
||||
<p>But what if those two things clash?... Spoiler: they have.</p>
|
||||
<p>
|
||||
To preface this whole thing, my friend is looking for a new laptop. She
|
||||
bought her old one because it was in her price range. Four years later,
|
||||
it's... struggling. The enshittification of the tech industry took hold, one
|
||||
hinge died a couple years ago, the whole body is weak, the system is
|
||||
relatively underpowered for her needs, and it's not going to survive
|
||||
university in any good condition, if even that. As a two-time published
|
||||
author, she needs to be able to type and open this system a lot. That means
|
||||
a good keyboard and good hinges. She also wants to play Minecraft, Roblox,
|
||||
and probably Uno on it too. Thus, GPU demands aren't high and she'll want at
|
||||
least a 15" display. She treats her devices well and cares for their
|
||||
longevity.
|
||||
To preface this whole thing, my friend is looking for a new laptop. She bought her
|
||||
old one because it was in her price range. Four years later, it's... struggling. The
|
||||
enshittification of the tech industry took hold, one hinge died a couple years ago,
|
||||
the whole body is weak, the system is relatively underpowered for her needs, and
|
||||
it's not going to survive university in any good condition, if even that. As a
|
||||
two-time published author, she needs to be able to type and open this system a lot.
|
||||
That means a good keyboard and good hinges. She also wants to play Minecraft,
|
||||
Roblox, and probably Uno on it too. Thus, GPU demands aren't high and she'll want at
|
||||
least a 15" display. She treats her devices well and cares for their longevity.
|
||||
</p>
|
||||
<p>
|
||||
To me, this sounds like a great place for a Framework laptop. Expensive
|
||||
upfront, sure. But the 16" model has an iGPU that runs Minecraft and Roblox
|
||||
just fine, has a super easy to replace input module system to replace the
|
||||
keyboard, good hinges, a CPU that's total overkill (even for the stuff I do;
|
||||
I wanted a six-core), and it wears like a tank. A guy at our high school
|
||||
proved that unintentionally. I have the dent in the lid and the pristene
|
||||
display to prove it. It also has some added benefits, like the hardware
|
||||
switches for the camera and mic, overall modular design, repairability, and
|
||||
the upgrade paths, which save her from spending more money to buy a full
|
||||
tower or another laptop. Framework recently announced the new generation
|
||||
boards for the FW 16, and knocked down the price of the 7040 series boards
|
||||
slightly, but that's a nice-to-have. Even if you're a non-techie, you won't
|
||||
need to get into the hardware unless you're building it or repairing
|
||||
something, and Framework's guides have only gotten better. Even when trying
|
||||
to replace the liquid metal, or solve an issue that I thought was a loose
|
||||
display cable (it was a linux software issue of some kind), the guides got
|
||||
me through the wholly unknown to me.
|
||||
To me, this sounds like a great place for a Framework laptop. Expensive upfront,
|
||||
sure. But the 16" model has an iGPU that runs Minecraft and Roblox just fine, has a
|
||||
super easy to replace input module system to replace the keyboard, good hinges, a
|
||||
CPU that's total overkill (even for the stuff I do; I wanted a six-core), and it
|
||||
wears like a tank. A guy at our high school proved that unintentionally. I have the
|
||||
dent in the lid and the pristene display to prove it. It also has some added
|
||||
benefits, like the hardware switches for the camera and mic, overall modular design,
|
||||
repairability, and the upgrade paths, which save her from spending more money to buy
|
||||
a full tower or another laptop. Framework recently announced the new generation
|
||||
boards for the FW 16, and knocked down the price of the 7040 series boards slightly,
|
||||
but that's a nice-to-have. Even if you're a non-techie, you won't need to get into
|
||||
the hardware unless you're building it or repairing something, and Framework's
|
||||
guides have only gotten better. Even when trying to replace the liquid metal, or
|
||||
solve an issue that I thought was a loose display cable (it was a linux software
|
||||
issue of some kind), the guides got me through the wholly unknown to me.
|
||||
</p>
|
||||
<p>This makes it sound perfect.</p>
|
||||
<p>
|
||||
The downside? Well, I feel like I'm just succumbing to brand loyalty. A
|
||||
total shill. The whole above paragraph sounds like a sales pitch without the
|
||||
company's values explicitly spouted. The one thing I envy of Apple fans, is
|
||||
their ability to convince others that Apple is great and feel no conflict.
|
||||
The downside? Well, I feel like I'm just succumbing to brand loyalty. A total shill.
|
||||
The whole above paragraph sounds like a sales pitch without the company's values
|
||||
explicitly spouted. The one thing I envy of Apple fans, is their ability to convince
|
||||
others that Apple is great and feel no conflict.
|
||||
</p>
|
||||
<p>
|
||||
Is this what a parent feels like when buying for a child? Probably not?
|
||||
After all, the child likely isn't knowledgeable upon the context, or doesn't
|
||||
care enough to question the rationale leading to the purchase. But here, I'm
|
||||
buying for a friend. Someone smart (Before someone starts, I'm not saying
|
||||
that a child can't be smart or that the rest of my friends are dumb). Sure,
|
||||
she's not a techie the way I am, but she is more than capable of questioning
|
||||
things for herself. What's the price? What's the rationale? Are you just
|
||||
pushing me into an ecosystem that you love? Are you buying my friendship?
|
||||
...and so on down the rabbit hole my train of thought hops.
|
||||
Is this what a parent feels like when buying for a child? Probably not? After all,
|
||||
the child likely isn't knowledgeable upon the context, or doesn't care enough to
|
||||
question the rationale leading to the purchase. But here, I'm buying for a friend.
|
||||
Someone smart (Before someone starts, I'm not saying that a child can't be smart or
|
||||
that the rest of my friends are dumb). Sure, she's not a techie the way I am, but
|
||||
she is more than capable of questioning things for herself. What's the price? What's
|
||||
the rationale? Are you just pushing me into an ecosystem that you love? Are you
|
||||
buying my friendship? ...and so on down the rabbit hole my train of thought hops.
|
||||
</p>
|
||||
<p>
|
||||
I've already convinced two friends to try Linux, but their hardware and
|
||||
personal needs caused too many problems. I also convinced a family member of
|
||||
mine, who was an Apple fan, to shift to a Framework 13 running Linux.
|
||||
I've already convinced two friends to try Linux, but their hardware and personal
|
||||
needs caused too many problems. I also convinced a family member of mine, who was an
|
||||
Apple fan, to shift to a Framework 13 running Linux.
|
||||
</p>
|
||||
<p>
|
||||
I feel like a manipulator. I left my proud, cheerful "switch to Linux"
|
||||
chanting phase a while ago. But did I really? Am I so moral-driven that I'm
|
||||
blind? Is this really a selfless gift to a friend? Is this because I'm
|
||||
afraid of losing my friends? Or do I subconciously hold an agenda to migrate
|
||||
everyone to Framework and Linux? As stupid as it sounds, I mean this
|
||||
literally.
|
||||
I feel like a manipulator. I left my proud, cheerful "switch to Linux" chanting
|
||||
phase a while ago. But did I really? Am I so moral-driven that I'm blind? Is this
|
||||
really a selfless gift to a friend? Is this because I'm afraid of losing my friends?
|
||||
Or do I subconciously hold an agenda to migrate everyone to Framework and Linux? As
|
||||
stupid as it sounds, I mean this literally.
|
||||
</p>
|
||||
<p>
|
||||
Even if you consider the idea that "only a good person would think like
|
||||
that, because a bad person would know it," it doesn't help.
|
||||
Even if you consider the idea that "only a good person would think like that,
|
||||
because a bad person would know it," it doesn't help.
|
||||
</p>
|
||||
<p>
|
||||
To make things worse again, I've long spouted buying something with the
|
||||
intent to run it long term, instead of buying a bunch of cheap somethings
|
||||
that die super fast. My previous laptop, which I got from my father, ran for
|
||||
nearly 12 years before the display started dying; now it's a server. So
|
||||
imagine a teenager with that kind of a background in keeping a computer
|
||||
running for so long, sees a 3-year old laptop already in a far worse
|
||||
condition than their 10/11-year old one (with comparable specs). I was that
|
||||
teenager, and I started a "joke" once I got my new laptop, about it's easily
|
||||
replaceable hinges... and so on. Of course, I was prideful in a sense, and I
|
||||
kept that "joke" going too long... So how will it look when the laptop who's
|
||||
To make things worse again, I've long spouted buying something with the intent to
|
||||
run it long term, instead of buying a bunch of cheap somethings that die super fast.
|
||||
My previous laptop, which I got from my father, ran for nearly 12 years before the
|
||||
display started dying; now it's a server. So imagine a teenager with that kind of a
|
||||
background in keeping a computer running for so long, sees a 3-year old laptop
|
||||
already in a far worse condition than their 10/11-year old one (with comparable
|
||||
specs). I was that teenager, and I started a "joke" once I got my new laptop, about
|
||||
it's easily replaceable hinges... and so on. Of course, I was prideful in a sense,
|
||||
and I kept that "joke" going too long... So how will it look when the laptop who's
|
||||
death I foretold gets replaced by the exact laptop that it was compared to?
|
||||
(Assuming that I didn't start the "joke" about the purchase decisions, age,
|
||||
and condition of my previous one.)
|
||||
(Assuming that I didn't start the "joke" about the purchase decisions, age, and
|
||||
condition of my previous one.)
|
||||
</p>
|
||||
<p>
|
||||
The only consolation I get for now, is that I have a few days to see how
|
||||
Katie likes the FW 13, which is loaned off the aforementioned family member
|
||||
of mine. The trouble, because of course there's more, is that I need to
|
||||
discern between her impressions of the computer, and the OS, since it's
|
||||
Manjaro Linux. Because of that, my plan is to dual boot the gifted system.
|
||||
That way she can finish her computer science stuff in the same environment,
|
||||
and then decide whether or not to scrap the Linux partition.
|
||||
The only consolation I get for now, is that I have a few days to see how Katie likes
|
||||
the FW 13, which is loaned off the aforementioned family member of mine. The
|
||||
trouble, because of course there's more, is that I need to discern between her
|
||||
impressions of the computer, and the OS, since it's Manjaro Linux. Because of that,
|
||||
my plan is to dual boot the gifted system. That way she can finish her computer
|
||||
science stuff in the same environment, and then decide whether or not to scrap the
|
||||
Linux partition.
|
||||
</p>
|
||||
<p>
|
||||
Of course, as always, my troubles start just after having had a counselling
|
||||
session. So, I'm left to deal with this myself for a few weeks.
|
||||
Of course, as always, my troubles start just after having had a counselling session.
|
||||
So, I'm left to deal with this myself for a few weeks.
|
||||
</p>
|
||||
<p>Sometimes I wonder why things can't just be simple for me in life...</p>
|
||||
<hr />
|
||||
<p>
|
||||
Now, as a note, I'm not saying that Framework is perfect. They've had, and
|
||||
continue to have, their issues. The difference is that they actually listen
|
||||
and work on them. The guides, the incorrect QR codes, the support system,
|
||||
FW16 keyboard deflection, late UEFI updates, the FW16 keyboard wake-up issue
|
||||
with the screen closed, the first-gen display expansion cards power draw
|
||||
issue, and so on. And sure, they can be slow. But they're small, and they
|
||||
try to do it right the first time. They release the software and hardware
|
||||
patches to affected systems, and listen on to further critique in the
|
||||
interest of improving.
|
||||
Now, as a note, I'm not saying that Framework is perfect. They've had, and continue
|
||||
to have, their issues. The difference is that they actually listen and work on them.
|
||||
The guides, the incorrect QR codes, the support system, FW16 keyboard deflection,
|
||||
late UEFI updates, the FW16 keyboard wake-up issue with the screen closed, the
|
||||
first-gen display expansion cards power draw issue, and so on. And sure, they can be
|
||||
slow. But they're small, and they try to do it right the first time. They release
|
||||
the software and hardware patches to affected systems, and listen on to further
|
||||
critique in the interest of improving.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<include src="includes/tailer.html" />
|
||||
<ul class="pane spacer">
|
||||
<include src="./includes/blog_recent_posts.html" />
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Blog - Closing Chapters</h5>
|
||||
<p class="title">You are here:</p>
|
||||
<p class="page">Blog - Closing Chapters</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
@@ -131,12 +131,12 @@
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<include src="includes/tailer.html" />
|
||||
<ul class="pane spacer">
|
||||
<include src="./includes/blog_recent_posts.html" />
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
@@ -11,43 +11,41 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Blog - Pointless Plans</h5>
|
||||
<p class="title">You are here:</p>
|
||||
<p class="page">Blog - Pointless Plans</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane blog">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">Pointless Plans</h1>
|
||||
<p class="date">Posted: 18 December, 2025</p>
|
||||
<p class="date">Last Edited: 18 December, 2025</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p>
|
||||
So... remember my first post where I said that "a meaningless 'Welcome to my
|
||||
Blog' filled with my hopes and aspirations that inevitably would never come
|
||||
to light was something I knew I didn't want." Well...
|
||||
So... remember my first post where I said that "a meaningless 'Welcome to my Blog'
|
||||
filled with my hopes and aspirations that inevitably would never come to light was
|
||||
something I knew I didn't want." Well...
|
||||
</p>
|
||||
<p>
|
||||
I've been stuck in a doom and gloom phase here, and with me hopefully
|
||||
concluding my counselling soon, I definitely don't want to dwell in it.
|
||||
I've been stuck in a doom and gloom phase here, and with me hopefully concluding my
|
||||
counselling soon, I definitely don't want to dwell in it.
|
||||
</p>
|
||||
<p>
|
||||
As a result, I'm making a little list of things that I'd love to write
|
||||
about, and that you can hopefully expect to read about sometime soon!
|
||||
As a result, I'm making a little list of things that I'd love to write about, and
|
||||
that you can hopefully expect to read about sometime soon!
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>CyberSci</p>
|
||||
<ul>
|
||||
<li>
|
||||
I had the fortune to participate at the Regional level,
|
||||
representing Carleton University. (Spoiler: We won, barely)
|
||||
I had the fortune to participate at the Regional level, representing
|
||||
Carleton University. (Spoiler: We won, barely)
|
||||
</li>
|
||||
<li>
|
||||
This will probably have a follow up once Nationals happens in
|
||||
the summer.
|
||||
This will probably have a follow up once Nationals happens in the
|
||||
summer.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -56,8 +54,8 @@
|
||||
<ul>
|
||||
<li>
|
||||
I've written some good things and some really bad things for the
|
||||
Creative Writing course this term. Obviously, I'll only publish
|
||||
works that I believe are well polished.
|
||||
Creative Writing course this term. Obviously, I'll only publish works
|
||||
that I believe are well polished.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -65,17 +63,15 @@
|
||||
<p>Poetry</p>
|
||||
<ul>
|
||||
<li>
|
||||
I want to get back to writing poetry, but for now I have some
|
||||
things that are still unpublished.
|
||||
I want to get back to writing poetry, but for now I have some things
|
||||
that are still unpublished.
|
||||
</li>
|
||||
<li>
|
||||
They're nothing like Building Up, so if you can't read [bad]
|
||||
Rust, don't worry. They're also far less whacky than Falling
|
||||
Down.
|
||||
They're nothing like Building Up, so if you can't read [bad] Rust, don't
|
||||
worry. They're also far less whacky than Falling Down.
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://gitea.cutieguwu.ca/cutieguwu/falling_down_building_up"
|
||||
<a href="https://gitea.cutieguwu.ca/cutieguwu/falling_down_building_up"
|
||||
>Falling Down & Building Up</a
|
||||
>
|
||||
</li>
|
||||
@@ -84,66 +80,60 @@
|
||||
</ul>
|
||||
<p>
|
||||
Also, I've come to realise that I have a thing for memoirs. I never actually
|
||||
realised it because I usually read book series, but I now have four memoirs
|
||||
in my library.
|
||||
realised it because I usually read book series, but I now have four memoirs in my
|
||||
library.
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
<em>Fatty Legs</em> by Christy Jordan-Fenton and Margaret Pokiak-Fenton
|
||||
</li>
|
||||
<li><em>Fatty Legs</em> by Christy Jordan-Fenton and Margaret Pokiak-Fenton</li>
|
||||
<li>its sequel, <em>A Stranger At Home</em></li>
|
||||
<li><em>The Glass Castle</em> by Jeannette Walls</li>
|
||||
<li><em>Tomboy Survival Guide</em> by Ivan Coyote</li>
|
||||
</ol>
|
||||
<p>
|
||||
So, after a creative non-fiction flash writing assignment just didn't work
|
||||
out well, even after reworking it heavily for the exam, I decided that I
|
||||
should actually take it in the direction of a full memoir, rather than the
|
||||
poetic form that it currently has.
|
||||
So, after a creative non-fiction flash writing assignment just didn't work out well,
|
||||
even after reworking it heavily for the exam, I decided that I should actually take
|
||||
it in the direction of a full memoir, rather than the poetic form that it currently
|
||||
has.
|
||||
</p>
|
||||
<p>
|
||||
The problem is that I mean, a <em>full</em> memoir. And the problem with
|
||||
that is that memory is a complex thing. Many important and relevant things
|
||||
for a memoir are episodic, iconic, flashbulb memories, which can be
|
||||
difficult to just retrieve on the spot. (Yes, I referenced my textbook, no I
|
||||
am not a credible source for interpreting this information.)
|
||||
The problem is that I mean, a <em>full</em> memoir. And the problem with that is
|
||||
that memory is a complex thing. Many important and relevant things for a memoir are
|
||||
episodic, iconic, flashbulb memories, which can be difficult to just retrieve on the
|
||||
spot. (Yes, I referenced my textbook, no I am not a credible source for interpreting
|
||||
this information.)
|
||||
</p>
|
||||
<p>
|
||||
A lot of the time, my writing, particularly my poetry, comes from what can
|
||||
best be described as state-dependent memory. If I'm lucky, some random
|
||||
stimulus or set of stimuli will trigger a recollection of these memories,
|
||||
and give me an image from which to write. The problem is that this also
|
||||
means I cannot write sequentially.
|
||||
A lot of the time, my writing, particularly my poetry, comes from what can best be
|
||||
described as state-dependent memory. If I'm lucky, some random stimulus or set of
|
||||
stimuli will trigger a recollection of these memories, and give me an image from
|
||||
which to write. The problem is that this also means I cannot write sequentially.
|
||||
</p>
|
||||
<p>
|
||||
And just to make things even more difficult, memory is unreliable and easily
|
||||
influenced. So I need to review and consider how much I trust my own
|
||||
recollection of events, and work to mitigate my biases whenever possible by
|
||||
asking someone else to recount the event and compare details.
|
||||
influenced. So I need to review and consider how much I trust my own recollection of
|
||||
events, and work to mitigate my biases whenever possible by asking someone else to
|
||||
recount the event and compare details.
|
||||
</p>
|
||||
<p>
|
||||
So, in the background, I'm going to start working on that. Almost like
|
||||
forgetting to write in a diary for a week, then trying to catch up while you
|
||||
still remember.
|
||||
So, in the background, I'm going to start working on that. Almost like forgetting to
|
||||
write in a diary for a week, then trying to catch up while you still remember.
|
||||
</p>
|
||||
<p>
|
||||
Hopefully this will have the added benefit of holding back some of the
|
||||
future doom and gloom from the blog.
|
||||
Hopefully this will have the added benefit of holding back some of the future doom
|
||||
and gloom from the blog.
|
||||
</p>
|
||||
<p>
|
||||
And finally, I'm going to try to finish up my blog generator,
|
||||
<a href="https://gitea.cutieguwu.ca/cutieguwu/cutinews">cutinews</a>. It's
|
||||
about time I got back and actually finished a programming project. Chances
|
||||
are that I'll be live on Twitch (yes, eww, ik) working on the code.
|
||||
<a href="https://gitea.cutieguwu.ca/cutieguwu/cutinews">cutinews</a>. It's about
|
||||
time I got back and actually finished a programming project. Chances are that I'll
|
||||
be live on Twitch (yes, eww, ik) working on the code.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<include src="includes/tailer.html" />
|
||||
<ul class="pane spacer">
|
||||
<include src="./includes/blog_recent_posts.html" />
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
@@ -11,68 +11,64 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Blog - Optical Recovery</h5>
|
||||
<p class="title">You are here:</p>
|
||||
<p class="page">Blog - Optical Recovery</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane blog">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">Optical Recovery</h1>
|
||||
<p class="date">Posted: 10 January, 2026</p>
|
||||
<p class="date">Last Edited: 10 January, 2026</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p>
|
||||
Data preservation is increasingly threatened in the digital age. That almost
|
||||
sounds backwards, until you dig into modern architecture.
|
||||
Data preservation is increasingly threatened in the digital age. That almost sounds
|
||||
backwards, until you dig into modern architecture.
|
||||
</p>
|
||||
<p>
|
||||
Once upon a time, the greatest threat to information preservation was nature
|
||||
and memory retrieval errors. The digital age introduced denser,
|
||||
longer-lasting forms of data storage. As we progressed from punch card, to
|
||||
tape, to 8 inch floppies, to flash and optical, and ever denser forms of
|
||||
all, we got better at preventing data loss. Quality control, error
|
||||
correction techniques bundled with file systems, and redundancy (parity) in
|
||||
storage virtualizations, like RAID.
|
||||
Once upon a time, the greatest threat to information preservation was nature and
|
||||
memory retrieval errors. The digital age introduced denser, longer-lasting forms of
|
||||
data storage. As we progressed from punch card, to tape, to 8 inch floppies, to
|
||||
flash and optical, and ever denser forms of all, we got better at preventing data
|
||||
loss. Quality control, error correction techniques bundled with file systems, and
|
||||
redundancy (parity) in storage virtualizations, like RAID.
|
||||
</p>
|
||||
<p>
|
||||
But in the modern age, the Enshittocene<sup>1</sup>, some would call it,
|
||||
consumers are ever strongarmed into corporate-controlled cloud storage. With
|
||||
that, comes a lack of ownership.
|
||||
But in the modern age, the Enshittocene<sup>1</sup>, some would call it, consumers
|
||||
are ever strongarmed into corporate-controlled cloud storage. With that, comes a
|
||||
lack of ownership.
|
||||
</p>
|
||||
<p>
|
||||
Now, normally that's the lead-up to advocating for homelabbing, FOSS, and
|
||||
de-Googling. However, in this instance, it's the lead up to optical media
|
||||
preservation. Why? Because optical media remains a great storage medium
|
||||
today. Even if you don't believe that, many old games in their original
|
||||
form, or other preserved media, are still only available on discs.
|
||||
preservation. Why? Because optical media remains a great storage medium today. Even
|
||||
if you don't believe that, many old games in their original form, or other preserved
|
||||
media, are still only available on discs.
|
||||
</p>
|
||||
<p>
|
||||
However, discs are subject to natural degradation through scratches,
|
||||
delamination, and disc rot. Especially as the quality control on these discs
|
||||
dwindles. Thus, there must be additional work put into caring for this
|
||||
medium.
|
||||
However, discs are subject to natural degradation through scratches, delamination,
|
||||
and disc rot. Especially as the quality control on these discs dwindles. Thus, there
|
||||
must be additional work put into caring for this medium.
|
||||
</p>
|
||||
<p>
|
||||
RAID arrays are great as alternatives too, as they already have parity,
|
||||
ddrescue, and error-correcting filesystems available. The problem is that
|
||||
the arrays themselves are not. At least not right now. Once again, partly
|
||||
thanks to AI datacentres demanding obscene amounts of resources, the cost of
|
||||
hard drives has gone up significantly since the pandemic.
|
||||
RAID arrays are great as alternatives too, as they already have parity, ddrescue,
|
||||
and error-correcting filesystems available. The problem is that the arrays
|
||||
themselves are not. At least not right now. Once again, partly thanks to AI
|
||||
datacentres demanding obscene amounts of resources, the cost of hard drives has gone
|
||||
up significantly since the pandemic.
|
||||
</p>
|
||||
<p>
|
||||
With that, we segue into my latest project, temporarily named
|
||||
<em>Kramer</em>. I know I did some research to come up with that name, but I
|
||||
genuinely don't recall who it was in reference to. In fact, having tried
|
||||
tracking down who it's in reference to, I may have messed up when I picked
|
||||
the name. My best guess is that it's in reference to Kane Kramer, but he
|
||||
helped design the Digital Audio Player, not optical media.
|
||||
genuinely don't recall who it was in reference to. In fact, having tried tracking
|
||||
down who it's in reference to, I may have messed up when I picked the name. My best
|
||||
guess is that it's in reference to Kane Kramer, but he helped design the Digital
|
||||
Audio Player, not optical media.
|
||||
</p>
|
||||
<p>
|
||||
Regardless, it's always been a working name while I figure out if I can
|
||||
finish the project.
|
||||
Regardless, it's always been a working name while I figure out if I can finish the
|
||||
project.
|
||||
</p>
|
||||
<p>So, what is Kramer?</p>
|
||||
<p>
|
||||
@@ -80,65 +76,58 @@
|
||||
ddrescue<sup>2</sup>, but optimized for recovering data from optical media.
|
||||
</p>
|
||||
<p>
|
||||
There are two main problems I've experienced while trying to use ddrescue
|
||||
with optical drives, and both stem from the drive's firmware. Now, I don't
|
||||
know if me using the <code>--reset-slow</code> flag is contributing to these
|
||||
issues or not, but I experience more problems without it.
|
||||
There are two main problems I've experienced while trying to use ddrescue with
|
||||
optical drives, and both stem from the drive's firmware. Now, I don't know if me
|
||||
using the <code>--reset-slow</code> flag is contributing to these issues or not, but
|
||||
I experience more problems without it.
|
||||
</p>
|
||||
<p>
|
||||
If you've ever tried working with optical media in Linux, you may be
|
||||
familiar with <em>The Sleep Bug</em>. Normally, this is when a drive's
|
||||
firmware decides to sleep after two minutes, and never wakes. In the case of
|
||||
ddrescue, I've noticed that the drive often sleeps after read errors. When
|
||||
this happens, I can't kill ddrescue, and it just hangs. Even if I forcefully
|
||||
disconnect the drive, it just hangs, awaiting a response from the block
|
||||
device.
|
||||
If you've ever tried working with optical media in Linux, you may be familiar with
|
||||
<em>The Sleep Bug</em>. Normally, this is when a drive's firmware decides to sleep
|
||||
after two minutes, and never wakes. In the case of ddrescue, I've noticed that the
|
||||
drive often sleeps after read errors. When this happens, I can't kill ddrescue, and
|
||||
it just hangs. Even if I forcefully disconnect the drive, it just hangs, awaiting a
|
||||
response from the block device.
|
||||
</p>
|
||||
<p>
|
||||
For the record, Kramer still has this issue. I've only recently gotten
|
||||
mapping working alongside directIO to get around the Linux kernel's read
|
||||
poisoning.
|
||||
For the record, Kramer still has this issue. I've only recently gotten mapping
|
||||
working alongside directIO to get around the Linux kernel's read poisoning.
|
||||
</p>
|
||||
<p>
|
||||
Keep in mind that I know very little C, and I don't play this low in the
|
||||
system much yet. So, I don't know why, but without the
|
||||
<code>O_DIRECT</code> flag to bypass the kernel's buffer (and whatever else
|
||||
directIO technically bypasses), after a single IO error, the kernel will
|
||||
refuse to return anything but that same IO error until the parent process is
|
||||
restarted. I tried doing the C calls directly through FFI, since poisoning
|
||||
is something that Rust employs in some places for safety. That didn't work,
|
||||
so I tried spawning a child process to execute the read, but that also
|
||||
didn't work. Thankfully, I know a guy, and with his help I was able to track
|
||||
down not only how to implement directIO, but also without using FFI to call
|
||||
<code>posix_memalign</code>.
|
||||
Keep in mind that I know very little C, and I don't play this low in the system much
|
||||
yet. So, I don't know why, but without the
|
||||
<code>O_DIRECT</code> flag to bypass the kernel's buffer (and whatever else directIO
|
||||
technically bypasses), after a single IO error, the kernel will refuse to return
|
||||
anything but that same IO error until the parent process is restarted. I tried doing
|
||||
the C calls directly through FFI, since poisoning is something that Rust employs in
|
||||
some places for safety. That didn't work, so I tried spawning a child process to
|
||||
execute the read, but that also didn't work. Thankfully, I know a guy, and with his
|
||||
help I was able to track down not only how to implement directIO, but also without
|
||||
using FFI to call <code>posix_memalign</code>.
|
||||
</p>
|
||||
<p>
|
||||
Back on track, the other issue is the spin-down. As ddrescue reads smaller
|
||||
clusters and/or starts hitting a particularly poor section of the disc, some
|
||||
drives' firmware is too quick to spin down, causing the spindle to
|
||||
constantly speed up and slow down, increasing wear.
|
||||
Back on track, the other issue is the spin-down. As ddrescue reads smaller clusters
|
||||
and/or starts hitting a particularly poor section of the disc, some drives' firmware
|
||||
is too quick to spin down, causing the spindle to constantly speed up and slow down,
|
||||
increasing wear.
|
||||
</p>
|
||||
<hr />
|
||||
<ol>
|
||||
<li>I would recommend reading <em>Enshittification</em> by Cory Doctorow.</li>
|
||||
<li>
|
||||
I would recommend reading <em>Enshittification</em> by Cory Doctorow.
|
||||
</li>
|
||||
<li>
|
||||
As I'm writing Kramer in Rust, I also have to stress the point that this
|
||||
project is not intended as a ddrescue rewrite in rust, for the sake of a
|
||||
rewrite in rust. I'm not trying to clone or replace ddrescue. Kramer has
|
||||
a different target, and ddrescue is a resource for me to learn from and
|
||||
use as a guide while I dig deeper into the system than I ever have.
|
||||
As I'm writing Kramer in Rust, I also have to stress the point that this project
|
||||
is not intended as a ddrescue rewrite in rust, for the sake of a rewrite in
|
||||
rust. I'm not trying to clone or replace ddrescue. Kramer has a different
|
||||
target, and ddrescue is a resource for me to learn from and use as a guide while
|
||||
I dig deeper into the system than I ever have.
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<include src="includes/tailer.html" />
|
||||
<ul class="pane spacer">
|
||||
<include src="./includes/blog_recent_posts.html" />
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
@@ -11,74 +11,70 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Blog - Hack Racing</h5>
|
||||
<p class="title">You are here:</p>
|
||||
<p class="page">Blog - Hack Racing</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane blog">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">Hack Racing</h1>
|
||||
<p class="date">Posted: 28 March, 2026</p>
|
||||
<p class="date">Last Edited: 28 March, 2026</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<h1>Hack Racing</h1>
|
||||
<p>
|
||||
After many delays in releasing this post, I've decided to make this a
|
||||
multi-part series to shamelessly boost my meaningless engagement stats.
|
||||
After many delays in releasing this post, I've decided to make this a multi-part
|
||||
series to shamelessly boost my meaningless engagement stats.
|
||||
</p>
|
||||
<p>
|
||||
I have done my best to make this series digestible to all (also for them
|
||||
sweet engagement stats). So, I hope that this can be informative for
|
||||
seasoned techies, those new to Cybersecurity (like myself), and you normie
|
||||
folk who've somehow made your way here (hopefully not as victims).
|
||||
I have done my best to make this series digestible to all (also for them sweet
|
||||
engagement stats). So, I hope that this can be informative for seasoned techies,
|
||||
those new to Cybersecurity (like myself), and you normie folk who've somehow made
|
||||
your way here (hopefully not as victims).
|
||||
</p>
|
||||
<p>
|
||||
It's important to note that this particular attack (and operation) may very
|
||||
well still be active.
|
||||
It's important to note that this particular attack (and operation) may very well
|
||||
still be active.
|
||||
</p>
|
||||
<p>
|
||||
Also, I apologise in advance if the formatting of this post is really messed
|
||||
up, I have a lot of work to do overhauling the blog section for converting
|
||||
Markdown to HTML, better metadata tracking, and the lovely CSS that goes
|
||||
along with those changes.
|
||||
Also, I apologise in advance if the formatting of this post is really messed up, I
|
||||
have a lot of work to do overhauling the blog section for converting Markdown to
|
||||
HTML, better metadata tracking, and the lovely CSS that goes along with those
|
||||
changes.
|
||||
</p>
|
||||
<h2>Prologue</h2>
|
||||
<h3>February 4th, 2026</h3>
|
||||
<p>
|
||||
This story begins like any other major public security story of early 2026:
|
||||
Discord.
|
||||
This story begins like any other major public security story of early 2026: Discord.
|
||||
</p>
|
||||
<p>
|
||||
I received a message from a friend asking for a quick favour. So naturally,
|
||||
I responded, only to be ghosted for <em>almost exactly</em> 24 hours.
|
||||
I received a message from a friend asking for a quick favour. So naturally, I
|
||||
responded, only to be ghosted for <em>almost exactly</em> 24 hours.
|
||||
</p>
|
||||
<h3>The Next Day</h3>
|
||||
<p>
|
||||
Aside from the odd behaviour, the hacker didn't account for the possibility
|
||||
that this friend and I might see each other the following day. At which
|
||||
point I was informed that they were hacked.
|
||||
Aside from the odd behaviour, the hacker didn't account for the possibility that
|
||||
this friend and I might see each other the following day. At which point I was
|
||||
informed that they were hacked.
|
||||
</p>
|
||||
<p>Eventually, at 24 hours post-hack,</p>
|
||||
<blockquote>
|
||||
<p>
|
||||
hi^^ , So I am currently pursuing an IT course where we are developing
|
||||
games. and I developed a simple car racing simulator , As a part of the
|
||||
assignment, I require feedback from people who have played the game.
|
||||
Would you give it a try and provide feedback? It would really help me
|
||||
out and be a big part of my learning!
|
||||
hi^^ , So I am currently pursuing an IT course where we are developing games.
|
||||
and I developed a simple car racing simulator , As a part of the assignment, I
|
||||
require feedback from people who have played the game. Would you give it a try
|
||||
and provide feedback? It would really help me out and be a big part of my
|
||||
learning!
|
||||
</p>
|
||||
</blockquote>
|
||||
<h3>Setting the bait</h3>
|
||||
<p>
|
||||
It had to be right. After all, they could read all of our messages, profile
|
||||
me, and discern that I have enough of a background in computing to not fall
|
||||
for such obvious bull. Especially as I know the person outside the digital
|
||||
realm, what they're doing course wise, and what certain subject they're
|
||||
distinctly <em>not</em> carrying on with, which happens to be computer
|
||||
science.
|
||||
It had to be right. After all, they could read all of our messages, profile me, and
|
||||
discern that I have enough of a background in computing to not fall for such obvious
|
||||
bull. Especially as I know the person outside the digital realm, what they're doing
|
||||
course wise, and what certain subject they're distinctly <em>not</em> carrying on
|
||||
with, which happens to be computer science.
|
||||
</p>
|
||||
<blockquote>
|
||||
<p>Sure, I'd love to!</p>
|
||||
@@ -86,15 +82,14 @@
|
||||
<p>Super sophisticated bait, I know.</p>
|
||||
<blockquote>
|
||||
<p>
|
||||
tysm~! , here you go and also if you could give me your feedback in the
|
||||
next 5-10 minutes, let me know if you faced any problem.
|
||||
tysm~! , here you go and also if you could give me your feedback in the next
|
||||
5-10 minutes, let me know if you faced any problem.
|
||||
https://tinyurl.com/Race-Project-IT
|
||||
</p>
|
||||
</blockquote>
|
||||
<p>
|
||||
Bro literally is trying to live off the stereotypical behaviour of a person
|
||||
with a themed nitro account, and leaves a random comma. Also note the time
|
||||
constraint.
|
||||
Bro literally is trying to live off the stereotypical behaviour of a person with a
|
||||
themed nitro account, and leaves a random comma. Also note the time constraint.
|
||||
</p>
|
||||
<p>I was also later sent a second gift:</p>
|
||||
<blockquote>
|
||||
@@ -102,16 +97,15 @@
|
||||
</blockquote>
|
||||
<h2>Epidemiology</h2>
|
||||
<p>
|
||||
This is clearly a token and/or password-stealing trojan, targeting at least
|
||||
Discord.
|
||||
This is clearly a token and/or password-stealing trojan, targeting at least Discord.
|
||||
</p>
|
||||
<p>
|
||||
Until much later, I didn't know that this attacked many, <em>many</em> other
|
||||
services including Steam, Browsers, and Wallets.
|
||||
</p>
|
||||
<p>
|
||||
Another piece of information gathered by someone else found that the attack
|
||||
is only designed for Windows.
|
||||
Another piece of information gathered by someone else found that the attack is only
|
||||
designed for Windows.
|
||||
</p>
|
||||
<h2>Static Analysis</h2>
|
||||
<p>
|
||||
@@ -121,27 +115,27 @@
|
||||
<h3>Links</h3>
|
||||
<p>
|
||||
The links aren't markdown spoofed, but they are obscured by
|
||||
<code>tinyurl</code>. Using <code>expandurl</code>, I can tell that they go
|
||||
to Discord's CDN, and that I'm supposedly downloading a zip archive. Why on
|
||||
earth they'd make this even more suspicious by providing a tinyurl instead
|
||||
of a link to Discord's CDN <em>on discord</em>, I have no idea.
|
||||
<code>tinyurl</code>. Using <code>expandurl</code>, I can tell that they go to
|
||||
Discord's CDN, and that I'm supposedly downloading a zip archive. Why on earth
|
||||
they'd make this even more suspicious by providing a tinyurl instead of a link to
|
||||
Discord's CDN <em>on discord</em>, I have no idea.
|
||||
</p>
|
||||
<h3>VirusTotal</h3>
|
||||
<p>Tossing both binaries into VirusTotal finds... absolutely nothing?</p>
|
||||
<p>
|
||||
These files were last scanned nearly 24 hours ago as of writing. This could
|
||||
concieveably be the hacker(s) reviewing the quality of their trojan. Other
|
||||
than that, no vendors are screaming alarm bells. The Yomi Hunter sandbox has
|
||||
flagged the <em>second</em> as malware.
|
||||
concieveably be the hacker(s) reviewing the quality of their trojan. Other than
|
||||
that, no vendors are screaming alarm bells. The Yomi Hunter sandbox has flagged the
|
||||
<em>second</em> as malware.
|
||||
</p>
|
||||
<p>
|
||||
I'll force a rescan just to see if one of the vendors that timed out will
|
||||
flag one of them.
|
||||
I'll force a rescan just to see if one of the vendors that timed out will flag one
|
||||
of them.
|
||||
</p>
|
||||
<p>
|
||||
And yup. Kapersky managed to not time out during the scan of the first
|
||||
binary, flagging it as <code>HEUR:Trojan-PSW.Script.Generic</code>. Kapersky
|
||||
timed out while analyzing the second.
|
||||
And yup. Kapersky managed to not time out during the scan of the first binary,
|
||||
flagging it as <code>HEUR:Trojan-PSW.Script.Generic</code>. Kapersky timed out while
|
||||
analyzing the second.
|
||||
</p>
|
||||
<h3>Strings</h3>
|
||||
<p>I notice a comment string in the binary:</p>
|
||||
@@ -150,14 +144,14 @@
|
||||
// true.
|
||||
</code></pre>
|
||||
<p>
|
||||
Searching for these comments leads to mentions of Chromium, maybe more
|
||||
specifically Microsoft Chromium (Edge). I'll keep that in mind.
|
||||
Searching for these comments leads to mentions of Chromium, maybe more specifically
|
||||
Microsoft Chromium (Edge). I'll keep that in mind.
|
||||
</p>
|
||||
<h3>The Executable</h3>
|
||||
<p>
|
||||
Extracting the archive reveals a Windows Executable. Breaking down the
|
||||
executable with <code>binwalk</code> turns up traces of
|
||||
<code>electron</code> and more Chromium, including:
|
||||
Extracting the archive reveals a Windows Executable. Breaking down the executable
|
||||
with <code>binwalk</code> turns up traces of <code>electron</code> and more
|
||||
Chromium, including:
|
||||
</p>
|
||||
<ul>
|
||||
<li>chrome_100_percent.pak</li>
|
||||
@@ -168,14 +162,14 @@
|
||||
<li>Racing_Sim.exe.extracted/A3D5760/image.png</li>
|
||||
</ul>
|
||||
<p>
|
||||
Within the EXE is another <code>Racing_Sim.exe</code>, and given the
|
||||
electron image (image.png above) and node modules within it, I suspect this
|
||||
is the actual payload, wrapped in an installer.
|
||||
Within the EXE is another <code>Racing_Sim.exe</code>, and given the electron image
|
||||
(image.png above) and node modules within it, I suspect this is the actual payload,
|
||||
wrapped in an installer.
|
||||
</p>
|
||||
<p>
|
||||
Doing a bit of dynamic analysis by checking the behaviour seen in the
|
||||
VirusTotal sandboxes, and then comparing that with the files installed on my
|
||||
friend's system confirms this.
|
||||
Doing a bit of dynamic analysis by checking the behaviour seen in the VirusTotal
|
||||
sandboxes, and then comparing that with the files installed on my friend's system
|
||||
confirms this.
|
||||
</p>
|
||||
<h3>Metadata</h3>
|
||||
<p>The payload has an interesting bit of metadata:</p>
|
||||
@@ -185,8 +179,8 @@
|
||||
With a bit of help from SearXNG, this points me towards the
|
||||
<a href="https://github.com/Squirrel/Squirrel.Windows">Squirrel.Windows</a>
|
||||
installer project. From here, I can confirm that
|
||||
<code>Squirrel.Windows</code> plays a part in this by identifying common
|
||||
metadata listed at
|
||||
<code>Squirrel.Windows</code> plays a part in this by identifying common metadata
|
||||
listed at
|
||||
<a
|
||||
href="https://github.com/Squirrel/Squirrel.Windows/blob/develop/docs/using/custom-squirrel-events-non-cs.md"
|
||||
>https://github.com/Squirrel/Squirrel.Windows/blob/develop/docs/using/custom-squirrel-events-non-cs.md</a
|
||||
@@ -206,20 +200,20 @@
|
||||
PDB File Name : C:\projects\src\out\Default\electron.exe.pdb
|
||||
</code></pre>
|
||||
<p>
|
||||
The existence of the PDB metadata leads me to believe that this might be a
|
||||
debug build, but the PDB isn't present.
|
||||
The existence of the PDB metadata leads me to believe that this might be a debug
|
||||
build, but the PDB isn't present.
|
||||
</p>
|
||||
<p>
|
||||
Reading up on Squirrel.Windows, it uses either <code>squirrel-pack</code> or
|
||||
<code>electron-builder</code> to package the application. I don't know a lot
|
||||
about the electron ecosystem, but it seems rather clear that I should
|
||||
extract the electron archive.
|
||||
<code>electron-builder</code> to package the application. I don't know a lot about
|
||||
the electron ecosystem, but it seems rather clear that I should extract the electron
|
||||
archive.
|
||||
</p>
|
||||
<p>And there's our target: <code>4305567d2fbbd1d2.js</code></p>
|
||||
<h3>The Payload?</h3>
|
||||
<p>
|
||||
Unsurprisingly, there's a bunch of node modules present. Some are for
|
||||
interacting with databases, cryptography, and system information gathering.
|
||||
Unsurprisingly, there's a bunch of node modules present. Some are for interacting
|
||||
with databases, cryptography, and system information gathering.
|
||||
</p>
|
||||
<p>
|
||||
One thing that peaks my interest is a bit of metadata on the
|
||||
@@ -234,44 +228,42 @@
|
||||
<h4>Who Art Thou, Genesis?</h4>
|
||||
<p>Unsurprisingly, Genesis is a fairly generic name.</p>
|
||||
<p>
|
||||
But, narrowing the search to "Copyright Genesis 2025 nodejs"
|
||||
brings up a TrendMicro report from November 22, 2023.
|
||||
But, narrowing the search to "Copyright Genesis 2025 nodejs" brings up a
|
||||
TrendMicro report from November 22, 2023.
|
||||
<a
|
||||
href="https://www.trendmicro.com/en_us/research/23/k/attack-signals-possible-return-of-genesis-market.html"
|
||||
>https://www.trendmicro.com/en_us/research/23/k/attack-signals-possible-return-of-genesis-market.html</a
|
||||
>
|
||||
</p>
|
||||
<p>
|
||||
But the modus operandi of the Genesis Market was very different, and there's
|
||||
been no news about it since 2023 and parts of 2024. All the dates I've found
|
||||
are 2026, and now 2025.
|
||||
But the modus operandi of the Genesis Market was very different, and there's been no
|
||||
news about it since 2023 and parts of 2024. All the dates I've found are 2026, and
|
||||
now 2025.
|
||||
</p>
|
||||
<p>
|
||||
Trying a cryptocurrency route, there's Genesis Global Capital, a company
|
||||
that went bankrupt in January of 2023.
|
||||
Trying a cryptocurrency route, there's Genesis Global Capital, a company that went
|
||||
bankrupt in January of 2023.
|
||||
<a
|
||||
href="https://www.bankingdive.com/news/genesis-crypto-completes-restructuring-begins-payouts/723330/"
|
||||
>https://www.bankingdive.com/news/genesis-crypto-completes-restructuring-begins-payouts/723330/</a
|
||||
>
|
||||
</p>
|
||||
<p>
|
||||
There's also <code>genesiscrypto.org</code> which has a rather plain site,
|
||||
and no upcoming events. The blog is a bit more interesting, screaming
|
||||
"I'm a get rich quick scam". The last post was
|
||||
"12/18/24", so it's clearly American.
|
||||
There's also <code>genesiscrypto.org</code> which has a rather plain site, and no
|
||||
upcoming events. The blog is a bit more interesting, screaming "I'm a get rich
|
||||
quick scam". The last post was "12/18/24", so it's clearly American.
|
||||
</p>
|
||||
<p>
|
||||
There's also genesiscoin, but I'm getting tired of reading about crypto, and
|
||||
otherwise getting nowhere from this line of inquiry.
|
||||
</p>
|
||||
<p>
|
||||
If you're going to be a hacker group, at least pick something that you can
|
||||
actually be recognized with. Pick a more distinct name.
|
||||
If you're going to be a hacker group, at least pick something that you can actually
|
||||
be recognized with. Pick a more distinct name.
|
||||
</p>
|
||||
<p>
|
||||
For example, if you're going to pick the brand of your father's brother's
|
||||
nephew's cousin's former roommate's car, at least slap a dollar sign on the
|
||||
end! Something!
|
||||
For example, if you're going to pick the brand of your father's brother's nephew's
|
||||
cousin's former roommate's car, at least slap a dollar sign on the end! Something!
|
||||
</p>
|
||||
<h3>Deobfuscating the Payload</h3>
|
||||
<p>Oh... lovely.</p>
|
||||
@@ -281,15 +273,13 @@
|
||||
/>
|
||||
<p>
|
||||
Tossing the script into
|
||||
<a href="https://deobfuscate.io">deobfuscate.io</a> makes the linter happy,
|
||||
but not much more.
|
||||
<a href="https://deobfuscate.io">deobfuscate.io</a> makes the linter happy, but not
|
||||
much more.
|
||||
</p>
|
||||
<p>
|
||||
All content is minified, substituted against a central table (<code
|
||||
>Ysa8NnK</code
|
||||
>
|
||||
in this version of the trojan), and control flow flattened, with opaque
|
||||
steps and dead clones seemingly present.
|
||||
All content is minified, substituted against a central table (<code>Ysa8NnK</code>
|
||||
in this version of the trojan), and control flow flattened, with opaque steps and
|
||||
dead clones seemingly present.
|
||||
</p>
|
||||
<p>
|
||||
One of the strings in the script is plain base64 encoded,
|
||||
@@ -305,21 +295,20 @@
|
||||
alt="Source code of a list containing the four strings as elaborated upon below."
|
||||
/>
|
||||
<p>
|
||||
Also, there's a <em>very</em> long encrypted string sitting in an array with
|
||||
what appears to be two base64-encoded strings and one that's a neat 32
|
||||
characters long.
|
||||
Also, there's a <em>very</em> long encrypted string sitting in an array with what
|
||||
appears to be two base64-encoded strings and one that's a neat 32 characters long.
|
||||
</p>
|
||||
<p>
|
||||
Trying to skip around the control flow flattening, I look for the decryption
|
||||
call. Searching around, I locate the following string:
|
||||
Trying to skip around the control flow flattening, I look for the decryption call.
|
||||
Searching around, I locate the following string:
|
||||
</p>
|
||||
<p><code>aes-256-cbc</code></p>
|
||||
<p>This ought to be fun.</p>
|
||||
<h3>Breaking Into the Walled Garden</h3>
|
||||
<p>Decryption is handled through the internal <code>crypto</code> module.</p>
|
||||
<p>
|
||||
Working back the components of the AES decryption call finds that the
|
||||
initialization vector is a simple <code>Buffer</code> from base64.
|
||||
Working back the components of the AES decryption call finds that the initialization
|
||||
vector is a simple <code>Buffer</code> from base64.
|
||||
</p>
|
||||
<pre><code class="language-javascript">// This has some undone substitution.
|
||||
xK7i7T.crypto.pbkdf2Sync(
|
||||
@@ -335,22 +324,21 @@
|
||||
</code></pre>
|
||||
<p>
|
||||
The key decryption (shown above) isn't quite so simple. It's mangled with
|
||||
<code>pbkdf2</code> (Password-Based Key Derivation Function 2; I had to
|
||||
double check I hadn't messed up a substitution on that method call...) and
|
||||
integrating a value calculated through all of the control flow flattening.
|
||||
<code>pbkdf2</code> (Password-Based Key Derivation Function 2; I had to double check
|
||||
I hadn't messed up a substitution on that method call...) and integrating a value
|
||||
calculated through all of the control flow flattening.
|
||||
</p>
|
||||
<p>Brute forcing that value is easy as:</p>
|
||||
<ul>
|
||||
<li>All numbers in the script are integers.</li>
|
||||
<li>
|
||||
Value must be in the range of 0 - 244XX (I forget as of writing; check
|
||||
the docs)
|
||||
Value must be in the range of 0 - 244XX (I forget as of writing; check the docs)
|
||||
</li>
|
||||
<li>Cannot be less than 157.</li>
|
||||
</ul>
|
||||
<p>
|
||||
The list containing the keys, initialization vector, and encrypted data is
|
||||
unpacked all at once. However, it is also dastardly obfuscated with ROT1.
|
||||
The list containing the keys, initialization vector, and encrypted data is unpacked
|
||||
all at once. However, it is also dastardly obfuscated with ROT1.
|
||||
</p>
|
||||
<p>
|
||||
Yes, in all 14,000 or so lines of code, they rotated the list entries
|
||||
@@ -358,23 +346,23 @@
|
||||
</p>
|
||||
<p>And with a simple adaptation of the call, I can brute-force the integer:</p>
|
||||
<pre><code class="language-javascript">const { createDecipheriv, pbkdf2Sync } = require("crypto");
|
||||
const { exit } = require("process");
|
||||
const { exit } = require("process");
|
||||
|
||||
const algorithm = "aes-256-cbc";
|
||||
const algorithm = "aes-256-cbc";
|
||||
|
||||
const inputEncoding = "base64";
|
||||
const outputEncoding = "utf8";
|
||||
const inputEncoding = "base64";
|
||||
const outputEncoding = "utf8";
|
||||
|
||||
const [keyRoot, base64KeyRoot, base64IvRoot, dataRoot] = [
|
||||
const [keyRoot, base64KeyRoot, base64IvRoot, dataRoot] = [
|
||||
"Gcp/3fAC2AjoejyfB73T1xckjDWmMKA4",
|
||||
"bx3omGLfT2FpBrmpQ3vGQg==",
|
||||
"emZUVlGzS6tC6XAxZ3qQsg==",
|
||||
"Encrypted data string here"
|
||||
];
|
||||
];
|
||||
|
||||
const iv = Buffer.from(base64IvRoot, inputEncoding);
|
||||
const iv = Buffer.from(base64IvRoot, inputEncoding);
|
||||
|
||||
function decrypt(c) {
|
||||
function decrypt(c) {
|
||||
var key = pbkdf2Sync(
|
||||
keyRoot,
|
||||
Buffer.from(base64KeyRoot, inputEncoding),
|
||||
@@ -388,24 +376,22 @@
|
||||
data += decipheriv.final(outputEncoding);
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
for (c = 158; c < Number.MAX_SAFE_INTEGER; c++) {
|
||||
for (c = 158; c < Number.MAX_SAFE_INTEGER; c++) {
|
||||
try {
|
||||
console.log(decrypt(c));
|
||||
exit();
|
||||
} catch (_) {}
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
<p>And we're in.</p>
|
||||
</div>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<include src="includes/tailer.html" />
|
||||
<ul class="pane spacer">
|
||||
<include src="./includes/blog_recent_posts.html" />
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
+73
-131
@@ -10,142 +10,113 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Disclosure</h5>
|
||||
<p class="title">You are here:</p>
|
||||
<p class="page">Disclosure</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">Disclosure</h1>
|
||||
<p class="date">Last Edited: 01 August, 2025</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<div class="layout_row">
|
||||
<div class="item">
|
||||
<h2 class="title">Website Security</h2>
|
||||
<p>
|
||||
This website uses a number of security features, most of which are
|
||||
built into your browser, to protect my and your:
|
||||
This website uses a number of security features, most of which are built
|
||||
into your browser, to protect my and your:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Infrastructure</li>
|
||||
<li>Data, and</li>
|
||||
<li>Experience</li>
|
||||
</ul>
|
||||
<p>
|
||||
You can see some of the main methods that this website uses below:
|
||||
</p>
|
||||
<p>You can see some of the main methods that this website uses below:</p>
|
||||
<div class="section_list">
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Anubis</h3>
|
||||
<span class="subtitle"
|
||||
>AI Scraper Screening Utility</span
|
||||
>
|
||||
</div>
|
||||
<p class="name">Anubis</p>
|
||||
<p class="subtitle">AI Scraper Screening Utility</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p>
|
||||
This website is protected by a screening utility known
|
||||
as
|
||||
<a href="https://anubis.techaro.lol/"
|
||||
><cite>Anubis</cite></a
|
||||
This website is protected by a screening utility known as
|
||||
<a href="https://anubis.techaro.lol/"><cite>Anubis</cite></a
|
||||
>. You may also have heard of this program as
|
||||
<cite>BotStopper</cite> for those who purchase a
|
||||
commercial license because they somehow can't live with
|
||||
a cute anime girl showing up on their websites. UNESCO
|
||||
notably don't have a problem with that, and proudly
|
||||
present an anime girl as of writing this.
|
||||
<cite>BotStopper</cite> for those who purchase a commercial license
|
||||
because they somehow can't live with a cute anime girl showing up on
|
||||
their websites. UNESCO notably don't have a problem with that, and
|
||||
proudly present an anime girl as of writing this.
|
||||
</p>
|
||||
<p>
|
||||
I do not have a commercial license and do not pay in any
|
||||
way for Anubis. If I had money to spare, I would
|
||||
actively fund the project.
|
||||
I do not have a commercial license and do not pay in any way for
|
||||
Anubis. If I had money to spare, I would actively fund the project.
|
||||
</p>
|
||||
<p>
|
||||
Despite what some fools at the FSF figure, Anubis IS NOT
|
||||
malware. See:
|
||||
Despite what some fools at the FSF figure, Anubis IS NOT malware.
|
||||
See:
|
||||
<a href="https://www.youtube.com/watch?v=YisGpdPjYM8"
|
||||
><cite
|
||||
>I Platformed A Linux "Cyber Criminal"</cite
|
||||
></a
|
||||
>. It does have <em>similar</em> behaviour due to its
|
||||
proof-of-work scheme, which asks your browser to run a
|
||||
throwaway calculation in an effort to block or dissuade
|
||||
AI scrapers. Many, if not nearly all clients, are
|
||||
subject to screening based on various filters around
|
||||
><cite>I Platformed A Linux "Cyber Criminal"</cite></a
|
||||
>. It does have <em>similar</em> behaviour due to its proof-of-work
|
||||
scheme, which asks your browser to run a throwaway calculation in an
|
||||
effort to block or dissuade AI scrapers. Many, if not nearly all
|
||||
clients, are subject to screening based on various filters around
|
||||
your browser's user agent string.
|
||||
</p>
|
||||
<p>
|
||||
Additionally, if you have concerns about the legality of
|
||||
my use of Anubis, please see
|
||||
Additionally, if you have concerns about the legality of my use of
|
||||
Anubis, please see
|
||||
<a href="https://github.com/TecharoHQ/anubis/issues/50"
|
||||
>Anubis Issue #50</a
|
||||
>
|
||||
where concerns were looked into.
|
||||
</p>
|
||||
<p>
|
||||
Now, if you have a moral issue with this project, you
|
||||
may do one of two things (because adjusting your UA will
|
||||
just make me block the UA, or add a complete catch-all
|
||||
rule):
|
||||
Now, if you have a moral issue with this project, you may do one of
|
||||
two things (because adjusting your UA will just make me block the
|
||||
UA, or add a complete catch-all rule):
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
Don't allow JavaScript to run. (Have fun making this
|
||||
work)
|
||||
</li>
|
||||
<li>Don't allow JavaScript to run. (Have fun making this work)</li>
|
||||
<li>Just don't use my website.</li>
|
||||
</ol>
|
||||
<p>
|
||||
If you experience issues with Anubis blocking you, which
|
||||
presumably hasn't happened on your way to this page, you
|
||||
can email me with details. DO NOT bother the main
|
||||
project as it may be an issue with a screening rule that
|
||||
I've invoked.
|
||||
If you experience issues with Anubis blocking you, which presumably
|
||||
hasn't happened on your way to this page, you can email me with
|
||||
details. DO NOT bother the main project as it may be an issue with a
|
||||
screening rule that I've invoked.
|
||||
</p>
|
||||
<p>
|
||||
If you do wish to raise an issue with the Anubis dev(s),
|
||||
PLEASE DO NOT DO SOMETHING LIKE THIS:
|
||||
If you do wish to raise an issue with the Anubis dev(s), PLEASE DO
|
||||
NOT DO SOMETHING LIKE THIS:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<a
|
||||
href="https://github.com/TecharoHQ/anubis/issues/113"
|
||||
<a href="https://github.com/TecharoHQ/anubis/issues/113"
|
||||
>Anubis Issue #113</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://github.com/TecharoHQ/anubis/discussions/114"
|
||||
<a href="https://github.com/TecharoHQ/anubis/discussions/114"
|
||||
>Anubis Discussion #114</a
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://github.com/TecharoHQ/anubis/discussions/117"
|
||||
<a href="https://github.com/TecharoHQ/anubis/discussions/117"
|
||||
>Anubis Discussion #117</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Content Security Policy (CSP)</h3>
|
||||
</div>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p>
|
||||
This website, unlike a scary number of sites (including
|
||||
google.com and microsoft.com as of writing) has a CSP
|
||||
configured. This helps prevent or mitigate a number of
|
||||
possible attacks including cross-site scripting and
|
||||
clickjacking.
|
||||
This website, unlike a scary number of sites (including google.com
|
||||
and microsoft.com as of writing) has a CSP configured. This helps
|
||||
prevent or mitigate a number of possible attacks including
|
||||
cross-site scripting and clickjacking.
|
||||
</p>
|
||||
<p>
|
||||
Further Reading:
|
||||
@@ -154,25 +125,19 @@
|
||||
>https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP</a
|
||||
>
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">
|
||||
HTTP Strict Transport Security (HSTS)
|
||||
</h3>
|
||||
</div>
|
||||
<h3 class="name">HTTP Strict Transport Security (HSTS)</h3>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p>
|
||||
This website has a HSTS policy which indicates to your
|
||||
browser to use a secure connection when connecting.
|
||||
This website has a HSTS policy which indicates to your browser to
|
||||
use a secure connection when connecting.
|
||||
</p>
|
||||
<p>
|
||||
Additionally, the server will force redirect ALL
|
||||
connections over to HTTPS for any browsers which do not
|
||||
use this header or have a HTTPS-only mode enabled.
|
||||
Additionally, the server will force redirect ALL connections over to
|
||||
HTTPS for any browsers which do not use this header or have a
|
||||
HTTPS-only mode enabled.
|
||||
</p>
|
||||
<p>
|
||||
Further Reading:
|
||||
@@ -181,15 +146,11 @@
|
||||
>https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security</a
|
||||
>
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Other Security Headers</h3>
|
||||
</div>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p>Some include:</p>
|
||||
<ul>
|
||||
<li>X-Content-Type-Options</li>
|
||||
@@ -198,21 +159,15 @@
|
||||
<li>Permissions-Policy</li>
|
||||
<li>Referrer-Policy</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Security.txt</h3>
|
||||
</div>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p>
|
||||
This file offers information to security researchers to
|
||||
silently report any issues they find so that I can
|
||||
resolve them.
|
||||
This file offers information to security researchers to silently
|
||||
report any issues they find so that I can resolve them.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
@@ -223,71 +178,58 @@
|
||||
functioning. I do not place any trackers on your system.
|
||||
</p>
|
||||
<p>
|
||||
Note: I cannot say what cookies may be left by services that I host
|
||||
(such as Gitea and Web Check). For more details, please see those
|
||||
projects' documentation.
|
||||
Note: I cannot say what cookies may be left by services that I host (such as
|
||||
Gitea and Web Check). For more details, please see those projects'
|
||||
documentation.
|
||||
</p>
|
||||
<p>You can see all cookies that this website uses below:</p>
|
||||
<div class="section_list">
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Anubis</h3>
|
||||
<span class="subtitle"
|
||||
>AI Scraper Screening Utility</span
|
||||
>
|
||||
</div>
|
||||
<p class="subtitle">AI Scraper Screening Utility</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p>
|
||||
This website does utilize a cookie. This cookie is made
|
||||
by Anubis to keep your system from having to pass the
|
||||
proof-of-work check every time you request a resource
|
||||
from this site.
|
||||
This website does utilize a cookie. This cookie is made by Anubis to
|
||||
keep your system from having to pass the proof-of-work check every
|
||||
time you request a resource from this site.
|
||||
</p>
|
||||
<p>
|
||||
THEORETICALLY, this cookie, as with any JavaScript
|
||||
cookie,
|
||||
THEORETICALLY, this cookie, as with any JavaScript cookie,
|
||||
<em>can</em> be used to track you.
|
||||
</p>
|
||||
<p>
|
||||
HOWEVER, I do not use it for tracking, Anubis does not
|
||||
use it for tracking, and there is no evidence that 3rd
|
||||
parties are abusing the cookie. There are far more
|
||||
attractive targets.
|
||||
HOWEVER, I do not use it for tracking, Anubis does not use it for
|
||||
tracking, and there is no evidence that 3rd parties are abusing the
|
||||
cookie. There are far more attractive targets.
|
||||
</p>
|
||||
<p>
|
||||
IF this becomes an issue, until the lead developer(s)
|
||||
and/or community can find a solution, Anubis will be
|
||||
reconfigured to send out challenges even more
|
||||
frequently, and an advisory notice to wipe your browser
|
||||
cookies at the end of your session will be made.
|
||||
IF this becomes an issue, until the lead developer(s) and/or
|
||||
community can find a solution, Anubis will be reconfigured to send
|
||||
out challenges even more frequently, and an advisory notice to wipe
|
||||
your browser cookies at the end of your session will be made.
|
||||
</p>
|
||||
<p>
|
||||
Under the current configuration, Anubis' cookies are
|
||||
valid for 24h. This does not mean that the cookie is
|
||||
necessarily gone from your system.
|
||||
Under the current configuration, Anubis' cookies are valid for 24h.
|
||||
This does not mean that the cookie is necessarily gone from your
|
||||
system.
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://github.com/TecharoHQ/anubis/issues/50"
|
||||
>Anubis Issue #50</a
|
||||
>
|
||||
briefly looked into the possibility of abuse via the
|
||||
cookie.
|
||||
briefly looked into the possibility of abuse via the cookie.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
<ul class="pane spacer">
|
||||
<li class="spacer_container">#AD</li>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
+13
-17
@@ -10,36 +10,32 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Home</h5>
|
||||
<p class="title">You are here:</p>
|
||||
<p class="page">Home</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">Home</h1>
|
||||
<p class="date">Last Edited: 03 August, 2025</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p>People, this is under development. Live with the lorem ipsum.</p>
|
||||
<p>lorem ipsum idk what else there is in this latin phrase</p>
|
||||
<p>
|
||||
Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex
|
||||
sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis
|
||||
convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus
|
||||
fringilla lacus nec metus bibendum egestas. Iaculis massa nisl malesuada
|
||||
lacinia integer nunc posuere. Ut hendrerit semper vel class aptent taciti
|
||||
sociosqu. Ad litora torquent per conubia nostra inceptos himenaeos.
|
||||
Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex sapien
|
||||
vitae pellentesque sem placerat. In id cursus mi pretium tellus duis convallis.
|
||||
Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus fringilla lacus nec
|
||||
metus bibendum egestas. Iaculis massa nisl malesuada lacinia integer nunc posuere.
|
||||
Ut hendrerit semper vel class aptent taciti sociosqu. Ad litora torquent per conubia
|
||||
nostra inceptos himenaeos.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer">
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
<div class="spacer_container"><p>#AD</p></div>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
<ul class="pane spacer">
|
||||
<li class="spacer_container">#AD</li>
|
||||
<li class="spacer_container">#AD</li>
|
||||
</ul>
|
||||
<include src="includes/footer.html" />
|
||||
<include src="includes/scripts.html" />
|
||||
</body>
|
||||
|
||||
+76
-148
@@ -11,51 +11,48 @@
|
||||
<include src="includes/nav_header.html" />
|
||||
<include src="includes/nav_menu.html" />
|
||||
<div class="location">
|
||||
<header><h4>You are here:</h4></header>
|
||||
<h5 class="page">Resume</h5>
|
||||
<p class="title">You are here:</p>
|
||||
<p class="page">Resume</p>
|
||||
</div>
|
||||
<include src="includes/nav_quick_links.html" />
|
||||
</nav>
|
||||
<main class="pane">
|
||||
<div class="body">
|
||||
<header>
|
||||
<h1 class="title">Olivia Brooks</h1>
|
||||
<p class="date">Last Edited: 21 February, 2026</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<div class="about_me">
|
||||
<p>
|
||||
Hello, I'm Olivia Brooks. I am a passionate, hard-working, and
|
||||
dependable individual with an innate interest in sharing and expanding
|
||||
my knowledge and expertise.
|
||||
Hello, I'm Olivia Brooks. I am a passionate, hard-working, and dependable
|
||||
individual with an innate interest in sharing and expanding my knowledge and
|
||||
expertise.
|
||||
</p>
|
||||
<p>
|
||||
For the better part of a decade, I've specced, built, identified and
|
||||
removed bottlenecks, and breathed new life into both desktops and
|
||||
laptops. I have experience with all major operating systems including
|
||||
Linux (which I've daily-driven for 5 years), Windows, MacOS, Android,
|
||||
and iOS.
|
||||
For the better part of a decade, I've specced, built, identified and removed
|
||||
bottlenecks, and breathed new life into both desktops and laptops. I have
|
||||
experience with all major operating systems including Linux (which I've
|
||||
daily-driven for 5 years), Windows, MacOS, Android, and iOS.
|
||||
</p>
|
||||
<p>
|
||||
Over the years, my technical skills have branched to 3D printing, CNC
|
||||
machining, basic CAD modelling, programming, and homelabbing. These
|
||||
interests have garnered me experience with hardware and software from a
|
||||
variety of vendors, architectures, and ecosystems, big and niche.
|
||||
Over the years, my technical skills have branched to 3D printing, CNC machining,
|
||||
basic CAD modelling, programming, and homelabbing. These interests have garnered
|
||||
me experience with hardware and software from a variety of vendors,
|
||||
architectures, and ecosystems, big and niche.
|
||||
</p>
|
||||
<p>
|
||||
I have extensive experience in both leadership and non-leadership
|
||||
positions across a variety of contexts. This has allowed me to develop a
|
||||
wide range of skills which I draw upon daily to rapidly develop new
|
||||
understandings. This additionally gives me the capacity to interact and
|
||||
excel in unfamiliar situations and novel endeavours.
|
||||
I have extensive experience in both leadership and non-leadership positions
|
||||
across a variety of contexts. This has allowed me to develop a wide range of
|
||||
skills which I draw upon daily to rapidly develop new understandings. This
|
||||
additionally gives me the capacity to interact and excel in unfamiliar
|
||||
situations and novel endeavours.
|
||||
</p>
|
||||
<p>
|
||||
I am always willing to lend a hand where I can, no matter the learning
|
||||
curve ahead.
|
||||
I am always willing to lend a hand where I can, no matter the learning curve
|
||||
ahead.
|
||||
</p>
|
||||
<p>
|
||||
I sincerely appreciate your consideration of me as a candidate, and look
|
||||
forward to hearing from you.
|
||||
I sincerely appreciate your consideration of me as a candidate, and look forward
|
||||
to hearing from you.
|
||||
</p>
|
||||
</div>
|
||||
<!--
|
||||
@@ -68,68 +65,51 @@
|
||||
<div class="section_list">
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">OTHS Tech Crew</h3>
|
||||
<span class="subtitle">September 2024 - June 2025</span>
|
||||
</div>
|
||||
<p class="name">OTHS Tech Crew</p>
|
||||
<p class="subtitle">September 2024 - June 2025</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p>Project Manager</p>
|
||||
<ul>
|
||||
<li>
|
||||
First year that the crew was entirely student-led.
|
||||
</li>
|
||||
<li>First year that the crew was entirely student-led.</li>
|
||||
<li>Identified project scope and requirements.</li>
|
||||
<li>Ensured timely completion of tasks.</li>
|
||||
<li>Coordinated crew setup and take-down efforts.</li>
|
||||
<li>
|
||||
Effectively worked around live program changes and
|
||||
weather patterns.
|
||||
Effectively worked around live program changes and weather
|
||||
patterns.
|
||||
</li>
|
||||
<li>Additionally handled equipment maintenance.</li>
|
||||
<li>Acted as administrative liaison.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Farmers' Market</h3>
|
||||
<span class="subtitle"
|
||||
>Wee Youngn' - 2020, Summer 2023</span
|
||||
>
|
||||
</div>
|
||||
<p class="name">Farmers' Market</p>
|
||||
<p class="subtitle">Wee Youngn' - 2020, Summer 2023</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p>Volunteer - Various Roles</p>
|
||||
<ul>
|
||||
<li>
|
||||
Started as a young child attracting customers to a
|
||||
fudge stall by looking cute with divine, glorious
|
||||
red hair.
|
||||
Started as a young child attracting customers to a fudge stall
|
||||
by looking cute with divine, glorious red hair.
|
||||
</li>
|
||||
<li>Handled the sale of goods.</li>
|
||||
<li>Handled the preparation of farm-grown goods.</li>
|
||||
<li>Stocked the displays.</li>
|
||||
<li>Ran the Kids' Corner activities. (Summer 2023)</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">MPS Audio-Visual Club</h3>
|
||||
<span class="subtitle">September 2018 - 2020</span>
|
||||
</div>
|
||||
<p class="name">MPS Audio-Visual Club</p>
|
||||
<p class="subtitle">September 2018 - 2020</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p>Supervisor</p>
|
||||
<ul>
|
||||
<li>Identified project scope and requirements.</li>
|
||||
<li>Ensured timely completion of tasks.</li>
|
||||
<li>Coordinated crew setup and take-down efforts.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
@@ -139,49 +119,32 @@
|
||||
<div class="section_list">
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Carleton University</h3>
|
||||
<span class="subtitle"
|
||||
>September 2025 to Present - Ottawa, ON</span
|
||||
>
|
||||
</div>
|
||||
<h3 class="status">IN PROGRESS</h3>
|
||||
<p class="name">Carleton University</p>
|
||||
<p class="subtitle">September 2025 to Present - Ottawa, ON</p>
|
||||
<p class="status">IN PROGRESS</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p>Bachelor of Arts (Honours)</p>
|
||||
<ul>
|
||||
<li>Major in Psychology</li>
|
||||
<li>[Intended] Minor in Computer Science</li>
|
||||
<li>Concentration in Social/Personality Psychology</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Osgoode Township High School</h3>
|
||||
<span class="subtitle"
|
||||
>September 2021 to 2025 - Ottawa, ON</span
|
||||
>
|
||||
</div>
|
||||
<p class="name">Osgoode Township High School</p>
|
||||
<p class="subtitle">September 2021 to 2025 - Ottawa, ON</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p>Gr. 9 to 12</p>
|
||||
<ul>
|
||||
<li>French Immersion Studies</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Air Cadets, Squadron 742</h3>
|
||||
<span class="subtitle"
|
||||
>November 2019 to September 2022 - Ottawa, ON</span
|
||||
>
|
||||
</div>
|
||||
<p class="name">Air Cadets, Squadron 742</p>
|
||||
<p class="subtitle">November 2019 to September 2022 - Ottawa, ON</p>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p>Sergeant</p>
|
||||
<ul>
|
||||
<li>Drone Pilot Training Course (August 2022)</li>
|
||||
@@ -192,13 +155,10 @@
|
||||
<li>Music (August 2020)</li>
|
||||
<li>Web Programming (April 2020)</li>
|
||||
<li>Advanced Cybertraining Course (August 2020)</li>
|
||||
<li>
|
||||
Cadet Band Member (September 2020 - February 2022)
|
||||
</li>
|
||||
<li>Cadet Band Member (September 2020 - February 2022)</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<h3 class="early_history">Earlier history available by request.</h3>
|
||||
<p class="early_history">Earlier history available by request.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -209,37 +169,29 @@
|
||||
<div class="section_list">
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Ontario Scholar</h3>
|
||||
<span class="subtitle"
|
||||
>Obtained an average of at least eighty percent in
|
||||
any six applicable Grade 12 courses.</span
|
||||
>
|
||||
</div>
|
||||
<p class="name">Ontario Scholar</p>
|
||||
<p class="subtitle">
|
||||
Obtained an average of at least eighty percent in any six
|
||||
applicable Grade 12 courses.
|
||||
</p>
|
||||
</header>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Silver Medalist</h3>
|
||||
<span class="subtitle">Average over 90%</span>
|
||||
</div>
|
||||
<h3 class="status">x2</h3>
|
||||
<p class="name">Silver Medalist</p>
|
||||
<p class="subtitle">Average over 90%</p>
|
||||
<p class="status">x2</p>
|
||||
</header>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">CyberSci Regional Winner</h3>
|
||||
<span class="subtitle"
|
||||
>The Off-By-Ones - Ottawa, 2025</span
|
||||
>
|
||||
</div>
|
||||
<p class="name">CyberSci Regional Winner</p>
|
||||
<p class="subtitle">The Off-By-Ones - Ottawa, 2025</p>
|
||||
</header>
|
||||
</section>
|
||||
<h3 class="early_history">
|
||||
<p class="early_history">
|
||||
Queries about other awards available by request.
|
||||
</h3>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Certifications -->
|
||||
@@ -248,30 +200,30 @@
|
||||
<div class="section_list">
|
||||
<section>
|
||||
<header>
|
||||
<h3 class="name">Ontario Secondary School Diploma</h3>
|
||||
<p class="name">Ontario Secondary School Diploma</p>
|
||||
</header>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<h3 class="name">DELF</h3>
|
||||
<h3 class="status">Niveau B2</h3>
|
||||
<p class="name">DELF</p>
|
||||
<p class="status">Niveau B2</p>
|
||||
</header>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<h3 class="name">Red Cross Swimming</h3>
|
||||
<h3 class="status">Level 10</h3>
|
||||
<p class="name">Red Cross Swimming</p>
|
||||
<p class="status">Level 10</p>
|
||||
</header>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<h3 class="name">Canadian Firearms Safety Course</h3>
|
||||
<h3 class="status">PAL</h3>
|
||||
<p class="name">Canadian Firearms Safety Course</p>
|
||||
<p class="status">PAL</p>
|
||||
</header>
|
||||
</section>
|
||||
<h3 class="early_history">
|
||||
<p class="early_history">
|
||||
Queries about certifications available by request.
|
||||
</h3>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -298,13 +250,9 @@
|
||||
<p>Blender</p>
|
||||
</a>
|
||||
<div>
|
||||
<ion-icon
|
||||
name="play-skip-forward-outline"
|
||||
class="red r90"
|
||||
></ion-icon>
|
||||
<ion-icon name="play-skip-forward-outline" class="red r90"></ion-icon>
|
||||
<p>CNC Machining</p>
|
||||
</div>
|
||||
|
||||
<a href="https://www.docker.com/">
|
||||
<ion-icon name="logo-docker" class="docker"></ion-icon>
|
||||
<p>Docker</p>
|
||||
@@ -373,24 +321,16 @@
|
||||
<ion-icon name="layers-outline" class="orange"></ion-icon>
|
||||
<p>PrusaSlicer</p>
|
||||
</a>
|
||||
<a
|
||||
href="https://shopbottools.com/support-resources/control-software/"
|
||||
>
|
||||
<a href="https://shopbottools.com/support-resources/control-software/">
|
||||
<ion-icon name="keypad-outline" class="blue"></ion-icon>
|
||||
<p>ShopBot Control Software</p>
|
||||
</a>
|
||||
<a href="https://www.vectric.com/products/aspire/">
|
||||
<ion-icon
|
||||
name="play-skip-forward-outline"
|
||||
class="red r90"
|
||||
></ion-icon>
|
||||
<ion-icon name="play-skip-forward-outline" class="red r90"></ion-icon>
|
||||
<p>Vectric Aspire</p>
|
||||
</a>
|
||||
<a href="https://www.zotero.org/">
|
||||
<ion-icon
|
||||
name="document-attach-outline"
|
||||
class="orange"
|
||||
></ion-icon>
|
||||
<ion-icon name="document-attach-outline" class="orange"></ion-icon>
|
||||
<p>Zotero</p>
|
||||
</a>
|
||||
</div>
|
||||
@@ -458,43 +398,33 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<include src="includes/tailer.html" />
|
||||
</main>
|
||||
<div class="pane spacer pane_details">
|
||||
<div class="spacer_container">
|
||||
<h2>Contact Info</h2>
|
||||
<p>Contact Info</p>
|
||||
<div class="section_list">
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">
|
||||
<a href="mailto:olivia.a.brooks77@gmail.com">Email</a>
|
||||
</h3>
|
||||
<span class="subtitle">olivia.a.brooks77@gmail.com</span>
|
||||
</div>
|
||||
<a class="name" href="mailto:olivia.a.brooks77@gmail.com">Email</a>
|
||||
<p class="subtitle">olivia.a.brooks77@gmail.com</p>
|
||||
</header>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer_container">
|
||||
<h2>Spoken Languages</h2>
|
||||
<p>Spoken Languages</p>
|
||||
<div class="section_list">
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">English</h3>
|
||||
<span class="subtitle">Fluent</span>
|
||||
</div>
|
||||
<p class="name">English</p>
|
||||
<p class="subtitle">Fluent</p>
|
||||
</header>
|
||||
</section>
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">Français</h3>
|
||||
<span class="subtitle">DELF B2</span>
|
||||
</div>
|
||||
<p class="name">Français</p>
|
||||
<p class="subtitle">DELF B2</p>
|
||||
</header>
|
||||
</section>
|
||||
</div>
|
||||
@@ -504,9 +434,7 @@
|
||||
<div class="section_list">
|
||||
<section>
|
||||
<header>
|
||||
<div>
|
||||
<h3 class="name">By Request</h3>
|
||||
</div>
|
||||
<p class="name">By Request</p>
|
||||
</header>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
*.beam
|
||||
*.ez
|
||||
/build
|
||||
erl_crash.dump
|
||||
@@ -1,19 +0,0 @@
|
||||
name = "themes"
|
||||
version = "1.0.0"
|
||||
|
||||
# Fill out these fields if you intend to generate HTML documentation or publish
|
||||
# your project to the Hex package manager.
|
||||
#
|
||||
# description = ""
|
||||
# licences = ["Apache-2.0"]
|
||||
# repository = { type = "github", user = "", repo = "" }
|
||||
# links = [{ title = "Website", href = "" }]
|
||||
#
|
||||
# For a full reference of all the available options, you can have a look at
|
||||
# https://gleam.run/writing-gleam/gleam-toml/.
|
||||
|
||||
[dependencies]
|
||||
gleam_stdlib = ">= 0.44.0 and < 2.0.0"
|
||||
|
||||
[dev-dependencies]
|
||||
gleeunit = ">= 1.0.0 and < 2.0.0"
|
||||
@@ -1,11 +0,0 @@
|
||||
# This file was generated by Gleam
|
||||
# You typically do not need to edit this file
|
||||
|
||||
packages = [
|
||||
{ name = "gleam_stdlib", version = "0.69.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "AAB0962BEBFAA67A2FBEE9EEE218B057756808DC9AF77430F5182C6115B3A315" },
|
||||
{ name = "gleeunit", version = "1.9.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "DA9553CE58B67924B3C631F96FE3370C49EB6D6DC6B384EC4862CC4AAA718F3C" },
|
||||
]
|
||||
|
||||
[requirements]
|
||||
gleam_stdlib = { version = ">= 0.44.0 and < 2.0.0" }
|
||||
gleeunit = { version = ">= 1.0.0 and < 2.0.0" }
|
||||
@@ -1,5 +0,0 @@
|
||||
import gleam/io
|
||||
|
||||
pub fn main() -> Nil {
|
||||
io.println("Hello from themes!")
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
import gleeunit
|
||||
|
||||
pub fn main() -> Nil {
|
||||
gleeunit.main()
|
||||
}
|
||||
|
||||
// gleeunit test functions end in `_test`
|
||||
pub fn hello_world_test() {
|
||||
let name = "Joe"
|
||||
let greeting = "Hello, " <> name <> "!"
|
||||
|
||||
assert greeting == "Hello, Joe!"
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
@use "_a_colours.css";
|
||||
@use "a_colours.css";
|
||||
|
||||
@use "a_footer";
|
||||
@use "a_layouts";
|
||||
@@ -91,20 +91,24 @@ body {
|
||||
|
||||
h1 {
|
||||
font-size: 3.3vh;
|
||||
font-family: var(--font-family-title);
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 2.5vh;
|
||||
font-family: var(--font-family-title);
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
h6 {
|
||||
font-family: var(--font-family-title);
|
||||
}
|
||||
|
||||
p,
|
||||
a {
|
||||
a,
|
||||
li {
|
||||
font-family: var(--font-family-generic);
|
||||
}
|
||||
|
||||
@@ -116,7 +120,7 @@ a {
|
||||
|
||||
body {
|
||||
grid-template-columns: none;
|
||||
grid-template-areas: "banner" "nav" "main" "spacer";
|
||||
grid-template-areas: "banner" "nav" "main" "tailer" "spacer";
|
||||
|
||||
// Compress spacings to maximize useable area.
|
||||
// padding: var(--spacing-small);
|
||||
@@ -129,6 +133,7 @@ a {
|
||||
top: auto;
|
||||
left: auto;
|
||||
right: auto;
|
||||
border-radius: var(--border-radius-small) var(--border-radius-small) 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -136,7 +141,7 @@ a {
|
||||
@media (min-width: 601px) and (max-width: 1023px) {
|
||||
body {
|
||||
grid-template-columns: min-content 1fr;
|
||||
grid-template-areas: "banner banner" "nav main" "spacer main";
|
||||
grid-template-areas: "banner banner" "nav main" "spacer main" "spacer tailer";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -144,6 +149,6 @@ a {
|
||||
@media (min-width: 1024px) {
|
||||
body {
|
||||
grid-template-columns: min-content 1fr min-content;
|
||||
grid-template-areas: "banner banner banner" "nav main spacer";
|
||||
grid-template-areas: "banner banner banner" "nav main spacer" "nav tailer spacer";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,8 +6,7 @@
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
|
||||
> a,
|
||||
> div {
|
||||
> * {
|
||||
display: grid;
|
||||
|
||||
background-color: var(--background-3);
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
> .body {
|
||||
> header ~ {
|
||||
padding: 0 calc(var(--spacing-small) * 2);
|
||||
|
||||
ul {
|
||||
@@ -81,7 +81,7 @@
|
||||
column-gap: var(--spacing-small);
|
||||
}
|
||||
|
||||
> .body {
|
||||
> header ~ {
|
||||
// Collapse the L/R padding to maximize usable space
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
border-radius: var(--border-radius-leaf);
|
||||
text-align: center;
|
||||
|
||||
> header h4 {
|
||||
> .title {
|
||||
font-weight: bold;
|
||||
margin: 0 0 0.5rem;
|
||||
}
|
||||
|
||||
.page {
|
||||
> .page {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,14 +4,13 @@
|
||||
|
||||
justify-content: center;
|
||||
|
||||
> .body {
|
||||
padding: var(--spacing-small) 0 0;
|
||||
|
||||
> header {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
> .body {
|
||||
> header ~ * {
|
||||
text-align: start;
|
||||
|
||||
padding: 0 var(--spacing-thicc) var(--spacing-thicc);
|
||||
@@ -24,11 +23,10 @@
|
||||
object-fit: contain;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.pane.blog .body > .body {
|
||||
.pane.blog {
|
||||
padding: var(--spacing-small);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
main.pane {
|
||||
grid-area: main;
|
||||
|
||||
> .body,
|
||||
> footer {
|
||||
background-color: var(--background-2);
|
||||
border-radius: var(--border-radius-leaf);
|
||||
}
|
||||
|
||||
> .body {
|
||||
text-align: start;
|
||||
padding: var(--spacing-small);
|
||||
|
||||
> header {
|
||||
@@ -32,13 +29,10 @@ main.pane {
|
||||
font-family: var(--font-family-generic);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
> .body {
|
||||
text-align: start;
|
||||
}
|
||||
}
|
||||
|
||||
> footer {
|
||||
main.pane + footer {
|
||||
grid-area: tailer;
|
||||
margin: var(--spacing-large) auto 0;
|
||||
width: min-content;
|
||||
|
||||
@@ -52,5 +46,4 @@ main.pane {
|
||||
> p {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ nav.pane {
|
||||
nav.pane {
|
||||
background-color: var(--background-2);
|
||||
border-radius: var(--border-radius-leaf);
|
||||
width: 100%;
|
||||
padding: 0 var(--spacing-small);
|
||||
|
||||
.menu,
|
||||
@@ -35,10 +36,6 @@ nav.pane {
|
||||
.location {
|
||||
display: none;
|
||||
}
|
||||
|
||||
> * {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
nav.pane > input:checked + label {
|
||||
|
||||
Reference in New Issue
Block a user