Jekyll2018-07-19T11:06:47+02:00https://www.gonx.dk/Dragon’s HatcheryPrimarily a blog, but also a technical resource and reference for many things computers.Sebastian JensenEncryption Exhibitionism (my PGP keys)2018-05-04T13:50:00+02:002018-05-04T13:50:00+02:00https://www.gonx.dk/blogs/2018/05/gnupg-keys<p>I’ve finally found a sensible way to use PGP - by using Thunderbird with Enigmail.</p>
<p>My email provider (Amazon AWS) recently announced support for IMAP, enabling me to use Thunderbird again.
They previously only supported Microsoft Exchange, or using their terrible WebUI, which was fortunate for them considering I was on the lookout for a new provider.</p>
<p>Should you receive an email from me in the future, you can expect the mail to be signed, and have my public key attached to it.</p>
<p>I have also deprecated my old @overclocked.net email. I have been ensured a “lifetime account” by <a href="http://overclock.net">Overclock.net</a> for the time being, but historical DNS issues as well it being a Google Apps account I just want to be done with it.</p>
<p><strong>My current PGP key fingerprint is: <code class="highlighter-rouge">513B8F9662571F03E142FC02B692F29993D36D53</code></strong></p>
<h2 id="why-elliptic-curves">Why elliptic curves?</h2>
<p>I’ve opted to go for an EC key, specifically Ed25519, because the attack vector (both implementation and design) seems significantly smaller than RSA.</p>
<p><a href="https://www.bsi.bund.de">BSI</a> has a <a href="https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.pdf?__blob=publicationFile">technical recommendations</a> stating a factoring modulus minimum of 3000 bits, whereas discrete logarithm key sizes has a minimum of 250 bits.</p>
<p>With that significant of a key size reduction, you remove a lot of overhead, resulting in EC usually being significantly faster than RSA at similar security levels (256 bit ECC vs 3072 bit RSA)</p>
<p>Additionally, my specific choice of key (<a href="https://en.wikipedia.org/wiki/EdDSA#Ed25519">Ed25519</a>) has been tuned for modern x86-64 CPU’s as well as being a solid implementation of EdDSA. You can read more about Ed25519 on their own <a href="https://ed25519.cr.yp.to/">webpage</a>.</p>
<p>Anyway, integer factorization is a subset of the discrete logarithm problem. If ECC is broken, so is RSA, and we have other worries than my private key.</p>
<h2 id="importing-my-key">Importing my key</h2>
<p>There’s a lot of PGP software, but the one I use is GnuPG. It works great on Linux, and it’s essentially what Enigmail expects. You can probably stroll along using other PGP software, since the methods used will undoubtedly be similar.</p>
<p>Before importing my key, make sure your PGP software is up to date and supports Ed25519 keys. In the unlikely case that your software doesn’t support Ed25519 keys, I have an RSA key linked at the bottom of the article which you can use in place of my Ed25519 key.</p>
<p>If you want to download the key directly, it can be acquired on this site at <a href="/sebastianjensen.asc">/sebastianjensen.asc</a>.</p>
<p>Otherwise, if you have a sane keyserver configured, you can use your PGP software to receive my key:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gpg2 --recv-keys 513B8F9662571F03E142FC02B692F29993D36D53
</code></pre></div></div>
<h1 id="verifying-my-key">Verifying my key</h1>
<p>An external source that has my PGP key is my Twitter bio - see my page footer.</p>
<p>If the full fingerprints match, and you trust your keyserver, you now have the correct key in your keyring.</p>
<h2 id="signing-keys">Signing keys</h2>
<p>You can sign my key as you see fit. I suggest at least asking me if my key is recent via the social media links at the page footer, but meeting up with me and verifying that way is certainly better.</p>
<p>If you’ve verified my key, you can sign it as you see fit:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gpg --ask-cert-level --sign-key gonx@gonx.dk
</code></pre></div></div>
<p>I’ll sign your key provided I can do a physical verification. To make it easy, please have your fingerprint and full UID on a piece of paper. I’ll do level 3 signs if I’m absolutely convinced that you are who your key states you are.</p>
<p>After signing your key, I will send you an encrypted and signed mail with the sign to the email specified in your UID using this method:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gpg --armor --export your@email.com > ~/tmp/your@email.com.asc
gpg --sign --encrypt --recipient your@email.com ~/tmp/your@email.com.asc
</code></pre></div></div>
<p>It is then your responsibility to upload the sign to a keyserver. This is done by decrypting, importing and sending the key to your keyserver:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gpg --decrypt your@email.com.asc.pgp
gpg --import your@email.com.asc
gpg --send-keys <YOUR ID>
</code></pre></div></div>
<p>If you have multiple UID’s I’ll send an email for each UID. This is to ensure that you have access to your relevant UID’s.</p>
<h2 id="non-ecc-rsa-key">Non-ECC (RSA) Key</h2>
<p>Should an Ed25519 key - against all odds - be too advanced for your PGP software, I have a “legacy” RSA2048 key with a significantly shorter expiry time: <code class="highlighter-rouge">75EDC4A4C1A35433B62A08D9708AABAA324BED96</code></p>
<p>The keys use is discouraged by me because I think RSA is clunky. But it still works, and it might be less clunky for you.</p>
<p>For the near future, RSA is definitely still safe to use, even at 2048 bits. I will keep refreshing my RSA key - possibly increase the size - as long as quantum computers aren’t mainstream.</p>
<h2 id="conclusion">Conclusion</h2>
<p>I’m proud to finally have set up PGP. The decision to go for EC rather than RSA has been something I’ve had on my mind ever since getting into DevOps.</p>
<p>Writing this article has certainly taught me some new stuff, not only about PGP and GnuPG, but also some new things such as ECC potentially being signifcantly easier to break using Shor’s Algorithm than RSA, which was my original main arguments for going for Ed25519 over RSA.</p>
<p>Article and related homepage stuff needed to include GPG keys took me about 5 hours. I’ve made sure all references to my Ed25519 key on this page is linked to the configuration of my webserver, so if I end up changing the keyid, this page will always have the most updated key IDs. But not the RSA ID - implementing support for 2 ID’s seemed overkill.</p>
<p>I spent upwards of 10-15 hours the last few days getting to grips with Enigmail, Thunderbird, GnuPG as well.</p>
<p>Credit goes to Jeff Carouth’s <a href="https://carouth.com/blog/2014/05/25/signing-pgp-keys/">“Signing PGP Keys” article</a> for a lot of the content on this page.</p>Sebastian JensenI’ve finally found a sensible way to use PGP - by using Thunderbird with Enigmail.Local Continuous Integration of Jekyll using Git hooks2018-04-22T00:45:00+02:002018-04-22T00:45:00+02:00https://www.gonx.dk/blogs/2018/04/finalizing-ci<p>Once of the fantastic features of git is that it’s decentralized. This means I can keep my CI (Continuous Integration) workflow without requiring internet nor extra services - just git and Jekyll.</p>
<p>I would say this is the closest thing you can get to the KISS (Keep It Simple, Stupid) principle. Optimally I would be building the site in a <a href="https://www.docker.com">Docker</a> container as well, but as I am the only developer on the site, I won’t bother with that type of work.</p>
<p>As I mentioned in my <a href="/blogs/2018/04/second-day/">previous post</a>, I would be using the hooks functionality of git; more specifically, the <code class="highlighter-rouge">pre-commit</code> and <code class="highlighter-rouge">post-commit</code> hooks.</p>
<h2 id="tackling-the-issues">Tackling the issues</h2>
<p>Certainly the largest hurdle to getting this on the road was deciding how to make sure nothing gets deleted, but at the same time it is not massively inconvenient.</p>
<p>Sometimes, the best solution is the simplest one. I hardcoded 2 lists of files: ones that would always be updated (like <a href="/feed.xml">/feed.xml</a>), and ones that should never be touched (like /code).</p>
<p>Any file not matching either of these would use <code class="highlighter-rouge">rm -i</code>, where <code class="highlighter-rouge">-i</code> stands for <em>interactive</em> - meaning that it would ask me for permission for every file imaginable.</p>
<p>Unfortunately the potential interactivity makes it unsuitable for use in scripting (unless you like to live dangerously), but it was not something I was worried about.</p>
<h2 id="the-hooks">The hooks</h2>
<p>For a short period of time, I was hoping to use a branch to push content rather than ‘hacking’ around a <code class="highlighter-rouge">post-commit</code> solution.</p>
<p>To my surprise, using git branches to deploy without pushing does not seem like a possible solution - or at least not how I see it.</p>
<p>The big showstopper for the branches was covering <a href="https://ariya.io/2013/09/fast-forward-git-merge">fast-forwarded</a> branches. This is normally a desirable solution, because it keeps the history clean and devoid of merge commits.</p>
<p>It turns out that the hook associated with fast-forwarding is a checkout.</p>
<p>Since so many other things are also checkouts (basically anything that writes a file to disk), this was no longer a viable idea.</p>
<p>So, scrapping that idea, I ended up using an environment variable with the default being to not push. Worst case, I forget to set the variable and I have to do a <code class="highlighter-rouge">git reset --soft HEAD^</code> and then recommit to deploy.</p>
<h1 id="githookspost-commit">.git/hooks/post-commit</h1>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="c">#!/bin/bash</span>
<span class="nv">ALWAYSDELETE</span><span class="o">=(</span><span class="s2">"404"</span> <span class="s2">"about"</span> <span class="s2">"assets"</span> <span class="s2">"blogs"</span> <span class="s2">"feed.xml"</span> <span class="s2">"index.html"</span> <span class="s2">"robots.txt"</span> <span class="s2">"speedruns"</span><span class="o">)</span>
<span class="nv">NEVERDELETE</span><span class="o">=(</span><span class="s2">"code"</span><span class="o">)</span>
<span class="nv">HOSTPATH</span><span class="o">=</span>/srv/http/gonx.dk
<span class="k">if</span> <span class="o">[</span> <span class="o">!</span> <span class="nt">-z</span> <span class="nv">$PUSH_ON_COMMIT</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
<span class="c"># build</span>
<span class="nb">cd </span>site
jekyll clean <span class="nt">-q</span> <span class="o">||</span> <span class="nb">exit </span>1
jekyll build <span class="nt">--strict_front_matter</span> <span class="nt">-q</span> <span class="o">||</span> <span class="nb">exit </span>1
<span class="c"># clean destination</span>
<span class="k">for </span>x <span class="k">in</span> <span class="k">${</span><span class="nv">HOSTPATH</span><span class="k">}</span>/<span class="k">*</span><span class="p">;</span> <span class="k">do
</span><span class="nv">x</span><span class="o">=</span><span class="s2">"</span><span class="k">$(</span><span class="nb">basename</span> <span class="s2">"</span><span class="nv">$x</span><span class="s2">"</span><span class="k">)</span><span class="s2">"</span>
<span class="nb">unset </span>SKIP NOWARN
<span class="c"># iterate through "blacklist" array and skip this file if we have a match</span>
<span class="k">for </span>y <span class="k">in</span> <span class="k">${</span><span class="nv">NEVERDELETE</span><span class="p">[@]</span><span class="k">}</span><span class="p">;</span> <span class="k">do
if</span> <span class="o">[</span> <span class="s2">"a</span><span class="nv">$x</span><span class="s2">"</span> <span class="o">==</span> <span class="s2">"a</span><span class="nv">$y</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
</span><span class="nv">SKIP</span><span class="o">=</span><span class="nb">true
</span><span class="k">fi
done</span>
<span class="o">[</span> <span class="o">!</span> <span class="nt">-z</span> <span class="nv">$SKIP</span> <span class="o">]</span> <span class="o">&&</span> <span class="k">continue</span>
<span class="c"># iterate through "whitelist" array - files that get deleted without confirmation</span>
<span class="k">for </span>y <span class="k">in</span> <span class="k">${</span><span class="nv">ALWAYSDELETE</span><span class="p">[@]</span><span class="k">}</span><span class="p">;</span> <span class="k">do
if</span> <span class="o">[</span> <span class="s2">"a</span><span class="nv">$x</span><span class="s2">"</span> <span class="o">==</span> <span class="s2">"a</span><span class="nv">$y</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
</span><span class="nv">NOWARN</span><span class="o">=</span><span class="nb">true
</span><span class="k">fi
done
if</span> <span class="o">[</span> <span class="o">!</span> <span class="nt">-z</span> <span class="nv">$NOWARN</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
</span><span class="nb">rm</span> <span class="nt">-r</span> <span class="s2">"</span><span class="k">${</span><span class="nv">HOSTPATH</span><span class="k">}</span><span class="s2">/</span><span class="k">${</span><span class="nv">x</span><span class="k">}</span><span class="s2">"</span> <span class="o">||</span> <span class="nv">RMERROR</span><span class="o">=</span><span class="nb">true
</span><span class="k">else
</span><span class="nb">rm</span> <span class="nt">-ri</span> <span class="s2">"</span><span class="k">${</span><span class="nv">HOSTPATH</span><span class="k">}</span><span class="s2">/</span><span class="k">${</span><span class="nv">x</span><span class="k">}</span><span class="s2">"</span> <span class="o">||</span> <span class="nv">RMERROR</span><span class="o">=</span><span class="nb">true
</span><span class="k">fi
done</span>
<span class="c"># deploy</span>
<span class="nb">cd </span>_site
<span class="nb">cp</span> <span class="nt">-r</span> <span class="k">*</span> <span class="s2">"</span><span class="k">${</span><span class="nv">HOSTPATH</span><span class="k">}</span><span class="s2">"</span> <span class="o">||</span> <span class="nb">echo</span> <span class="s2">"copy of _site to '</span><span class="nv">$HOSTPATH</span><span class="s2">' failed"</span>
<span class="c"># exit sensibly</span>
<span class="k">if</span> <span class="o">[</span> <span class="o">!</span> <span class="nt">-z</span> <span class="nv">$RMERROR</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
</span><span class="nb">exit </span>1
<span class="k">else
</span><span class="nb">echo</span> <span class="s2">"Changes pushed, PUSH_ON_COMMIT was set"</span>
<span class="nb">exit </span>0
<span class="k">fi
else
</span><span class="nb">echo</span> <span class="s2">"No changes pushed, PUSH_ON_COMMIT is unset"</span>
<span class="k">fi</span></code></pre></figure>
<p>Nothing out of the ordinary here. I chose to use <code class="highlighter-rouge">--strict_front_matter</code> because I prefer having warnings as errors during deployments.</p>
<p>You could potentially drop the build files directly into the webroot from Jekyll, but I decided not to in case the build process throws an error.</p>
<h1 id="githookspre-commit">.git/hooks/pre-commit</h1>
<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="c">#!/bin/bash</span>
<span class="k">if </span><span class="nb">hash </span>jekyll 2>&1 <span class="p">;</span> <span class="k">then
</span><span class="nv">tmpdir</span><span class="o">=</span><span class="k">$(</span><span class="nb">mktemp</span> <span class="nt">-d</span><span class="k">)</span>
jekyll b <span class="nt">-s</span> site <span class="nt">-d</span> <span class="s2">"</span><span class="nv">$tmpdir</span><span class="s2">"</span> <span class="nt">-q</span>
<span class="nv">rv</span><span class="o">=</span><span class="nv">$?</span>
<span class="k">if</span> <span class="o">[</span> <span class="nv">$rv</span> <span class="nt">-eq</span> 0 <span class="o">]</span><span class="p">;</span> <span class="k">then
</span><span class="nb">echo</span> <span class="s2">"OK. Build passed without errors."</span>
<span class="k">else
</span><span class="nb">echo</span> <span class="s2">"ERROR. jekyll returned build errors, see above. Your commit was rejected."</span>
<span class="k">fi
</span><span class="nb">rm</span> <span class="nt">-rf</span> <span class="s2">"</span><span class="k">${</span><span class="nv">tmpdir</span><span class="k">}</span><span class="s2">"</span>
<span class="o">[</span> <span class="nt">-d</span> <span class="s2">".sass-cache"</span> <span class="o">]</span> <span class="o">&&</span> <span class="nb">rm</span> <span class="nt">-r</span> .sass-cache
<span class="nb">exit</span> <span class="nv">$rv</span>
<span class="k">else
</span><span class="nb">echo</span> <span class="s2">"'jekyll' not in PATH, skipping pre-commit check"</span>
<span class="k">fi</span></code></pre></figure>
<p>Again, nothing too exciting here.</p>
<p>I used a temporary build dir since I wasn’t too sure what would happen in case <code class="highlighter-rouge">jekyll serve</code> was already running.</p>
<h2 id="conclusion">Conclusion</h2>
<p>I feel like not going for high-end solutions such as <a href="https://buildbot.net/">buildbot</a> and <a href="https://jenkins.io/">Jenkins</a> was worth it in my case. I ended up with no resident services and essentially the smallest possible footprint using BASH.</p>
<p>I hope that satiated your thirst for some code and problem solving. This is the first of many styles of posts where I will be covering a technical problem with some real-world code examples.</p>Sebastian JensenOnce of the fantastic features of git is that it’s decentralized. This means I can keep my CI (Continuous Integration) workflow without requiring internet nor extra services - just git and Jekyll.Second day of Jekyll2018-04-21T21:20:00+02:002018-04-21T21:20:00+02:00https://www.gonx.dk/blogs/2018/04/second-day<p>I spent a few hours porting the theme out of the Rubygems package and doing some small theme adjustments to my liking.</p>
<p>I also added a few things to the site, as you can read below.</p>
<h2 id="theme-changes">Theme changes</h2>
<p>This one is sort of boring, so I’ll just present the git changelog to you:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> Integrate Minima 2.5.0 theme with corrections
- Social now supports Twitch
- 'home' layout has been renamed to 'listing', with a symlink in place
to preserve compatibility.
- Don't show page title on listings. The page title is now intended to
be used for a capitalized display elsewhere (e.g. header).
- Filter listings based on 'page.search_category' rather than
showing all posts.
- Remove "subscribe via RSS" from listings
- Show a fallback message if no posts are found for a listing.
- .svg-icon use vertical-align 'sub' because it's more centered
- Remove top 5px dark grey bar
- Remove bottom padding for footer
- Add slight padding and background color to highlight posts
</code></pre></div></div>
<p>I’ve made some other changes that weren’t in theme files, and these are as follows:</p>
<ul>
<li>Add author name</li>
<li>Updated the description in the bottom right (this was also being used for page previews, apparently)</li>
<li>Added site RSS in social</li>
<li>Renamed the ‘blog’ category to ‘blogs’ since /blogs/ should show blogs.</li>
<li>Added a /blogs/ page (essentially just the home page, but for the URL it makes sense). Ideally this should be done as a redirect instead.</li>
<li>Added a pronouncation of my name to the <a href="/about/">about</a> page.</li>
</ul>
<p>The rest of the changes I will cover below</p>
<h2 id="permalinks">Permalinks</h2>
<p>I decided on a new permalink style. The default of <code class="highlighter-rouge">category/year/month/day/title.extension</code> (blogs/2018/04/21/title.html) doesn’t look too nice in my opinion, and while it is “sensible” in terms of dealing with dumb web servers, I use nginx and have the capability to have clean URLs.</p>
<p>Ultimately I decided on using <code class="highlighter-rouge">category/year/month/title</code>, as day is not important with the sort of content I will be making, but at the same time I don’t want to rob people of too much information.</p>
<h2 id="categories">Categories</h2>
<p>Categories seem like a really powerful tool in Jekyll. It allows me to separate my posts into different listings, depending on what people are interested in.</p>
<p>I want to keep my front page to posts where I talk about intelligent things, so I’ve decided to change the theme to only show posts based on the category that page should be showing. In this case, the front page will be showing blog posts only. For the time being this excludes speedrunning, but CS:GO will probably get its own section in the future as well.</p>
<p>This brings me onto the next subject:</p>
<h2 id="speedrunning">Speedrunning</h2>
<p>As promised in the last post, speedrunning will be featured fairly heavily on the site, so I’ve made a new section for it.</p>
<p>Head right over to the <a href="/speedruns/">speedrunning</a> section now and check the <a href="/speedruns/2018/04/press-b-to-bark/">latest post</a> about new tech found in Pet the Pup at the Party resulting in a new WR.</p>
<h2 id="continuous-integration-of-the-site">Continuous Integration of the site</h2>
<p>I’ve decided on not using CI, and will instead be using git pre- and post-commit hooks to deploy my site.</p>
<p>The actual deployment part is still TBA, but I’ve at least got the site building automatically to ensure all my commits are technically deployable.</p>
<p>My biggest issue with the deployment part is that I want to remove everything from the webroot aside from a few specific files. Unfortunately, some files on this list could change at any given moment.</p>Sebastian JensenI spent a few hours porting the theme out of the Rubygems package and doing some small theme adjustments to my liking.World Record: Pet the Pup at the Party - press B to Bark2018-04-21T20:01:00+02:002018-04-21T20:01:00+02:00https://www.gonx.dk/speedruns/2018/04/press-b-to-bark<p>You can apparently press B to bark in Pet the Pup at the Party.</p>
<p>This is significant in speedruns because a significant portion of the run is RNG based, so having the directional assistance of the bark helps out a lot.</p>
<p>The week following the discovery, the 10 Pups category would see a change in the 6 months old record of <a href="https://www.speedrun.com/Pet_the_Pup_at_the_Party/run/zxvo1o8y">4:21 by Bullets</a>, to <a href="https://www.speedrun.com/Pet_the_Pup_at_the_Party/run/ydqxvexm">4:20 by Brummen</a>, followed by <a href="https://www.speedrun.com/Pet_the_Pup_at_the_Party/run/y234orwm">4:14</a> and then <a href="https://www.speedrun.com/Pet_the_Pup_at_the_Party/run/y23o3x9m">4:12 by me</a>.</p>
<p>You can see the speedrun here, with my Australian friend, <a href="https://www.twitch.tv/lowflyinggoat">LowFlyingGoat</a>, participating on voice chat while he was live on Twitch:</p>
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/CatcbReoqdA?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>
<p>You can also check out the official leaderboards at <a href="https://www.speedrun.com/Pet_the_Pup_at_the_Party">Speedrun.com</a></p>
<p>Download the game for free at <a href="https://grey2scale.itch.io/pet-the-pup">Will Herring’s own itch.io page</a>.</p>Sebastian JensenYou can apparently press B to bark in Pet the Pup at the Party.Wow, I can’t believe it’s Jekyll!2018-04-21T15:15:00+02:002018-04-21T15:15:00+02:00https://www.gonx.dk/blogs/2018/04/wow-i-cant-believe-its-jekyll<p>Well, it finally happened. The site got a “rewrite”.</p>
<p>10 years of basically bullshit as a site, with about 2 attempted rewrites in an attempt to get a blog working, and we now finally have something!</p>
<p>I can with high certaincy say that both server- and client-side code was overkill for a blog project, no matter how cool it looked, which is why I ended up with Jekyll.</p>
<h2 id="long-term">Long Term</h2>
<p>Long term plans for this site is gonna be me materializing my thoughts on paper.</p>
<p>Could be me trying to set up a new overclock, could be a new container project, it could be a CS:GO scrim, or it could be analysis of new tech in a speedrun.</p>
<h2 id="porting-the-old-stuff-over">Porting the “old stuff” over</h2>
<p>Short term plans are definitely to rewrite the CSS to something more in my liking.</p>
<p>Some of the stuff I had on my old site included:</p>
<p><strong>High-performance IP Checker</strong>:</p>
<p>Well, it was written in PHP, can’t be high-performance other than it simply just returning the connecting IP. Also, ever since moving to CloudFlare it hasn’t been working for obvious reasons.</p>
<p>Since so many sites offers this functionality nowadays I will get rid of it.</p>
<p><strong>Nicer push to talk audio cues</strong>:</p>
<p>These will be uploaded in a blog post shortly, both the Risset drum and the square wave samples.</p>
<p>I don’t use them any longer given that I tend to record a lot of my gameplay, but there’s certainly nothing wrong with them.</p>
<p><strong>/code/</strong>:</p>
<p>Pretty much all of this code is obsolete and not in any way indiciative of my current skill.</p>
<p>For the time being, this should still be available, but I’ll most likely retire it soon. Only good ones were some BASH scripts which I might put up as a Github project at some point.</p>
<p><strong>PGP Key</strong>:</p>
<p>Surprisingly (for me), I never received an email that was encrypted in the 3 years I had the key displayed on the site.</p>
<p>Until I can think of a good way to keep this on all my mobile devices without fearing for a full private key reset due to a potential device loss, I want to ensure my responses remain swift.</p>
<p><strong>Google Analytics</strong>:</p>
<p>Oddly enough, it seems like I never had this set up on my old site.</p>
<p>While I don’t want to completely rule out the chances of GA getting integrated on the site, I don’t think it’s going to happen soon.</p>
<h2 id="getting-cid">Getting CI’d</h2>
<p>I’m looking for a way to have my site build automatically whenever I push to git, but I want to keep it local and inexpensive in both cost and resources.</p>
<p>I have some experience with Jenkins, but considering this will be a one-off I don’t think that’s the path I will be taking, but we’ll see.</p>Sebastian JensenWell, it finally happened. The site got a “rewrite”.