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