<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Shockrah&#39;s blog on Shockrah&#39;s Blog</title>
    <link>https://shockrah.xyz/</link>
    <description>Recent content in Shockrah&#39;s blog on Shockrah&#39;s Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 19 Aug 2025 21:26:49 -0700</lastBuildDate><atom:link href="https://shockrah.xyz/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Reviving an Old Project</title>
      <link>https://shockrah.xyz/posts/reviving-an-old-project/</link>
      <pubDate>Tue, 19 Aug 2025 21:26:49 -0700</pubDate>
      
      <guid>https://shockrah.xyz/posts/reviving-an-old-project/</guid>
      <description>&lt;h1 id=&#34;context&#34;&gt;Context&lt;/h1&gt;
&lt;p&gt;A while back I created &lt;a href=&#34;https://git.shockrah.xyz/shockrah/clippable&#34;&gt;Clippable&lt;/a&gt;,
which was meant to be a way for me to share gaming clips with others because I
didn&amp;rsquo;t like using streamable, youtube, etc. I&amp;rsquo;m still not a huge fan of it
especially considering I have the technical know how to build my own clip
sharing system/website.&lt;/p&gt;
&lt;p&gt;Now that I&amp;rsquo;m once again looking for work &amp;#x1f609; I&amp;rsquo;m in a position where I
need to have a new &amp;ldquo;main&amp;rdquo; project to bring up in interviews &amp;amp; resumes.
My choice this time around of course is &lt;a href=&#34;https://git.shockrah.xyz/shockrah/clippable&#34;&gt;Clippable&lt;/a&gt;
which should provide ample room for me to &lt;em&gt;demonstrate&lt;/em&gt; my skills.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Also I can actually use the end result which is nice&lt;/em&gt;.&lt;/p&gt;
&lt;h1 id=&#34;what-is-it&#34;&gt;What is it?&lt;/h1&gt;
&lt;p&gt;I&amp;rsquo;ll be honest, it&amp;rsquo;s a self-hosted streamable clone whose
front-end got a huge facelift and is now being packaged with Gitea.&lt;/p&gt;
&lt;h1 id=&#34;now-what&#34;&gt;Now what?&lt;/h1&gt;
&lt;p&gt;Now comes the fun part which is packaging everything and updating docs
so that this can be fully presentable and remain as a proper &amp;ldquo;receipt&amp;rdquo;
of my skill because it&amp;rsquo;s easier if my work can speak for itself in interviews &amp;#x1f609;&lt;/p&gt;
&lt;h1 id=&#34;where&#34;&gt;Where?&lt;/h1&gt;
&lt;p&gt;The link to the project is here &amp;#x1f517; &lt;a href=&#34;https://git.shockrah.xyz/shockrah/clippable&#34;&gt;https://git.shockrah.xyz/shockrah/clippable&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Link to the docs is here &amp;#x1f517; &lt;a href=&#34;https://shockrah.gitlab.io/clippable/&#34;&gt;https://shockrah.gitlab.io/clippable/&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Rationalizing User Data</title>
      <link>https://shockrah.xyz/notes/rationalizing-user-data/</link>
      <pubDate>Tue, 07 Jan 2025 21:34:12 -0800</pubDate>
      
      <guid>https://shockrah.xyz/notes/rationalizing-user-data/</guid>
      <description>&lt;p&gt;This is a stream of concious post where I go through the process of figuring out
how I am going to store user data in my &lt;a href=&#34;https://git.shockrah.xyz/shockrah/bubble&#34;&gt;bubble project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Schema for the users can be found here: &lt;a href=&#34;https://git.shockrah.xyz/shockrah/bubble/src/branch/main/db/setup-tables.sql&#34;&gt;link&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;pre-requisites&#34;&gt;Pre-requisites&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Using Postgres&lt;/li&gt;
&lt;li&gt;Hashed and salted passwords&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;user-ids&#34;&gt;User ID&amp;rsquo;s&lt;/h1&gt;
&lt;p&gt;By default I was going to use regular ID&amp;rsquo;s that increment on each insertion.
Considering using some form of UUID&amp;rsquo;s for the sake of a slight increase in sec.
Even though this isn&amp;rsquo;t a major form of security, every layer towards
better security counts, and I see this as one more layer to add.&lt;/p&gt;
&lt;p&gt;UUID&amp;rsquo;s tend to suffer from indexing issues but later versions of UUID seem to
have this figured out.&lt;/p&gt;
&lt;p&gt;After some reading v7 seems like the move.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Time based meaning sorting ( and thus searching ) is reasonably performant&lt;/li&gt;
&lt;li&gt;Sufficient entropy for this case ( 74 bits ). We want ***&lt;em&gt;some&lt;/em&gt; entropy but also
don&amp;rsquo;t want to nuke performance&lt;/li&gt;
&lt;li&gt;While we want to make it harder to guess, aiming for &amp;ldquo;unguessable&amp;rdquo; is just not
reasonable. UUIDv4 is best for that but compromises performance so hard it&amp;rsquo;s not
worth it in the grand scheme of things&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;IDK v7 feels like a good middle ground for security + performance for the &lt;strong&gt;user id&lt;/strong&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Migrating to Vulr</title>
      <link>https://shockrah.xyz/posts/migrating-to-vultr/</link>
      <pubDate>Sun, 27 Oct 2024 20:59:05 -0700</pubDate>
      
      <guid>https://shockrah.xyz/posts/migrating-to-vultr/</guid>
      <description>&lt;h1 id=&#34;what-and-why&#34;&gt;What and Why&lt;/h1&gt;
&lt;p&gt;For some  time now I&amp;rsquo;ve been trying my best to get away from using AWS
for my infrastructure due to the constantly rising price of everything.&lt;/p&gt;
&lt;h2 id=&#34;main-causes-for-higher-cost&#34;&gt;Main causes for higher cost&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fargate&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This one is mostly my own fault lmao since Fargate ( without an application load
balancer ) is actually not that bad in terms of pricing. The issue comes in
if you are trying to host a variety of services like myself on one host.
Services which, are only ever really used for personal and singular use.&lt;/p&gt;
&lt;p&gt;Recall that with fargate we are paying for things on a core count and if you
containize everything this effectively means you are paying per container
more/less. Couple this with lots of contains and your pricing starts to
get really expensive really fast.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Application Load Balancer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are just expensive for small projects what else can I say&amp;hellip;
I wouldn&amp;rsquo;t suggest hosting personal sites behind one of these basically ever.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Scaling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you seriously need an ALB to sit in front of lots of microservices then
you&amp;rsquo;re probably dealing with either an interesting project or just a need
to handle a lot of traffic. After a while I didn&amp;rsquo;t really want a web server
to be my &amp;ldquo;interesting project&amp;rdquo; since this ended up eating way more of my time
than I would have ever liked it to&amp;hellip;&lt;/p&gt;
&lt;h1 id=&#34;why-vultr&#34;&gt;Why Vultr&lt;/h1&gt;
&lt;p&gt;shit&amp;rsquo;s cheap yo&amp;hellip;&lt;/p&gt;
&lt;p&gt;10$ - 20$ roughly for a bare minimum Kubernetes cluster or about 10$ per
host as I&amp;rsquo;m doing now. Provision hosts with Terraform then configure with
Ansible and you have a somewhat reasonable infrastructure for hosting
personal projects.&lt;/p&gt;
&lt;h2 id=&#34;what-do-i-host-now&#34;&gt;What Do I host now?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;shockrah.xyz&lt;/li&gt;
&lt;li&gt;git.shockrah.xyz &amp;lt;&amp;ndash; Gitea instance&lt;/li&gt;
&lt;li&gt;temper.tv &amp;lt;&amp;ndash; vr/funsies blog&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Basically I&amp;rsquo;m hosting more stuff more effectively and it&amp;rsquo;s an infrastructure
that is &amp;ldquo;&amp;rdquo;(([[{{platform agnostic}}]]&amp;ldquo;&amp;ldquo;given its all Terraform anyway and
Ansible can be used basically anywhere there&amp;rsquo;s a host.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Password Managers</title>
      <link>https://shockrah.xyz/posts/password-managers/</link>
      <pubDate>Tue, 30 Apr 2024 16:12:04 -0700</pubDate>
      
      <guid>https://shockrah.xyz/posts/password-managers/</guid>
      <description>&lt;h1 id=&#34;pass-shilling&#34;&gt;&lt;code&gt;pass&lt;/code&gt; Shilling&lt;/h1&gt;
&lt;p&gt;This one is gonna be short but I&amp;rsquo;ve come shill password manager that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Allows for simple generation of passwords&lt;/li&gt;
&lt;li&gt;Allows for easy backups to be made&lt;/li&gt;
&lt;li&gt;Is compatible with basically any password access workflow you can think of&lt;/li&gt;
&lt;li&gt;Is completely foss&lt;/li&gt;
&lt;li&gt;Allows for both single and multiline passwords&lt;/li&gt;
&lt;li&gt;Allows for optional opt-in versioning using git ( as a subcommand )
&lt;ul&gt;
&lt;li&gt;Can also be used with other VCS&amp;rsquo;s&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&amp;rsquo;s called &lt;code&gt;pass&lt;/code&gt; &amp;ndash;&amp;gt; &lt;a href=&#34;https://www.passwordstore.org/&#34;&gt;https://www.passwordstore.org/&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;examples&#34;&gt;Examples&lt;/h1&gt;
&lt;p&gt;Here&amp;rsquo;s an example of how it works&lt;/p&gt;
&lt;p&gt;Simple Generation of passwords:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;~ pass generate example 100
[master 3cfe907] Add generated password for example.
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 example.gpg
The generated password for example is:
9m/Mk5WzLE75=QzhdD;T&amp;gt;}keXOv&amp;#39;)FOh~S(=J43OAZ2qkxg&amp;lt;I&amp;gt;hjUJGRpav%oI&amp;lt;yq!ULw0&amp;lt;)@#P|+y0C2~q[O2=&amp;amp;^x{P_\v&amp;#39;K@\B
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Want to straight up just copy it directly? Ok here you go with &lt;code&gt;-c&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pass generate example2 100 -c
[master 55599f0] Add generated password for example2.
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 example2.gpg
Copied example2 to clipboard. Will clear in 45 seconds.
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;why-tho&#34;&gt;Why tho&lt;/h1&gt;
&lt;p&gt;Because it&amp;rsquo;s completely dead simple to the point of absurdity. Want a really
weird use case; pipe the output into a &lt;code&gt;qr&lt;/code&gt; command and generate completely
random qr codes. Using the same example as above:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pass example | qr
█████████████████████████████████████████████████
█████████████████████████████████████████████████
████ ▄▄▄▄▄ ███▄▄▄ ▀▀▀▄▀▄▀ ▄▀▀▄ ▀█▄▀▄ █ ▄▄▄▄▄ ████
████ █   █ ████ █▀▄▀ ▀ ▄█▀ ▄ █▀▀█▄ █▀█ █   █ ████
████ █▄▄▄█ █▀▄  ▀▄▀ ▀█ ▀▀▄█▄▀ ▀▀ ▄▀▀ █ █▄▄▄█ ████
████▄▄▄▄▄▄▄█▄▀▄▀ ▀ ▀ ▀ ▀ ▀▄█▄█ █▄▀▄█▄█▄▄▄▄▄▄▄████
████▄▀█ █ ▄▀  ▀▄▀▄  ▄▄▀▄▀█▀██   ▀▄█ ▀▄▀▄█▀▀█▀████
████ █▄▄ ▀▄  ▄█▀▄▄ █ █▄▄▀▀██  ▄▀ █▀▄ ▄ ▄▄█  ▀████
████▀▄▄▄█▄▄▀██ ▀█ ▄▄▄▄█▄█ ▀▀▀▀▀ ███▄▀█▄██▀█▀ ████
████▄▀ █▀▄▄  ▀▄▀ ▄ ▄▀  ▀▄▀▄ ▄▀▄█▀ ██▀█▀█▀ ▄  ████
████▀▄ ▀█▄▄ ▄▄█  ██▀ ▄ ▄  █▀▄▀█   ▀ ▄█▀▀█▄▀▀ ████
█████ ▀▀▀█▄▀▄████ ▄▄ ▀ █   ▀ ▄█▀▀▀▄▀▀▀▀▄  █▀▄████
████ ▀ ▀██▄▀ ▀▀ ▄█ ▄▀▄ ▄▄▀▄█ ▄█▀ ▀▀▄█▄ ▄▄▄▀▄ ████
█████▀▄██▀▄▄ ▄█▄█▀▀█▄█▄ ▀▀▄██▀ █▄█▀▄▀ ▀▄▀▄▀██████
████▀█ █▄ ▄ ▄   █ ▀ ███   ▄▀  ██▀▄ ▀▀▀▄██ ▀▄▄████
█████ ▄ ▀█▄█  ▄██▄▀ ▀▀▄▀  ▀   █▀▀▀▄█ ▀  ▄ ██ ████
████▄▀▄▄██▄▄▄  ▀▀▄▄▄▄█▀▀▄ ▀█ ▀▄▀   ▄ █▀▀▄ █▀█████
████▄██▀  ▄▄ ▀▄▄██ ▄▄▀▄   ▄██▄▀▀ ▀ █▀▄ ██ ▄▄ ████
████▄███▄▄▄▄ ▀▄ █▀ ██▄█▄ █▀██ ▀█▄█▀  ▄▄▄ ▀█▄ ████
████ ▄▄▄▄▄ █▀▄▄ ▄▄▄▄▄ █   ██▄▀█▀▄▄ █ █▄█ ▄▀▄▀████
████ █   █ █▀ ▀ ▀▀▀▄ ███ █ █▀▀██▀▀▀▀▄▄  ▄▄█ █████
████ █▄▄▄█ ████▄▀█▀ ▄▀▄▀▀ █▄▄▀█▀ ▀▀▄█▄ █ ▄█ ▄████
████▄▄▄▄▄▄▄█▄▄█▄█▄█▄▄▄███▄▄█▄███▄▄▄█▄█▄▄██▄▄█████
█████████████████████████████████████████████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Also each password is just a file in a directory tree which means you can sort
things however  you&amp;rsquo;d like which is also neat. Anyway that is all I had for now
just thought this program I&amp;rsquo;ve been using for a while now was cool and deserved
a quick post about it &amp;#x1f604;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Fixing a windows EFI boot directory</title>
      <link>https://shockrah.xyz/posts/windows-grub-efi/</link>
      <pubDate>Fri, 27 Oct 2023 18:27:05 -0700</pubDate>
      
      <guid>https://shockrah.xyz/posts/windows-grub-efi/</guid>
      <description>&lt;h1 id=&#34;context&#34;&gt;Context&lt;/h1&gt;
&lt;p&gt;After making my usual Debian drive unusable ( thanks Nvidia ) from an
&lt;code&gt;apt upgrade&lt;/code&gt; I found myself re-installing Debian all over again. Luckily
I keep my &lt;code&gt;/home&lt;/code&gt; and &lt;code&gt;/&lt;/code&gt; mounted on separate partitions so this was
pretty easy. When it came time to pick a drive to boot off of however I comletely
forgot that I had a Windows drive that I had been using to jankily boot off of.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Sidenote&lt;/em&gt;: I only forgot because I never bothered to remedy the situation of
being forced to smack F12 9999 times every time I booted for a few months. &amp;#x1f937;&lt;/p&gt;
&lt;p&gt;After re-installing Debian and getting setup once more I went to boot into
Windows since I had some avatar modeling I wanted to do and&amp;hellip;. couldn&amp;rsquo;t boot.&lt;/p&gt;
&lt;h1 id=&#34;discovering-what-happened&#34;&gt;Discovering what happened&lt;/h1&gt;
&lt;p&gt;From Debian, check where the &lt;code&gt;/boot&lt;/code&gt; is mounted to.
In my case I have drives &lt;code&gt;sda&lt;/code&gt; and &lt;code&gt;sdb&lt;/code&gt; which contain Debian and Windows data
respectively. I found the following&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;/boot&lt;/code&gt; was mounted to &lt;code&gt;sdb&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/boot/efi/EFI/&lt;/code&gt; did not contain any sort of Windows folder&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;#x1f50d; &lt;strong&gt;HINT:&lt;/strong&gt; there are tools in Debian repos to repair this folder however
I tested literally none so good luck.&lt;/p&gt;
&lt;p&gt;Basically the new Grub installation had wiped out the old &lt;code&gt;/boot&lt;/code&gt; partition
which I never paid attention to and removed it &amp;#x1f926; hence why it had
no Windows section. Normally an &lt;code&gt;update-grub&lt;/code&gt; would suffice &lt;strong&gt;if&lt;/strong&gt; that folder
was present but this was not enough.&lt;/p&gt;
&lt;h1 id=&#34;solution&#34;&gt;Solution&lt;/h1&gt;
&lt;p&gt;To make Windows bootable I setup a Windows installation USB drive using dd as such:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dd &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/path/to/Windows.iso of&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/dev/&amp;lt;usb-drive&amp;gt; status&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;progress
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Also this will hang when it gets to the end but seriously just give it some time
because it basically has to verify everything after it&amp;rsquo;s been copied over.&lt;/p&gt;
&lt;p&gt;Finally I found this post on superuser which shows how to bring back the EFI
bootloader for windows so that Grub create a new entry for it and we can boot
like normal &amp;#x27a1;&amp;#xfe0f; &lt;a href=&#34;https://superuser.com/a/1444266&#34;&gt;answer&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;raw-paste-of-solution-from--superuserhttpssuperusercoma1444266&#34;&gt;Raw paste of Solution from 🌐 &lt;a href=&#34;https://superuser.com/a/1444266&#34;&gt;superuser&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In case that answer ever gets clobbered here is the raw paste:&lt;/p&gt;
&lt;p&gt;The other answers given here work great on MBR/BIOS systems, however if you&amp;rsquo;re
on a UEFI system like I am, bootsect will just write a semi-functional boot MBR
over the &lt;a href=&#34;https://en.wikipedia.org/wiki/GUID_Partition_Table#Protective_MBR_(LBA_0)&#34;&gt;🌐 GPT protective MBR and bootrec&lt;/a&gt;
just gives an &amp;ldquo;Access denied&amp;rdquo; error message, and neither one has a functional
option to fix a broken &lt;a href=&#34;https://en.wikipedia.org/wiki/EFI_system_partition&#34;&gt;🌐 EFI system partition&lt;/a&gt;,
which on a UEFI/GPT drive is what
contains the bootloader that used to be stored in the MBR. There&amp;rsquo;s unfortunately
almost no up-to-date guides on fixing the UEFI Windows Boot Manager (almost all
of them just say to run the graphical Startup Repair utility, but that doesn&amp;rsquo;t
fix the problem in all cases), but I finally found the correct solution buried
in &lt;a href=&#34;https://www.partitionwizard.com/clone-disk/bootrec-fixboot-access-is-denied.html&#34;&gt;🌐 this article&lt;/a&gt;,
which requires the use of the &lt;a href=&#34;https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/bcdboot-command-line-options-techref-di&#34;&gt;🌐 bcdboot&lt;/a&gt; command instead:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Grab the &lt;a href=&#34;https://www.microsoft.com/en-us/software-download/windows10&#34;&gt;🌐 Media Creation Tool&lt;/a&gt;, make yourself a Windows 10 installation DVD or USB drive, and then boot into it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When prompted, choose &amp;ldquo;Repair your computer&amp;rdquo;, followed by &amp;ldquo;Troubleshoot&amp;rdquo;, &amp;ldquo;Advanced Options&amp;rdquo;, and finally &amp;ldquo;Command Prompt&amp;rdquo;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run &lt;code&gt;diskpart&lt;/code&gt; and then &lt;code&gt;list disk&lt;/code&gt;. Note the disk number for the disk with your EFI system partition (ESP).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select that disk with &lt;code&gt;select disk x&lt;/code&gt; (where &lt;code&gt;x&lt;/code&gt; is the disk number from the last step).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run &lt;code&gt;list volume&lt;/code&gt;. Note the volume number for your EFI system partition (ESP).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now do &lt;code&gt;select volume x&lt;/code&gt; (where &lt;code&gt;x&lt;/code&gt; is the volume number for the ESP) and then
&lt;code&gt;assign letter=N:&lt;/code&gt; to mount the partition. Run &lt;code&gt;list volume&lt;/code&gt; again and note that
the ESP is now assigned a driver letter. Run &lt;code&gt;exit&lt;/code&gt; to leave &lt;code&gt;diskpart&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(Optional) If you are not currently dual booting and want to fully clean the
ESP before writing a new bootloader, run &lt;code&gt;format N: /FS:FAT32&lt;/code&gt; to reformat it as
FAT32. This is probably not necessary under normal circumstances, however, as
&lt;code&gt;bcdboot&lt;/code&gt; seems to do a good job of cleaning things up itself. Especially &lt;strong&gt;do not
do this if you have a Linux distro on another partition&lt;/strong&gt; or else you&amp;rsquo;ll have to
reinstall GRUB as well once you&amp;rsquo;re done with this. Also note that the following
steps should not affect an EFI GRUB install as long as you do not otherwise
delete GRUB&amp;rsquo;s existing directory on the ESP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finally, write the new bootloader to the partition with &lt;code&gt;bcdboot C:\windows /s N: /f UEFI&lt;/code&gt;.
This command rebuilds a new UEFI-compatible bootloader on the ESP mounted at &lt;code&gt;N:&lt;/code&gt;
using the Windows installation mounted at C:\windows. Once it&amp;rsquo;s done, you can
verify the new bootloader was written by running &lt;code&gt;dir N:\EFI&lt;/code&gt;, where you should
see a &lt;code&gt;Microsoft directory&lt;/code&gt; containing the new Windows Boot Manager as well as a
&lt;code&gt;boot directory&lt;/code&gt; containing the fallback bootloader (along with other directories
for any other bootloaders you have installed, such as GRUB for Linux).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(Optional) If you are dual booting, you will probably need to boot into your
Linux distro and run &lt;code&gt;sudo update-grub&lt;/code&gt; to allow the GRUB scripts to detect and
add the new Windows bootloader.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now boot into your BIOS setup and make sure &amp;ldquo;Windows Boot Manager&amp;rdquo; (or GRUB,
if you&amp;rsquo;re dual-booting) is set as the top boot choice. Save and reboot and
you&amp;rsquo;ll finally be back in Windows (or GRUB).&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here are some links to help you understand EFI stuff ( because I still don&amp;rsquo;t )&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://askubuntu.com/questions/1144636/three-questions-on-boot-efi-and-boot-mountpoints&#34;&gt;https://askubuntu.com/questions/1144636/three-questions-on-boot-efi-and-boot-mountpoints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://support.microsoft.com/en-us/topic/use-bootrec-exe-in-the-windows-re-to-troubleshoot-startup-issues-902ebb04-daa3-4f90-579f-0fbf51f7dd5d&#34;&gt;https://support.microsoft.com/en-us/topic/use-bootrec-exe-in-the-windows-re-to-troubleshoot-startup-issues-902ebb04-daa3-4f90-579f-0fbf51f7dd5d&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>DIY Detergent</title>
      <link>https://shockrah.xyz/posts/making-soap/</link>
      <pubDate>Wed, 05 Jul 2023 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/making-soap/</guid>
      <description>&lt;h1 id=&#34;making-detergent-at-home&#34;&gt;Making detergent at home.&lt;/h1&gt;
&lt;p&gt;Recipe and instructions are followed by some interesting things I found
regarding cost and availability.&lt;/p&gt;
&lt;h1 id=&#34;recipe&#34;&gt;Recipe&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;1 Part Borax&lt;/li&gt;
&lt;li&gt;1 Part Baking Soda ( Sodium &lt;em&gt;Bi-Carbonate&lt;/em&gt; )&lt;/li&gt;
&lt;li&gt;1 Washing soda Semi-Optional ( Sodium &lt;em&gt;Carbonate&lt;/em&gt; )
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Can be made from baking soda if you can&amp;rsquo;t find it in stores&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: While not required does greatly improve the quality of the detergent&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Optional additions&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 Bar of Soap ( optional )
&lt;ul&gt;
&lt;li&gt;No liquid soap will not work for this&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;instructions&#34;&gt;Instructions&lt;/h2&gt;
&lt;p&gt;Mix Borax, Baking Soda, and Washing Soda evenly in a container. If you are using
a bar of soap you can use a cheese grater to break it down so that you can mix
this in with the rest.&lt;/p&gt;
&lt;h2 id=&#34;making-washing-soda--sodium-carbonate-&#34;&gt;Making Washing Soda ( Sodium &lt;em&gt;Carbonate&lt;/em&gt; )&lt;/h2&gt;
&lt;p&gt;Since this stuff can be hard to find you can also make it at home.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a video from &lt;strong&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=cpGEc-pLXN4&#34;&gt;NileRed&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Quick transcription:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pour out baking soda ( sodium bi-carbonate ) into a pot&lt;/li&gt;
&lt;li&gt;As it heats up it will release CO2 and water
&lt;ul&gt;
&lt;li&gt;This results in some bubbling&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Keep heating until bubbling stops and the powder appears like a dense powder.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;faq--stuff-about-cost&#34;&gt;FAQ &amp;amp; Stuff about cost&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Is this actually cheaper than just buying a regular detergent?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;From my &lt;em&gt;very&lt;/em&gt; quick checks of prices around me I found Target had 16oz boxes of baking soda for 1$. A 4 lb box of Borax was 8$.&lt;/p&gt;
&lt;p&gt;For 3 pounds of detergent you would be looking at a 10$ investment of materials.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 lb baking soda ( 1$ )&lt;/li&gt;
&lt;li&gt;1 lb baking soda converted to washing soda ( 1$ )&lt;/li&gt;
&lt;li&gt;1 lb borax ( 2$ )&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In total &lt;strong&gt;4$&lt;/strong&gt; for 3 pounds of unscented detergent isn&amp;rsquo;t too bad.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Are there any alternatives to this sort of thing?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Dish soap unironically works well enough for small loads you just have
to play with the quantities.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What about unit prices for all of these things?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Borax: &lt;a href=&#34;https://www.intratec.us/chemical-markets/borax-price&#34;&gt;https://www.intratec.us/chemical-markets/borax-price&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Baking Soda: &lt;a href=&#34;https://www.intratec.us/chemical-markets/sodium-bicarbonate-price&#34;&gt;https://www.intratec.us/chemical-markets/sodium-bicarbonate-price&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Not including soap because this depends highly on what soap you choose&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Building SlimeVR Trackers for Full Body Tracking</title>
      <link>https://shockrah.xyz/posts/diy-slimevr/</link>
      <pubDate>Wed, 29 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/diy-slimevr/</guid>
      <description>&lt;h1 id=&#34;goal&#34;&gt;Goal&lt;/h1&gt;
&lt;p&gt;To build a Full body set of trackers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;7 trackers&lt;/li&gt;
&lt;li&gt;3 extensions&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;parts-list--prices&#34;&gt;Parts List &amp;amp; Prices&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; &lt;em&gt;Some extra components were purchased in case of defects&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;#x26a0;&amp;#xfe0f; Huge caveats about the purchase list below &amp;#x26a0;&amp;#xfe0f;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Buy more parts than I did, ( especially BMI&amp;rsquo;s ) because
some of these have a horrible failure rate. 15+&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Maybe throw in an extra D1 ( 11 total ) because these can fail too.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Batter chargers tend to be fine but can be prone to getting burned so be careful when soldering.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;main-parts-from-aliexpress&#34;&gt;Main parts from AliExpress:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;10&lt;/code&gt; D1 Mini for &lt;code&gt;20.53$&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;13&lt;/code&gt; BMI 160 for &lt;code&gt;18.99$&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;10&lt;/code&gt; 18650 Battery &lt;strong&gt;chargers&lt;/strong&gt; for &lt;code&gt;6.81$&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Keep in mind that this will also work for regular LIPO batteries&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;See battery section for explanation&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;small-parts-from-aliexpress&#34;&gt;Small parts from AliExpress:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;10 pack of DPDT 2P2T Panel Mount Switches for &lt;code&gt;2.99$&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;100 pack of 30K ohms for &lt;code&gt;4.05$&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;5 pack of 4Pin JST connections for &lt;code&gt;4.93$&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;50 pack of diodes for &lt;code&gt;2.53$&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;batteries&#34;&gt;Batteries&lt;/h2&gt;
&lt;p&gt;For reference I bought:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1&lt;/code&gt; ( 10 piece ) EHAO 804040 3.7V 18mAh for &lt;code&gt;32.77$&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While these do work, shipping time is pretty awful compared to everything else.
Looking at the order of a few months for some vendors.
To deal with this problem we can swap those out for some &lt;code&gt;18650&lt;/code&gt;&amp;rsquo;s:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;10 pack of battery clips &lt;code&gt;7.99$&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set of 10 batteries for &lt;code&gt;33.32$&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Total with taxes: &lt;code&gt;41.14$&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I can attest that &lt;code&gt;18650batteries.com&lt;/code&gt; is a reputable place to get batteries.
&lt;em&gt;SideNote: includes shipping but you&amp;rsquo;re mileage may vary depending on source&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;total-initial-cost-with-shipping-and-taxes&#34;&gt;Total Initial Cost With Shipping and Taxes&lt;/h2&gt;
&lt;p&gt;If you buy the 804040 batteries: &lt;code&gt;93.60$&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;With the 18650&amp;rsquo;s: &lt;code&gt;101.97$&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;assembly&#34;&gt;Assembly&lt;/h2&gt;
&lt;h3 id=&#34;assumptions&#34;&gt;Assumptions&lt;/h3&gt;
&lt;p&gt;That the parts list above is being used however the points below
are kept somewhat general.&lt;/p&gt;
&lt;h3 id=&#34;equipment&#34;&gt;Equipment&lt;/h3&gt;
&lt;p&gt;Important to note that if you don&amp;rsquo;t have soldering equipment you&amp;rsquo;ll need
to get some.
Cheap kits can be found for under 50$ but make sure you have plenty of solder.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;18650&amp;rsquo;s are heavy so if possible&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For this reason it&amp;rsquo;s not a bad idea to get some battery clips and mount
everything to that to keep things compact. When the weight of a tracker
is imbalanced then it&amp;rsquo;s much harder to mount as it tends to &amp;ldquo;swing&amp;rdquo; more.&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;
&lt;p&gt;Heat shrink of varying sizes to clean up splices is basically required.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;*Flux if you want however this is really not required at all.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>Hosting websites with Fargate ECS</title>
      <link>https://shockrah.xyz/posts/hosting-static-sites-with-fargate/</link>
      <pubDate>Mon, 27 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/hosting-static-sites-with-fargate/</guid>
      <description>&lt;h1 id=&#34;context---how-my-websites-have-been-hosted-in-the-past&#34;&gt;Context - How my Websites have been Hosted in the Past&lt;/h1&gt;
&lt;p&gt;A very straight forward setup that lent itself well so keeping costs low and
which may inspire you to also use a similar setup should you want to host
your own website with a Fargate cluster:&lt;/p&gt;
&lt;h2 id=&#34;infrastructure-maintained-with-terraform&#34;&gt;Infrastructure Maintained with Terraform&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Single EC2 machine&lt;/li&gt;
&lt;li&gt;A security group for SSH and web ingress, as well as HTTPS egress&lt;/li&gt;
&lt;li&gt;Elastic IP attached&lt;/li&gt;
&lt;li&gt;&lt;code&gt;A record&lt;/code&gt;&amp;rsquo;s in route53 pointing to the Elastic IP&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;software-required-for-this-setup&#34;&gt;Software Required for this Setup&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Nginx  as a reverse proxy which pointed to all the HTML/CSS/JS required for each website&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The config for this was usually hand written then deployed with Ansible.
Configuration for TLS was then deployed afterwards with Ansible as well.
Worked well enough and it meant I had a decent solution to TLS cert renewals.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gitlab pipelines for deploying static files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Since this required SSH access a service user was created and would usually
setup SSH in Gitlab with the pipeline script below:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;before_script&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;eval &amp;#34;$(ssh-agent -s)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;echo &amp;#34;${CI_USER_KEY}&amp;#34; |  tr -d &amp;#39;\r&amp;#39; | ssh-add - &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;mkdir -p ~/.ssh/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;chmod 700 ~/.ssh/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;ssh-keyscan shockrah.xyz 2&amp;gt;&amp;amp;1 &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;chmod 644 ~/.ssh/known_hosts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;technical-side-of-the-current-setup&#34;&gt;Technical Side of the Current Setup&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;1 Fargate Cluster containing 1 service for each website&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Technically the same could be achieved with 1 service for all websites but that
will come in the next post.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 Load balancer for all websites&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Basically just abusing the load balancer rules to direct traffic to the correct
service target group in the desired cluster.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ACM managed certificates&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Super easy renewal of certificates, be it through Terraform or manually.&lt;/p&gt;
&lt;h2 id=&#34;softwaredocker-images-used-for-services&#34;&gt;Software/Docker Images used for Services&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/nginxinc/nginx-s3-gateway&#34;&gt;nginx-s3-gateway&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This image allows the usage of nginx to proxy &lt;strong&gt;private&lt;/strong&gt; S3 buckets.
This is basically how I am able to keep my S3 buckets totally locked down
while still allowing the content to be cleanly viewable to the public.&lt;/p&gt;
&lt;h1 id=&#34;why-the-switch-to-the-new-setup&#34;&gt;Why the switch to the new setup&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Easier to manage tooling&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Being that &lt;a href=&#34;https://gitlab.com/shockrah/project-athens/&#34;&gt;Project Athens&lt;/a&gt; is not
my only project that requires attention in regards to infrastructure and upkeep
so reducing the amount of tooling and documentation &lt;em&gt;required&lt;/em&gt; to manage
things is worth it for me personally.&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Updating content is much easier&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The biggest benefit is that I have to maintain less code to deploy content to
the websites themselves meaning less code per project&amp;rsquo;s pipeline.
In many cases this also means I can remove Ansible entirely from a project which
means much less to manage in terms of keys and pipeline code.&lt;/p&gt;
&lt;h1 id=&#34;plans-for-future-technical-changes&#34;&gt;Plans for Future Technical Changes&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Making the buckets public to leverage a reguar Nginx container&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The advantage of this is that I can use 1 container to balance all my websites
just like before and still let the ACM + application load balancer do the
heavy lifting for TLS.
With some clever auto-scaling I can then reduce the average amount of containers
I pay for while still retaining good availability to the sites themselves.&lt;/p&gt;
&lt;h1 id=&#34;cost&#34;&gt;Cost&lt;/h1&gt;
&lt;p&gt;The old setup was definitely way cheaper.
The load balancer alone runs me about 25-40$ USD + the two containers
that I use for each site. Overall cost is slightly higher than just the single
EC2 machine however you can minimize this cost by just running less containers.&lt;/p&gt;
&lt;p&gt;Reason for the whack estimation is because I have&amp;rsquo;t looked too hard into how
much this costs exactly as I have other clusters that I manage at the moment
and things get lost in the noise.&lt;/p&gt;
&lt;p&gt;Just know that if you&amp;rsquo;re looking to minimize price at all costs then EC2  machines + autoscaling is the way to go.
Fargate &lt;em&gt;does&lt;/em&gt; however make things much easier to deploy/manage.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Making Alfajores</title>
      <link>https://shockrah.xyz/posts/alfajores/</link>
      <pubDate>Sun, 25 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/alfajores/</guid>
      <description>&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/alfajores/main.jpg&#34; alt=&#34;&#34;&gt;

&lt;h1 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Flour - &lt;em&gt;1 Cup&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Don&amp;rsquo;t worry about packing this down when measuring&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Corn Starch  - &lt;em&gt;1 Cup&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Don&amp;rsquo;t worry about packing this down when measuring&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Powered Sugar - &lt;em&gt;6 Tbsp.&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unsalted butter - &lt;em&gt;200 g. ➡ 220 g.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Make sure the butter is soft and cut into chunks for when you mix it&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;steps&#34;&gt;Steps&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Sift together all the dry ingredients into a large bowl.&lt;/li&gt;
&lt;/ol&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/alfajores/sifted.jpg&#34; alt=&#34;&#34;&gt;

&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Adding butter chunks to dry in bowl.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Mixing technique&lt;/strong&gt;: Use only your fingers, no palms. Basically just
grab a bunch of the mix with the fingers like a spider then pull it together
then sprinkle it back in.&lt;/p&gt;
&lt;p&gt;Below is a clip of what the final texture should look like, just make yours
a &lt;strong&gt;tiny bit more moist&lt;/strong&gt;.&lt;/p&gt;
&lt;video controls
	class=&#34;pure-img-responsive&#34;
	src=&#34;https://shockrah.xyz//media/img/alfajores/texture.mp4&#34;
	alt=&#34;&#34;&gt;
&lt;/video&gt;


&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Mix everything until you have a nearly sandy quality about the mix.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It will feel like wet sand, that&amp;rsquo;s correct. It may need some help to maintain
structure however it shouldn&amp;rsquo;t just fall apart either.&lt;/p&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;
&lt;p&gt;Chill in the fridge for &lt;em&gt;15 minutes&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Roll out to be about the same thickness as a pie crust (4/5 mm) and cut into small disks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finally bake for 11 minutes at 350° F.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;words-of-caution&#34;&gt;Words of Caution&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Bake on parchment paper to easily peel them off later&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Once they are cooked ( and before ) the caps have basically 0 structural integrity so handle with lots of care.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Making Cola</title>
      <link>https://shockrah.xyz/posts/cola/</link>
      <pubDate>Thu, 30 Dec 2021 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/cola/</guid>
      <description>&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/cola1/finish.jpg&#34; alt=&#34;&#34;&gt;

&lt;h1 id=&#34;taste&#34;&gt;Taste&lt;/h1&gt;
&lt;p&gt;I&amp;rsquo;m ignoring carbonation since everyone is going to probably use something
different. &lt;em&gt;However&lt;/em&gt;, I used a Soda Stream set to &lt;strong&gt;2&lt;/strong&gt; which gave me a
very fine carbonation and a very nice head when poured over ice.&lt;/p&gt;
&lt;p&gt;Taste wise this is going to be very flowery, cinnamon-y, cola.&lt;/p&gt;
&lt;h1 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Makes 4 cups of syrup total&lt;/em&gt;.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Amount&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Item&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1 tsp&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Cinnamon&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1 tsp&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Nutmeg&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1 tsp&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Coriander&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1 tbsp&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Brown Sugar&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1/2 tsp&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Anise&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1/2 tsp&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Citric Acid&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Oranges worth of &lt;strong&gt;zest&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Lemon worth of &lt;strong&gt;zest&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2 Cups&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Water&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2 Cups&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Sugar&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;process&#34;&gt;Process&lt;/h1&gt;
&lt;p&gt;Mix the following together:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cinnamon&lt;/li&gt;
&lt;li&gt;Nutmeg&lt;/li&gt;
&lt;li&gt;Coriander&lt;/li&gt;
&lt;li&gt;Brown Sugar&lt;/li&gt;
&lt;li&gt;Anise&lt;/li&gt;
&lt;li&gt;Citric Acid&lt;/li&gt;
&lt;li&gt;Oranges zest&lt;/li&gt;
&lt;li&gt;Lemon zest&lt;/li&gt;
&lt;li&gt;2 cups of water&lt;/li&gt;
&lt;/ul&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/cola1/dry-bowl.jpg&#34; alt=&#34;&#34;&gt;

&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/cola1/sugar.jpg&#34; alt=&#34;&#34;&gt;

&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/cola1/zest.jpg&#34; alt=&#34;&#34;&gt;

&lt;p&gt;Mix this up in a pot and get it to simmer for 20 minutes.&lt;/p&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/cola1/pot.jpg&#34; alt=&#34;&#34;&gt;

&lt;p&gt;While the pot is simmering take the 2 cups of sugar and blitz it in a food
processor. Doing this makes the sugar dissolve more easily later on when we
mix everything.&lt;/p&gt;
&lt;p&gt;For now while waiting move the sugar to a large bowl.&lt;/p&gt;
&lt;p&gt;Once the 20 minutes on the pot is up grab a fine sieve and strain the pot&amp;rsquo;s
mixture through into the bowl with the sugar. Let cool and mix occasionally for
about 15 minutes.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;re looking for a simple-syrup consistency.&lt;/p&gt;
&lt;p&gt;Once cool you can mix with club soda, sparkling mineral water, or if you have a
Soda Stream use that, to add some carbonation.&lt;/p&gt;
&lt;h2 id=&#34;ration-for-soda&#34;&gt;Ration for soda&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;4:1&lt;/strong&gt; of Water to syrup.&lt;/p&gt;
&lt;h1 id=&#34;additional-notes&#34;&gt;Additional Notes&lt;/h1&gt;
&lt;p&gt;You can also add 1 tsp of vanilla bean, or like a splash of vanilla extract
near the end when you are mixing with the sugar.&lt;/p&gt;
&lt;p&gt;If the final product is too syrupy then turn it down to like a &lt;strong&gt;5:1&lt;/strong&gt; ratio.
Any lower and you might start to dilute the flavor too much.&lt;/p&gt;
&lt;p&gt;Finally if you don&amp;rsquo;t like the color then you can add blue + red to make the color
a bit darker, similar to the pic below. I used &lt;strong&gt;5 blue to 4 red&lt;/strong&gt;.&lt;/p&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/cola1/fake-bottled.jpg&#34; alt=&#34;&#34;&gt;

</description>
    </item>
    
    <item>
      <title>Nvidia Drivers on Debian Sid</title>
      <link>https://shockrah.xyz/posts/nvidia/</link>
      <pubDate>Mon, 27 Dec 2021 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/nvidia/</guid>
      <description>&lt;h1 id=&#34;packages-you-need&#34;&gt;Packages you need&lt;/h1&gt;
&lt;p&gt;To detect the right type of driver to install &lt;code&gt;apt&lt;/code&gt; repositories have a package
called &lt;code&gt;nvidia-detect&lt;/code&gt; which I recommend running first. In my case running a
&lt;em&gt;GTX 2060&lt;/em&gt; I had to install the generic &lt;code&gt;nvidia-driver&lt;/code&gt; package&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before you install the driver package!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Grab the apt package &lt;code&gt;nvidia-xconfig&lt;/code&gt;. If you&amp;rsquo;re like me and never bothered to
an &lt;code&gt;/etc/X11/xorg.conf&lt;/code&gt; this will write out a config for you that should,
&lt;em&gt;just werk&lt;/em&gt;.&lt;/p&gt;
&lt;h1 id=&#34;installing&#34;&gt;Installing&lt;/h1&gt;
&lt;p&gt;Commands are listed in order, just be sure to run with correct permissions.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apt install nvidia-detect
package=$(nvidia-detect | grep &amp;#39;^ *nvidia&amp;#39;)
apt install &amp;#34;$package&amp;#34;
nvidia-xconfig
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note: Pretty much all of the above commands, except for line 2 require elevated
permissions.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>NY Egg Cream and DragonFruit Soda</title>
      <link>https://shockrah.xyz/posts/chocolate-and-dragonfruit/</link>
      <pubDate>Sun, 19 Sep 2021 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/chocolate-and-dragonfruit/</guid>
      <description>&lt;h2 id=&#34;preface&#34;&gt;Preface&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m aware of how these two have nothing to do with each other but here&amp;rsquo;s my
ramblings on how this went and what I learned making them anyway.&lt;/p&gt;
&lt;h2 id=&#34;dragon-fruit-syrup---used-for-the-soda&#34;&gt;Dragon Fruit Syrup - Used for the Soda&lt;/h2&gt;
&lt;p&gt;Heads up this is a &lt;em&gt;very&lt;/em&gt; mild flavored soda and thus I recommend using using the syrup more as a dye since basically anything/everything &lt;em&gt;will&lt;/em&gt; overpower its flavor.&lt;/p&gt;
&lt;h3 id=&#34;ingredients&#34;&gt;Ingredients&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;1/4 Cup White Sugar&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1/4 Cup Water&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1/4 Dragon Fruit (with the skin)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some recipes don&amp;rsquo;t call for the skin however including does give a more &lt;em&gt;tropical/wild&lt;/em&gt; taste that I personally really liked.
Being that the fruit has a very mild taste I would suggest keeping it in to give more of a chance to be felt in drinks afterwards otherwise its basically just a dye.&lt;/p&gt;
&lt;h3 id=&#34;process&#34;&gt;Process&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Mix the water, sugar, and fruit together&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bring the mixture up to a boil&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Will look something like this while boiling, however I would also mix and smash
this a bit with a spoon while boiling:&lt;/p&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/dragonfruit/simmer.jpg&#34; alt=&#34;&#34;&gt;

&lt;ul&gt;
&lt;li&gt;Keep boiling for about 5-7 minutes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I should note that I was basically guessing on time here however the finished syrup was decently fragrant anyway.&lt;/p&gt;
&lt;h2 id=&#34;making-the-soda---the-easy-part&#34;&gt;Making the soda - (The easy part)&lt;/h2&gt;
&lt;p&gt;Mix in the newly made syrup, ice and club soda and you&amp;rsquo;re done.
I&amp;rsquo;ve added some Dragon fruit chunks to the mix for pizzazz however they ended up
helping the flavor a ton in my opinion.&lt;/p&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/dragonfruit/chunks.jpg&#34; alt=&#34;&#34;&gt;

&lt;p&gt;Basically the flavor is &lt;em&gt;extremely&lt;/em&gt; mild however the texture of the fruit itself
is similar to a kiwi. Even after &lt;strong&gt;loading&lt;/strong&gt; the glass with more syrup there still
isn&amp;rsquo;t much flavor and the bite of it all really overwhelms it. While I&amp;rsquo;m not surprised
I should mention that this would work really well as a dye since the color it gives off is a really pretty pinkish/purple (which also stains just about everything it touches).&lt;/p&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/dragonfruit/soda.jpg&#34; alt=&#34;&#34;&gt;

&lt;p&gt;meh/10 but at least it was refreshing.&lt;/p&gt;
&lt;h2 id=&#34;ny-egg-cream&#34;&gt;NY Egg Cream&lt;/h2&gt;
&lt;h3 id=&#34;ingredients-1&#34;&gt;Ingredients&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;1-2 ounces Chocolate syrup&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1-2 ounces of Milk&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Any kind of milk should be fine. Personally, I used a 2% lactose-free milk.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disproportionate amounts of club soda&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This one depends on how big the glass is + taste.&lt;/p&gt;
&lt;h3 id=&#34;process-1&#34;&gt;Process&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Pour in the chocolate syrup, making sure to get some on the sides of the glass&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The pouring on the sides actually help with the mixing later(source: dude trust me).&lt;/p&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/nyeggcream/choco-sides.jpg&#34; alt=&#34;&#34;&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Pour the milk in next&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pour up to a third of the way up with club soda, the rest will just be head&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mix &lt;strong&gt;vigorously&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My suggestion for mixing is to combine a swirly motion and a stabby motion.
More like a tilted swirly motion.
The mixing should be fast and not at all gentle.
The idea here is that we &lt;em&gt;want bubbles&lt;/em&gt; to make a nice foamy head to sip through.
Remember: the foamier the better since we &lt;em&gt;want&lt;/em&gt; a really tall head of foam on
this drink as its going to dissipate really quick.&lt;/p&gt;
&lt;p&gt;The taste of course is like chocolate milk but its really the texture of this drink that makes it so special and unique. The head also really adds the experience so I suggest &lt;em&gt;not drinking with a straw&lt;/em&gt; to get the ⓕⓤⓛⓛ ⓔⓧⓟⓔⓡⓘⓔⓝⓒⓔ.&lt;/p&gt;
&lt;h3 id=&#34;final-notes&#34;&gt;Final notes&lt;/h3&gt;
&lt;p&gt;This isn&amp;rsquo;t a drink you nurse since the head dissipates so quickly.
I haven&amp;rsquo;t tried it but maybe with some ice cream the head would last longer so try
messing with the original recipe to get that head to stick around.&lt;/p&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/nyeggcream/finished.jpg&#34; alt=&#34;&#34;&gt;

</description>
    </item>
    
    <item>
      <title>Building my Blog with Hugo</title>
      <link>https://shockrah.xyz/posts/hugo/</link>
      <pubDate>Fri, 10 Sep 2021 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/hugo/</guid>
      <description>&lt;p&gt;For a while now I&amp;rsquo;ve been using &lt;code&gt;pandoc&lt;/code&gt; and a combination of shell scripts to build and deploy my site via a gitlab CI/CD pipeline.
Given that I want to start sharing my site to more people I realized I need a way to generate some meta data for each page.
In order to this I have to somehow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tag each page with meta data that other sites can look at&lt;/li&gt;
&lt;li&gt;Make sure the build system is aware of this new meta-data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Inserting meta data into posts and page source code isn&amp;rsquo;t too hard but there is the problem of standardizing a format which meets my criteria of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Easy to write&lt;/li&gt;
&lt;li&gt;Easy to parse&lt;/li&gt;
&lt;li&gt;Preferably not verbose to keep things small&lt;/li&gt;
&lt;li&gt;As robust as possible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That last one is the part that makes this really hard to implement if I&amp;rsquo;m being honest.
Yes I could come up with a format and use something like &lt;code&gt;sed&lt;/code&gt; or &lt;code&gt;awk&lt;/code&gt; to replace markdown with inline HTML and do some wizardy on the compilation script to &lt;code&gt;cat&lt;/code&gt; partial html files together properly but&amp;hellip;
After having already done similar things for other projects I know exactly how painful that can be, especially to do it well.&lt;/p&gt;
&lt;h2 id=&#34;why-hugo&#34;&gt;Why Hugo&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Instant support for yaml meta data in each markdown file&lt;/li&gt;
&lt;li&gt;Pages are built out of go-templates with javascript&lt;/li&gt;
&lt;li&gt;Templates&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It&amp;rsquo;s literally just the templates.
The fact is I have two templates that I care about right now: &lt;code&gt;posts&lt;/code&gt; and &lt;code&gt;index&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What about styling and making sure you don&amp;rsquo;t lose the charm of the site?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I can literally re-use the same style sheet from before with Hugo and fonts can also stay where they are.
No Javascript is ever compiled and sent to the browser.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What build advantages do you get from this?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Robustness. I can build out tons of pages in reasonable amounts of time with no mysterious errors and have a ton of flexibility when it comes to adapting templates to be something new.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Aren&amp;rsquo;t you locked into a single theme this way?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yes but most people&amp;rsquo;s themes send a ton of Javascript which I don&amp;rsquo;t want to do ever&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Can I see what the theme looks like?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sure: &lt;a href=&#34;https://gitlab.com/shockrah/shockrah-city/-/tree/master/themes/shockrah.xyz&#34;&gt;click here for the theme&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Lewdlad: The Little Chronjob that could</title>
      <link>https://shockrah.xyz/posts/lewd-lad-infra/</link>
      <pubDate>Sun, 25 Jul 2021 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/lewd-lad-infra/</guid>
      <description>&lt;h1 id=&#34;lewdlad-the-little-chronjob-that-could&#34;&gt;Lewdlad: the little Chronjob that could&lt;/h1&gt;
&lt;h2 id=&#34;what-is-lewdlad&#34;&gt;What is &amp;ldquo;Lewdlad&amp;rdquo;&lt;/h2&gt;
&lt;p&gt;Lewdlad is a Discord chat bot I created which (at the time of writing this) is used to orchestrate multiple AWS EC2 servers which run different game servers(Minecraft, Reflex, Hexxit, etc).&lt;/p&gt;
&lt;h3 id=&#34;some-history&#34;&gt;Some history&lt;/h3&gt;
&lt;p&gt;The first version of Lewdlad was a Python script that would literally pick random images from a set of red boards on 4chan and send it to a random person.
Eventually I turned it into a bot which basically just sent the random image to whoever invoked the command.&lt;/p&gt;
&lt;p&gt;After some time came the &lt;em&gt;Hanime&lt;/em&gt; module, which came from a joke of &amp;ldquo;I wish Lewdlad would send some fire hentai.
After some research I realized querying the site wasn&amp;rsquo;t going to be easy since there wasn&amp;rsquo;t a public nice made API.
To this end I opened up the site and did some reverse engineering to figure out how to spoof a browser request and get some results.
Some reversing and trial-and-error later and I had a working request script which I could hook up to the bot.
Slapped it all behind a command with some basic arguments and like &lt;code&gt;.pron&lt;/code&gt; was born.&lt;/p&gt;
&lt;h3 id=&#34;the-beginnings-of-the-server-manager&#34;&gt;The beginnings of the server manager&lt;/h3&gt;
&lt;p&gt;Around this time I started hosting a minecraft server for friends to play on.
Being hosted on AWS meant the server had &lt;em&gt;burst capacity&lt;/em&gt;, which basically means the CPU can boost temporarily to handle harder workloads.
This ability is similar to a magic ability in most games, takes up some MP and has to recharge.
While idling a vanilla minecraft server sits very close to the &lt;em&gt;burst limit&lt;/em&gt; where the CPU starts using its &lt;em&gt;burst capability&lt;/em&gt;.
To make sure it didn&amp;rsquo;t needlessly burst I made sure that we only started a game server if the bot was asked to; hence why I gave Lewdlad a hook to run a &lt;code&gt;start.sh&lt;/code&gt; and &lt;code&gt;stop.sh&lt;/code&gt; script for each configured game.
This behavior was then put behind a couple of Discord commands.&lt;/p&gt;
&lt;p&gt;The architecture thus far ended up looking like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Lewdlad/
	&amp;lt;code and things&amp;gt;
Games/
	Minecraft/
		discord-bot.json
		start.sh
		&amp;lt;game files&amp;gt;
	ReflexArena/
		discord-bot.json
		start.sh
		stop.sh
		&amp;lt;game files&amp;gt;
	CS:Source/
		&amp;lt;game files&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The advantage of this structure above is that only directories with that &lt;code&gt;discord-bot.json&lt;/code&gt; configuration file would ever be picked up by the bot.
It was also really easy to setup since you only needed a &lt;code&gt;start.sh&lt;/code&gt; script and optionally a &lt;code&gt;stop.sh&lt;/code&gt; script since Lewdlad had its own &lt;em&gt;nuke-all-the-things-function&lt;/em&gt; in its own back-end.
This meant a minimal configuration could look like&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{
	&amp;#34;name&amp;#34;: &amp;#34;some server&amp;#34;,
	&amp;#34;id&amp;#34;: &amp;#34;name of parent directory&amp;#34;,
	&amp;#34;script&amp;#34;: &amp;#34;start.sh&amp;#34;
	// These below are added by the bot
	&amp;#34;pid&amp;#34;: &amp;lt;process id here&amp;gt;,
	&amp;#34;active&amp;#34;: true|false,
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Adding crash safety is trivially easy as recovering is a matter of checking configuration files and determining which are &lt;em&gt;falsely active&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&#34;a-new-architecture&#34;&gt;A new Architecture&lt;/h2&gt;
&lt;p&gt;The new architecture has a few goals in mind:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Reduce operating costs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Reduce impact of game failure&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;learned the hard way how bad wine would throttle everything&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;More flexibility&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/lewdlad/arch.svg&#34; alt=&#34;&#34;&gt;

&lt;p&gt;With this new architecture:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Lewdlad lives on its own virtual private server&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Each game server is now its own EC2 instance&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Basically just an EC2 cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Loggerlad is whatever I decide to use for centralized logging&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;pros&#34;&gt;Pros&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Only get charged for ec2 instances that are &lt;em&gt;actually live/running&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Elastic IP&amp;rsquo;s are cheap as hell per month&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Lots of free logging services that I could technically even host my self.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;cons&#34;&gt;Cons&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;More complexity, more problems&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Maintenance requires more planning since there&amp;rsquo;s more &lt;em&gt;moving parts&lt;/em&gt; than a single server&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bot commands are way slower since because&amp;hellip;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Lewdlad has to go through an API Gateway&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;That gateway then has to talk to Lambda&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finally lambda has to (probably) go through several internal AWS services to reach the EC2 instances&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Game services are located literally everywhere(Oregon, L.A., Chicago etc.)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With the tech out of the way here&amp;rsquo;s the &lt;em&gt;real&lt;/em&gt; reason why I did this.
The advantages of Light sail during the &amp;ldquo;on-season&amp;rdquo; periods of high traffic are not worth the cost during the &amp;ldquo;off-season&amp;rdquo; when there&amp;rsquo;s no traffic.
This new setup allows me to have instances which can be elastically started/stopped based on their usage which in turn reduces monthly cost.&lt;/p&gt;
&lt;p&gt;Regular stoppages can also be configured either from Lambda&amp;rsquo;s side or from an EC2 instance, if we don&amp;rsquo;t want to risk going over the 1000 request quota.
This should honestly never happen however since that would require somewhere like 30 lambda based commands to be issued &lt;em&gt;everyday&lt;/em&gt; for a month straight, which isn&amp;rsquo;t likely given how often commands were issued before the migration.
At most I would get something like 10 commands a day but it was never consistent and only happened a few times a month, like on the weekends.&lt;/p&gt;
&lt;h2 id=&#34;closing-thoughts-and-remarks&#34;&gt;Closing Thoughts and Remarks&lt;/h2&gt;
&lt;p&gt;There is one thing I didn&amp;rsquo;t mention, which is turning off the server given low CPU usage.
This could probably be fixed by just installing a script on each game server to occasionally log CPU time and check if the server has been &amp;ldquo;dead&amp;rdquo; for some time, prompting a shutdown to conserve cost.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s probably more that could be done but after this point for my current scaling any more feels to much like over engineering so I&amp;rsquo;ll basically keep architecture the way it is now.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Setting up OBS </title>
      <link>https://shockrah.xyz/posts/obs-setup/</link>
      <pubDate>Fri, 19 Mar 2021 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/obs-setup/</guid>
      <description>&lt;h1 id=&#34;setting-up-obs---for-people-with-better-stuff-to-do&#34;&gt;Setting up OBS - for people with better stuff to do&lt;/h1&gt;
&lt;p&gt;This is going to be a very casual post so don&amp;rsquo;t expect huge a&lt;/p&gt;
&lt;h2 id=&#34;before-anything&#34;&gt;Before anything&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Make sure you have hardware encoding enabled; especially if you have a dedicated GPU.
You can find this setting under &lt;code&gt;Output -&amp;gt; Encoder&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Setup a hotkey for muting your microphone &lt;code&gt;Hotkeys -&amp;gt; Mix/Aux [Mute+Unmute]&lt;/code&gt;. I personally use &lt;code&gt;Ctrl + Shift + Space&lt;/code&gt;, also these two are coupled together so they are always the same(thank me later when).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bit rate is used to describe how much data you can &amp;ldquo;spread&amp;rdquo; over 1 second. Terrible analogy incoming: &lt;code&gt;bit-rate = butter&lt;/code&gt; and &lt;code&gt;bread size = resolution&lt;/code&gt;. The more butter you have the more you can cover the bread.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Too much bread(resolution), not enough butter(bit-rate)? Then your image quality is trashed.&lt;/p&gt;
&lt;p&gt;Too much butter(bit-rate), not enough bread(resolution)? Great image quality but after a point it&amp;rsquo;s wasted due to the resolution.&lt;/p&gt;
&lt;h2 id=&#34;recording&#34;&gt;Recording&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;What bitrate/fps/resolution should I use?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;5000 KBPS is pretty much the baseline in my opinion for recording as the quality will very quickly look like shit the lower you go from here(at 1920x1080 and up).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Will it look good?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It will be passable at 1920x1080, it won&amp;rsquo;t be bad but it won&amp;rsquo;t be good either, it will be average enough that you probably won&amp;rsquo;t notice &lt;strong&gt;unless&lt;/strong&gt;&amp;hellip;
The amount of &lt;em&gt;visual noise&lt;/em&gt; is really high then you&amp;rsquo;ll actually get real value from cranking up the bitrate.&lt;/p&gt;
&lt;p&gt;Personally I use 1920x180 @ 10,000 Kbps since most of the games I play regularly don&amp;rsquo;t have much visual noise or I turn off those &amp;ldquo;eye clutter&amp;rdquo; setting off anyway. Games like Battlefield, Battlefront, and Titanfall are good examples of games where you want to start at 10K and work your way up/down depending on how your PC handles things.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How can I not destroy my hard drive and get decent quality&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;1280x720 @ 5000 Kbps. No I&amp;rsquo;m not kidding, 1280 is a really good for non-fullscreeen content and at 5K bit-rate you&amp;rsquo;re hardpressed to find games that &lt;em&gt;don&amp;rsquo;t&lt;/em&gt; look good.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How do I not instantly fill my hard drive?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bitrate. This is the thing that affects the amount of space required on a harddrive or a network, the resolution does nothing to the file size.
For some perspective:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;10000 Kbps is roughly 1.25 megabytes per second&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;streaming&#34;&gt;Streaming&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;How do I make my stream look really good like those pr0 streamers on Twitch&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Become a partner. In all seriousness, the maximum bit rate allowed by twitch(unless your partnered) is literally 6000 Kbps. They recommend streaming at 1920x1080 but if I&amp;rsquo;m being honest it&amp;rsquo;s not worth it. Lower resolution + higher bitrate typically results in more clear image quality. The other added benefit is that lower resolutions require less bit-rate to actually look decent.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;CBR v VBR [Constant Bit-Rate v Variable Bit-Rate]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If OBS needs to(for performance) it will drop frames. Enabling VBR means that OBS will try to drop bit-rate when it needs to instead.
The rule of thumb is this(for twitch at least): any pc + stable internet =&amp;gt; just use CBR. Bad internet? either stream at 48 fps + low res + lowish(3000Kbps) bit rate and you&amp;rsquo;ll probably be fine.&lt;/p&gt;
&lt;h2 id=&#34;audio&#34;&gt;Audio&lt;/h2&gt;
&lt;p&gt;There is no setting that can match a decent physical setup so here goes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can find mic booms for like 20 USD online&lt;/li&gt;
&lt;li&gt;A decent-ish microphone can be bought for like 15 USD online(check out Pyle or like anyone that sells entry level music/recording gear)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These two together will get you: decent quality + decent sound isolation. Also put a cloth at the base of the stand to isolate even more from taps/bumps on the desk.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What if I don&amp;rsquo;t want to buy a microphone?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For most people there are two filters that will give the most notable changes(maybe three).
&lt;em&gt;Warning: the following explanations will probably upset every audiophile/sound engineer in  999 mile radius here goes anyways&lt;/em&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gain&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is similar to volume in that increasing it makes your overall sound louder, however, this will also make your sound more distorted.
For clean voice tracks on a stream you&amp;rsquo;ll have to find a balance between loud/distorted(&amp;ldquo;dirty&amp;rdquo;) sound.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Noise Suppression&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As the name implies it can be used to reduce background noise(in theory).
In my experiences this actually does very little and is nowhere near as powerful through OBS as you may think.
If you want proper background noise reduction then lower the sensitivity of your mic and just jam it into your face.&lt;/p&gt;
&lt;h2 id=&#34;clipping---replay-buffer&#34;&gt;Clipping - Replay Buffer&lt;/h2&gt;
&lt;p&gt;This will use the same settings as the recording setup although I suggest setting up a key to save the current buffer.&lt;/p&gt;
&lt;p&gt;Be wary that even though you saved the current buffer does not mean that the buffer you saved is flushed out.
No; in fact when you save a replay buffer saving again immediately afterwards will save the past &lt;code&gt;x&lt;/code&gt; seconds even if that time overlaps with the previous buffer&amp;rsquo;s time.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>High Spec Logging on Low Spec Hardware</title>
      <link>https://shockrah.xyz/posts/logging/</link>
      <pubDate>Mon, 15 Mar 2021 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/logging/</guid>
      <description>&lt;h1 id=&#34;high-spec-logging-on-low-spec-hardware&#34;&gt;High Spec Logging on Low Spec Hardware&lt;/h1&gt;
&lt;p&gt;Being a server admin with a ramen noodle budget my servers aren&amp;rsquo;t super fancy
however, I still need logging to make sure I know what&amp;rsquo;s going on to fix things.
This means that if I want logging I have to use things that are as minimal as possible.
I&amp;rsquo;ve used journald logs for a while now and frankly I&amp;rsquo;m completely over reading
non-essential[1] logs via ssh, especially when there&amp;rsquo;s huge dumps of data to sift through.&lt;/p&gt;
&lt;p&gt;So first here are the server specs I have to work with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;2 Lightsail instances: 2 Cores w/ 4GB RAM (each)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3 VPS&amp;rsquo;s(IONOS): 1 core w/ 2GB RAM (each)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Between these I&amp;rsquo;ve got dev databases, websites, and game servers.
The game servers are the ones I want to look at today since those produce logs
when I&amp;rsquo;m not looking(i.e. when other people are playing/using commands on the chatbot).&lt;/p&gt;
&lt;h2 id=&#34;what-i-use-and-why&#34;&gt;What I use and why&lt;/h2&gt;
&lt;p&gt;In short: &lt;a href=&#34;https://vector.dev/&#34;&gt;vector&lt;/a&gt; and  &lt;a href=&#34;https://www.honeycomb.io/&#34;&gt;honeycomb&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I would normally  go for something self-hosted and FOSS with an aggregate like honeycomb
but honestly I just needed something that worked and honeycomb is exactly that.
It comes with a web UI which is nice because I don&amp;rsquo;t always have access
to a terminal nor do I want to ssh into burning servers anyway.&lt;/p&gt;
&lt;h2 id=&#34;why-vector-over-other-options&#34;&gt;Why Vector over other options&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;It&amp;rsquo;s lightweight&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Super easy to setup&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vector is statically compiled so its a single binary(around 40 MEG). Configuration
consists of a single config file for multiple sinks(in my case).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ready to send to basically any data sink I want.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No really look at how many sinks it supports: &lt;a href=&#34;https://vector.dev/docs/reference/configuration/sinks/&#34;&gt;ref&lt;/a&gt;.
I settled on honeycomb personally because its one less thing to host and because none of the logs I&amp;rsquo;m sending actually contain sensitive data so I&amp;rsquo;m not really worried about it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It&amp;rsquo;s easy to fan out data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ease of creating data sinks its trivial to take your data inputs and fan them
out to basically anywhere to have lots of backups(not that I &lt;em&gt;really&lt;/em&gt; need it buy &lt;em&gt;heywhynot&lt;/em&gt;).&lt;/p&gt;
&lt;h2 id=&#34;where-i-run-it&#34;&gt;Where I run it&lt;/h2&gt;
&lt;p&gt;Vector lives right next to my chat-bot which people control to turn game servers
on/off.
I don&amp;rsquo;t run vector on the websites I run are behind Nginx which hasn&amp;rsquo;t failed me
in a few months and the occasional restart seems to remedy all things.
The Mysql database I have is literally for running tests so I&amp;rsquo;m basically staring
at it when it does produce logs and they have entirely to do with the tests I&amp;rsquo;m running
at the time.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Using Gitlab CI For VPS and Neocites Deployment</title>
      <link>https://shockrah.xyz/posts/docker-ftw/</link>
      <pubDate>Mon, 08 Feb 2021 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/docker-ftw/</guid>
      <description>&lt;h1 id=&#34;using-gitlab-ci-for-vps-and-neocites-deployment&#34;&gt;Using Gitlab CI For VPS and Neocites Deployment&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;I&amp;rsquo;ll make this one short&lt;/em&gt;: Deploying to a VPS is pretty easy when its already configured with Nginx to serve static content, but Neocities is a slight worse pain. Several scripts later I&amp;rsquo;ve figured out how to 100% automate pushing to both.&lt;/p&gt;
&lt;h2 id=&#34;docker&#34;&gt;Docker&lt;/h2&gt;
&lt;p&gt;A few notes about this docker file:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Could be made way smaller if using Alpine&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Setting up Pandoc on alpine is way more effort on Alpine because you have to compile it yourself as its not in the official Alpine repos&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;gensite is a script I wrote for building markdown based sites with Pandoc with 0 deps&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;FROM debian:sid-slim

RUN apt-get update &amp;amp;&amp;amp; apt-get install -y git pandoc
# For more easily logging into ionos
RUN apt-get install -y sshpass
RUN apt-get install -y curl

RUN git clone https://gitlab.com/shockrah/site-generator /tmp/gensite
RUN cd /tmp/gensite &amp;amp;&amp;amp; ./install.sh g
RUN rm -rf /tmp/gensite
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;gitlabs-ci-script&#34;&gt;Gitlab&amp;rsquo;s CI Script&lt;/h2&gt;
&lt;p&gt;It should be noted there are more environment variables set in Gitlab&amp;rsquo;s WebUI to make this script work but basically everything is there.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;image: shockrah/website:1.3

stages:
  - build
  - deploy

variables:
  SHOPTS: &amp;#34;-o StrictHostKeyChecking=no&amp;#34;


before_script:
  - eval $(ssh-agent -s)
  - echo &amp;#34;${SSH_PRIVATE_KEY}&amp;#34; | ssh-add - &amp;gt; /dev/null
  - mkdir -p ~/.ssh/
  - chmod 700 ~/.ssh/

build-site:
  stage: build

  script:
    bash ./build.sh

  artifacts:
    expire_in: 10 mins
    paths: [&amp;#34;./.mirror&amp;#34;]

deploy-vps:
  stage: deploy

  script:
    - ssh $SHOPTS root@shockrah.xyz &amp;#34;rm -rf /var/www/website&amp;#34;
    - scp $SHOPTS -r .mirror root@shockrah.xyz:/var/www/website/

deploy-neocities:
  stage: deploy

  script:
    # First the html
    - bash upload.sh -h
    # then we do the media files
    - bash upload.sh -M
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>Making Ice Cream at Home</title>
      <link>https://shockrah.xyz/posts/ice-cream/</link>
      <pubDate>Fri, 24 Jul 2020 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/ice-cream/</guid>
      <description>&lt;h1 id=&#34;making-ice-cream-at-home&#34;&gt;Making Ice Cream at Home&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: While I don&amp;rsquo;t use an ice cream maker, I do suggest a hand mixer but this can be done with as little as a fork/spoon to mix things(doing that sucks though).&lt;/p&gt;
&lt;p&gt;So here&amp;rsquo;s what I used to make the pic below:
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/baking/blackberry-icecream.jpg&#34; alt=&#34;&#34;&gt;
&lt;/p&gt;
&lt;h2 id=&#34;recipe-base&#34;&gt;Recipe Base&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;2 Cups / 475 mL -&amp;gt; Heavy Cream&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1 Cup / 237 mL -&amp;gt; Evaporated Milk&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3/4 Cup / 177 mL -&amp;gt; Sugar&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1 Tablespoon Vanilla Extract (I used vanilla flavoring)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pinch of salt&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;toppingschunksflavorings&#34;&gt;Toppings/Chunks/Flavorings&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;6 oz Blackberry&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that this is added to taste and 6 oz is only what I had on hand at the time of making.&lt;/p&gt;
&lt;h2 id=&#34;instructions&#34;&gt;Instructions&lt;/h2&gt;
&lt;h3 id=&#34;prep-steps&#34;&gt;Prep Steps&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Prep the bowls/ingredients&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Take a medium sized bowl and place into a much larger bowl.
Before you open them, toss the milk/cream into the bowls to chill for about 15 minutes in the freezer.&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Ice the larger bowl&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Put ice + salt into the larger bowl and mix. This lowers the freezing point of the ice so it melts and gets supercooled in the freezer;chilling the ice cream more evenly later on.
Put enough ice to line the smaller bowl.&lt;/p&gt;
&lt;h3 id=&#34;base-steps&#34;&gt;Base Steps&lt;/h3&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Basically dump everything into the small bowl and mix until the mixture is peaking.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It&amp;rsquo;s gonna seem like your making a whipped cream at this point, but that&amp;rsquo;s because we&amp;rsquo;re dumping as much air as we can upfront instead of later.&lt;/p&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Toss in the freezer until the top has the consistency of ice cream.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;final-mixingstoppings&#34;&gt;Final mixings/Toppings&lt;/h3&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;For any fruit chunks seperate the fluid out to pour into the base mixture.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I do this for color/flavoring, but mostly color.&lt;/p&gt;
&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;Finally mix in the chunks and seal in a sealable container in the freezer.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>Markdown Transpiler Thingy</title>
      <link>https://shockrah.xyz/posts/markdown-translator/</link>
      <pubDate>Tue, 21 Jul 2020 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/markdown-translator/</guid>
      <description>&lt;h1 id=&#34;markdown-to-html&#34;&gt;Markdown to HTML&lt;/h1&gt;
&lt;p&gt;A while back I made &lt;a href=&#34;https://gitlab.com/shockrah/site-generator&#34;&gt;gensite&lt;/a&gt; a static site generator that was built with pandoc users in mind.
Along with the main script I packaged another script &lt;em&gt;translate.sh&lt;/em&gt; which is a (I think) full markdown to html translator.&lt;/p&gt;
&lt;p&gt;It uses mostly coreutil things like perl, echo, sed, and grep so it&amp;rsquo;s pretty portable to most systems. Oh and it&amp;rsquo;s built with Bash; though I&amp;rsquo;m probably going to updated it to run with Dash, a very strict POSIX shell to make it even more compatible.&lt;/p&gt;
&lt;p&gt;Oh yea did I mention its only 62 lines of actual code?
Here&amp;rsquo;s the full script in case you want it, or maybe want to add some new feature/syntax or whatevs.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gitlab.com/shockrah/site-generator&#34;&gt;Repo Link&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Why? becausee a simple markdown to html converter is required for those that&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# don&amp;#39;t want to install pandoc that don&amp;#39;t have it already&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;IFS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;$&amp;#39;\n&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;code&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ul&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;paragraph&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# Replace ![](/file/path.png) with proper img tag links&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; -z $1 &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; 1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; $code &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; echo $1 &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;        echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;lt;p&amp;gt;&amp;#39;&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;lt;/p&amp;gt;&amp;#39;&lt;/span&gt; | sed -E &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/`(.*)`/&amp;lt;code&amp;gt;\1&amp;lt;\/code&amp;gt;/g;s/\!\[(.*)\]\((.*)\)/&amp;lt;img src=&amp;#34;\2&amp;#34; alt=&amp;#34;\1&amp;#34;&amp;gt;/g;s/\[(.*)\]\((.*)\)/&amp;lt;a href=&amp;#34;\2&amp;#34;&amp;gt;\1&amp;lt;\/a&amp;gt;/g&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;convert_links&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        sed -E &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/\[(.*)\]\((.*)\)/&amp;lt;a href=&amp;#34;\2&amp;#34;&amp;gt;\1&amp;lt;\/a&amp;gt;/g&amp;#39;&lt;/span&gt; &amp;lt; /dev/stdin
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;header&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        depth&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;echo $1 | grep &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;^##*&amp;#39;&lt;/span&gt; -o | tr -d &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;\n&amp;#39;&lt;/span&gt; | wc -m&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        line&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;1:$depth&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;h&lt;/span&gt;$depth&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;gt;&lt;/span&gt;$line&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;/h&lt;/span&gt;$depth&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;gt;&amp;#34;&lt;/span&gt; | convert_links
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;blockquote&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# remove starting &amp;gt; symbols before doing anything&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;blockquote&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;1:1&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;/blockquote&amp;gt;&amp;#34;&lt;/span&gt; | convert_links
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fluff_trim&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        perl -0777 -pe &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/&amp;lt;\/p&amp;gt;\n&amp;lt;p&amp;gt;//g;s/&amp;lt;p&amp;gt;&amp;lt;\/p&amp;gt;//g&amp;#39;&lt;/span&gt; &amp;lt; /dev/stdin
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;code_chunk&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; 0 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; $code &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                code&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                code&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set_ul&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; 1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; $ul &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                ul&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;unordered_list&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; $ul in
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;1:1&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;/li&amp;gt;&amp;#34;&lt;/span&gt;;ul&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;1;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;li&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;1:1&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;/li&amp;gt;&amp;#34;&lt;/span&gt;;ul&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;1;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;li&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;1:1&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;#34;&lt;/span&gt;;ul&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;0;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;esac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; -z $1 &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        echo Usage: $0 file.md
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        exit &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; read line;&lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; $line in
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#ae81ff&#34;&gt;\#&lt;/span&gt;*&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; set_ul; header $line;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#ae81ff&#34;&gt;\&amp;gt;&lt;/span&gt;*&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; set_ul; blockquote $line;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#ae81ff&#34;&gt;\`\`\`&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; set_ul; code_chunk;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#ae81ff&#34;&gt;\*&lt;/span&gt;*&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; unordered_list $line;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#75715e&#34;&gt;# TODO: ordered_lists&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                *&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; set_ul; paragraph &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$line&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;esac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; | fluff_trim | grep -v &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;^$&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Segmented Routes</title>
      <link>https://shockrah.xyz/posts/route2/</link>
      <pubDate>Wed, 02 Oct 2019 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/route2/</guid>
      <description>&lt;h1 id=&#34;segmenting--optimizing-realistic-routes&#34;&gt;Segmenting &amp;amp; Optimizing Realistic Routes&lt;/h1&gt;
&lt;p&gt;Finally after a few weeks of practicing I took some time to segment the route that I&amp;rsquo;ve been working on for &lt;em&gt;bhop_bochadick&lt;/em&gt;.
Something which I have a really bad habit of not doing.&lt;/p&gt;
&lt;p&gt;Unlike a lot of other maps I&amp;rsquo;ve tried running in the past this one doesn&amp;rsquo;t really get old and the &lt;em&gt;rng&lt;/em&gt; in the run is pretty bearable.
Apart from the route being fun there&amp;rsquo;s also a few &lt;em&gt;reset points&lt;/em&gt;, where if I lose time or fail it doesn&amp;rsquo;t mean the run is completely over/results in +30.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Alright but where&amp;rsquo;s the route mang&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here you go :^)&lt;/p&gt;
&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/_Cn2m1dn0tE&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;blockquote&gt;
&lt;p&gt;Can it be improved?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yes, and there&amp;rsquo;s already some new tricks/optimizations I&amp;rsquo;m planning on using to bring the time down even further.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;So it&amp;rsquo;s not perfect?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Nop, in fact there&amp;rsquo;s a huge mistake at the top of the pyramid where I bump into a wall pretty hard, losing nearly 400 u/s(from ~900u/s to ~500u/s).&lt;/p&gt;
&lt;p&gt;Also I could potentially do the drop in the lava stage without the wall bump thus conserving speed and cutting out a jump or two (i.e. 0.7 - 1.4 seconds).&lt;/p&gt;
&lt;h2 id=&#34;stats&#34;&gt;Stats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Current estimated: 4:41&lt;/li&gt;
&lt;li&gt;Future estimated: 4:3x&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>A Quick Bhop Route Showcase</title>
      <link>https://shockrah.xyz/posts/route1/</link>
      <pubDate>Tue, 01 Oct 2019 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/route1/</guid>
      <description>&lt;h1 id=&#34;neat-route&#34;&gt;Neat Route&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Short post that I&amp;rsquo;ve been wanting to make about a run I&amp;rsquo;m working on&lt;/em&gt;&lt;/p&gt;
&lt;iframe src=&#34;https://player.twitch.tv/?autoplay=false&amp;video=v470117605&#34; frameborder=&#34;0&#34; allowfullscreen=&#34;true&#34; scrolling=&#34;no&#34; height=&#34;378&#34; width=&#34;620&#34;&gt;&lt;/iframe&gt;
&lt;p&gt;Some optimizations in this route are the entrance through the teleporter at the start.
Instead of falling to the left and then hitting the first boot I take a small speed loss to &lt;em&gt;always&lt;/em&gt; hit the booster.&lt;/p&gt;
&lt;p&gt;Potentially I could save some air time if after the red platform I hit the second booster which gives less height to the thirds booster in that section, but the difference is minimal and I&amp;rsquo;m too lazy to make the flick consistently.&lt;/p&gt;
&lt;p&gt;As soon as I fix my windows drive I&amp;rsquo;ll try to get a fully timed segment of the run or something to get a better idea of time but so far I think the overall time comes out to 4:40.
&lt;em&gt;Almost 30 seconds faster than the previous world record!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s still quite a few places I need to improve on however so the route isn&amp;rsquo;t done yet + there are some skips I want to test out.&lt;/p&gt;
&lt;p&gt;Oh well back to loonix things for a bit :^)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>DWM &gt; i3</title>
      <link>https://shockrah.xyz/posts/dwm/</link>
      <pubDate>Sun, 18 Aug 2019 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/dwm/</guid>
      <description>&lt;h1 id=&#34;a-month-in-dwm---moving-forward-with-my-setup&#34;&gt;A month in DWM - Moving forward with my setup&lt;/h1&gt;
&lt;p&gt;For about a year and half I&amp;rsquo;ve been using &lt;a href=&#34;https://i3wm.org/&#34;&gt;i3wm&lt;/a&gt; as my daily driver under Debian and I&amp;rsquo;ve loved it thus far.
But after a while it started to get old and I wanted something new without having to distro-hop.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://dwm.suckless.org/&#34;&gt;DWM&lt;/a&gt; interested me as its memory usage footprint is tiny compared to i3wm and follows the &lt;a href=&#34;https://suckless.org/philosophy/&#34;&gt;suckless philosophy&lt;/a&gt; which I found interesting and appreciate more and more.&lt;/p&gt;
&lt;h2 id=&#34;is-it-comfy&#34;&gt;Is it /comfy/?&lt;/h2&gt;
&lt;p&gt;Absolutely. I&amp;rsquo;ll let this little clip speak for itself:&lt;/p&gt;
&lt;div style=&#34;width: 100%; height: 0px; position: relative; padding-bottom: 28.125%;&#34;&gt;&lt;iframe src=&#34;https://streamable.com/s/skb0y/tbxohj&#34; frameborder=&#34;0&#34; width=&#34;100%&#34; height=&#34;100%&#34; allowfullscreen style=&#34;width: 100%; height: 100%; position: absolute;&#34;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;Once you get past a couple of hurdles with it things becomes really nice and to be honest have spoiled me to the point where basic tasks in other setups has become painful.
&lt;em&gt;If you&amp;rsquo;re a vim user then you&amp;rsquo;ll know the feeling.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;hurdles&#34;&gt;Hurdles&lt;/h2&gt;
&lt;p&gt;Configuring anything blows. Recompiling things is just dumb and means you have to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Close everything because you will have to exit DWM + X11&lt;/li&gt;
&lt;li&gt;Exit DWM +  X11&lt;/li&gt;
&lt;li&gt;Make changes &amp;amp; recompile&lt;/li&gt;
&lt;li&gt;Test changes&lt;/li&gt;
&lt;li&gt;Tweak changes and go back to step 2&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The splitting is&amp;hellip; well it&amp;rsquo;s awful.
The idea is neat and on paper makes logical sense but to be honest anything past two windows(sometimes three) is no fun to use and honestly not even that useful in anyways.&lt;/p&gt;
&lt;h2 id=&#34;the-comfy&#34;&gt;The /comfy/&lt;/h2&gt;
&lt;p&gt;Now that I&amp;rsquo;ve messed with things my setup it feels much more personal, though that may be because of the nice backgrounds I now have.
The lack of features has sorta grown on me to where I don&amp;rsquo;t care that it doesn&amp;rsquo;t have a bunch of random features and enough docs to fill a book.
It displays windows in a neat fashion and is friendly with multiple monitors.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Yea I like it, it&amp;rsquo;s probably going to be my daily driver a while until a port for Wayland comes out since the only thing left to fix is the screen tearing which is no good.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Rewrites and this site</title>
      <link>https://shockrah.xyz/posts/rewrite/</link>
      <pubDate>Thu, 02 May 2019 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/rewrite/</guid>
      <description>&lt;h1 id=&#34;rewrites&#34;&gt;Rewrites&lt;/h1&gt;
&lt;h2 id=&#34;for-the-sake-of-rewriting-things&#34;&gt;For the sake of rewriting things&lt;/h2&gt;
&lt;p&gt;Finally after so long I came back to make this site look a little bit better since I never had a theme in mind.
I&amp;rsquo;m still changing up the theming a bit but this time around it should hopefully be a bit more &lt;em&gt;modern&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Still no non-free javascript tho &lt;code&gt;\:D/&lt;/code&gt;.
In fact at the moment there is literally 0 lines of javascript which actually runs on the site right now.&lt;/p&gt;
&lt;p&gt;Even tho, &lt;a href=&#34;https://purecss.io/&#34;&gt;purecss&lt;/a&gt; has some javascript, it&amp;rsquo;s only used for Node module packaging.
Since I don&amp;rsquo;t have any javascript using Node, those script never execute.&lt;/p&gt;
&lt;p&gt;Also the make script has been updated(praise kek).
If you want to build your own websites with &lt;a href=&#34;https://pandoc.org/&#34;&gt;Pandoc&lt;/a&gt; &amp;amp; &lt;a href=&#34;https://commonmark.org/help/&#34;&gt;markdown&lt;/a&gt;, you can use the newly updated build script below.&lt;/p&gt;
&lt;p&gt;This is the most recent &lt;em&gt;stable&lt;/em&gt; build of the script but there&amp;rsquo;s a more bleeding edge version &lt;a href=&#34;https://gitlab.com/shockrahwow/shockrah-city/blob/master/make.sh&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;rootDir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;./tmp/&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;targetDir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;post/&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[[&lt;/span&gt; -z $rootDir/post/ &lt;span style=&#34;color:#f92672&#34;&gt;]]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; mkdir -p $rootDir/post
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;post&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;# First get the body of the document&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	tmp&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.swap&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	base&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;basename $1&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;# cat the files together&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	pandoc $1 | cat &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;templates/post-header.html&amp;#39;&lt;/span&gt; - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;templates/post-footer.html&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; $tmp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	sed -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;5i &amp;lt;title&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;base%.*&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;/title&amp;gt;&amp;#34;&lt;/span&gt; $tmp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	sed -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;s/&amp;lt;img/&amp;lt;img class=\&amp;#34;pure-img\&amp;#34;/g&amp;#34;&lt;/span&gt; $tmp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	sed -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/&amp;lt;table&amp;gt;/&amp;lt;table class=&amp;#34;pure-table&amp;#34;&amp;gt;/g&amp;#39;&lt;/span&gt; $tmp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;# turn the header into an actual header&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	sed -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;30i &amp;lt;div class=&amp;#34;header&amp;#34;&amp;gt;&amp;#39;&lt;/span&gt; $tmp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	sed -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;32i &amp;lt;/div&amp;gt;&amp;#39;&lt;/span&gt; $tmp	&lt;span style=&#34;color:#75715e&#34;&gt;# change this to 33 once we finalized for the subheading&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;# finally move this post to its proper location in the _rootDir&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	mv $tmp &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$rootDir&lt;span style=&#34;color:#e6db74&#34;&gt;/&lt;/span&gt;$targetDir&lt;span style=&#34;color:#e6db74&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;base%.*&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;.html&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	rm -f $tmp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; file in $@;&lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	post $file
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; -z $@ &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; read line
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		post $line
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;1&lt;span style=&#34;color:#66d9ef&#34;&gt;:-&lt;/span&gt;/dev/stdin&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Bash is weird sometimes</title>
      <link>https://shockrah.xyz/posts/bash-1/</link>
      <pubDate>Sun, 22 Jul 2018 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/bash-1/</guid>
      <description>&lt;h1 id=&#34;bash-is-weird-sometimes&#34;&gt;Bash is weird sometimes&lt;/h1&gt;
&lt;p&gt;Bash is actually pretty nice but is&amp;hellip; weird sometimes. &lt;br&gt;
Take this for instance: &lt;code&gt;alias v=&#39;vim&#39;&lt;/code&gt;
This is an actual bind I use daily however if you don&amp;rsquo;t have tab-completion setup for vim you know that tab-completion usually results in:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;vim myFi&amp;lt;tab&amp;gt; &lt;br&gt;
cd: too many arguments&lt;br&gt;
bash: cd: too many arguments&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As fun as that is to deal with(&lt;em&gt;it&amp;rsquo;s not&lt;/em&gt;) apparantly that bind I mentioned earlier fixes this issue completely. &lt;br&gt;
I&amp;rsquo;m not really sure why that works, but I&amp;rsquo;m just glad it does.
If you&amp;rsquo;ve ever needed a way of allowing for tab-completion with vim now you have one. &lt;br&gt;
Just use that alias in your bashrc and you&amp;rsquo;re good to go.&lt;/p&gt;
&lt;h2 id=&#34;rambled-guess-time&#34;&gt;Rambled guess time&lt;/h2&gt;
&lt;p&gt;My guess on how the alias is that bash doesn&amp;rsquo;t try to figure out that you want to use &lt;code&gt;vim&lt;/code&gt; since you&amp;rsquo;ve only typed a single &lt;code&gt;v&lt;/code&gt; in this case; therefore tab-completion would go unnoticed?&lt;br&gt;
Say you had a directory with files:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;first &lt;br&gt;
second &lt;br&gt;
third&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That would mean if your shell contained &lt;code&gt;asdf&lt;/code&gt;. You could go to the first character start typing any one of those file names and have bash guess the filename to autocomplete, since it only look backwards for completion.&lt;/p&gt;
&lt;h3 id=&#34;where-be-the-posts&#34;&gt;Where be the posts&lt;/h3&gt;
&lt;p&gt;Lately I&amp;rsquo;ve been working on a translator for html. Similar to how pandoc turns markdown into valid html which lead me onto another issue that I&amp;rsquo;ve also taken on since I&amp;rsquo;ve not much to do. &lt;br&gt;
Specifically it&amp;rsquo;s looking into &lt;em&gt;GCC&lt;/em&gt;&amp;rsquo;s seemingly random behavior with switch cases.
Essentially &lt;em&gt;GCC&lt;/em&gt; will sometimes create a decision tree for a slightly faster search time through the cases, sometimes create the equivalent of linearly executable code(&lt;em&gt;like a bunch of if/else&amp;rsquo;s&lt;/em&gt;), and if given the opportunity &amp;ldquo;&lt;em&gt;guess&lt;/em&gt;&amp;rdquo; the correct case on the first check&amp;hellip;
For that reason I&amp;rsquo;ve started diving into it to try and determine what the fug is going with this compiler and what flags, if any can be used to create some more predictable output.
Hopefully the research crops up something interesting to think but who knows 🤷.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Qutebrowser is /comfy/</title>
      <link>https://shockrah.xyz/posts/qute/</link>
      <pubDate>Wed, 18 Jul 2018 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/qute/</guid>
      <description>&lt;h1 id=&#34;a-taste-of-qutebrowser&#34;&gt;A Taste of QuteBrowser&lt;/h1&gt;
&lt;p&gt;I finally sat down and started fully using &lt;a href=&#34;https://www.qutebrowser.org/&#34;&gt;Qutebrowser&lt;/a&gt; and to be honest, it&amp;rsquo;s great.
I had tried using it before but I never bothered to learn how to to use it nor did I try to rice it to be liking.
However there are two things which came be a pleasant surprise about the browser:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;No ricing past basic setup involved for comfortable use&lt;/li&gt;
&lt;li&gt;There were way more /comfy/ reasons to like this over other browsers&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I&amp;rsquo;m was Chromium user for a while since the adblocking and extension support was ultra convinient for me to take advantage of, and it let&amp;rsquo;s me sync things together across devices, &lt;em&gt;somthing about being a good goy here&lt;/em&gt;.
Say what you want about syncing across devices and &amp;ldquo;&amp;rdquo;&amp;quot;&lt;em&gt;the cloud&lt;/em&gt;&amp;quot;&amp;quot;&amp;quot; but its pretty comfy since everything is setup essentially where-ever you go.
In other words Chrome and the like get the good ole&amp;rsquo; stamp of &lt;em&gt;werks for me&lt;/em&gt;.&lt;/p&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/werks.png&#34; alt=&#34;&#34;&gt;

&lt;h2 id=&#34;out-of-the-box-experience&#34;&gt;Out of the box experience&lt;/h2&gt;
&lt;p&gt;Personally the only thing I did was change the default starting page for new windows and new tabs.
Which of course is my own personal /comfy/ &lt;a href=&#34;https://gitlab.com/AlejandroS/start-page-tab&#34;&gt;start-page&lt;/a&gt;.
After that, there was basically no more setup since most/all of the keybindings are sensible enough to warrant not changing them, &lt;em&gt;imo&lt;/em&gt;.
The only functionality I couldn&amp;rsquo;t figure out at first was escaping out of drop-down menus and/or text-boxes.
I did however come up with this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;#34;e&amp;#34;:&amp;#34;fake-key &amp;lt;escape&amp;gt;&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Just enter the command &lt;code&gt;:set&lt;/code&gt; to get to your config page, make the changes you want, like adding the above in your aliases section, then run the command &lt;code&gt;config-write-py&lt;/code&gt;.
If you have to save over an old config file just use &lt;code&gt;config-write-py --force&lt;/code&gt;.
However, even without this the browser is still massively usable and convenient, it&amp;rsquo;s just that you&amp;rsquo;re able to rice the &lt;em&gt;fug&lt;/em&gt; out of this but I personally didn&amp;rsquo;t that route.&lt;/p&gt;
&lt;p&gt;Mouse control is just like any other browser I&amp;rsquo;ve ever used so there&amp;rsquo;s that too.
Text boxes are usually auto-detected by the browser so that you are put into &lt;code&gt;insert mode&lt;/code&gt; just like in vim.&lt;/p&gt;
&lt;p&gt;Some nice things that I use constantly are the commands below, which don&amp;rsquo;t require command mode:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;yy - copies page url to clipboard&lt;/li&gt;
&lt;li&gt;wp - opens new window with clipboard contents as url-argument&lt;/li&gt;
&lt;li&gt;r - sick refresh&lt;/li&gt;
&lt;li&gt;D - deletes tab&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;main-gripes&#34;&gt;Main Gripes&lt;/h2&gt;
&lt;p&gt;Keep in mind that all of these complaints, &lt;em&gt;except the last one&lt;/em&gt; can be mitigated by changing a setting once in your config and forgetting about it forever.
Also if you use qutebrowser on multiple machines consider copying that config file over to usb and using that to set yourself up wherever you are.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;lsquo;J&amp;rsquo; move right and &amp;lsquo;K&amp;rsquo; move right along the tab list&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you look at it as a horizontal list then yes it doesn&amp;rsquo;t make sense. Instead think of the tabs as vertically aligned and the rest should follow suit.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;---------
first
---------
second
---------
third
---------
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Rebinding or just getting used to it are the &amp;ldquo;&lt;em&gt;fixes&lt;/em&gt;&amp;rdquo; for this since it is such a minor coplaint about the out-of-the-box experience.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Adveritements Everywhere&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The built-in adblocker is just a host list which means it won&amp;rsquo;t exactly do &lt;del&gt;much&lt;/del&gt; anything on most websites.
Plugin support is coming soon but for now adblocking is basically non-existant if you browser &lt;em&gt;any&lt;/em&gt; modern websites.
Hopefully we get a proper ad-blocker in the future that can keep things a bit cleaner like &lt;em&gt;Adblocker+&lt;/em&gt; or better yet &lt;em&gt;Ublock Origin&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&#34;bindings-and-defualts-mostly&#34;&gt;Bindings and Defualts mostly&lt;/h2&gt;
&lt;p&gt;There are plenty of binds but if you just read the docs then you should be fine.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/media/img/cheatsheet-big.png&#34;&gt;Link to official binding cheat sheet&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Just like any program with tons of keyboard shortcuts, it&amp;rsquo;s better to learn whatever you need and progressively learn more commands as you need them.&lt;/p&gt;
&lt;h2 id=&#34;is-it-worth-it-tho&#34;&gt;Is it worth it tho?&lt;/h2&gt;
&lt;p&gt;Ya. It&amp;rsquo;s a good browser, it&amp;rsquo;s solid and besides a few minor hiccups it&amp;rsquo;s very close to BTFO every other browser out there.
If you don&amp;rsquo;t like using keyboard shortcuts, and prefer to use the mouse however, stick to using what you are most comfortable with.
In general if you are comfortable with shortcuts and want to support a free privacy-respecting(&lt;em&gt;as far as I know&lt;/em&gt;) browser; also you can rice it :^).&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>First Foray into Big Projects</title>
      <link>https://shockrah.xyz/posts/qca1/</link>
      <pubDate>Mon, 25 Jun 2018 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/qca1/</guid>
      <description>&lt;h1 id=&#34;quake-champions-academy-back-from-the-dead&#34;&gt;Quake Champions Academy Back from the Dead&lt;/h1&gt;
&lt;p&gt;Finally after nearly a year I&amp;rsquo;ve started working on my Quake Chamions Academy project again but this time I have some specific goals in mind besides just, run lots of community events.&lt;/p&gt;
&lt;h2 id=&#34;some-background-first&#34;&gt;Some Background First&lt;/h2&gt;
&lt;p&gt;Quake Champions Academy is a discord server/community  that I set up about a year ago when QC(Quake Champions) went into the open beta with the initial inention of using the server to host 2v2 tournaments every weekend.
Of course this was a massive time sink and couldn&amp;rsquo;t really do it every weekend, so eventually had to stop.
In the meantime I managed to acrue around 100 or so members to the channel so I figured I would need more reasonable method of keeping people around.
This is where I came up with the idea of creating an &amp;ldquo;Academy&amp;rdquo; Server where people can come learn about the game and maybe meet some new people in the process.&lt;/p&gt;
&lt;p&gt;Ultimately the server died down quite a bit with the game as well but since it went free-to-play for 2 weeks it means that tons of new playesr have been coming in.
Since there were so many new players, and people seemed to be actually actually enjoying &lt;em&gt;playing&lt;/em&gt; the game I saw it as a perfect time to get the old website idea into reality.
There was one main problem&amp;hellip; the people who can help me is not plentiful and don&amp;rsquo;t know how to use tools like git/HTML/CSS/JS etc etc.
So I eventually settled, (&lt;em&gt;very unwillingly&lt;/em&gt;) on hosting the site on a google site.&lt;/p&gt;
&lt;h2 id=&#34;hoo-boy-into-the-lions-den&#34;&gt;Hoo boy into the lion&amp;rsquo;s den&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m aware of how closed down of a platform sites.google.com really is but honestly I&amp;rsquo;m also aware of the danger of keeping barrier to enty for contribution unrealistically high for other people.
I won&amp;rsquo;t be able to get to open sourcing the site just yet but at some point I will be getting to that, right now it&amp;rsquo;s a matter of turning into a kind of wiki for new players to use as a guide so that they aren&amp;rsquo;t so lost when playing.&lt;/p&gt;
&lt;p&gt;At least for now the site is up, and it&amp;rsquo;s getting useful information uploaded to it, philosophy aside it provides a practical use which I beleive to be of higher precedence at this time than making it free.&lt;/p&gt;
&lt;p&gt;For now if you want to check out the site you can look for it here: &lt;br&gt;
&lt;a href=&#34;https://sites.google.com/view/qcacademy/home&#34;&gt;https://sites.google.com/view/qcacademy/home&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>This time for real</title>
      <link>https://shockrah.xyz/posts/open/</link>
      <pubDate>Mon, 18 Jun 2018 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/open/</guid>
      <description>&lt;h1 id=&#34;all-done-setting-up&#34;&gt;All done setting up&lt;/h1&gt;
&lt;p&gt;Finally after some struggling with various git clients and learning to use some new tools the source code for this website is finally up and hosted on Gitlab.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://gitlab.com/shockrah/shockrah-city&#34;&gt;Link to website source code&lt;/a&gt;&lt;br&gt;
&lt;em&gt;tbf i stiill need to work on the bash script to auto build stuff&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;now-what&#34;&gt;Now what?&lt;/h2&gt;
&lt;p&gt;This would have gone by more  quickly if it wasn&amp;rsquo;t for the fact that I have recently decided to switch off of GitKraken since it uses a proprietary license.
The main thing I liked about it was that it made pushing, pulling, and dealing with large branches and merges very easy.
After some testing with other git clients I ended up decided that it would be easier to just learn to use the terminal commands which git comes with.&lt;/p&gt;
&lt;p&gt;For now this site will be maintained to journal and document things which interest me so that I can come back to it after some time and maybe use some of what I learn over time.
If it grows to be something larger; or at least something with an audience, then I may also do some stuff for the interest of the readers/audience as well, but we&amp;rsquo;ll see in due time where this all goes.&lt;/p&gt;
&lt;p&gt;The next thing for this site is to post some stuff that I never posted for the old one, namely a simple headphone mod and do some stuff with bash scripting.
Also maybe some random notes about cool stuff I find.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Published: June 18, 2018&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Website Contruction Philosophy</title>
      <link>https://shockrah.xyz/posts/phil/</link>
      <pubDate>Fri, 01 Jun 2018 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/phil/</guid>
      <description>&lt;h1 id=&#34;no-non-free-js-here&#34;&gt;No Non-free JS here&lt;/h1&gt;
&lt;p&gt;To explain succintly, I don&amp;rsquo;t like Javascript, especially considering how much power it has on a user&amp;rsquo;s browser.
Namely the issue being that while it used to mainly be focused around making websites look pretty it now also serves to execute malicious code; luckily I don&amp;rsquo;t think that is too common but that fact alone makes JS for me, something which should be avoided.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s JS&amp;rsquo;s non-free abilities which I don&amp;rsquo;t like and is why I am not going to be using it for any of my projects, unless it is a client-side only project where it is running on some local server.&lt;/p&gt;
&lt;p&gt;There are of course a few &lt;em&gt;tangent&lt;/em&gt; reasons why I decided to fully make the switch from using the Hugo static site generator:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Performace&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Loading a bunch of JS/php is rather cumbersome at time which can often be tracked down to the js being obfuscatedpoorly, creating a file which is sometimes hundreds of times larger than normal.
I&amp;rsquo;ll show by example - namely using &lt;em&gt;r-markdown&lt;/em&gt; and then my own technique to make a page with identical content:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# This is an example header

With a small paragraph

* a 

* List

&amp;gt; and a quote
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Dev time/ Convenience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To be completely honest I&amp;rsquo;m reall not interested by web-development much at all, so finding a flow to make creating content easier is just perfect for me. &lt;em&gt;Also I dont have to deal with running wine/windows or dealing with hundreds of dependencies with &lt;strong&gt;Hugo&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Hopefully this explains some of my thought process behind this site&amp;rsquo;s design, and if you like, check out some of my other stuff that I post here.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Mapping in Reflex</title>
      <link>https://shockrah.xyz/posts/mapping/</link>
      <pubDate>Tue, 13 Mar 2018 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/mapping/</guid>
      <description>&lt;h1 id=&#34;mapping-again&#34;&gt;Mapping Again&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://steamcommunity.com/sharedfiles/filedetails/?id=1329660201&#34;&gt;Link to the map I discuss here&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;feverstrafe&#34;&gt;FeverStrafe&lt;/h2&gt;
&lt;p&gt;To clear up some confusion, &lt;em&gt;feverStrafe&lt;/em&gt; is a Reflex Race map I made a few months ago but never got around to finishing due to some issues with time, and motivation. After a few months I came back to see what I had made so far and realized if this was to ever be release worthy it would have to go through a through cleaning.&lt;/p&gt;
&lt;h2 id=&#34;cleaning-up&#34;&gt;Cleaning Up&lt;/h2&gt;
&lt;p&gt;In terms of what needed to be re-done, it seemed that spacing was the main issue so get past. I realized this since most of the map’s spacing seemed to be heavily derived from what CS:Source style spacing which would work there but Reflex is weird in that air control is nowhere near as flexible as in CS:Source. Of course there had to be some kind of method to make the map fun to play and satisfying to speed-run; after deliberation a solution was found.&lt;/p&gt;
&lt;h3 id=&#34;modifying-spacing-with-casual-runs-in-mind-to-give-competitive-runners-more-room&#34;&gt;Modifying spacing with casual runs in mind to give competitive runners more room&lt;/h3&gt;
&lt;p&gt;The idea here is simple: speed-runners will break the map so instead of worrying about what they might think of it I focus more on casual players, making sure that the map is fun. Simply put, if the map isn’t fun to play normally, there is no chance that it will be fun to run. To make sure that the gameplay was fun I turned to the one type of race map I personally despise, strafe maps.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;strafe map: mostly flat race map with little variations in gameplay&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A good strafe map is hard to come by, which isn’t because they are hard to make but rather that it must be very clever in its use mechanics to actually be interesting. One of the additional problems strafe maps face is the inherent design of its gameplay, being flat this means that a mapper typically has to come up with some theme or a gameplay gimmick to make it memorable. The good thing about them is that the whole map is available to nearly any kind of player since they are also very easy maps to complete as a player. Making more of &lt;em&gt;feverStrafe&lt;/em&gt; available to everyone is exactly what the map needed to feel more complete and flow more easily. The map already had multiple levels, some meant for speed, some technically challenging, others were a mix of both. This meant that instead of changing what gameplay I already had, I simply added easy and hard routes. I kept in mind what the world record runs might look like, and essentially filled in the gaps that most players would probably fall into. To me these maps suffer from nearly the same issue auto-hop maps had (and still do sometimes) in CS:Source. To quote Badges:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The map itself pretty much dictates the route and doesn’t allow the player much room to find faster ways around the map, resulting in banal, braindead gameplay. Maps like this aren’t very competitive and result in most of the top times being very similar. bhop_muchfast is a good example of this. Creating maps with more route options by adding more bhop blocks with less space between them will make your map more popular and competitive by allowing newer players to experience them, seasoned players to speedrun them, and normal / scroll players to play them. The top times will have much more variety and every run of the map will be different. bhop_cw_journey, for example.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://gamebanana.com/maps/182909&#34;&gt;Full quote/post here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For &lt;em&gt;feverStrafe&lt;/em&gt; this meant trying to get a balance where the map would be fun to play in general for everyone while providing memorable gameplay. I think after looking at what &lt;em&gt;feverStrafe&lt;/em&gt; turned into I can fully say that I am actually somewhat proud of what it is now.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;after-thoughts-and-future-maps&#34;&gt;After thoughts and future maps&lt;/h2&gt;
&lt;p&gt;As a final say to Reflex, I’m only leaving because the game has favored competitive duel for so long that every other gamemode apart from race is nearly dead, even for Reflex’s standards. Because I don&amp;rsquo;t actually play or enjoy duel anymore it means there’s really nothing left to do besides make maps which I can do for any game, so why not one where there’s more going on. Maybe it will get better but it doesn’t seem to be going anywhere, looking at Reflex as a passion project however, it’s doing great and cant’ wait to see what the guys at Pixel come up with.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;p.s. dubs4lyfe&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Carry On PC </title>
      <link>https://shockrah.xyz/posts/atx/</link>
      <pubDate>Wed, 10 Jan 2018 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/atx/</guid>
      <description>&lt;h1 id=&#34;carry-on-pc&#34;&gt;Carry On PC&lt;/h1&gt;
&lt;p&gt;I use my PC for&amp;hellip; well pretty much everything.
Which means if I go somewhere for a few weeks at a time, my PC is coming with me.
For a while I used a &lt;em&gt;Corsair 300r&lt;/em&gt;, which has served me well until now.
After looking around for a travel friendly ATX case I realized that there really aren&amp;rsquo;t any.
For that reason I would have to find a case that my parts physically fit into, and cram them in somehow.&lt;/p&gt;
&lt;h2 id=&#34;prepping-the-case&#34;&gt;Prepping the case&lt;/h2&gt;
&lt;p&gt;To start the case I bought was a &lt;a href=&#34;http://us.coolermaster.com/product/Detail/case/n-series/n200.html&#34;&gt;Cooler MasterN200&lt;/a&gt;.
The main parts I had to worry about were as folow in the table:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Part&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Length/Size&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Name&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;MotherBoard&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;ATX&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Gigabyte Z97X-UD4H&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;CPU Cooler&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;6.5in tall&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Hyper 212 Evo&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Graphics Card&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;10 in long&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;EVGA 960 2Gb SC Edition&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;After opening the case I saw a few things that had to go.&lt;/p&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/atx/before.jpg&#34; alt=&#34;&#34;&gt;

&lt;ol&gt;
&lt;li&gt;Hard Drive bays&lt;/li&gt;
&lt;/ol&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/atx/hdd.jpg&#34; alt=&#34;&#34;&gt;

&lt;p&gt;I also took off the front IO panel since I have some plans to make this more flush later on, thus saving space to fit into a carry on bag.&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;PSU rack holding thingy&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I have no idea what this thing is but it had to go since it wouldn&amp;rsquo;t let my motherboard fit into the case.
Luckily there was only a few rivets holding it in to a quick chiseling and they were gone with the rack too.&lt;/p&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/atx/rack.jpg&#34; alt=&#34;&#34;&gt;

&lt;h2 id=&#34;test-fitting-some-things&#34;&gt;Test fitting some things&lt;/h2&gt;
&lt;p&gt;First I checked how the motherboard would fit into the case on its own; I was afraid of possibly adjusted the rear I/O sheild hole.&lt;/p&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz/media/img/atx/mbtest.jpg&#34; alt=&#34;&#34;&gt;

&lt;p&gt;Next I fiddled with the psu since fitting it into the case was going to be &lt;em&gt;really&lt;/em&gt; akward.
It ended up being as weird as I though but ultimately it works and seems to be stable so what you see in the picture is the setup I went with.&lt;/p&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/atx/psutest.jpg&#34; alt=&#34;&#34;&gt;

&lt;p&gt;I completely forgot about the hard drives until the end, but it worked out in a &lt;em&gt;totally not ghetto way&lt;/em&gt;.
The 3.5 inc drive is the only one that I &lt;em&gt;really&lt;/em&gt; need to worry about for mounting honestly because of two reaons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 of the remaining drives is an &lt;em&gt;SSD&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;The other drive is a laptop drive &lt;br&gt;
Which I know still doesn&amp;rsquo;t excuse the mounting but hey it coulnd&amp;rsquo;t really move even if it wanted to.&lt;/li&gt;
&lt;/ul&gt;
&lt;img class=&#34;pure-img-responsive&#34; src=&#34;https://shockrah.xyz//media/img/atx/hddfinal.jpg&#34; alt=&#34;&#34;&gt;

&lt;p&gt;Hard drives have a little shroud which I made out of some heavy duty duck tape and cardboard.
Kinda sketchy but not really since it holds things in a clean position and doesnt rattle at all.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s one more ssd that you don&amp;rsquo;t see but its tucked way up in the cd drive bay up top as I dont actually use that bay at all.&lt;/p&gt;
&lt;p&gt;All in all I like how everything turned out as this pc is now ready to be taken anywhere in the US as &lt;em&gt;carry-on&lt;/em&gt; luggage!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Wot in tarnation happened to the style</title>
      <link>https://shockrah.xyz/posts/style/</link>
      <pubDate>Thu, 21 Sep 2017 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/posts/style/</guid>
      <description>&lt;h1 id=&#34;wew-lad-new-colors&#34;&gt;Wew lad new colors&lt;/h1&gt;
&lt;p&gt;It&amp;rsquo;s been about a minute since I&amp;rsquo;ve done anything with this site but I figured what better time to randomly post things then now.
Before this update I mostly used some neato fonts but most of it was some boring Times New Roman thing, &lt;em&gt;now the site doesn&amp;rsquo;tlook like a homework essay&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&#34;but-why&#34;&gt;But Why?&lt;/h2&gt;
&lt;p&gt;I partly wanted to get my Gitlab page a bit more active but also because I didn&amp;rsquo;t like the self-conflicting style from before.
Instead of having a bunch of fonts that don&amp;rsquo;t really go together I opted for fonts that are actually somewhat look nice next to each other.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m still gonna mess with the styling but the changes likely won&amp;rsquo;t be whole reworks like this one was, however, I&amp;rsquo;ll probably use this as a place to post some &lt;em&gt;bhop stuff as well&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;:^)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://shockrah.xyz/drafts/quick-update/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/drafts/quick-update/</guid>
      <description>&lt;h1 id=&#34;building-overhaul&#34;&gt;Building overhaul&lt;/h1&gt;
&lt;p&gt;Apart from the switch to a more &lt;em&gt;night friendly&lt;/em&gt; site style-sheet I&amp;rsquo;ve also now switch to a new build system for my not-a-blog.
Full script at the bottom. &lt;a href=&#34;https://gitlab.com/shockrah/site-generator&#34;&gt;Repo link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The nice thing about this new script? Way more features, more &lt;em&gt;unixy&lt;/em&gt; so it ends up being really straight forward to use, oh and it has a nice name now &lt;strong&gt;gensite&lt;/strong&gt;. The only major dependency it has is &lt;code&gt;pandoc&lt;/code&gt; but I&amp;rsquo;m slowly going to phase that out for another script which accomplishes the same thing so far; it just can&amp;rsquo;t do tables yet.&lt;/p&gt;
&lt;p&gt;Anyway I&amp;rsquo;ve been messing about with more shell scripting things as I&amp;rsquo;ve been &lt;em&gt;ded&lt;/em&gt; for nearly 3 weeks on account of a really epic eye infection which has left me needing glasses.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash
# Uses pandoc to turn markdown into html for my personal blog

mirror=.mirror/

assert_arg() {
	[ -z $1 ] &amp;amp;&amp;amp; echo No argument provided &amp;amp;&amp;amp; exit 1
}

mirror_scaffold() {
	# Setup mirror directory so that we can later truck through building new posts and pages
	mkdir -p $mirror/
	cp -r media/ $mirror/media/
	cp partials/style.css $mirror/
}

fix_tables_imgs_pure() {
	sed -i &amp;#34;s/{TITLE}/&amp;lt;title&amp;gt;$(basename --suffix=.html 1)&amp;lt;\/title&amp;gt;/g&amp;#34; &amp;#34;$1&amp;#34;
	sed -i &amp;#39;s/&amp;lt;img/&amp;lt;img class=&amp;#34;pure-img&amp;#34;/g&amp;#39; &amp;#34;$1&amp;#34;
	sed -i &amp;#39;s/&amp;lt;table&amp;gt;/&amp;lt;table class=&amp;#34;pure-table&amp;#34;&amp;gt;/g&amp;#39; &amp;#34;$1&amp;#34;
}

create_post() {
	fname=$(basename --suffix=.md $1).html
	mkdir -p $mirror/post/
	pandoc $1 | cat partials/header.html - partials/footer.html \
		&amp;gt; $mirror/post/$fname

	fix_tables_imgs_pure $mirror/post/$fname
}

build_root_page() {
	fname=$(basename --suffix=.md $1).html
	mkdir -p $mirror/
	if [ ${1: -5} = &amp;#34;.html&amp;#34; ];then
		cat partials/header.html $1 partials/footer.html &amp;gt; $mirror/$fname
	else
		pandoc $1 | cat partials/header.html - partials/footer.html \
			&amp;gt; $mirror/$fname
	fi
	fix_tables_imgs_pure $mirror/$fname
}

refresh_root_src() {
	cp root/* $mirror
}

copy_media() {
	mkdir -p $mirror/media/
	cp root/style.css $mirror/
	cp -r media/ $mirror/
}

new_project() {
	mkdir -p &amp;#34;$1&amp;#34;
	cd &amp;#34;$1&amp;#34;
	mkdir -p media/fonts/ media/img/
	mkdir partials/ posts/ pages/ root/
	touch partials/header.html partials/footer.html
	echo Project \&amp;#34;&amp;#34;$1&amp;#34;\&amp;#34; created.
}

_help_prompt() {
cat &amp;lt;&amp;lt;EOF
Options:
   new project_path: Create a new project folder
   P|page file.path: Build the root level page
   p|post file.path: Build that one post into the site mirror folder&amp;#39;s posts directory
   r|root file.path: Build that root page, these live like /index.html /about.html etc.
   R|roots: Copy over the new/updated root resources
   m|media: Copy over the media folder contents
   s|scaffold: Build mirror directory
   server: Run python live server 
EOF
}

[ -z $1 ] &amp;amp;&amp;amp; _help_prompt &amp;amp;&amp;amp; exit 0

opt=`echo $1 | tr -d &amp;#39;-&amp;#39;`
case $opt in
	new) assert_arg $2;new_project $2;;
	P|page) assert_arg $2; build_root_page $2;;
	p|post) assert_arg $2;create_post $2;;
	r|root) assert_arg $2;build_root_page $2;;
	R|roots) refresh_root_src;;
	m|media) copy_media;;
	s|scaffold) mirror_scaffold;;
	server) cd $mirror &amp;amp;&amp;amp; python -m SimpleHTTPServer 8080;;
	*) _help_prompt;;
esac
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title></title>
      <link>https://shockrah.xyz/drafts/syncthing/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/drafts/syncthing/</guid>
      <description>&lt;h1 id=&#34;syncthing-and-remote-file-management&#34;&gt;Syncthing and Remote File Management&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;What is &lt;a href=&#34;https://syncthing.net/&#34;&gt;syncthing&lt;/a&gt;?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It&amp;rsquo;s a free and open source project that basically keeps your files synchronized across multiple devices.&lt;/p&gt;
&lt;p&gt;It woks like so(in my setup):&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Listen Server =&amp;gt; Gets folders and things shared with it
PC =&amp;gt; usually uploads stuff to the listen server
Phone =&amp;gt; usually just pulls down updates from the listen server
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I personally use Syncthing to keep my ever growing music library and Book/Papers collection up to date on my phone and PC.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Can you cut out the middle man by removing that server?
Yes but I&amp;rsquo;m lazy and this give me the option of running syncthing on my laptop and pull down changes from anywhere without much hassle.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Where do yo host this listen server?
For hosting I use &lt;a href=&#34;https://www.ionos.com/&#34;&gt;IONOS&lt;/a&gt; since VPS&amp;rsquo;s only cost 2 USD a month. Currently it&amp;rsquo;s running Debian 10 Buster.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://shockrah.xyz/drafts/train/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/drafts/train/</guid>
      <description>&lt;h1 id=&#34;trains-are-weird&#34;&gt;Trains are Weird&lt;/h1&gt;
&lt;h2 id=&#34;y-does-cali-succ-at-train&#34;&gt;y does cali succ at train&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve come to the conclusion that California has no idea how to do public transportation.
Trains for instance get some of the &lt;strong&gt;F A T T E S T&lt;/strong&gt; delays imaginable.
Not unlike any other system of transportation like planes or buses, but with trains there&amp;rsquo;s the added bonus that it can stop, and do nothing, mid travel.&lt;/p&gt;
&lt;p&gt;Most countries seemed to have figured out that putting trains on street level means car traffic slows down, and trains have to slow down too.
Here in Cali though, we don&amp;rsquo;t use train tunnels in cities.
&lt;em&gt;Before you say something about earthquakes, that&amp;rsquo;s not actually the reason why&lt;/em&gt;.
The actual reason, we just suck at public transport.
The absolute state of the freeways here is also pretty hilarious; instead of building better freeway routes we just add more lanes which compounds traffic problems.&lt;/p&gt;
&lt;h2 id=&#34;still-neat-tho&#34;&gt;still neat tho&lt;/h2&gt;
&lt;p&gt;Not even gonna lie, it&amp;rsquo;s kinda fun being on the train; &lt;em&gt;when you&amp;rsquo;re actually moving&lt;/em&gt;.
Mostly because people that go on trains lose their minds about being locked in a rolly tin can in the woods really quick.
That means after about an hour and in people start wandering around and dropping the maddest &lt;em&gt;truth bombs&lt;/em&gt; and &lt;em&gt;conspiracy theories&lt;/em&gt; I&amp;rsquo;ve ever seen.&lt;/p&gt;
&lt;p&gt;Sick shit to witness and journal about but after delays, &lt;strong&gt;literally every trip&lt;/strong&gt; I&amp;rsquo;ve decided that I&amp;rsquo;m just going to spend a tiny bit more and take the plane to get around Cali.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Shoutout to the guy that crashed into the train ahead of me in the middle of rush hour traffic.
That s1ck 2 hour delay was litty.&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://shockrah.xyz/notes/against-method/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/notes/against-method/</guid>
      <description>&lt;h1 id=&#34;against-method-study-against-logical-positivism&#34;&gt;Against Method: study against logical positivism&lt;/h1&gt;
&lt;p&gt;Word: I should note that this is written while reading through Feyeraband&amp;rsquo;s essay. Henceforth expect knee-jerk-reaction type of writing as opposed to well thought out logical anything.&lt;/p&gt;
&lt;p&gt;Anything properly &lt;em&gt;fleshed out&lt;/em&gt; is labeled as such.&lt;/p&gt;
&lt;h2 id=&#34;observations--connections-based-on-recent-things-around-me&#34;&gt;Observations &amp;amp; Connections Based on Recent Things Around Me&lt;/h2&gt;
&lt;p&gt;A video from &lt;em&gt;Periodic Videos&lt;/em&gt; comes to mind wherein they tells a story about someone that tried to make a &lt;em&gt;mini-nuclear reactor&lt;/em&gt; in their kitchen.
The tone of the speaker in the video is in some ways mocking the guy for trying to do this in their own home and not in a lab.
Some believe that he [reactor-guy] was trying to split atoms and so he used some elements in a mix but it went wrong and blew up his stove-top.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;What if he made a great discovery?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When asked about this the speaker [speaker-guy] mentions that reactor-bro shouldn&amp;rsquo;t be doing this in his home because its not safe and could kill him (reminder that battery engineers complain the same about home power cell diy&amp;rsquo;ers [see: muh safety argument]).&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s also random clips of nuclear testing demonstrations from the 50&amp;rsquo;s which are seemingly randomly thrown in as if to insinuate that reactor-bro was trying to make or bomb or could have &lt;em&gt;nuked&amp;rsquo;d&lt;/em&gt; himeself.
It seems a bit out of place and weird.&lt;/p&gt;
&lt;p&gt;PDF2LEFT: states about the epistemological doctrine of classical scientists in history: &amp;ldquo;who works in a particular historical situation must learn how to recognize error and how to live with it&amp;rdquo;. Going on to say that they need a &amp;ldquo;&lt;em&gt;theory of error&lt;/em&gt; in addition to the &lt;em&gt;certain and infallible&lt;/em&gt; rules which define the approach to the truth.
Further: To develop a theory of error is to create an (likely unchanging) &lt;em&gt;theory of error&lt;/em&gt; is to riddle that same theory with historically sourced error.
In other words the theory itself is not free from the very thing that it describes as a problem to scientific development. [see observational bias, infinitesimal regression or observation]&lt;/p&gt;
&lt;h2 id=&#34;something-about-a-form-of-indoctrination-i-thought-was-cool&#34;&gt;Something about a form of indoctrination I thought was cool&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Almost everyone now agrees that what looks like a result of reason - the mastery of a language, the existence of a richly articulated
perceptual world, logical ability - is due partly to indoctrination, partly a to a process of growth that proceeds with the force of natural low&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Not much to say other than I thought it was interesting how indoctrination is  used here in an almost innocent fashion.
Indoctrination is used in conjunction with the phrase &lt;em&gt;due partly&lt;/em&gt; which seems as though the feeling is indoctrination is there but with its weight removed.
Just before this part Feyerabend talk about error related to historical periods which seems rather fitting as imperceivable indoctrination could easily be part of this &lt;em&gt;historical error source&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&#34;breaking-the-rules-of-classical-epistemology&#34;&gt;Breaking the rules of classical epistemology&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;We find, then, that there is not a single rule, however plausible, and however firmly grounded in epistemology, that is not violated at some time or other.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hmm&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Such violations are no accidental&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hmmmmmm&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;they are not the results of insufficient knowledge or of inattention which might have been avoided&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hmmmmmmmmm!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;On the contrary, we see that they are necessary for progress&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Progress in this case really means &amp;ldquo;knowledge&amp;rdquo;.
I&amp;rsquo;m choosing to interpret this using Bloom&amp;rsquo;s method of describing understanding. New discoveries don&amp;rsquo;t always give us comprehensions as we&amp;rsquo;ve really only uncovered an apparant fact.
Comprehension, understanding, and intuition come later after some time.&lt;/p&gt;
&lt;p&gt;So we see that in order to progress scientific knowledge that it is necessary to break from traditional methods and embrace that which traditional processes often deem incorrect.&lt;/p&gt;
&lt;p&gt;Memes aside this reads similar to the colloquialism that goes something like: &lt;em&gt;use the right tool for the job&lt;/em&gt;.
Following this casual logic we could prescribe traditional scientific method(a process) analogous to some kind of tool, which implies there are specific uses for it.&lt;/p&gt;
&lt;h2 id=&#34;counterinduction-1-theories&#34;&gt;Counterinduction 1: Theories&lt;/h2&gt;
&lt;p&gt;Cool points that are made in this section:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Progressive educators have always tried to develop the individuality of their pupils, and to bring to fruition the particular and sometimes quite unique talents and beliefs that each child possesses&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;To this end I see that creativity in the pursuit of solutions flourishes most when students are given constraints.
One of the fundamental issues with finding solutions to problems is finding the appropriate question to ask which allows the creative part of ourselves to make connections between the problem and the question being asked.
Those connections and the process of establishing premises around the convenience, feasibility, and effectiveness of those connections is what facilitates the derivation of a solution.&lt;/p&gt;
&lt;p&gt;Simply said: if you can ask a good enough question then creativity can flourish in the space of that question. Then it is sufficient to understand how we ask questions.&lt;/p&gt;
&lt;h2 id=&#34;asking-questions-is-both-restrictive-and-freeing&#34;&gt;Asking questions is both Restrictive and Freeing&lt;/h2&gt;
&lt;h3 id=&#34;it-give-us-a-reason-to-move&#34;&gt;It give us a reason to move&lt;/h3&gt;
&lt;p&gt;I say this because through out the course of this essay there is a sentiment which I personally don&amp;rsquo;t agree with &lt;em&gt;(bad paraphrasing incoming)&lt;/em&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A process of learning free of restrictions is also free of restriction of thought&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On paper yes, this is probably how things should work, however: as irrational a person may be we are still wrapped in this logical, rational body of a human.
This is to say that while we may be able to conjure great theories without restrictions in practice many freeze at the thought of having no restrictions to a solution.&lt;/p&gt;
&lt;p&gt;A question regarding a problem gives us context; a problem space.
Even if we are trying to derive some new kind of knowledge from what may seem like the ether before we arrive at an uncharted logical destination we must at least generate some set of problems spaces, in order to align a direction of solution.&lt;/p&gt;
&lt;h2 id=&#34;consensus&#34;&gt;Consensus&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;In addition, pluralism is supposed to lead to the truth: &amp;lsquo;&amp;hellip;the peculiar evil of silencing the expression of an opinion is that it is robbing the human&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://shockrah.xyz/notes/ellipse-calculations/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/notes/ellipse-calculations/</guid>
      <description>&lt;h1 id=&#34;building-an-ellipse-from-2-points&#34;&gt;Building an ellipse from 2 points&lt;/h1&gt;
</description>
    </item>
    
    <item>
      <title>About Me</title>
      <link>https://shockrah.xyz/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/about/</guid>
      <description>&lt;h2 id=&#34;who-i-am&#34;&gt;Who I am&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m Shockrah, a lad on the internet that likes to make stuff. I make candy, code,
and sometimes other random crafts. This site is where I post just some of the
highlights from what I&amp;rsquo;m working on.&lt;/p&gt;
&lt;h2 id=&#34;about-the-site&#34;&gt;About the site&lt;/h2&gt;
&lt;p&gt;Typically I just post about things that I&amp;rsquo;m working on or stuff I think might be
useful for myself or others.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Notes and Ramblings of mine</title>
      <link>https://shockrah.xyz/notes-ramblings/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/notes-ramblings/</guid>
      <description>&lt;h1 id=&#34;notes-and-things&#34;&gt;Notes and Things&lt;/h1&gt;
&lt;p&gt;This page is dedicated to my own notes about stuff that I read.
It&amp;rsquo;s &lt;em&gt;very&lt;/em&gt; stream of concious-y and often not super coherent so often there gaping logical holes but I like the way they &lt;em&gt;feel&lt;/em&gt; so I link them on this page.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; A lot of these aren&amp;rsquo;t actually finished since they are ultimately just notes which describe my contemporary thoughts when reviewing something new.&lt;/p&gt;
&lt;h2 id=&#34;philosophy&#34;&gt;Philosophy&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://shockrah.xyz/notes/against-method&#34;&gt;Is Logical Positivism a Meme? - Against Method&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;cookery&#34;&gt;Cookery&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Nothing Yet&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;math-things&#34;&gt;Math Things&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Nothing Yet&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;design-things&#34;&gt;Design things&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&amp;#x1f44b; &lt;a href=&#34;https://shockrah.xyz/notes/rationalizing-user-data&#34;&gt;Bubble Chat and it&amp;rsquo;s User Data&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Places you can find me</title>
      <link>https://shockrah.xyz/links/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/links/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Send me coin</title>
      <link>https://shockrah.xyz/e-begging/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://shockrah.xyz/e-begging/</guid>
      <description></description>
    </item>
    
  </channel>
</rss>
