<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Technical on Treadwell</title><link>https://treadwell.net/tags/technical/</link><description>Recent content in Technical on Treadwell</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 24 Jul 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://treadwell.net/tags/technical/index.xml" rel="self" type="application/rss+xml"/><item><title>My Setup</title><link>https://treadwell.net/blog/my-setup/</link><pubDate>Thu, 24 Jul 2025 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/my-setup/</guid><description>&lt;p&gt;Hi. I wrote a post years ago about the &lt;a href="https://treadwell.net/blog/tools-i-use/"&gt;tools that I use&lt;/a&gt; (which this list has changed) so I thought it&amp;rsquo;s time to make a post about my current setup and tooling. I&amp;rsquo;ll keep this post updated with the newest setup that I have to avoid creating a new post for changes.&lt;/p&gt;
&lt;h2 id="workstation"&gt;Workstation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CPU:&lt;/strong&gt; &lt;a href="https://www.amd.com/en/products/processors/desktops/ryzen/7000-series/amd-ryzen-9-7950x.html" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.amd.com.ico" alt="" width="16" height="16" loading="lazy"&gt;AMD Ryzen 9 7950X&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPU:&lt;/strong&gt; &lt;a href="https://www.evga.com/articles/01476/evga-geforce-rtx-3080ti/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.evga.com.ico" alt="" width="16" height="16" loading="lazy"&gt;EVGA RTX 3080 Ti FTW3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RAM:&lt;/strong&gt; 64GB DDR5&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage:&lt;/strong&gt; Various nvme drives&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="audio"&gt;Audio&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Headphones:&lt;/strong&gt; &lt;a href="https://www.shure.com/en-US/products/earphones/se215" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.shure.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Shure SE215&lt;/a&gt; or &lt;a href="https://www.audio-technica.com/en-us/ath-m50x" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.audio-technica.com.ico" alt="" width="16" height="16" loading="lazy"&gt;ATH-M50x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microphone:&lt;/strong&gt; &lt;a href="https://www.shure.com/en-US/products/microphones/sm7b" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.shure.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Shure SM7B&lt;/a&gt; + &lt;a href="https://www.cloudmicrophones.com/cloudlifter-cl-1" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.cloudmicrophones.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Cloudlifter CL-1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audio Interface:&lt;/strong&gt; &lt;a href="https://us.focusrite.com/products/scarlett-solo" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/us.focusrite.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Focusrite Scarlett Solo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Speakers:&lt;/strong&gt; &lt;a href="https://mackie.com/en/products/studio-monitoring/cr-x-series/CR3_XBT.html" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/mackie.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Mackie CR3-XBT&lt;/a&gt; + &lt;a href="https://mackie.com/en/products/studio-monitoring/cr-x-series/CR8S_XBT.html" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/mackie.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Mackie CR8S-XBT&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;until next time&lt;/p&gt;</description></item><item><title>Using AI for Programming</title><link>https://treadwell.net/blog/using-ai-for-programming/</link><pubDate>Wed, 23 Jul 2025 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/using-ai-for-programming/</guid><description>&lt;p&gt;A hot topic as of recent years. It&amp;rsquo;s a topic that&amp;rsquo;s discussed by every person right now - especially in tech it seems.&lt;/p&gt;
&lt;h2 id="do-i-use-ai"&gt;Do I use AI?&lt;/h2&gt;
&lt;p&gt;100%. Yes. I don&amp;rsquo;t do the &amp;ldquo;vibe&amp;rdquo; coding shit though. I&amp;rsquo;ll outline some examples of what I&amp;rsquo;ve used AI for.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Optimization of database queries&lt;/li&gt;
&lt;li&gt;Documentation of methods or a feature&lt;/li&gt;
&lt;li&gt;Boilerplating - for example writing out a base template for html using.&lt;/li&gt;
&lt;li&gt;Translations - I wrote a script to utilize the &lt;a href="https://www.deepl.com" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.deepl.com.ico" alt="" width="16" height="16" loading="lazy"&gt;DeepL&lt;/a&gt; API to translate files that I input.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vibe-coding"&gt;Vibe Coding&lt;/h2&gt;
&lt;p&gt;Oh shit I hate this. I&amp;rsquo;ll say I do love that more people are building things, but not understanding anything that the AI is doing isn&amp;rsquo;t cool.
In a logical world people would learn code and use AI to help perfect an implementation. This is how I use AI.&lt;/p&gt;</description></item><item><title>New Site</title><link>https://treadwell.net/blog/new-site/</link><pubDate>Tue, 19 Dec 2023 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/new-site/</guid><description>&lt;p&gt;&lt;strong&gt;Update: 7/26/2026&amp;hellip;.. again. Back to hugo and cloudflare workers.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update: 7/7/2025&amp;hellip; I did it again. lmao. The site is back in Django.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I did it again. I recreated my website. It&amp;rsquo;s not hosted by me anymore nor do I even have a backend. It&amp;rsquo;s using Hugo and GitHub Pages.&lt;/p&gt;
&lt;p&gt;This allows me to write stuff without worrying about security or maintenance of a system/software.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the Python code I wrote to export blog posts over to the Hugo format from Django.&lt;/p&gt;</description></item><item><title>The Life of Technical Debt</title><link>https://treadwell.net/blog/technical-debt/</link><pubDate>Tue, 26 Sep 2023 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/technical-debt/</guid><description>&lt;p&gt;I&amp;rsquo;ll be talking about technical debt in general, what to look out for before you fall into tech debt, and my experience with it.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h1 id="what-is-technical-debt"&gt;What is technical debt?&lt;/h1&gt;
&lt;p&gt;So tech debt&amp;rsquo;s definition on Google is &amp;ldquo;Technical debt is a concept in software development that reflects the implied cost of additional rework caused by choosing an easy solution now instead of using a better approach that would take longer.&amp;rdquo; That sums it up lol.&lt;/p&gt;</description></item><item><title>How I Handle Backups</title><link>https://treadwell.net/blog/how-i-handle-backups/</link><pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/how-i-handle-backups/</guid><description>&lt;p&gt;The normal rule is 3-2-1 - 3 backups, 2 onsite, 1 offsite. However I do 2 offsite only. I may do a third offsite, but not sure just yet.&lt;/p&gt;
&lt;p&gt;I use &lt;a href="https://www.scaleway.com/en/c14-cold-storage/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.scaleway.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Scaleway&amp;rsquo;s C14 Cold Storage&lt;/a&gt;. I used OVH Archive, but the upload speeds were super slow.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;In proxmox I edited the &lt;code&gt;/etc/vzdump.conf&lt;/code&gt; and added &lt;code&gt;script: /path/to/my/perl/script.pl&lt;/code&gt; at the bottom. When I run vzdump from the ui or proxmox kicks off a backup cron the script will get ran.&lt;/p&gt;</description></item><item><title>How I Version Products in Unreal Engine</title><link>https://treadwell.net/blog/how-i-version-products-in-unreal-engine/</link><pubDate>Wed, 16 Jun 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/how-i-version-products-in-unreal-engine/</guid><description>&lt;p&gt;While waiting for &lt;a href="https://github.com/EpicGames/UnrealEngine/pull/6619" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/github.com.ico" alt="" width="16" height="16" loading="lazy"&gt;this&lt;/a&gt; to be added to Unreal I came up with an &lt;a href="https://gist.github.com/trdwll/c65fa5797f687ec9b47fa21212c0e09a" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/gist.github.com.ico" alt="" width="16" height="16" loading="lazy"&gt;alternative&lt;/a&gt;. This python script will update the version in your &lt;code&gt;DefaultGame.ini&lt;/code&gt;.&lt;/p&gt;
&lt;div class="code-block"&gt;
 &lt;div class="code-bar"&gt;
 &lt;span class="code-lang"&gt;&lt;/span&gt;
 &lt;button type="button" class="code-copy" aria-label="Copy code to clipboard"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import configparser
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sys
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import argparse
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def main(argv):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; parser = argparse.ArgumentParser()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; parser.add_argument(&amp;#39;Workspace&amp;#39;, help=&amp;#39;The path to the project that you\&amp;#39;re wanting to use!&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; parser.add_argument(&amp;#39;NewVersion&amp;#39;, help=&amp;#39;The new version to set for the project.&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; args = parser.parse_args()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; config_file = args.Workspace + &amp;#39;/Config/DefaultGame.ini&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; config = configparser.ConfigParser()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; config.optionxform=str
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; config.read(config_file)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; config[&amp;#39;/Script/EngineSettings.GeneralProjectSettings&amp;#39;][&amp;#39;ProjectVersion&amp;#39;] = args.NewVersion
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; with open(config_file, &amp;#39;w&amp;#39;) as configfile:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; config.write(configfile)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;if __name__ == &amp;#34;__main__&amp;#34;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; main(sys.argv[1:])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;</description></item><item><title>Enter Technical Debt</title><link>https://treadwell.net/blog/enter-technical-debt/</link><pubDate>Tue, 13 Apr 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/enter-technical-debt/</guid><description>&lt;p&gt;I&amp;rsquo;ll be talking about technical debt in general, what to look out for before you fall into tech debt, and my experience with it.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 id="what-is-technical-debt"&gt;What is technical debt?&lt;/h3&gt;
&lt;p&gt;So tech debt&amp;rsquo;s definition on Google is &amp;ldquo;Technical debt is a concept in software development that reflects the implied cost of additional rework caused by choosing an easy solution now instead of using a better approach that would take longer.&amp;rdquo; That sums it up lol.&lt;/p&gt;</description></item><item><title>Useful Resources for Game Dev</title><link>https://treadwell.net/blog/useful-resources-game-dev/</link><pubDate>Mon, 12 Apr 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/useful-resources-game-dev/</guid><description>&lt;p&gt;Over the years I&amp;rsquo;ve come across some really good resources so I figured why not dump them on here for other people to benefit from?&lt;/p&gt;
&lt;p&gt;Some of this is really targeted at Unreal development, but you can really apply the knowledge to any engine. If you have any resources that you&amp;rsquo;d like to add to this list them please email me @ &lt;a href="https://treadwell.net/cdn-cgi/l/email-protection"&gt;[email protected]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;These lists aren&amp;rsquo;t ordered in any specific way.&lt;/p&gt;</description></item><item><title>Tools I Use</title><link>https://treadwell.net/blog/tools-i-use/</link><pubDate>Tue, 19 Jan 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/tools-i-use/</guid><description>&lt;p&gt;So I figured I&amp;rsquo;d list off things that I use for work since I often wonder what other people use.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows 10 (main OS for everything) and FreeBSD, CentOS, Ubuntu (servers)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://visualstudio.microsoft.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/visualstudio.microsoft.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Visual Studio&lt;/a&gt; - Main IDE for C++ and C#&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/code.visualstudio.com.ico" alt="" width="16" height="16" loading="lazy"&gt;VSCode&lt;/a&gt; - Main Editor for everything and Python&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fork.dev/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/fork.dev.ico" alt="" width="16" height="16" loading="lazy"&gt;Fork&lt;/a&gt; - Git Client&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bitvise.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.bitvise.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Bitvise&lt;/a&gt; - SSH/SFTP Client&lt;/li&gt;
&lt;li&gt;&lt;a href="https://affinity.serif.com/en-us/photo/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/affinity.serif.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Affinity Photo&lt;/a&gt; - Photo Editor&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.unrealengine.com/en-US/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.unrealengine.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Unreal Engine&lt;/a&gt; - Game Engine&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.plasticscm.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.plasticscm.com.ico" alt="" width="16" height="16" loading="lazy"&gt;PlasticSCM&lt;/a&gt; - Source Control Client&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dnSpy/dnSpy" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/github.com.ico" alt="" width="16" height="16" loading="lazy"&gt;dnSpy&lt;/a&gt;- .Net Decompiler&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getmusicbee.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/getmusicbee.com.ico" alt="" width="16" height="16" loading="lazy"&gt;MusicBee&lt;/a&gt; - Music Player&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.emeditor.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.emeditor.com.ico" alt="" width="16" height="16" loading="lazy"&gt;EmEditor&lt;/a&gt; - Large File Text Editor&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mizage.com/divvy/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/mizage.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Divvy&lt;/a&gt; - Window Management&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getsharex.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/getsharex.com.ico" alt="" width="16" height="16" loading="lazy"&gt;ShareX&lt;/a&gt; - Screenshots (I also use Ctrl + Shift + S  or Win + Shift + S)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.invoiceninja.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.invoiceninja.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Invoice Ninja&lt;/a&gt; - Invoicing software&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.flyspray.org/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.flyspray.org.ico" alt="" width="16" height="16" loading="lazy"&gt;Flyspray&lt;/a&gt; - Bugtracker/project planning software (personal projects)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;</description></item><item><title>How to Fix VAX Suggestions</title><link>https://treadwell.net/blog/how-fix-vax-suggestions/</link><pubDate>Mon, 11 Jan 2021 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/how-fix-vax-suggestions/</guid><description>&lt;p&gt;So your suggestions from VAX aren&amp;rsquo;t updated or are wrong? Look no further!&lt;/p&gt;
&lt;p&gt;Navigate to &lt;strong&gt;Extensions -&amp;gt; VAssistX -&amp;gt; Visual Assist Options&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://files.trdwll.net/2021/01/klu09af.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Then go to Performance and click &lt;strong&gt;Rebuild and Clear&lt;/strong&gt;. (then reset your Visual Studio)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://files.trdwll.net/2021/01/ijau123j.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;until next time&lt;/p&gt;</description></item><item><title>Using GoAccess</title><link>https://treadwell.net/blog/using-goaccess/</link><pubDate>Wed, 16 Dec 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/using-goaccess/</guid><description>&lt;p&gt;**UPDATE: I recently changed from a crontab to using the websocket and it works great. This &lt;a href="https://ansonvandoren.com/posts/goaccess-nginx-auth/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/ansonvandoren.com.ico" alt="" width="16" height="16" loading="lazy"&gt;post&lt;/a&gt; was extremely useful when setting up the websocket. (also some nginx info around the web)
**&lt;/p&gt;
&lt;div class="code-block"&gt;
 &lt;div class="code-bar"&gt;
 &lt;span class="code-lang"&gt;&lt;/span&gt;
 &lt;button type="button" class="code-copy" aria-label="Copy code to clipboard"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;goaccess&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;nginx&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;report&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;COMBINED&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;real&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;ws&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;wss&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;443&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ws&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="mi"&gt;7890&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;daemon&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;This year I built a &lt;a href="https://trdwll.com/experiments/django-analytics/"&gt;middleware&lt;/a&gt; for &lt;a href="https://djangoproject.com" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/djangoproject.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Django&lt;/a&gt; to store data on visitors to websites. It would store things like the page they view, the site that referred them, and their IP address/country. This worked fine for the longest time, but it&amp;rsquo;s very redundant since I already have this information in my &lt;a href="https://nginx.org/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/nginx.org.ico" alt="" width="16" height="16" loading="lazy"&gt;Nginx&lt;/a&gt; (HTTP server) logs and it was stored in my database for my website. I still have one model (table) that I store just to keep a copy of it in case I delete the logs from &lt;a href="https://nginx.org/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/nginx.org.ico" alt="" width="16" height="16" loading="lazy"&gt;Nginx&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Jenkins and UE4</title><link>https://treadwell.net/blog/jenkins-and-ue4/</link><pubDate>Wed, 04 Nov 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/jenkins-and-ue4/</guid><description>&lt;p&gt;&lt;strong&gt;NOTE: This guide assumes you already have a machine with Jenkins on it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Windows machine (or you can use a Windows agent)&lt;/li&gt;
&lt;li&gt;UE4 and Jenkins installed&lt;/li&gt;
&lt;li&gt;Patience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a new job as a freestyle project.
&lt;img src="https://files.trdwll.net/2020/11/01/screenshot_2020-11-01_182951.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Choose &amp;ldquo;This project is parameterized.&amp;rdquo;
&lt;img src="https://files.trdwll.net/2020/11/01/bpcaag.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Add 1 choice parameter and 2 string parameters.&lt;/li&gt;
&lt;li&gt;Fill in the content as follows.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="code-block"&gt;
 &lt;div class="code-bar"&gt;
 &lt;span class="code-lang"&gt;&lt;/span&gt;
 &lt;button type="button" class="code-copy" aria-label="Copy code to clipboard"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;====&lt;/span&gt; &lt;span class="n"&gt;Choice&lt;/span&gt; &lt;span class="n"&gt;Parameter&lt;/span&gt; &lt;span class="o"&gt;====&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;BUILD_CONFIGURATION&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;Choices&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Development&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Shipping&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DebugGame&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;Description&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Development&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;configuration&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;equivalent&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;Release&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Unreal&lt;/span&gt; &lt;span class="n"&gt;Editor&lt;/span&gt; &lt;span class="n"&gt;uses&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;Development&lt;/span&gt; &lt;span class="n"&gt;configuration&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Compiling&lt;/span&gt; &lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;project&lt;/span&gt; &lt;span class="n"&gt;using&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;Development&lt;/span&gt; &lt;span class="n"&gt;configuration&lt;/span&gt; &lt;span class="n"&gt;enables&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;see&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="n"&gt;changes&lt;/span&gt; &lt;span class="n"&gt;made&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;project&lt;/span&gt; &lt;span class="n"&gt;reflected&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;editor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Shipping&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;configuration&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;optimal&lt;/span&gt; &lt;span class="n"&gt;performance&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;shipping&lt;/span&gt; &lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;game&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;configuration&lt;/span&gt; &lt;span class="n"&gt;strips&lt;/span&gt; &lt;span class="n"&gt;out&lt;/span&gt; &lt;span class="n"&gt;console&lt;/span&gt; &lt;span class="n"&gt;commands&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stats&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;profiling&lt;/span&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;configuration&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;Shipping&lt;/span&gt; &lt;span class="n"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;but&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;some&lt;/span&gt; &lt;span class="n"&gt;console&lt;/span&gt; &lt;span class="n"&gt;commands&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stats&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;profiling&lt;/span&gt; &lt;span class="n"&gt;tools&lt;/span&gt; &lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DebugGame&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;configuration&lt;/span&gt; &lt;span class="n"&gt;builds&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;engine&lt;/span&gt; &lt;span class="n"&gt;as&lt;/span&gt; &lt;span class="n"&gt;optimized&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;but&lt;/span&gt; &lt;span class="n"&gt;leaves&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;game&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="n"&gt;debuggable&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;configuration&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;ideal&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;debugging&lt;/span&gt; &lt;span class="n"&gt;only&lt;/span&gt; &lt;span class="n"&gt;game&lt;/span&gt; &lt;span class="n"&gt;modules&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;====&lt;/span&gt; &lt;span class="ne"&gt;String&lt;/span&gt; &lt;span class="n"&gt;Parameter&lt;/span&gt; &lt;span class="o"&gt;====&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ENGINE_PATH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;Default&lt;/span&gt; &lt;span class="n"&gt;Value&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Program&lt;/span&gt; &lt;span class="n"&gt;Files&lt;/span&gt;\&lt;span class="n"&gt;Epic&lt;/span&gt; &lt;span class="n"&gt;Games&lt;/span&gt;\&lt;span class="n"&gt;UE_4&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;Description&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;engine&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;====&lt;/span&gt; &lt;span class="ne"&gt;String&lt;/span&gt; &lt;span class="n"&gt;Parameter&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;PROJECT_NAME&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;Default&lt;/span&gt; &lt;span class="n"&gt;Value&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;MyProject&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;Description&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;project&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;folder&lt;/span&gt; &lt;span class="n"&gt;that&lt;/span&gt; &lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s in. (they need to match)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;Set up your Source Control Management. We use PlasticSCM (requires you to install a plugin).&lt;/li&gt;
&lt;li&gt;Check Poll SCM and put &lt;code&gt;@hourly&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Under Build add 3 Execute Windows batch command.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="code-block"&gt;
 &lt;div class="code-bar"&gt;
 &lt;span class="code-lang"&gt;&lt;/span&gt;
 &lt;button type="button" class="code-copy" aria-label="Copy code to clipboard"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;FOR&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="o"&gt;%%&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="n"&gt;IN&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Intermediate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;DO&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;EXIST&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;%%&lt;/span&gt;&lt;span class="s2"&gt;d&amp;#34;&lt;/span&gt; &lt;span class="n"&gt;rd&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;%%&lt;/span&gt;&lt;span class="s2"&gt;d&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;FOR&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="o"&gt;%%&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="n"&gt;IN&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Binaries&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;DO&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;EXIST&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;%%&lt;/span&gt;&lt;span class="s2"&gt;d&amp;#34;&lt;/span&gt; &lt;span class="n"&gt;rd&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;%%&lt;/span&gt;&lt;span class="s2"&gt;d&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;RD&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Build&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;RD&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Saved&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;RD&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;.vs&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;del&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Shifted.sln&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;===============================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;%E&lt;/span&gt;&lt;span class="s2"&gt;NGINE_PATH&lt;/span&gt;&lt;span class="si"&gt;%E&lt;/span&gt;&lt;span class="s2"&gt;ngine\Binaries\DotNET\UnrealBuildTool.exe&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;projectfiles&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;%WORKSPACE%\%PROJECT_NAME%.uproject&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;game&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rocket&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;progress&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;%E&lt;/span&gt;&lt;span class="s2"&gt;NGINE_PATH&lt;/span&gt;&lt;span class="si"&gt;%E&lt;/span&gt;&lt;span class="s2"&gt;ngine\Binaries\DotNET\UnrealBuildTool.exe&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;PROJECT_NAME&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;BUILD_CONFIGURATION&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;Win64&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;%WORKSPACE%/%PROJECT_NAME%.uproject&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rocket&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;editorrecompile&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;progress&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;noubtmakefiles&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;NoHotReloadFromIDE&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2019&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;===============================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;%E&lt;/span&gt;&lt;span class="s2"&gt;NGINE_PATH&lt;/span&gt;&lt;span class="si"&gt;%E&lt;/span&gt;&lt;span class="s2"&gt;ngine\Build\BatchFiles\RunUAT.bat&amp;#34;&lt;/span&gt; &lt;span class="n"&gt;BuildCookRun&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;project&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;%WORKSPACE%\%PROJECT_NAME%.uproject&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;noP4&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;platform&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Win64&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;clientconfig&lt;/span&gt;&lt;span class="o"&gt;=%&lt;/span&gt;&lt;span class="n"&gt;BUILD_CONFIGURATION&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cook&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;numcookerstospawn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;compressed&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;EncryptIniFiles&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ForDistribution&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;allmaps&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;stage&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;pak&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;prereqs&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;archive&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;archivedirectory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;%WORKSPACE%/Saved/Builds&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="8"&gt;
&lt;li&gt;Done.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;</description></item><item><title>I made a Jenkins CI monitor</title><link>https://treadwell.net/blog/i-made-jenkins-ci-monitor/</link><pubDate>Thu, 29 Oct 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/i-made-jenkins-ci-monitor/</guid><description>&lt;p&gt;Now that we have Jenkins running for Shifted I wanted to have the stats displayed easily. I set up a &lt;a href="https://grafana.com/get" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/grafana.com.ico" alt="" width="16" height="16" loading="lazy"&gt;grafana&lt;/a&gt; dashboard in a vm on my &lt;a href="https://treadwell.net/blog/new-server-new-network/"&gt;server&lt;/a&gt; and hooked up Jenkins to it.&lt;/p&gt;
&lt;p&gt;I got this idea from the Sea of Thieves talk (Automated Testing at Scale in Sea of Thieves) by &lt;a href="https://jessicabaker.co.uk/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/jessicabaker.co.uk.ico" alt="" width="16" height="16" loading="lazy"&gt;Jessica Baker&lt;/a&gt;. (specifically the &lt;a href="https://youtu.be/KmaGxprTUfI?t=1504" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/youtu.be.ico" alt="" width="16" height="16" loading="lazy"&gt;timestamp&lt;/a&gt; (1504)).&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;This probably isn&amp;rsquo;t the most ideal way to do this, but it works.  For this build, I just used one of my old Raspberry Pi&amp;rsquo;s (the 3B) and I picked up a 5&amp;quot; screen from &lt;a href="https://www.amazon.com/gp/product/B08343QX67/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.amazon.com.ico" alt="" width="16" height="16" loading="lazy"&gt;ELECROW&lt;/a&gt;. I installed Raspbian, connected to Wifi, and then opened the grafana dashboard via Chromium. (then full-screened and used Kiosk mode in grafana)&lt;/p&gt;</description></item><item><title>New Server and New Network</title><link>https://treadwell.net/blog/new-server-new-network/</link><pubDate>Wed, 28 Oct 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/new-server-new-network/</guid><description>&lt;p&gt;&lt;strong&gt;UPDATE 12/26/2020: I&amp;rsquo;ve changed the drives in the server to be 2x 3TB (raid 1) and 2x 1TB (raid 1).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I recently set up CI (Jenkins) for Shifted and I thought why not have a machine that I can use as a server for various things such as Jenkins? A few years ago I had a full-fledged homelab that contained 6 1U servers (3 Supermicro and 3 Dell). I used only 1-2 of these servers and the rest - well, collected dust. I ran ESXi, pfsense, and a ton of other random things. I got into network security and let&amp;rsquo;s skip a year. I didn&amp;rsquo;t use them that much so I started shutting them down. I moved to more consumer-grade networking gear and again lets fast forward to the present time.&lt;/p&gt;</description></item><item><title>Visual Studio Settings</title><link>https://treadwell.net/blog/visual-studio-settings/</link><pubDate>Tue, 06 Oct 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/visual-studio-settings/</guid><description>&lt;p&gt;I also did a &lt;a href="https://treadwell.net/blog/visual-studio-extensions-that-i-use/"&gt;post&lt;/a&gt; on the extensions that I use.&lt;/p&gt;
&lt;h3 id="shortcuts"&gt;Shortcuts&lt;/h3&gt;
&lt;p&gt;Some of these are default in Visual Studio and some others aren&amp;rsquo;t.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Collapse all code (Ctrl + M + O)&lt;/li&gt;
&lt;li&gt;Uncollapse all code (Ctrl + M + L)&lt;/li&gt;
&lt;li&gt;Rename method (Ctrl + R + R) - &lt;strong&gt;set using Visual Assist&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Change method signature (Ctrl + R + E) - &lt;strong&gt;set using Visual Assist&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Encapsulate member (Ctrl + E + E) - &lt;strong&gt;set using Visual Assist&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Set block to inactive (if 0) (Shift + 3) - &lt;strong&gt;set using Visual Assist&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Move lines (Alt + Up or Alt + Down)&lt;/li&gt;
&lt;li&gt;Multi-select lines (Alt + Shift + Up or Alt + Shift + Down)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;</description></item><item><title>Choosing a License for Your Open Source Project</title><link>https://treadwell.net/blog/choosing-license-your-open-source-project/</link><pubDate>Mon, 04 May 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/choosing-license-your-open-source-project/</guid><description>&lt;p&gt;There are soo many licenses for open source projects and it can be confusing to choose which one you should go with. There&amp;rsquo;s 2 sites that I use when deciding on a license or if I just want to read about said license - &lt;a href="https://tldrlegal.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/tldrlegal.com.ico" alt="" width="16" height="16" loading="lazy"&gt;tldrlegal&lt;/a&gt; and &lt;a href="https://choosealicense.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/choosealicense.com.ico" alt="" width="16" height="16" loading="lazy"&gt;choosealicense&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I usually choose either &lt;a href="https://tldrlegal.com/license/mit-license" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/tldrlegal.com.ico" alt="" width="16" height="16" loading="lazy"&gt;MIT&lt;/a&gt; or &lt;a href="https://tldrlegal.com/license/bsd-3-clause-license-%28revised%29" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/tldrlegal.com.ico" alt="" width="16" height="16" loading="lazy"&gt;BSD 3-clause&lt;/a&gt; for most of my projects. Both of these licenses allow the end-user or anyone to do whatever they want with the code as long as they provide attribution.&lt;/p&gt;</description></item><item><title>How to Setup Your Own VPN</title><link>https://treadwell.net/blog/how-setup-vpn/</link><pubDate>Wed, 08 Apr 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/how-setup-vpn/</guid><description>&lt;p&gt;With security and privacy being a major thing nowadays I figured I&amp;rsquo;d write up a short guide on how to set up your own VPN.&lt;/p&gt;
&lt;p&gt;For this guide I used &lt;a href="https://www.vultr.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.vultr.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Vultr&lt;/a&gt; &lt;a href="https://www.vultr.com/?ref=7156431" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.vultr.com.ico" alt="" width="16" height="16" loading="lazy"&gt;(affiliate link)&lt;/a&gt; since I had some credit left with them and only needed a VPS for an hour max. The main thing with this is you&amp;rsquo;re going to want at least a 1Gbps connection on your VPS, 1GB ram, and no less than 1 core. The VPS cost me $0.02 for the hour that I had it online.&lt;/p&gt;</description></item><item><title>Visual Studio Extensions That I Use</title><link>https://treadwell.net/blog/visual-studio-extensions-that-i-use/</link><pubDate>Sun, 29 Mar 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/visual-studio-extensions-that-i-use/</guid><description>&lt;p&gt;These are the extensions that I have in my Visual Studio install.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Visual Assist&lt;/li&gt;
&lt;li&gt;Visual Studio IntelliCode&lt;/li&gt;
&lt;li&gt;Live Share&lt;/li&gt;
&lt;li&gt;VSColorOutput&lt;/li&gt;
&lt;li&gt;Indent Guides&lt;/li&gt;
&lt;li&gt;Trailing Whitespace Visualizer&lt;/li&gt;
&lt;li&gt;Entrian Source Search&lt;/li&gt;
&lt;li&gt;Entrian Inline Watch&lt;/li&gt;
&lt;li&gt;Open Command Line&lt;/li&gt;
&lt;li&gt;Markdown Editor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;until next time&lt;/p&gt;</description></item><item><title>How I Take Screenshots</title><link>https://treadwell.net/blog/how-i-take-screenshots/</link><pubDate>Tue, 17 Mar 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/how-i-take-screenshots/</guid><description>&lt;p&gt;Depending on what the screenshot is for will determine how I take the screenshot. If I&amp;rsquo;m sharing the screenshot via Discord etc then I&amp;rsquo;ll just use &lt;a href="https://vgy.me" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/vgy.me.ico" alt="" width="16" height="16" loading="lazy"&gt;vgy.me&lt;/a&gt; by using &lt;a href="https://getsharex.com/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/getsharex.com.ico" alt="" width="16" height="16" loading="lazy"&gt;ShareX&lt;/a&gt;. If I&amp;rsquo;m sharing via this site then I&amp;rsquo;ll just use the snipping tool that&amp;rsquo;s built into windows.&lt;/p&gt;
&lt;p&gt;A note on ShareX, it&amp;rsquo;s crazy bloated with tools that shouldn&amp;rsquo;t be in the application - but it works just fine. In fact, I built a tool a few years ago called &lt;a href="https://trdwll.com/experiments/capturethat/"&gt;CaptureThat&lt;/a&gt; (I doubt it still works lol), because ShareX is just bloated with stuff that I didn&amp;rsquo;t use. One great thing about ShareX is it supports a TON of sites to upload your screenshot to and it also supports recording video.&lt;/p&gt;</description></item><item><title>Version Control</title><link>https://treadwell.net/blog/version-control/</link><pubDate>Tue, 25 Feb 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/version-control/</guid><description>&lt;p&gt;I hear stories about people not using a Version Control System (&amp;ldquo;VCS&amp;rdquo;) and how they are having an issue with new code, lost all of their work, or just don&amp;rsquo;t use one at all. I remember back in 2014 (I believe) I joined a team that was working on an FPS game. I quickly found out that they were using Google Drive as a VCS. lol wut? This happened again last year in 2019 when I joined a team that was working on a survival game - they were also using Google Drive. The team behind the survival game switched to Git after I had joined, but even Git isn&amp;rsquo;t the best for a UE4 project.&lt;/p&gt;</description></item><item><title>Accessing Your GameLift Instance</title><link>https://treadwell.net/blog/accessing-your-gamelift-instance/</link><pubDate>Thu, 20 Feb 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/accessing-your-gamelift-instance/</guid><description>&lt;h3 id="prerequisites"&gt;Prerequisites&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/cli/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/aws.amazon.com.ico" alt="" width="16" height="16" loading="lazy"&gt;AWS CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A GameLift fleet already created&lt;/li&gt;
&lt;li&gt;Patience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This guide is assuming you&amp;rsquo;re on Windows as your main OS, but if you&amp;rsquo;re using Linux then the commands will be the same for AWS, but the system commands like changing the ssh key permission for Linux would be&lt;/strong&gt; &lt;code&gt;chmod 400 gameliftkey.pem&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 id="windows"&gt;Windows&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open Command Prompt (cmd) and type in &lt;code&gt;aws gamelift describe-instances --fleet-id &amp;lt;your-fleet-id&amp;gt;&lt;/code&gt;. Replace &lt;your-fleet-id&gt; with your actual fleet id which you can find &lt;a href="https://console.aws.amazon.com/gamelift/home" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/console.aws.amazon.com.ico" alt="" width="16" height="16" loading="lazy"&gt;here&lt;/a&gt;.
&lt;img src="https://files.trdwll.net/2020/02/18/image-20200218035442-1.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Now in cmd run &lt;code&gt;aws gamelift get-instance-access --fleet-id &amp;lt;your-fleet-id&amp;gt; --instance-id &amp;lt;your-instance-id&amp;gt;&lt;/code&gt;. Again replace the contents in &lt;test&gt; with the details from the command above. &lt;img src="https://files.trdwll.net/2020/02/18/image-20200218035856-2.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;Excellent, now you can log into your instance. Open Remote Desktop Connection (RDP) on Windows (Windows key and type in RDP). Log in with the details from the command above.
&lt;img src="https://files.trdwll.net/2020/02/18/image-20200218040112-3.png" alt=""&gt;
&lt;img src="https://files.trdwll.net/2020/02/18/image-20200218040141-4.png" alt=""&gt;
&lt;img src="https://files.trdwll.net/2020/02/18/image-20200218040230-5_thumb.png" alt=""&gt;&lt;/li&gt;
&lt;li&gt;To access your game go to &lt;strong&gt;C:\Game&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;</description></item><item><title>Choosing Workstation Specs</title><link>https://treadwell.net/blog/choosing-workstation-specs/</link><pubDate>Sat, 15 Feb 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/choosing-workstation-specs/</guid><description>&lt;p&gt;&lt;strong&gt;An updated version of my workstation is listed on this &lt;a href="https://treadwell.net/blog/new-house-new-office-and-new-workstation/"&gt;post&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;I used to get asked often about pc specs for various things and I&amp;rsquo;ve spec&amp;rsquo;d out some systems for some friends over the years. Recently I was speaking with someone on Discord and I asked what they think that I should write about on my blog - you know useful stuff. So here&amp;rsquo;s one idea from them.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;When building a workstation or a pc the first thing you need to figure out is what you&amp;rsquo;re going to be doing with it specifically. This is an important thing to think about because it could save you some money and even a headache down the line.&lt;/p&gt;</description></item><item><title>Secure Password Storage</title><link>https://treadwell.net/blog/secure-password-storage/</link><pubDate>Fri, 07 Feb 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/secure-password-storage/</guid><description>&lt;p&gt;Once upon a time, I used a text document with all of my passwords and I stored this on a USB flashdrive. Before you ask - no I didn&amp;rsquo;t keep it plugged in.&lt;/p&gt;
&lt;p&gt;For several years now I&amp;rsquo;ve been using &lt;a href="https://keepass.info/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/keepass.info.ico" alt="" width="16" height="16" loading="lazy"&gt;KeePass&lt;/a&gt; and &lt;a href="https://www.veracrypt.fr/en/Home.html" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.veracrypt.fr.ico" alt="" width="16" height="16" loading="lazy"&gt;VeraCrypt&lt;/a&gt;. I have a flash drive that I used VeraCrypt on and I store KeePass on it. I only mount my flash drive when I actually need a password or an ssh key etc. I don&amp;rsquo;t keep it decrypted either - once I&amp;rsquo;m finished I encrypt/unmount it.&lt;/p&gt;</description></item><item><title>Debugging the Speed of Websites</title><link>https://treadwell.net/blog/debugging-speed-websites/</link><pubDate>Tue, 04 Feb 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/debugging-speed-websites/</guid><description>&lt;p&gt;When developing a website one main concern should be is performance. Here are a few tools to help you debug what could be causing speed issues. &lt;em&gt;(load times)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/speed/pagespeed/insights/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/developers.google.com.ico" alt="" width="16" height="16" loading="lazy"&gt;https://developers.google.com/speed/pagespeed/insights/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tools.pingdom.com" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/tools.pingdom.com.ico" alt="" width="16" height="16" loading="lazy"&gt;https://tools.pingdom.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gtmetrix.com" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/gtmetrix.com.ico" alt="" width="16" height="16" loading="lazy"&gt;https://gtmetrix.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://latency.apex.sh/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/latency.apex.sh.ico" alt="" width="16" height="16" loading="lazy"&gt;https://latency.apex.sh/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.experte.com/pagespeed" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.experte.com.ico" alt="" width="16" height="16" loading="lazy"&gt;https://www.experte.com/pagespeed&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These sites are basically the same thing, but it&amp;rsquo;s always a good idea to use different references when debugging.&lt;/p&gt;
&lt;p&gt;Using these sites I was able to speed up this site by a good amount. At the time of writing this I could still strip out some of my css from bootstrap that it&amp;rsquo;s being used, but I think it&amp;rsquo;s ok enough.&lt;/p&gt;</description></item><item><title>Server Providers</title><link>https://treadwell.net/blog/server-providers/</link><pubDate>Fri, 24 Jan 2020 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/server-providers/</guid><description>&lt;p&gt;I get asked about providers or who I use or even when I see people using an expensive provider for what they get. So this post will talk about what providers I&amp;rsquo;ve used.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 id="notable-providers-that-ive-used"&gt;Notable providers that I&amp;rsquo;ve used.&lt;/h2&gt;
&lt;h3 id="ovh"&gt;&lt;a href="https://ovh.com" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/ovh.com.ico" alt="" width="16" height="16" loading="lazy"&gt;OVH&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;One of the best providers I&amp;rsquo;ve used and I&amp;rsquo;ll always go back to them. They&amp;rsquo;re crazy cheap for what they offer and they&amp;rsquo;re just great. The way they do their networking is weird for consumers especially if you want to do ESXi etc and have multiple machines. My friend &lt;a href="https://github.com/OhYea777" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/github.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Jack&lt;/a&gt; found out that doing Ubuntu etc and then KVM machines are easier.&lt;/p&gt;</description></item><item><title>Installing Python 3 on CentOS 7</title><link>https://treadwell.net/blog/installing-python-3-centos-7/</link><pubDate>Tue, 15 Oct 2019 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/installing-python-3-centos-7/</guid><description>&lt;p&gt;CentOS 7 ships with 2.7.5 and that&amp;rsquo;s not the best when you&amp;rsquo;re wanting to use Python 3.x so I&amp;rsquo;m going to teach you how to install 3.x.&lt;/p&gt;
&lt;p&gt;This will work for any python version so you don&amp;rsquo;t have to use 3.7.5 like I did here. You can go and use the latest instead.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;python -V&lt;/code&gt; and see what it says. If it&amp;rsquo;s not 3.x then continue to step 2.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;whereis python&lt;/code&gt;, if you don&amp;rsquo;t see any python3.x binaries then continue to step 3.&lt;/li&gt;
&lt;li&gt;Run as root/sudo &lt;code&gt;yum groupinstall -y &amp;quot;Development Tools&amp;quot;&lt;/code&gt; then run &lt;code&gt;yum install gcc openssl-devel bzip2-devel libffi-devel -y&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Jump on over to the Python &lt;a href="https://www.python.org/downloads/source/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.python.org.ico" alt="" width="16" height="16" loading="lazy"&gt;download page&lt;/a&gt; and find the link for the Gzipped source tarball. For this guide we&amp;rsquo;re going to be installing &lt;a href="https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/www.python.org.ico" alt="" width="16" height="16" loading="lazy"&gt;3.7.5&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz&lt;/code&gt; or upload the source to the machine.&lt;/li&gt;
&lt;li&gt;Once the source is on the machine then run &lt;code&gt;tar -xvzf Python-3.7.5.tgz&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;cd Python-3.7.5/&lt;/code&gt; and then run &lt;code&gt;./configure --enable-optimizations&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Now that you&amp;rsquo;ve configured the build for Python you can build and install it by doing &lt;code&gt;make altinstall&lt;/code&gt;. &lt;strong&gt;This process will take some time so let it run. You don&amp;rsquo;t want to do &lt;code&gt;make install&lt;/code&gt;, because this will mess with Python 2 which is required by most of the components of CentOS 7.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Python 3.x should be installed now so now you can do &lt;code&gt;python3.x -V&lt;/code&gt; (in this guide should be &lt;code&gt;python3.7 -V&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; &lt;/p&gt;</description></item><item><title>Django Review</title><link>https://treadwell.net/blog/django-review/</link><pubDate>Wed, 19 Jul 2017 00:00:00 +0000</pubDate><guid>https://treadwell.net/blog/django-review/</guid><description>&lt;p&gt;Now that &lt;a href="https://imglnx.com" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/imglnx.com.ico" alt="" width="16" height="16" loading="lazy"&gt;imglnx&lt;/a&gt; is released I can finally talk about &lt;a href="https://djangoproject.com" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/djangoproject.com.ico" alt="" width="16" height="16" loading="lazy"&gt;Django&lt;/a&gt; since I&amp;rsquo;ve used it in a proper project now.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 id="docs"&gt;Docs&lt;/h2&gt;
&lt;p&gt;Django&amp;rsquo;s &lt;a href="https://docs.djangoproject.com/en/dev/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/docs.djangoproject.com.ico" alt="" width="16" height="16" loading="lazy"&gt;documentation&lt;/a&gt; is some of the best that I&amp;rsquo;ve ever seen while doing software development. They go in great detail and even have some quick &lt;a href="https://docs.djangoproject.com/en/dev/intro/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/docs.djangoproject.com.ico" alt="" width="16" height="16" loading="lazy"&gt;tutorials&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="security"&gt;Security&lt;/h2&gt;
&lt;p&gt;Out of the box Django adds protection for &lt;a href="https://docs.djangoproject.com/en/dev/topics/security/" rel="noopener" target="_blank"&gt;&lt;img class="favicon" src="https://icons.duckduckgo.com/ip3/docs.djangoproject.com.ico" alt="" width="16" height="16" loading="lazy"&gt;multiple&lt;/a&gt; things. I remember the days of writing PHP and using PDO - but then even having to write a simple wrapper to handle sanitation before even sending to my PDO query. With Django you don&amp;rsquo;t have to do that at all. Just allow anything in the DB and make sure you don&amp;rsquo;t mark stuff safe in your template.&lt;/p&gt;</description></item></channel></rss>